From 69430fd8f253398d327678d6c3f331b50137a416 Mon Sep 17 00:00:00 2001 From: kovacsv Date: Sat, 30 Oct 2021 08:43:25 +0200 Subject: [PATCH] Update three.js to the latest version #160 --- assets/images/3dviewer_net_start_page.png | Bin 184347 -> 185320 bytes libs/three.min-129.js | 6 - libs/three.min-r134.js | 6 + libs/three_loaders/3MFLoader.js | 2 +- libs/three_loaders/ColladaLoader.js | 64 +++++++++- libs/three_loaders/FBXLoader.js | 138 +++++++--------------- sandbox/embed_selfhost_errors.html | 4 +- sandbox/embed_selfhost_externallibs.html | 14 ++- sandbox/embed_selfhost_fullscreen.html | 6 +- sandbox/embed_selfhost_manual.html | 4 +- sandbox/embed_selfhost_multiple.html | 4 +- sandbox/embed_selfhost_single.html | 6 +- sandbox/embed_selfhost_single_scroll.html | 6 +- sandbox/invalid_driver_detector.html | 14 +-- sandbox/three_minimal.html | 12 +- source/viewer/viewer.js | 50 ++++++-- tools/build.py | 2 +- tools/config.json | 2 +- website/embed.html | 2 +- website/index.html | 2 +- 20 files changed, 191 insertions(+), 153 deletions(-) delete mode 100644 libs/three.min-129.js create mode 100644 libs/three.min-r134.js diff --git a/assets/images/3dviewer_net_start_page.png b/assets/images/3dviewer_net_start_page.png index fcb942d639bc65a4102ff160bf3f88f07b6e05a6..32e6778affe5da1aeef9001c4137168b4351718e 100644 GIT binary patch literal 185320 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 TbF%7U~WpHYQ7L@+ZLZy?*OzSxAYV| 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

kU`p^^B;f1CEZg?{FxQ5gO*~HoQST{3cu`)W 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%0DXT<3Fz%?RFA#TG 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 literal 184347 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л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 WdwxT{>7+vgKFadya^GZ31O5kLw2@B$ diff --git a/libs/three.min-129.js b/libs/three.min-129.js deleted file mode 100644 index 9bda096..0000000 --- a/libs/three.min-129.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @license - * Copyright 2010-2021 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="129",n=100,i=300,r=301,s=302,a=303,o=304,l=306,c=307,h=1e3,u=1001,d=1002,p=1003,m=1004,f=1005,g=1006,v=1007,y=1008,x=1009,_=1012,w=1014,b=1015,M=1016,S=1020,T=1022,E=1023,A=1026,L=1027,R=33776,C=33777,P=33778,D=33779,I=35840,N=35841,B=35842,z=35843,F=37492,O=37496,H=2300,G=2301,U=2302,k=2400,V=2401,W=2402,j=2500,q=2501,X=3e3,Y=3001,Z=3007,J=3002,Q=3004,K=3005,$=3006,tt=7680,et=35044,nt=35048,it="300 es";class rt{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]+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],w=i[5],b=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*w,r[6]=s*g+a*x+o*b,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*w,r[7]=l*g+c*x+h*b,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*w,r[8]=u*g+d*x+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],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 wt=0;class bt extends rt{constructor(t=bt.DEFAULT_IMAGE,e=bt.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:wt++}),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 Mt(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."),{})}bt.DEFAULT_IMAGE=void 0,bt.DEFAULT_MAPPING=i,bt.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 void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new Rt),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),Gt.subVectors(Ot,Ft),Ut.subVectors(zt,Ot);let e=[0,-Ht.z,Ht.y,0,-Gt.z,Gt.y,0,-Ut.z,Ut.y,Ht.z,0,-Ht.x,Gt.z,0,-Gt.x,Ut.z,0,-Ut.x,-Ht.y,Ht.x,0,-Gt.y,Gt.x,0,-Ut.y,Ut.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,Gt),e=[Wt.x,Wt.y,Wt.z],qt(e,zt,Ft,Ot,Vt)))}clampPoint(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new Rt),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 void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),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,Gt=new Rt,Ut=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,Zt=new Rt,Jt=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 void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new Dt),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){Jt.subVectors(t,this.center);const e=Jt.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Jt.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Zt.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Yt.copy(t.center).add(Zt)),this.expandByPoint(Yt.copy(t.center).sub(Zt)),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 void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new Rt),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){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new Rt),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],w=i[0],b=i[4],M=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*w+a*T+o*R+l*I,r[4]=s*b+a*E+o*C+l*N,r[8]=s*M+a*A+o*P+l*B,r[12]=s*S+a*L+o*D+l*z,r[1]=c*w+h*T+u*R+d*I,r[5]=c*b+h*E+u*C+d*N,r[9]=c*M+h*A+u*P+d*B,r[13]=c*S+h*L+u*D+d*z,r[2]=p*w+m*T+f*R+g*I,r[6]=p*b+m*E+f*C+g*N,r[10]=p*M+m*A+f*P+g*B,r[14]=p*S+m*L+f*D+g*z,r[3]=v*w+y*T+x*R+_*I,r[7]=v*b+y*E+x*C+_*N,r[11]=v*M+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,w=e*v+n*y+i*x+r*_;if(0===w)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const b=1/w;return t[0]=v*b,t[1]=(m*u*r-h*f*r-m*i*d+n*f*d+h*i*g-n*u*g)*b,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*b,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*b,t[4]=y*b,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*b,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*b,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*b,t[8]=x*b,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*b,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*b,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*b,t[12]=_*b,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*b,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*b,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*b,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,w=n.y,b=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*w,i[5]=(1-(u+g))*w,i[6]=(f+v)*w,i[7]=0,i[8]=(p+y)*b,i[9]=(f-v)*b,i[10]=(1-(u+m))*b,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){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,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,n){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=e||this._order){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,!1!==n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return me.makeRotationFromQuaternion(t),this.setFromRotationMatrix(me,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}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;e1?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 void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new Rt),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Ne.getNormalMatrix(t),i=this.coplanarPoint(De).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)}}Be.prototype.isPlane=!0;const ze=new Rt,Fe=new Rt,Oe=new Rt,He=new Rt,Ge=new Rt,Ue=new Rt,ke=new Rt,Ve=new Rt,We=new Rt,je=new Rt;class qe{constructor(t=new Rt,e=new Rt,n=new Rt){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new Rt),i.subVectors(n,e),ze.subVectors(t,e),i.cross(ze);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){ze.subVectors(i,e),Fe.subVectors(n,e),Oe.subVectors(t,e);const s=ze.dot(ze),a=ze.dot(Fe),o=ze.dot(Oe),l=Fe.dot(Fe),c=Fe.dot(Oe),h=s*l-a*a;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new Rt),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,He),He.x>=0&&He.y>=0&&He.x+He.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,He),o.set(0,0),o.addScaledVector(r,He.x),o.addScaledVector(s,He.y),o.addScaledVector(a,He.z),o}static isFrontFacing(t,e,n,i){return ze.subVectors(n,e),Fe.subVectors(t,e),ze.cross(Fe).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 ze.subVectors(this.c,this.b),Fe.subVectors(this.a,this.b),.5*ze.cross(Fe).length()}getMidpoint(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new Rt),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return qe.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Be),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return qe.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return qe.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return qe.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return qe.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new Rt);const n=this.a,i=this.b,r=this.c;let s,a;Ge.subVectors(i,n),Ue.subVectors(r,n),Ve.subVectors(t,n);const o=Ge.dot(Ve),l=Ue.dot(Ve);if(o<=0&&l<=0)return e.copy(n);We.subVectors(t,i);const c=Ge.dot(We),h=Ue.dot(We);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(Ge,s);je.subVectors(t,r);const d=Ge.dot(je),p=Ue.dot(je);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(Ue,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return ke.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(ke,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(Ge,s).addScaledVector(Ue,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Xe=0;class Ye extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:Xe++}),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++}}Ye.prototype.isMaterial=!0;const Ze={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},Je={h:0,s:0,l:0},Qe={h:0,s:0,l:0};function Ke(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 $e(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function tn(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class en{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=Ke(r,i,t+1/3),this.g=Ke(r,i,t),this.b=Ke(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=Ze[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=$e(t.r),this.g=$e(t.g),this.b=$e(t.b),this}copyLinearToSRGB(t){return this.r=tn(t.r),this.g=tn(t.g),this.b=tn(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){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});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 yn={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function xn(t,e){return new yn[t](e)}let _n=0;const wn=new ae,bn=new Pe,Mn=new Rt,Sn=new Dt,Tn=new Dt,En=new Rt;class An extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:_n++}),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(vn(t)>65535?pn:un)(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 wn.makeRotationFromQuaternion(t),this.applyMatrix4(wn),this}rotateX(t){return wn.makeRotationX(t),this.applyMatrix4(wn),this}rotateY(t){return wn.makeRotationY(t),this.applyMatrix4(wn),this}rotateZ(t){return wn.makeRotationZ(t),this.applyMatrix4(wn),this}translate(t,e,n){return wn.makeTranslation(t,e,n),this.applyMatrix4(wn),this}scale(t,e,n){return wn.makeScale(t,e,n),this.applyMatrix4(wn),this}lookAt(t){return bn.lookAt(t),bn.updateMatrix(),this.applyMatrix4(bn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Mn).negate(),this.translate(Mn.x,Mn.y,Mn.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 An).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(),Cn.copy(n.boundingSphere),Cn.applyMatrix4(r),!1===t.ray.intersectsSphere(Cn))return;if(Ln.copy(r).invert(),Rn.copy(t.ray).applyMatrix4(Ln),null!==n.boundingBox&&!1===Rn.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:Wn.clone(),object:t}}(t,e,n,i,Pn,Dn,In,Vn);if(p){o&&(Gn.fromBufferAttribute(o,c),Un.fromBufferAttribute(o,h),kn.fromBufferAttribute(o,u),p.uv=qe.getUV(Vn,Pn,Dn,In,Gn,Un,kn,new vt)),l&&(Gn.fromBufferAttribute(l,c),Un.fromBufferAttribute(l,h),kn.fromBufferAttribute(l,u),p.uv2=qe.getUV(Vn,Pn,Dn,In,Gn,Un,kn,new vt));const t={a:c,b:h,c:u,normal:new Rt,materialIndex:0};qe.getNormal(Pn,Dn,In,t.normal),p.face=t}return p}jn.prototype.isMesh=!0;class Xn extends An{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,w=p/2,b=m/2,M=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}}Qn.prototype.isShaderMaterial=!0;class Kn 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){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new Rt),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)}}Kn.prototype.isCamera=!0;class $n extends Kn{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}}$n.prototype.isPerspectiveCamera=!0;const ti=90;class ei 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 $n(ti,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 $n(ti,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 $n(ti,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 $n(ti,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 $n(ti,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 $n(ti,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 ni extends bt{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}}ni.prototype.isCubeTexture=!0;class ii 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 ni(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 Xn(5,5,5),r=new Qn({name:"CubemapFromEquirect",uniforms:Yn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new jn(i,r),a=e.minFilter;e.minFilter===y&&(e.minFilter=g);return new ei(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)}}ii.prototype.isWebGLCubeRenderTarget=!0;const ri=new Qt,si=new Rt;class ai{constructor(t=new Be,e=new Be,n=new Be,i=new Be,r=new Be,s=new Be){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 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, 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 ) ), rawDiffuseColor, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), rawDiffuseColor, 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\t#ifdef USE_TRANSMISSIONMAP\n\t\ttotalTransmission *= 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\tvec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );\n\tvec3 f90 = vec3( 1.0 );\n\tvec3 f_transmission = totalTransmission * getIBLVolumeRefraction(\n\t\tnormal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance);\n\tdiffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );\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, vec3 viewDir, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 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\tfloat NdotV = saturate(dot(n, viewDir));\n\t\tvec2 brdf = integrateSpecularBRDF(NdotV, perceptualRoughness);\n\t\tvec3 specularColor = f0 * brdf.x + f90 * brdf.y;\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#ifdef USE_TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t\tfloat thicknessFactor = thickness;\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\tvec3 rawDiffuseColor = diffuseColor.rgb;\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 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 en(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 en(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 en(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new yt}},sprite:{diffuse:{value:new en(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:Zn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:Zn([ui.common,ui.specularmap,ui.envmap,ui.aomap,ui.lightmap,ui.emissivemap,ui.fog,ui.lights,{emissive:{value:new en(0)}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:Zn([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 en(0)},specular:{value:new en(1118481)},shininess:{value:30}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:Zn([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 en(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},toon:{uniforms:Zn([ui.common,ui.aomap,ui.lightmap,ui.emissivemap,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.gradientmap,ui.fog,ui.lights,{emissive:{value:new en(0)}}]),vertexShader:hi.meshtoon_vert,fragmentShader:hi.meshtoon_frag},matcap:{uniforms:Zn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,ui.fog,{matcap:{value:null}}]),vertexShader:hi.meshmatcap_vert,fragmentShader:hi.meshmatcap_frag},points:{uniforms:Zn([ui.points,ui.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:Zn([ui.common,ui.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:Zn([ui.common,ui.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:Zn([ui.common,ui.bumpmap,ui.normalmap,ui.displacementmap,{opacity:{value:1}}]),vertexShader:hi.normal_vert,fragmentShader:hi.normal_frag},sprite:{uniforms:Zn([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:Zn([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:Zn([ui.common,ui.displacementmap,{referencePosition:{value:new Rt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:hi.distanceRGBA_vert,fragmentShader:hi.distanceRGBA_frag},shadow:{uniforms:Zn([ui.lights,ui.fog,{color:{value:new en(0)},opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}};function pi(t,e,n,i,r){const s=new en(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 jn(new Xn(1,1,1),new Qn({name:"BackgroundCubeMaterial",uniforms:Yn(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 jn(new ci(2,2),new Qn({name:"BackgroundMaterial",uniforms:Yn(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 Be,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 ii(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?pn:un)(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(Ur,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 _,w,b=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(_=[y].filter(Or).join("\n"),_.length>0&&(_+="\n"),w=[v,y].filter(Or).join("\n"),w.length>0&&(w+="\n")):(_=[Zr(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"),w=[v,Zr(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=Gr(h,n),u=kr(u),u=Hr(u,n),u=Gr(u,n),h=qr(h),u=qr(u),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(b="#version 300 es\n",_=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,w=["#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"+w);const M=b+w+u,S=Pr(a,35633,b+_+h),T=Pr(a,35632,M);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:w}})}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 en};break;case"SpotLight":n={position:new Rt,direction:new Rt,color:new en,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new Rt,color:new en,distance:0,decay:0};break;case"HemisphereLight":n={direction:new Rt,skyColor:new en,groundColor:new en};break;case"RectAreaLight":n={color:new en,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 Ye{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 Ye{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 Qn({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 An;f.setAttribute("position",new an(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new jn(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 w(t){const e=t<<0;let n=l[e];return void 0===n&&(n=new hs({morphTargets:t}),l[e]=n),n}function b(e,n,i,r,s,a,o){let l=null,h=_,d=e.customDepthMaterial;if(!0===r.isPointLight&&(h=w,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 M(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){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s))}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 G(e){const n=e.target;n.removeEventListener("dispose",G),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 U(e){const n=e.target;n.removeEventListener("dispose",U),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 Z(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",G),e.__webglTexture=t.createTexture(),a.memory.textures++)}function Z(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===b?36012:i.type===w?33190:i.type===S?35056:33189:i.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===A&&6402===v&&i.type!==_&&i.type!==w&&(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?Z(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?Z(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",U),!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!==b&&l.type!==M||(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;const c=[],h=new Map,u=new $n;u.layers.enable(1),u.viewport=new St;const d=new $n;d.layers.enable(2),d.viewport=new St;const p=[u,d],m=new fs;m.layers.enable(1),m.layers.enable(2);let f=null,g=null;function v(t){const e=h.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function y(){h.forEach((function(t,e){t.disconnect(e)})),h.clear(),f=null,g=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function x(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 ws(t){const e=void 0!==(t=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,w=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 G=[],U=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 Z(){return null===T?N:1}let J,Q,K,$,tt,et,nt,it,rt,st,at,ot,lt,ct,ht,ut,dt,pt,mt,ft,gt,yt,xt=n;function _t(t,n){for(let i=0;i0&&Nt(i,t,e),r.length>0&&function(t,e,n,i){null===W&&(W=new Tt(1024,1024,{generateMipmaps:!0,minFilter:y,magFilter:p,wrapS:u,wrapT:u}));const r=v.getRenderTarget();v.setRenderTarget(W),v.clear(),Nt(t,n,i),et.updateRenderTargetMipmap(W),v.setRenderTarget(r),Nt(e,n,i)}(i,r,t,e),s.length>0&&Nt(s,t,e),null!==T&&(et.updateRenderTargetMipmap(T),et.updateMultisampleRenderTarget(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),yt.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 w},this.getActiveMipmapLevel=function(){return S},this.getRenderTarget=function(){return T},this.setRenderTarget=function(t,e=0,n=0){T=t,w=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(G.length!==n.length||36064!==G[0]){for(let t=0,e=n.length;t=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&xt.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),xt.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),xt.pixelStorei(37440,n.flipY),xt.pixelStorei(37441,n.premultiplyAlpha),xt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?xt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?xt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):xt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&xt.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{width:s,height:a,data:o}=n.image,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}xt.pixelStorei(37440,i.flipY),xt.pixelStorei(37441,i.premultiplyAlpha),xt.pixelStorei(3317,i.unpackAlignment);const u=xt.getParameter(3314),d=xt.getParameter(32878),p=xt.getParameter(3316),m=xt.getParameter(3315),f=xt.getParameter(32877);xt.pixelStorei(3314,s),xt.pixelStorei(32878,a),xt.pixelStorei(3316,t.min.x),xt.pixelStorei(3315,t.min.y),xt.pixelStorei(32877,t.min.z),xt.texSubImage3D(h,r,e.x,e.y,e.z,t.max.x-t.min.x+1,t.max.y-t.min.y+1,t.max.z-t.min.z+1,l,c,o),xt.pixelStorei(3314,u),xt.pixelStorei(32878,d),xt.pixelStorei(3316,p),xt.pixelStorei(3315,m),xt.pixelStorei(32877,f),0===r&&i.generateMipmaps&&xt.generateMipmap(h),K.unbindTexture()},this.initTexture=function(t){et.setTexture2D(t,0),K.unbindTexture()},this.resetState=function(){w=0,S=0,T=null,K.reset(),yt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}class bs extends ws{}bs.prototype.isWebGL1Renderer=!0;class Ms{constructor(t,e=25e-5){this.name="",this.color=new en(t),this.density=e}clone(){return new Ms(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}Ms.prototype.isFogExp2=!0;class Ss{constructor(t,e=1,n=1e3){this.name="",this.color=new en(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.background&&(e.object.background=this.background.toJSON(t)),null!==this.environment&&(e.object.environment=this.environment.toJSON(t)),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:qe.getUV(Ps,Fs,Os,Hs,Gs,Us,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=Ma.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 bt{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 bt{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 bt{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 bt{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 An{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 fn(s,3)),this.setAttribute("normal",new fn(a,3)),this.setAttribute("uv",new fn(o,2))}}class Ia extends An{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 fn(h,3)),this.setAttribute("normal",new fn(u,3)),this.setAttribute("uv",new fn(d,2))}}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}}}class Ba extends An{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 fn(r,3)),this.setAttribute("normal",new fn(r.slice(),3)),this.setAttribute("uv",new fn(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}}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}}}const Fa=new Rt,Oa=new Rt,Ha=new Rt,Ga=new qe;class Ua extends An{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;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 ja(s,a,n,o,l,p),a};function Va(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=ho(s,t[s],t[s+1],a);return a&&ro(a,a.next)&&(uo(a),a=a.next),a}function Wa(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!ro(i,i.next)&&0!==io(i.prev,i,i.next))i=i.next;else{if(uo(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function ja(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=$a(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?Xa(t,i,r,s):qa(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),uo(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?ja(t=Ya(Wa(t),e,n),e,n,i,r,s,2):2===a&&Za(t,e,n,i,r,s):ja(Wa(t),e,n,i,r,s,1);break}}function qa(t){const e=t.prev,n=t,i=t.next;if(io(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(eo(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&io(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function Xa(t,e,n,i){const r=t.prev,s=t,a=t.next;if(io(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=$a(o,l,e,n,i),d=$a(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&&eo(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&io(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&eo(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&io(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&eo(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&io(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&eo(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&io(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function Ya(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!ro(r,s)&&so(r,i,i.next,s)&&lo(r,s)&&lo(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),uo(i),uo(i.next),i=t=s),i=i.next}while(i!==t);return Wa(i)}function Za(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&no(a,t)){let o=co(a,t);return a=Wa(a,a.next),o=Wa(o,o.next),ja(a,e,n,i,r,s),void ja(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function Ja(t,e){return t.x-e.x}function Qa(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&&eo(rs.x||n.x===s.x&&Ka(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e)){const n=co(e,t);Wa(e,e.next),Wa(n,n.next)}}function Ka(t,e){return io(t.prev,t,e.prev)<0&&io(e.next,t,t.next)<0}function $a(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 to(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 no(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&&so(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(lo(t,e)&&lo(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)&&(io(t.prev,t,e.prev)||io(t,e.prev,e))||ro(t,e)&&io(t.prev,t,t.next)>0&&io(e.prev,e,e.next)>0)}function io(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function ro(t,e){return t.x===e.x&&t.y===e.y}function so(t,e,n,i){const r=oo(io(t,e,n)),s=oo(io(t,e,i)),a=oo(io(n,i,t)),o=oo(io(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 oo(t){return t>0?1:t<0?-1:0}function lo(t,e){return io(t.prev,t,t.next)<0?io(t,e,t.next)>=0&&io(t,t.prev,e)>=0:io(t,e,t.prev)<0||io(t,t.next,e)<0}function co(t,e){const n=new po(t.i,t.x,t.y),i=new po(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 ho(t,e,n,i){const r=new po(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 uo(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 po(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 mo{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 go(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=Wo.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=Wo.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=Wo.arraySlice(n,r,s),this.values=Wo.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&&Wo.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=Wo.arraySlice(this.times),e=Wo.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===U,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=Wo.arraySlice(t,0,s),this.values=Wo.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=Wo.arraySlice(this.times,0),e=Wo.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Zo.prototype.TimeBufferType=Float32Array,Zo.prototype.ValueBufferType=Float32Array,Zo.prototype.DefaultInterpolation=G;class Jo extends Zo{}Jo.prototype.ValueTypeName="bool",Jo.prototype.ValueBufferType=Array,Jo.prototype.DefaultInterpolation=H,Jo.prototype.InterpolantFactoryMethodLinear=void 0,Jo.prototype.InterpolantFactoryMethodSmooth=void 0;class Qo extends Zo{}Qo.prototype.ValueTypeName="color";class Ko extends Zo{}Ko.prototype.ValueTypeName="number";class $o extends jo{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 tl extends Zo{InterpolantFactoryMethodLinear(t){return new $o(this.times,this.values,this.getValueSize(),t)}}tl.prototype.ValueTypeName="quaternion",tl.prototype.DefaultInterpolation=G,tl.prototype.InterpolantFactoryMethodSmooth=void 0;class el extends Zo{}el.prototype.ValueTypeName="string",el.prototype.ValueBufferType=Array,el.prototype.DefaultInterpolation=H,el.prototype.InterpolantFactoryMethodLinear=void 0,el.prototype.InterpolantFactoryMethodSmooth=void 0;class nl extends Zo{}nl.prototype.ValueTypeName="vector";class il{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(rl(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(Zo.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=[];Wo.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 fl{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 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 gl extends fl{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]:(xl.subVectors(i[0],i[1]).add(i[0]),a=xl);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(Sl(a,o.x,l.x,c.x,h.x),Sl(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=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 en).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=mo.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("\\.","")+"]",Gc=/((?:WC+[\/:])*)/.source.replace("WC",Oc),Uc=/(WCOD+)?/.source.replace("WCOD",Hc),kc=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Oc),Vc=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Oc),Wc=new RegExp("^"+Gc+Uc+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 Zc 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 void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new vt),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 void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new vt),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 void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new Rt),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new Rt),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new Rt),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 void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new Rt),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 An,i=[],r=[],s=new en(0,0,1),a=new en(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 An;x.setAttribute("position",new an(g,p)),x.setAttribute("uv",new an(v,m)),x.setAttribute("faceIndex",new an(y,f)),t.push(x),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Jh(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 No({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 No({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"}fl.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(fl.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()},Be.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)},qe.prototype.area=function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},qe.prototype.barycoordFromPoint=function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},qe.prototype.midpoint=function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},qe.prototypenormal=function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},qe.prototype.plane=function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)},qe.barycoordFromPoint=function(t,e,n,i,r){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),qe.getBarycoord(t,e,n,i,r)},qe.normal=function(t,e,n,i){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),qe.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 vo(this,t)},Fl.prototype.makeGeometry=function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new So(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.")}}}),jn.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(jn.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.")},$n.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(an.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)}}}),an.prototype.setDynamic=function(t){return console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead."),this.setUsage(!0===t?nt:et),this},an.prototype.copyIndicesArray=function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},an.prototype.setArray=function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")},An.prototype.addIndex=function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},An.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 an(arguments[1],arguments[2])))},An.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)},An.prototype.clearDrawCalls=function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},An.prototype.computeOffsets=function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},An.prototype.removeAttribute=function(t){return console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute()."),this.deleteAttribute(t)},An.prototype.applyMatrix=function(t){return console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)},Object.defineProperties(An.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")},vo.prototype.getArrays=function(){console.error("THREE.ExtrudeGeometry: .getArrays() has been removed.")},vo.prototype.addShapeList=function(){console.error("THREE.ExtrudeGeometry: .addShapeList() has been removed.")},vo.prototype.addShape=function(){console.error("THREE.ExtrudeGeometry: .addShape() has been removed.")},Ts.prototype.dispose=function(){console.error("THREE.Scene: .dispose() has been removed.")},Jc.prototype.onUpdate=function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this},Object.defineProperties(Ye.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 en}},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(Qn.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}}}),ws.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)},ws.prototype.animate=function(t){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop()."),this.setAnimationLoop(t)},ws.prototype.getCurrentRenderTarget=function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},ws.prototype.getMaxAnisotropy=function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},ws.prototype.getPrecision=function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},ws.prototype.resetGLState=function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},ws.prototype.supportsFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},ws.prototype.supportsHalfFloatTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},ws.prototype.supportsStandardDerivatives=function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},ws.prototype.supportsCompressedTextureS3TC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},ws.prototype.supportsCompressedTexturePVRTC=function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},ws.prototype.supportsBlendMinMax=function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},ws.prototype.supportsVertexTextures=function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},ws.prototype.supportsInstancedArrays=function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},ws.prototype.enableScissorTest=function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},ws.prototype.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},ws.prototype.addPrePlugin=function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},ws.prototype.addPostPlugin=function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},ws.prototype.updateShadowMap=function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},ws.prototype.setFaceCulling=function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},ws.prototype.allocTextureUnit=function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},ws.prototype.setTexture=function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},ws.prototype.setTexture2D=function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},ws.prototype.setTextureCube=function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},ws.prototype.getActiveMipMapLevel=function(){return console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel()."),this.getActiveMipmapLevel()},Object.defineProperties(ws.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()},ei.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)},ei.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 ml;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=il,t.AnimationLoader=class extends ll{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new hl(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 Mc}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 pl(t)},t.Bone=ta,t.BooleanKeyframeTrack=Jo,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 An;i.setIndex(new an(n,1)),i.setAttribute("position",new fn([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=Xn,t.BoxGeometry=Xn,t.BoxHelper=Sh,t.BufferAttribute=an,t.BufferGeometry=An,t.BufferGeometryLoader=lc,t.ByteType=1010,t.Cache=sl,t.Camera=Kn,t.CameraHelper=class extends xa{constructor(t){const e=new An,n=new ha({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new en(16755200),o=new en(16711680),l=new en(43775),c=new en(16777215),h=new en(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 fn(i,3)),e.setAttribute("color",new fn(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;wh.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),bh("c",e,t,wh,0,0,-1),bh("t",e,t,wh,0,0,1),bh("n1",e,t,wh,-1,-1,-1),bh("n2",e,t,wh,1,-1,-1),bh("n3",e,t,wh,-1,1,-1),bh("n4",e,t,wh,1,1,-1),bh("f1",e,t,wh,-1,-1,1),bh("f2",e,t,wh,1,-1,1),bh("f3",e,t,wh,-1,1,1),bh("f4",e,t,wh,1,1,1),bh("u1",e,t,wh,.7,1.1,-1),bh("u2",e,t,wh,-.7,1.1,-1),bh("u3",e,t,wh,0,2,-1),bh("cf1",e,t,wh,-1,0,1),bh("cf2",e,t,wh,1,0,1),bh("cf3",e,t,wh,0,-1,1),bh("cf4",e,t,wh,0,1,1),bh("cn1",e,t,wh,-1,0,-1),bh("cn2",e,t,wh,1,0,-1),bh("cn3",e,t,wh,0,-1,-1),bh("cn4",e,t,wh,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=Ml,t.CineonToneMapping=3,t.CircleBufferGeometry=Da,t.CircleGeometry=Da,t.ClampToEdgeWrapping=u,t.Clock=Mc,t.Color=en,t.ColorKeyframeTrack=Qo,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 hl(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=ol,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 An;i.setAttribute("position",new fn([-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 An,i.setAttribute("position",new fn([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=Yo,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 an(t,e).setUsage(nt)},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=nt,t.DynamicReadUsage=35049,t.EdgesGeometry=Ua,t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new xa(new Ua(t.geometry),new ha({color:void 0!==e?e:16777215}))},t.EllipseCurve=gl,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=ge,t.EventDispatcher=rt,t.ExtrudeBufferGeometry=vo,t.ExtrudeGeometry=vo,t.FaceColors=1,t.FileLoader=hl,t.FlatShading=1,t.Float16BufferAttribute=mn,t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new fn(t,e)},t.Float32BufferAttribute=fn,t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new gn(t,e)},t.Float64BufferAttribute=gn,t.FloatType=b,t.Fog=Ss,t.FogExp2=Ms,t.Font=mc,t.FontLoader=class extends ll{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new hl(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=Z,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=gh,t.Group=gs,t.HalfFloatType=M,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 wo(e);i.rotateY(.5*Math.PI),this.material=new nn({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 an(s,3)),this.add(new jn(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 al(e);r=new ul(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=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 jn(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=bo,t.ParametricGeometry=bo,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 wa(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 wa(t)},t.Path=zl,t.PerspectiveCamera=$n,t.Plane=Be,t.PlaneBufferGeometry=ci,t.PlaneGeometry=ci,t.PlaneHelper=class extends ga{constructor(t,e=1,n=16776960){const i=n,r=new An;r.setAttribute("position",new fn([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 An;s.setAttribute("position",new fn([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),s.computeBoundingSphere(),this.add(new jn(s,new nn({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 wa(t)},t.PointLight=Jl,t.PointLightHelper=class extends jn{constructor(t,e,n){super(new To(e,4,2),new nn({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=wa,t.PolarGridHelper=class extends xa{constructor(t=10,e=16,n=8,i=64,r=4473924,s=8947848){r=new en(r),s=new en(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]+lt[t>>16&255]+lt[t>>24&255]+"-"+lt[255&e]+lt[e>>8&255]+"-"+lt[e>>16&15|64]+lt[e>>24&255]+"-"+lt[63&n|128]+lt[n>>8&255]+"-"+lt[n>>16&255]+lt[n>>24&255]+lt[255&i]+lt[i>>8&255]+lt[i>>16&255]+lt[i>>24&255]).toUpperCase()}function ut(t,e,n){return Math.max(e,Math.min(n,t))}function dt(t,e){return(t%e+e)%e}function pt(t,e,n){return(1-n)*t+n*e}function mt(t){return 0==(t&t-1)&&0!==t}function ft(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function gt(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var vt=Object.freeze({__proto__:null,DEG2RAD:at,RAD2DEG:ot,generateUUID:ht,clamp:ut,euclideanModulo:dt,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:pt,damp:function(t,e,n,i){return pt(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(dt(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&&(st=t%2147483647),st=16807*st%2147483647,(st-1)/2147483646},degToRad:function(t){return t*at},radToDeg:function(t){return t*ot},isPowerOfTwo:mt,ceilPowerOfTwo:ft,floorPowerOfTwo:gt,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 yt{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}}yt.prototype.isVector2=!0;class xt{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],M=i[5],b=i[8];return r[0]=s*m+a*v+o*_,r[3]=s*f+a*y+o*M,r[6]=s*g+a*x+o*b,r[1]=l*m+c*v+h*_,r[4]=l*f+c*y+h*M,r[7]=l*g+c*x+h*b,r[2]=u*m+d*v+p*_,r[5]=u*f+d*y+p*M,r[8]=u*g+d*x+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],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 _t(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;ne&&(e=t[n]);return e}xt.prototype.isMatrix3=!0;const Mt={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function bt(t,e){return new Mt[t](e)}function wt(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function St(t,e=0){let n=3735928559^e,i=1103547991^e;for(let e,r=0;r>>16,2246822507)^Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),4294967296*(2097151&i)+(n>>>0)}let Tt;class Et{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===Tt&&(Tt=wt("canvas")),Tt.width=t.width,Tt.height=t.height;const n=Tt.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Tt}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 At=0;class Lt extends rt{constructor(t=Lt.DEFAULT_IMAGE,e=Lt.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,o=1009,l=1,c=3e3){super(),Object.defineProperty(this,"id",{value:At++}),this.uuid=ht(),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 yt(0,0),this.repeat=new yt(1,1),this.center=new yt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new xt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}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.userData=JSON.parse(JSON.stringify(t.userData)),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=ht()),!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 Rt(t){return"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap?Et.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."),{})}Lt.DEFAULT_IMAGE=void 0,Lt.DEFAULT_MAPPING=i,Lt.prototype.isTexture=!0;class Ct{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(ut(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)}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(){}}Nt.prototype.isQuaternion=!0;class zt{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(Ft.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Ft.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 Bt.copy(this).projectOnVector(t),this.sub(Bt)}reflect(t){return this.sub(Bt.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(ut(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}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}}zt.prototype.isVector3=!0;const Bt=new zt,Ft=new Nt;class Ot{constructor(t=new zt(1/0,1/0,1/0),e=new zt(-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,Ht),Ht.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(Yt),Jt.subVectors(this.max,Yt),kt.subVectors(t.a,Yt),Vt.subVectors(t.b,Yt),Wt.subVectors(t.c,Yt),jt.subVectors(Vt,kt),qt.subVectors(Wt,Vt),Xt.subVectors(kt,Wt);let e=[0,-jt.z,jt.y,0,-qt.z,qt.y,0,-Xt.z,Xt.y,jt.z,0,-jt.x,qt.z,0,-qt.x,Xt.z,0,-Xt.x,-jt.y,jt.x,0,-qt.y,qt.x,0,-Xt.y,Xt.x,0];return!!Kt(e,kt,Vt,Wt,Jt)&&(e=[1,0,0,0,1,0,0,0,1],!!Kt(e,kt,Vt,Wt,Jt)&&(Zt.crossVectors(jt,qt),e=[Zt.x,Zt.y,Zt.z],Kt(e,kt,Vt,Wt,Jt)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Ht.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(Ht).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()||(Ut[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Ut[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Ut[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Ut[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Ut[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Ut[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Ut[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Ut[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Ut)),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)}}Ot.prototype.isBox3=!0;const Ut=[new zt,new zt,new zt,new zt,new zt,new zt,new zt,new zt],Ht=new zt,Gt=new Ot,kt=new zt,Vt=new zt,Wt=new zt,jt=new zt,qt=new zt,Xt=new zt,Yt=new zt,Jt=new zt,Zt=new zt,Qt=new zt;function Kt(t,e,n,i,r){for(let s=0,a=t.length-3;s<=a;s+=3){Qt.fromArray(t,s);const a=r.x*Math.abs(Qt.x)+r.y*Math.abs(Qt.y)+r.z*Math.abs(Qt.z),o=e.dot(Qt),l=n.dot(Qt),c=i.dot(Qt);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))>a)return!1}return!0}const $t=new Ot,te=new zt,ee=new zt,ne=new zt;class ie{constructor(t=new zt,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):$t.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){ne.subVectors(t,this.center);const e=ne.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(ne.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return ee.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(te.copy(t.center).add(ee)),this.expandByPoint(te.copy(t.center).sub(ee)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const re=new zt,se=new zt,ae=new zt,oe=new zt,le=new zt,ce=new zt,he=new zt;class ue{constructor(t=new zt,e=new zt(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){se.copy(t).add(e).multiplyScalar(.5),ae.copy(e).sub(t).normalize(),oe.copy(this.origin).sub(se);const r=.5*t.distanceTo(e),s=-this.direction.dot(ae),a=oe.dot(this.direction),o=-oe.dot(ae),l=oe.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(ae).multiplyScalar(u).add(se),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){le.subVectors(e,t),ce.subVectors(n,t),he.crossVectors(le,ce);let s,a=this.direction.dot(he);if(a>0){if(i)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}oe.subVectors(this.origin,t);const o=s*this.direction.dot(ce.crossVectors(oe,ce));if(o<0)return null;const l=s*this.direction.dot(le.cross(oe));if(l<0)return null;if(o+l>a)return null;const c=-s*oe.dot(he);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 de{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 de).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/pe.setFromMatrixColumn(t,0).length(),r=1/pe.setFromMatrixColumn(t,1).length(),s=1/pe.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,ge)}lookAt(t,e,n){const i=this.elements;return xe.subVectors(t,e),0===xe.lengthSq()&&(xe.z=1),xe.normalize(),ve.crossVectors(n,xe),0===ve.lengthSq()&&(1===Math.abs(n.z)?xe.x+=1e-4:xe.z+=1e-4,xe.normalize(),ve.crossVectors(n,xe)),ve.normalize(),ye.crossVectors(xe,ve),i[0]=ve.x,i[4]=ye.x,i[8]=xe.x,i[1]=ve.y,i[5]=ye.y,i[9]=xe.y,i[2]=ve.z,i[6]=ye.z,i[10]=xe.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],M=i[0],b=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],I=i[14],D=i[3],N=i[7],z=i[11],B=i[15];return r[0]=s*M+a*T+o*R+l*D,r[4]=s*b+a*E+o*C+l*N,r[8]=s*w+a*A+o*P+l*z,r[12]=s*S+a*L+o*I+l*B,r[1]=c*M+h*T+u*R+d*D,r[5]=c*b+h*E+u*C+d*N,r[9]=c*w+h*A+u*P+d*z,r[13]=c*S+h*L+u*I+d*B,r[2]=p*M+m*T+f*R+g*D,r[6]=p*b+m*E+f*C+g*N,r[10]=p*w+m*A+f*P+g*z,r[14]=p*S+m*L+f*I+g*B,r[3]=v*M+y*T+x*R+_*D,r[7]=v*b+y*E+x*C+_*N,r[11]=v*w+y*A+x*P+_*z,r[15]=v*S+y*L+x*I+_*B,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,M=e*v+n*y+i*x+r*_;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*i*d+n*f*d+h*i*g-n*u*g)*b,t[2]=(a*f*r-m*o*r+m*i*l-n*f*l-a*i*g+n*o*g)*b,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*b,t[4]=y*b,t[5]=(c*f*r-p*u*r+p*i*d-e*f*d-c*i*g+e*u*g)*b,t[6]=(p*o*r-s*f*r-p*i*l+e*f*l+s*i*g-e*o*g)*b,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*b,t[8]=x*b,t[9]=(p*h*r-c*m*r-p*n*d+e*m*d+c*n*g-e*h*g)*b,t[10]=(s*m*r-p*a*r+p*n*l-e*m*l-s*n*g+e*a*g)*b,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*b,t[12]=_*b,t[13]=(c*m*i-p*h*i+p*n*u-e*m*u-c*n*f+e*h*f)*b,t[14]=(p*a*i-s*m*i-p*n*o+e*m*o+s*n*f-e*a*f)*b,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*b,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,M=n.y,b=n.z;return i[0]=(1-(m+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*M,i[5]=(1-(u+g))*M,i[6]=(f+v)*M,i[7]=0,i[8]=(p+y)*b,i[9]=(f-v)*b,i[10]=(1-(u+m))*b,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=pe.set(i[0],i[1],i[2]).length();const s=pe.set(i[4],i[5],i[6]).length(),a=pe.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],me.copy(this);const o=1/r,l=1/s,c=1/a;return me.elements[0]*=o,me.elements[1]*=o,me.elements[2]*=o,me.elements[4]*=l,me.elements[5]*=l,me.elements[6]*=l,me.elements[8]*=c,me.elements[9]*=c,me.elements[10]*=c,e.setFromRotationMatrix(me),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}}de.prototype.isMatrix4=!0;const pe=new zt,me=new de,fe=new zt(0,0,0),ge=new zt(1,1,1),ve=new zt,ye=new zt,xe=new zt,_e=new de,Me=new Nt;class be{constructor(t=0,e=0,n=0,i=be.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(ut(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(-ut(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(ut(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(-ut(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(ut(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(-ut(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 _e.makeRotationFromQuaternion(t),this.setFromRotationMatrix(_e,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Me.setFromEuler(this),this.setFromQuaternion(Me,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 zt(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}be.prototype.isEuler=!0,be.DefaultOrder="XYZ",be.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class we{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){Oe.subVectors(i,e),Ue.subVectors(n,e),He.subVectors(t,e);const s=Oe.dot(Oe),a=Oe.dot(Ue),o=Oe.dot(He),l=Ue.dot(Ue),c=Ue.dot(He),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,Ge),Ge.x>=0&&Ge.y>=0&&Ge.x+Ge.y<=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,Ge),o.set(0,0),o.addScaledVector(r,Ge.x),o.addScaledVector(s,Ge.y),o.addScaledVector(a,Ge.z),o}static isFrontFacing(t,e,n,i){return Oe.subVectors(n,e),Ue.subVectors(t,e),Oe.cross(Ue).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 Oe.subVectors(this.c,this.b),Ue.subVectors(this.a,this.b),.5*Oe.cross(Ue).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Ye.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Ye.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Ye.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Ye.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Ye.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;ke.subVectors(i,n),Ve.subVectors(r,n),je.subVectors(t,n);const o=ke.dot(je),l=Ve.dot(je);if(o<=0&&l<=0)return e.copy(n);qe.subVectors(t,i);const c=ke.dot(qe),h=Ve.dot(qe);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(ke,s);Xe.subVectors(t,r);const d=ke.dot(Xe),p=Ve.dot(Xe);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(Ve,a);const f=c*p-d*h;if(f<=0&&h-c>=0&&d-p>=0)return We.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(We,a);const g=1/(f+m+u);return s=m*g,a=u*g,e.copy(n).addScaledVector(ke,s).addScaledVector(Ve,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Je=0;class Ze extends rt{constructor(){super(),Object.defineProperty(this,"id",{value:Je++}),this.uuid=ht(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.format=E,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.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),this.format!==E&&(n.format=this.format),!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.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.format=t.format,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++}}Ze.prototype.isMaterial=!0;const Qe={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},Ke={h:0,s:0,l:0},$e={h:0,s:0,l:0};function tn(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 en(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function nn(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class rn{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=dt(t,1),e=ut(e,0,1),n=ut(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=tn(r,i,t+1/3),this.g=tn(r,i,t),this.b=tn(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=Qe[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=en(t.r),this.g=en(t.g),this.b=en(t.b),this}copyLinearToSRGB(t){return this.r=nn(t.r),this.g=nn(t.g),this.b=nn(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+(n65535?fn:pn)(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 xt).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 _n.makeRotationFromQuaternion(t),this.applyMatrix4(_n),this}rotateX(t){return _n.makeRotationX(t),this.applyMatrix4(_n),this}rotateY(t){return _n.makeRotationY(t),this.applyMatrix4(_n),this}rotateZ(t){return _n.makeRotationZ(t),this.applyMatrix4(_n),this}translate(t,e,n){return _n.makeTranslation(t,e,n),this.applyMatrix4(_n),this}scale(t,e,n){return _n.makeScale(t,e,n),this.applyMatrix4(_n),this}lookAt(t){return Mn.lookAt(t),Mn.updateMatrix(),this.applyMatrix4(Mn.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(bn).negate(),this.translate(bn.x,bn.y,bn.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 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(),Rn.copy(n.boundingSphere),Rn.applyMatrix4(r),!1===t.ray.intersectsSphere(Rn))return;if(An.copy(r).invert(),Ln.copy(t.ray).applyMatrix4(An),null!==n.boundingBox&&!1===Ln.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:Vn.clone(),object:t}}(t,e,n,i,Cn,Pn,In,kn);if(p){o&&(Un.fromBufferAttribute(o,c),Hn.fromBufferAttribute(o,h),Gn.fromBufferAttribute(o,u),p.uv=Ye.getUV(kn,Cn,Pn,In,Un,Hn,Gn,new yt)),l&&(Un.fromBufferAttribute(l,c),Hn.fromBufferAttribute(l,h),Gn.fromBufferAttribute(l,u),p.uv2=Ye.getUV(kn,Cn,Pn,In,Un,Hn,Gn,new yt));const t={a:c,b:h,c:u,normal:new zt,materialIndex:0};Ye.getNormal(Cn,Pn,In,t.normal),p.face=t}return p}Wn.prototype.isMesh=!0;class qn extends En{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,M=p/2,b=m/2,w=f+1,S=g+1;let T=0,E=0;const A=new zt;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}}Zn.prototype.isShaderMaterial=!0;class Qn extends Fe{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new de,this.projectionMatrix=new de,this.projectionMatrixInverse=new de}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)}}Qn.prototype.isCamera=!0;class Kn extends Qn{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*ot*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*at*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*ot*Math.atan(Math.tan(.5*at*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*at*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}}Kn.prototype.isPerspectiveCamera=!0;const $n=90;class ti extends Fe{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 Kn($n,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new zt(1,0,0)),this.add(i);const r=new Kn($n,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new zt(-1,0,0)),this.add(r);const s=new Kn($n,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new zt(0,1,0)),this.add(s);const a=new Kn($n,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new zt(0,-1,0)),this.add(a);const o=new Kn($n,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new zt(0,0,1)),this.add(o);const l=new Kn($n,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new zt(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 ei extends Lt{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}}ei.prototype.isCubeTexture=!0;class ni extends Pt{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 ei(void 0,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: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 qn(5,5,5),r=new Zn({name:"CubemapFromEquirect",uniforms:Xn(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new Wn(i,r),a=e.minFilter;e.minFilter===y&&(e.minFilter=g);return new ti(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)}}ni.prototype.isWebGLCubeRenderTarget=!0;const ii=new zt,ri=new zt,si=new xt;class ai{constructor(t=new zt(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=ii.subVectors(n,e).cross(ri.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(ii),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||si.getNormalMatrix(t),i=this.coplanarPoint(ii).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)}}ai.prototype.isPlane=!0;const oi=new ie,li=new zt;class ci{constructor(t=new ai,e=new ai,n=new ai,i=new ai,r=new ai,s=new ai){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(),oi.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(oi)}intersectsSprite(t){return oi.center.set(0,0,0),oi.radius=.7071067811865476,oi.applyMatrix4(t.matrixWorld),this.intersectsSphere(oi)}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,li.y=i.normal.y>0?t.max.y:t.min.y,li.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(li)<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 hi(){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 ui(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_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\tenvColor = envMapTexelToLinear( envColor );\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\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 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;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\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 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\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\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 *= specularColorMapTexelToLinear( 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 *= sheenColorMapTexelToLinear( 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 );\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\treflectedLight.directSpecular += 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\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 = 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 += 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 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\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, 2 ) * 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 vec2 morphTargetsTextureSize;\n\t\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\n\t\t\tfloat texelIndex = float( vertexIndex * stride + offset );\n\t\t\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\n\t\t\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\n\t\t\treturn texture( morphTargetsTexture, morphUV ).xyz;\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\t#ifndef USE_MORPHNORMALS\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\n\t\t\t#else\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\n\t\t\t#endif\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\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 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( 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\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\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( 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\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\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\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\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( 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:"#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\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\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}",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#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 += 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\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}",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\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\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 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}",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\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\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_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 - clearcoat * Fcc ) + clearcoatSpecular * 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\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\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}"},mi={common:{diffuse:{value:new rn(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new xt},uv2Transform:{value:new xt},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},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 yt(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 rn(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 rn(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new xt}},sprite:{diffuse:{value:new rn(16777215)},opacity:{value:1},center:{value:new yt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new xt}}},fi={basic:{uniforms:Yn([mi.common,mi.specularmap,mi.envmap,mi.aomap,mi.lightmap,mi.fog]),vertexShader:pi.meshbasic_vert,fragmentShader:pi.meshbasic_frag},lambert:{uniforms:Yn([mi.common,mi.specularmap,mi.envmap,mi.aomap,mi.lightmap,mi.emissivemap,mi.fog,mi.lights,{emissive:{value:new rn(0)}}]),vertexShader:pi.meshlambert_vert,fragmentShader:pi.meshlambert_frag},phong:{uniforms:Yn([mi.common,mi.specularmap,mi.envmap,mi.aomap,mi.lightmap,mi.emissivemap,mi.bumpmap,mi.normalmap,mi.displacementmap,mi.fog,mi.lights,{emissive:{value:new rn(0)},specular:{value:new rn(1118481)},shininess:{value:30}}]),vertexShader:pi.meshphong_vert,fragmentShader:pi.meshphong_frag},standard:{uniforms:Yn([mi.common,mi.envmap,mi.aomap,mi.lightmap,mi.emissivemap,mi.bumpmap,mi.normalmap,mi.displacementmap,mi.roughnessmap,mi.metalnessmap,mi.fog,mi.lights,{emissive:{value:new rn(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:pi.meshphysical_vert,fragmentShader:pi.meshphysical_frag},toon:{uniforms:Yn([mi.common,mi.aomap,mi.lightmap,mi.emissivemap,mi.bumpmap,mi.normalmap,mi.displacementmap,mi.gradientmap,mi.fog,mi.lights,{emissive:{value:new rn(0)}}]),vertexShader:pi.meshtoon_vert,fragmentShader:pi.meshtoon_frag},matcap:{uniforms:Yn([mi.common,mi.bumpmap,mi.normalmap,mi.displacementmap,mi.fog,{matcap:{value:null}}]),vertexShader:pi.meshmatcap_vert,fragmentShader:pi.meshmatcap_frag},points:{uniforms:Yn([mi.points,mi.fog]),vertexShader:pi.points_vert,fragmentShader:pi.points_frag},dashed:{uniforms:Yn([mi.common,mi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:pi.linedashed_vert,fragmentShader:pi.linedashed_frag},depth:{uniforms:Yn([mi.common,mi.displacementmap]),vertexShader:pi.depth_vert,fragmentShader:pi.depth_frag},normal:{uniforms:Yn([mi.common,mi.bumpmap,mi.normalmap,mi.displacementmap,{opacity:{value:1}}]),vertexShader:pi.meshnormal_vert,fragmentShader:pi.meshnormal_frag},sprite:{uniforms:Yn([mi.sprite,mi.fog]),vertexShader:pi.sprite_vert,fragmentShader:pi.sprite_frag},background:{uniforms:{uvTransform:{value:new xt},t2D:{value:null}},vertexShader:pi.background_vert,fragmentShader:pi.background_frag},cube:{uniforms:Yn([mi.envmap,{opacity:{value:1}}]),vertexShader:pi.cube_vert,fragmentShader:pi.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:pi.equirect_vert,fragmentShader:pi.equirect_frag},distanceRGBA:{uniforms:Yn([mi.common,mi.displacementmap,{referencePosition:{value:new zt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:pi.distanceRGBA_vert,fragmentShader:pi.distanceRGBA_frag},shadow:{uniforms:Yn([mi.lights,mi.fog,{color:{value:new rn(0)},opacity:{value:1}}]),vertexShader:pi.shadow_vert,fragmentShader:pi.shadow_frag}};function gi(t,e,n,i,r){const s=new rn(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 Wn(new qn(1,1,1),new Zn({name:"BackgroundCubeMaterial",uniforms:Xn(fi.cube.uniforms),vertexShader:fi.cube.vertexShader,fragmentShader:fi.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&&!1===f.isRenderTargetTexture?-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 Wn(new di(2,2),new Zn({name:"BackgroundMaterial",uniforms:Xn(fi.background.uniforms),vertexShader:fi.background.vertexShader,fragmentShader:fi.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 vi(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){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&&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 _i(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new ai,o=new xt,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 ni(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}}}fi.physical={uniforms:Yn([fi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new yt(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new rn(0)},sheenColorMap:{value:null},sheenRoughness:{value:0},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new yt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new rn(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularColor:{value:new rn(1,1,1)},specularColorMap:{value:null}}]),vertexShader:pi.meshphysical_vert,fragmentShader:pi.meshphysical_frag};class bi extends Qn{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}}bi.prototype.isOrthographicCamera=!0;class wi extends Zn{constructor(t){super(t),this.type="RawShaderMaterial"}}wi.prototype.isRawShaderMaterial=!0;const Si=Math.pow(2,8),Ti=[.125,.215,.35,.446,.526,.582],Ei=5+Ti.length,Ai=20,Li={[X]:0,[Y]:1,[Z]:2,[Q]:3,[K]:4,[$]:5,[J]:6},Ri=new bi,{_lodPlanes:Ci,_sizeLods:Pi,_sigmas:Ii}=Hi(),Di=new rn;let Ni=null;const zi=(1+Math.sqrt(5))/2,Bi=1/zi,Fi=[new zt(1,1,1),new zt(-1,1,1),new zt(1,1,-1),new zt(-1,1,-1),new zt(0,zi,Bi),new zt(0,zi,-Bi),new zt(Bi,0,zi),new zt(-Bi,0,zi),new zt(zi,Bi,0),new zt(-zi,Bi,0)];class Oi{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new zt(0,1,0);return new wi({name:"SphericalGaussianBlur",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:Li[3e3]},outputEncoding:{value:Li[3e3]}},vertexShader:ji(),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${qi()}\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:0,depthTest:!1,depthWrite:!1})}(Ai),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){Ni=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=Wi(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=Vi(),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?Si:0,Si,Si),o.setRenderTarget(i),p&&o.render(d,r),o.render(t,r)}d.geometry.dispose(),d.material.dispose(),o.toneMapping=h,o.outputEncoding=c,o.autoClear=l,t.background=m}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===E&&e.type===x&&e.encoding===Y?t.value=Li[3e3]:t.value=Li[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer,i=t.mapping===r||t.mapping===s;i?null==this._cubemapShader&&(this._cubemapShader=Wi()):null==this._equirectShader&&(this._equirectShader=Vi());const a=i?this._cubemapShader:this._equirectShader,o=new Wn(Ci[0],a),l=a.uniforms;l.envMap.value=t,i||l.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(l.inputEncoding,t),this._setEncoding(l.outputEncoding,e.texture),ki(e,0,0,3*Si,2*Si),n.setRenderTarget(e),n.render(o,Ri)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;eAi&&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,Ri)}}function Ui(t){return void 0!==t&&t.type===x&&(t.encoding===X||t.encoding===Y||t.encoding===J)}function Hi(){const t=[],e=[],n=[];let i=8;for(let r=0;r4?a=Ti[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 En;x.setAttribute("position",new ln(g,p)),x.setAttribute("uv",new ln(v,m)),x.setAttribute("faceIndex",new ln(y,f)),t.push(x),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Gi(t){const e=new Pt(3*Si,3*Si,t);return e.texture.mapping=l,e.texture.name="PMREM.cubeUv",e.scissorTest=!0,e}function ki(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Vi(){const t=new yt(1,1);return new wi({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:Li[3e3]},outputEncoding:{value:Li[3e3]}},vertexShader:ji(),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${qi()}\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 Wi(){return new wi({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:Li[3e3]},outputEncoding:{value:Li[3e3]}},vertexShader:ji(),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${qi()}\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 ji(){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 qi(){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 Xi(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&&!1===l.isRenderTargetTexture){const c=l.mapping,h=c===a||c===o,u=c===r||c===s;if(h||u){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;i65535?fn:pn)(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;te.maxTextureSize&&(u=Math.ceil(h/e.maxTextureSize),h=e.maxTextureSize);const d=new Float32Array(h*u*4*i),p=new Ki(d,h,u,i);p.format=E,p.type=b;const m=4*l;for(let e=0;e0)return t;const r=e*n;let s=cr[r];if(void 0===s&&(s=new Float32Array(r),cr[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 fr(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n/gm;function ys(t){return t.replace(vs,xs)}function xs(t,e){const n=pi[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return ys(n)}const _s=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Ms=/#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 bs(t){return t.replace(Ms,Ss).replace(_s,ws)}function ws(t,e,n,i){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),Ss(t,e,n,i)}function Ss(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)&&t.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(ms).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 _,M,b=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(_=[y].filter(ms).join("\n"),_.length>0&&(_+="\n"),M=[v,y].filter(ms).join("\n"),M.length>0&&(M+="\n")):(_=[Ts(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.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.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphTargets&&n.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",n.morphTargets&&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 "+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","#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(ms).join("\n"),M=[v,Ts(n),"#define SHADER_NAME "+n.shaderName,y,"#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.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.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?pi.tonemapping_pars_fragment:"",0!==n.toneMapping?ps("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.format===T?"#define OPAQUE":"",pi.encodings_pars_fragment,n.map?us("mapTexelToLinear",n.mapEncoding):"",n.matcap?us("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?us("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?us("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.specularColorMap?us("specularColorMapTexelToLinear",n.specularColorMapEncoding):"",n.sheenColorMap?us("sheenColorMapTexelToLinear",n.sheenColorMapEncoding):"",n.lightMap?us("lightMapTexelToLinear",n.lightMapEncoding):"",ds("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(ms).join("\n")),h=ys(h),h=fs(h,n),h=gs(h,n),u=ys(u),u=fs(u,n),u=gs(u,n),h=bs(h),u=bs(u),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(b="#version 300 es\n",_=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+_,M=["#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"+M);const w=b+M+u,S=os(a,35633,b+_+h),E=os(a,35632,w);if(a.attachShader(x,S),a.attachShader(x,E),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(E).trim();let i=!0,r=!0;if(!1===a.getProgramParameter(x,35714)){i=!1;const e=hs(a,S,"vertex"),n=hs(a,E,"fragment");console.error("THREE.WebGLProgram: Shader Error "+a.getError()+" - VALIDATE_STATUS "+a.getProgramParameter(x,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:_},fragmentShader:{log:n,prefix:M}})}let A,L;return a.deleteShader(S),a.deleteShader(E),this.getUniforms=function(){return void 0===A&&(A=new as(a,x)),A},this.getAttributes=function(){return void 0===L&&(L=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r0,C=s.clearcoat>0;return{isWebGL2:h,shaderID:S,shaderName:s.type,vertexShader:E,fragmentShader:A,defines:s.defines,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:f,instancing:!0===_.isInstancedMesh,instancingColor:!0===_.isInstancedMesh&&null!==_.instanceColor,supportsVertexTextures:m,outputEncoding:null!==L?y(L.texture):t.outputEncoding,map:!!s.map,mapEncoding:y(s.map),matcap:!!s.matcap,matcapEncoding:y(s.matcap),envMap:!!w,envMapMode:w&&w.mapping,envMapEncoding:y(w),envMapCubeUV:!!w&&(w.mapping===l||w.mapping===c),lightMap:!!s.lightMap,lightMapEncoding:y(s.lightMap),aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,emissiveMapEncoding:y(s.emissiveMap),bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,clearcoat:C,clearcoatMap:C&&!!s.clearcoatMap,clearcoatRoughnessMap:C&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:C&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,specularColorMapEncoding:y(s.specularColorMap),alphaMap:!!s.alphaMap,alphaTest:R,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenColorMapEncoding:y(s.sheenColorMap),sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!_.geometry&&!!_.geometry.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!_.geometry&&!!_.geometry.attributes.color&&4===_.geometry.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:!!M,useFog:s.fog,fogExp2:M&&M.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:u,skinning:!0===_.isSkinnedMesh&&T>0,maxBones:T,useVertexTexture:d,morphTargets:!!_.geometry&&!!_.geometry.morphAttributes.position,morphNormals:!!_.geometry&&!!_.geometry.morphAttributes.normal,morphTargetsCount:_.geometry&&_.geometry.morphAttributes.position?_.geometry.morphAttributes.position.length:0,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,format:s.format,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&v.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,depthPacking:void 0!==s.depthPacking&&s.depthPacking,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:h||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:h||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:h||i.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(St(e.fragmentShader)),n.push(St(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||Rs),r.length>1&&r.sort(e||Cs),s.length>1&&s.sort(e||Cs)}}}function Is(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new Ps(t),e.set(n,[r])):i>=e.get(n).length?(r=new Ps(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function Ds(){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 zt,color:new rn};break;case"SpotLight":n={position:new zt,direction:new zt,color:new rn,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new zt,color:new rn,distance:0,decay:0};break;case"HemisphereLight":n={direction:new zt,skyColor:new rn,groundColor:new rn};break;case"RectAreaLight":n={color:new rn,position:new zt,halfWidth:new zt,halfHeight:new zt}}return t[e.id]=n,n}}}let Ns=0;function zs(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Bs(t,e){const n=new Ds,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 yt};break;case"PointLight":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new yt,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 zt);const s=new zt,a=new de,o=new de;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(zs);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=mi.LTC_FLOAT_1,r.rectAreaLTC2=mi.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=mi.LTC_HALF_1,r.rectAreaLTC2=mi.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=Ns++)},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 Fs(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Us extends Ze{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.fog=!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}}Us.prototype.isMeshDepthMaterial=!0;class Hs extends Ze{constructor(t){super(),this.type="MeshDistanceMaterial",this.referencePosition=new zt,this.nearDistance=1,this.farDistance=1e3,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.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 Gs(t,e,n){let i=new ci;const r=new yt,s=new yt,a=new Ct,o=new Us({depthPacking:3201}),l=new Hs,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new Zn({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new yt},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=d.clone();m.defines.HORIZONTAL_PASS=1;const f=new En;f.setAttribute("position",new ln(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new Wn(f,d),y=this;function x(n,i){const r=e.update(v);d.defines.VSM_SAMPLES!==n.blurSamples&&(d.defines.VSM_SAMPLES=n.blurSamples,m.defines.VSM_SAMPLES=n.blurSamples,d.needsUpdate=!0,m.needsUpdate=!0),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 _(e,n,i,r,s,a,h){let d=null;const p=!0===r.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===r.isPointLight?l:o,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=d.clone(),n[e]=r),d=r}return d.visible=i.visible,d.wireframe=i.wireframe,d.side=3===h?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:u[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,d.clipShadows=i.clipShadows,d.clippingPlanes=i.clippingPlanes,d.clipIntersection=i.clipIntersection,d.displacementMap=i.displacementMap,d.displacementScale=i.displacementScale,d.displacementBias=i.displacementBias,d.wireframeLinewidth=i.wireframeLinewidth,d.linewidth=i.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=s,d.farDistance=a),d}function M(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 Pt(r.x,r.y,t),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Pt(r.x,r.y,t),u.camera.updateProjectionMatrix()}if(null===u.map){const t={minFilter:p,magFilter:p,format:E};u.map=new Pt(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 I=t.getParameter(3088),D=t.getParameter(2978),N=(new Ct).fromArray(I),z=(new Ct).fromArray(D);function B(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?gt:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===P&&(P=D(s,a));const o=n?D(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 z(t){return mt(t.width)&&mt(t.height)}function B(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,s){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 a=i;return 6403===i&&(5126===r&&(a=33326),5131===r&&(a=33325),5121===r&&(a=33321)),6407===i&&(5126===r&&(a=34837),5131===r&&(a=34843),5121===r&&(a=32849)),6408===i&&(5126===r&&(a=34836),5131===r&&(a=34842),5121===r&&(a=s===Y?35907:32856)),33325!==a&&33326!==a&&34842!==a&&34836!==a||e.get("EXT_color_buffer_float"),a}function U(t){return t===p||t===m||t===f?9728:9729}function H(e){const n=e.target;n.removeEventListener("dispose",H),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 Z(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;J(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=z(u)||o,p=s.convert(i.format),m=s.convert(i.type),f=O(i.internalFormat,p,m,i.encoding);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 J(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",H),e.__webglTexture=t.createTexture(),a.memory.textures++)}function Z(e,i,r){let a=3553;i.isDataTexture2DArray&&(a=35866),i.isDataTexture3D&&(a=32879),J(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===z(i.image),c=N(i.image,l,!1,x),h=z(c)||o,d=s.convert(i.format);let m,f=s.convert(i.type),v=O(i.internalFormat,d,f,i.encoding);X(a,i,h);const y=i.mipmaps;if(i.isDepthTexture)v=6402,o?v=i.type===b?36012:i.type===M?33190:i.type===S?35056:33189:i.type===b&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),i.format===A&&6402===v&&i.type!==_&&i.type!==M&&(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?Z(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?Z(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=z(e)||o;if(!o||l.format!==T||l.type!==b&&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 Js 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,d=null,p=!1,m=null,f=null,g=null,v=null,y=null,x=null;const _=[],M=new Map,b=new Kn;b.layers.enable(1),b.viewport=new Ct;const w=new Kn;w.layers.enable(2),w.viewport=new Ct;const S=[b,w],T=new js;T.layers.enable(1),T.layers.enable(2);let E=null,A=null;function L(t){const e=M.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function R(){M.forEach((function(t,e){t.disconnect(e)})),M.clear(),E=null,A=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),h&&e.deleteFramebuffer(h),m&&e.deleteFramebuffer(m),f&&e.deleteRenderbuffer(f),g&&e.deleteRenderbuffer(g),h=null,m=null,f=null,g=null,d=null,u=null,c=null,r=null,z.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function C(t){const e=r.inputSources;for(let t=0;t<_.length;t++)M.set(e[t],_[t]);for(let e=0;e0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r&&(e.maxMipLevel.value=r)}let r,s;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap?r=n.clearcoatRoughnessMap:n.specularIntensityMap?r=n.specularIntensityMap:n.specularColorMap?r=n.specularColorMap:n.transmissionMap?r=n.transmissionMap:n.thicknessMap?r=n.thicknessMap:n.sheenColorMap?r=n.sheenColorMap:n.sheenRoughnessMap&&(r=n.sheenRoughnessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap&&(s=n.lightMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,1===n.side&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),1===n.side&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}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?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);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.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);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.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),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=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,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);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 Qs(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=wt("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,M=0,S=0,T=null,A=-1,L=null;const R=new Ct,C=new Ct;let P=null,I=e.width,D=e.height,N=1,z=null,B=null;const F=new Ct(0,0,I,D),O=new Ct(0,0,I,D);let U=!1;const H=[],G=new ci;let k=!1,V=!1,W=null;const j=new de,q=new zt,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,xt=n;function _t(t,n){for(let i=0;i0&&function(t,e,n){if(null===W){const t=!0===a&&!0===Q.isWebGL2;W=new(t?Dt:Pt)(1024,1024,{generateMipmaps:!0,type:null!==vt.convert(w)?w:x,minFilter:y,magFilter:p,wrapS:u,wrapT:u})}const i=v.getRenderTarget();v.setRenderTarget(W),v.clear();const r=v.toneMapping;v.toneMapping=0,Ft(t,e,n),v.toneMapping=r,et.updateMultisampleRenderTarget(W),et.updateRenderTargetMipmap(W),v.setRenderTarget(i)}(r,e,n),i&&K.viewport(R.copy(i)),r.length>0&&Ft(r,e,n),s.length>0&&Ft(s,e,n),o.length>0&&Ft(o,e,n)}function Ft(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r0?g[g.length-1]:null,f.pop(),d=f.length>0?f[f.length-1]:null},this.getActiveCubeFace=function(){return M},this.getActiveMipmapLevel=function(){return S},this.getRenderTarget=function(){return T},this.setRenderTarget=function(t,e=0,n=0){T=t,M=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=U;if(K.bindFramebuffer(36160,i)&&Q.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(H.length!==n.length||36064!==H[0]){for(let t=0,e=n.length;t=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&xt.readPixels(e,n,i,r,vt.convert(o),vt.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=vt.convert(e.format);Q.isWebGL2&&(6407===a&&(a=32849),6408===a&&(a=32856)),et.setTexture2D(e,0),xt.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=vt.convert(n.format),o=vt.convert(n.type);et.setTexture2D(n,0),xt.pixelStorei(37440,n.flipY),xt.pixelStorei(37441,n.premultiplyAlpha),xt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?xt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?xt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):xt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i&&n.generateMipmaps&&xt.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=vt.convert(i.format),c=vt.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}xt.pixelStorei(37440,i.flipY),xt.pixelStorei(37441,i.premultiplyAlpha),xt.pixelStorei(3317,i.unpackAlignment);const u=xt.getParameter(3314),d=xt.getParameter(32878),p=xt.getParameter(3316),m=xt.getParameter(3315),f=xt.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;xt.pixelStorei(3314,g.width),xt.pixelStorei(32878,g.height),xt.pixelStorei(3316,t.min.x),xt.pixelStorei(3315,t.min.y),xt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?xt.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."),xt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):xt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),xt.pixelStorei(3314,u),xt.pixelStorei(32878,d),xt.pixelStorei(3316,p),xt.pixelStorei(3315,m),xt.pixelStorei(32877,f),0===r&&i.generateMipmaps&&xt.generateMipmap(h),K.unbindTexture()},this.initTexture=function(t){et.setTexture2D(t,0),K.unbindTexture()},this.resetState=function(){M=0,S=0,T=null,K.reset(),yt.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}Qs.prototype.isWebGLRenderer=!0;class Ks extends Qs{}Ks.prototype.isWebGL1Renderer=!0;class $s{constructor(t,e=25e-5){this.name="",this.color=new rn(t),this.density=e}clone(){return new $s(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}$s.prototype.isFogExp2=!0;class ta{constructor(t,e=1,n=1e3){this.name="",this.color=new rn(t),this.near=e,this.far=n}clone(){return new ta(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}ta.prototype.isFog=!0;class ea extends Fe{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}}ea.prototype.isScene=!0;class na{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=ht()}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:oa.clone(),uv:Ye.getUV(oa,pa,ma,fa,ga,va,ya,new yt),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 _a(t,e,n,i,r,s){ha.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(ua.x=s*ha.x-r*ha.y,ua.y=r*ha.x+s*ha.y):ua.copy(ha),t.copy(e),t.x+=ua.x,t.y+=ua.y,t.applyMatrix4(da)}xa.prototype.isSprite=!0;const Ma=new zt,ba=new zt;class wa extends Fe{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){Ma.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Ma);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){Ma.setFromMatrixPosition(t.matrixWorld),ba.setFromMatrixPosition(this.matrixWorld);const n=Ma.distanceTo(ba)/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.")}}}Xa.prototype.isLine=!0;const Ya=new zt,Ja=new zt;class Za extends Xa{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 ro(t,e,n,i,r,s,a){const o=to.distanceSqToPoint(t);if(or.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}io.prototype.isPoints=!0;class so extends Lt{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)}}so.prototype.isVideoTexture=!0;class ao extends Lt{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}}ao.prototype.isCompressedTexture=!0;class oo extends Lt{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}oo.prototype.isCanvasTexture=!0;class lo extends Lt{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}}lo.prototype.isDepthTexture=!0;class co extends En{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 zt,c=new yt;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 vn(s,3)),this.setAttribute("normal",new vn(a,3)),this.setAttribute("uv",new vn(o,2))}static fromJSON(t){return new co(t.radius,t.segments,t.thetaStart,t.thetaLength)}}class ho extends En{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 yt,m=new zt;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 vn(h,3)),this.setAttribute("normal",new vn(u,3)),this.setAttribute("uv",new vn(d,2))}static fromJSON(t){return new ho(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class uo extends ho{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 uo(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class po extends En{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 vn(r,3)),this.setAttribute("normal",new vn(r.slice(),3)),this.setAttribute("uv",new vn(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new po(t.vertices,t.indices,t.radius,t.details)}}class mo extends po{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 mo(t.radius,t.detail)}}const fo=new zt,go=new zt,vo=new zt,yo=new Ye;class xo extends En{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(at*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;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 yt:new zt);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 zt,i=[],r=[],s=[],a=new zt,o=new de;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new zt)}r[0]=new zt,s[0]=new zt;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(ut(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(ut(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 Mo extends _o{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 yt,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]:(So.subVectors(i[0],i[1]).add(i[0]),a=So);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 ko extends Go{constructor(t){super(t),this.uuid=ht(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n80*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 qo(s,a,n,o,l,p),a};function Wo(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=ul(s,t[s],t[s+1],a);return a&&sl(a,a.next)&&(dl(a),a=a.next),a}function jo(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!sl(i,i.next)&&0!==rl(i.prev,i,i.next))i=i.next;else{if(dl(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function qo(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=tl(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?Yo(t,i,r,s):Xo(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),dl(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?qo(t=Jo(jo(t),e,n),e,n,i,r,s,2):2===a&&Zo(t,e,n,i,r,s):qo(jo(t),e,n,i,r,s,1);break}}function Xo(t){const e=t.prev,n=t,i=t.next;if(rl(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(nl(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&rl(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function Yo(t,e,n,i){const r=t.prev,s=t,a=t.next;if(rl(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=tl(o,l,e,n,i),d=tl(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&&nl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&rl(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&nl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&rl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==t.prev&&p!==t.next&&nl(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&rl(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&nl(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&rl(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function Jo(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!sl(r,s)&&al(r,i,i.next,s)&&cl(r,s)&&cl(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),dl(i),dl(i.next),i=t=s),i=i.next}while(i!==t);return jo(i)}function Zo(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&il(a,t)){let o=hl(a,t);return a=jo(a,a.next),o=jo(o,o.next),qo(a,e,n,i,r,s),void qo(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function Qo(t,e){return t.x-e.x}function Ko(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&&nl(rs.x||n.x===s.x&&$o(s,n)))&&(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e),e){const n=hl(e,t);jo(e,e.next),jo(n,n.next)}}function $o(t,e){return rl(t.prev,t,e.prev)<0&&rl(e.next,t,t.next)<0}function tl(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 el(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 il(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&&al(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(cl(t,e)&&cl(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)&&(rl(t.prev,t,e.prev)||rl(t,e.prev,e))||sl(t,e)&&rl(t.prev,t,t.next)>0&&rl(e.prev,e,e.next)>0)}function rl(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function sl(t,e){return t.x===e.x&&t.y===e.y}function al(t,e,n,i){const r=ll(rl(t,e,n)),s=ll(rl(t,e,i)),a=ll(rl(n,i,t)),o=ll(rl(n,i,e));return r!==s&&a!==o||(!(0!==r||!ol(t,n,e))||(!(0!==s||!ol(t,i,e))||(!(0!==a||!ol(n,t,i))||!(0!==o||!ol(n,e,i)))))}function ol(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 ll(t){return t>0?1:t<0?-1:0}function cl(t,e){return rl(t.prev,t,t.next)<0?rl(t,e,t.next)>=0&&rl(t,t.prev,e)>=0:rl(t,e,t.prev)<0||rl(t,t.next,e)<0}function hl(t,e){const n=new pl(t.i,t.x,t.y),i=new pl(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 ul(t,e,n,i){const r=new pl(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 dl(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 pl(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 ml{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 gl(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 yt(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 yt(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}}Nl.prototype.isMeshPhysicalMaterial=!0;class zl extends Ze{constructor(t){super(),this.type="MeshPhongMaterial",this.color=new rn(16777215),this.specular=new rn(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new rn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new yt(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.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}}zl.prototype.isMeshPhongMaterial=!0;class Bl extends Ze{constructor(t){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new rn(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new rn(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new yt(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.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}}Bl.prototype.isMeshToonMaterial=!0;class Fl extends Ze{constructor(t){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new yt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!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}}Fl.prototype.isMeshNormalMaterial=!0;class Ol extends Ze{constructor(t){super(),this.type="MeshLambertMaterial",this.color=new rn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new rn(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.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}}Ol.prototype.isMeshLambertMaterial=!0;class Ul extends Ze{constructor(t){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new rn(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new yt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,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}}Ul.prototype.isMeshMatcapMaterial=!0;class Hl extends Ga{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}}Hl.prototype.isLineDashedMaterial=!0;var Gl=Object.freeze({__proto__:null,ShadowMaterial:Il,SpriteMaterial:sa,RawShaderMaterial:wi,ShaderMaterial:Zn,PointsMaterial:Ka,MeshPhysicalMaterial:Nl,MeshStandardMaterial:Dl,MeshPhongMaterial:zl,MeshToonMaterial:Bl,MeshNormalMaterial:Fl,MeshLambertMaterial:Ol,MeshDepthMaterial:Us,MeshDistanceMaterial:Hs,MeshBasicMaterial:sn,MeshMatcapMaterial:Ul,LineDashedMaterial:Hl,LineBasicMaterial:Ga,Material:Ze});const kl={arraySlice:function(t,e,n){return kl.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=kl.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=kl.arraySlice(t.resultBuffer,e,n)}if("quaternion"===r){(new Nt).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=kl.arraySlice(n,r,s),this.values=kl.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&&kl.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=kl.arraySlice(this.times),e=kl.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=kl.arraySlice(t,0,s),this.values=kl.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=kl.arraySlice(this.times,0),e=kl.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Xl.prototype.TimeBufferType=Float32Array,Xl.prototype.ValueBufferType=Float32Array,Xl.prototype.DefaultInterpolation=H;class Yl extends Xl{}Yl.prototype.ValueTypeName="bool",Yl.prototype.ValueBufferType=Array,Yl.prototype.DefaultInterpolation=U,Yl.prototype.InterpolantFactoryMethodLinear=void 0,Yl.prototype.InterpolantFactoryMethodSmooth=void 0;class Jl extends Xl{}Jl.prototype.ValueTypeName="color";class Zl extends Xl{}Zl.prototype.ValueTypeName="number";class Ql extends Vl{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)Nt.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Kl extends Xl{InterpolantFactoryMethodLinear(t){return new Ql(this.times,this.values,this.getValueSize(),t)}}Kl.prototype.ValueTypeName="quaternion",Kl.prototype.DefaultInterpolation=H,Kl.prototype.InterpolantFactoryMethodSmooth=void 0;class $l extends Xl{}$l.prototype.ValueTypeName="string",$l.prototype.ValueBufferType=Array,$l.prototype.DefaultInterpolation=U,$l.prototype.InterpolantFactoryMethodLinear=void 0,$l.prototype.InterpolantFactoryMethodSmooth=void 0;class tc extends Xl{}tc.prototype.ValueTypeName="vector";class ec{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=ht(),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(nc(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(Xl.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=[];kl.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!==oc[t])return void oc[t].push({onLoad:e,onProgress:n,onError:i});oc[t]=[],oc[t].push({onLoad:e,onProgress:n,onError:i});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"});fetch(s).then((e=>{if(200===e.status||0===e.status){0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");const n=oc[t],i=e.body.getReader(),r=e.headers.get("Content-Length"),s=r?parseInt(r):0,a=0!==s;let o=0;return 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{const e=new Response(t);switch(this.responseType){case"arraybuffer":return e.arrayBuffer();case"blob":return e.blob();case"document":return e.text().then((t=>(new DOMParser).parseFromString(t,this.mimeType)));case"json":return e.json();default:return e.text()}})).then((e=>{ic.add(t,e);const n=oc[t];delete oc[t];for(let t=0,i=n.length;t{const n=oc[t];delete oc[t];for(let t=0,i=n.length;t0: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 rn).setHex(r.value);break;case"v2":i.uniforms[e].value=(new yt).fromArray(r.value);break;case"v3":i.uniforms[e].value=(new zt).fromArray(r.value);break;case"v4":i.uniforms[e].value=(new Ct).fromArray(r.value);break;case"m3":i.uniforms[e].value=(new xt).fromArray(r.value);break;case"m4":i.uniforms[e].value=(new de).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 yt).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 yt).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 Dc{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){Nt.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;Nt.multiplyQuaternionsFlat(t,s,t,e,t,n),Nt.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 ah="\\[\\]\\.:\\/",oh=new RegExp("[\\[\\]\\.:\\/]","g"),lh="[^\\[\\]\\.:\\/]",ch="[^"+ah.replace("\\.","")+"]",hh=/((?:WC+[\/:])*)/.source.replace("WC",lh),uh=/(WCOD+)?/.source.replace("WCOD",ch),dh=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",lh),ph=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",lh),mh=new RegExp("^"+hh+uh+dh+ph+"$"),fh=["material","materials","bones"];class gh{constructor(t,e,n){this.path=e,this.parsedPath=n||gh.parseTrackName(e),this.node=gh.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 gh.Composite(t,e,n):new gh(t,e,n)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(oh,"")}static parseTrackName(t){const e=mh.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!==fh.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 gh(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()}}}vh.prototype.isAnimationObjectGroup=!0;class yh{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;if(this.blendMode===q)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=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 xh 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 sh(gh.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 Th.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)}}Eh.prototype.isBox2=!0;const Ah=new zt,Lh=new zt;class Rh{constructor(t=new zt,e=new zt){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){Ah.subVectors(t,this.start),Lh.subVectors(this.end,this.start);const n=Lh.dot(Lh);let i=Lh.dot(Ah)/n;return e&&(i=ut(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 Ch=new zt;const Ph=new zt,Ih=new de,Dh=new de;class Nh extends Za{constructor(t){const e=zh(t),n=new En,i=[],r=[],s=new rn(0,0,1),a=new rn(0,1,0);for(let t=0;t.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{Yh.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(Yh,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=$c,t.AudioAnalyser=rh,t.AudioContext=Gc,t.AudioListener=class extends Fe{constructor(){super(),this.type="AudioListener",this.context=Gc.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Xc}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(Jc,Zc,Qc),Kc.set(0,0,-1).applyQuaternion(Zc),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(Jc.x,t),e.positionY.linearRampToValueAtTime(Jc.y,t),e.positionZ.linearRampToValueAtTime(Jc.z,t),e.forwardX.linearRampToValueAtTime(Kc.x,t),e.forwardY.linearRampToValueAtTime(Kc.y,t),e.forwardZ.linearRampToValueAtTime(Kc.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(Jc.x,Jc.y,Jc.z),e.setOrientation(Kc.x,Kc.y,Kc.z,n.x,n.y,n.z)}},t.AudioLoader=kc,t.AxesHelper=Qh,t.AxisHelper=function(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new Qh(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 uc(t)},t.Bone=Ca,t.BooleanKeyframeTrack=Yl,t.BoundingBoxHelper=function(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new Xh(t,e)},t.Box2=Eh,t.Box3=Ot,t.Box3Helper=class extends Za{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 En;i.setIndex(new ln(n,1)),i.setAttribute("position",new vn([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 Ga({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=qn,t.BoxGeometry=qn,t.BoxHelper=Xh,t.BufferAttribute=ln,t.BufferGeometry=En,t.BufferGeometryLoader=zc,t.ByteType=1010,t.Cache=ic,t.Camera=Qn,t.CameraHelper=class extends Za{constructor(t){const e=new En,n=new Ga({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new rn(16755200),o=new rn(16711680),l=new rn(43775),c=new rn(16777215),h=new rn(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 vn(i,3)),e.setAttribute("color",new vn(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;Wh.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),jh("c",e,t,Wh,0,0,-1),jh("t",e,t,Wh,0,0,1),jh("n1",e,t,Wh,-1,-1,-1),jh("n2",e,t,Wh,1,-1,-1),jh("n3",e,t,Wh,-1,1,-1),jh("n4",e,t,Wh,1,1,-1),jh("f1",e,t,Wh,-1,-1,1),jh("f2",e,t,Wh,1,-1,1),jh("f3",e,t,Wh,-1,1,1),jh("f4",e,t,Wh,1,1,1),jh("u1",e,t,Wh,.7,1.1,-1),jh("u2",e,t,Wh,-.7,1.1,-1),jh("u3",e,t,Wh,0,2,-1),jh("cf1",e,t,Wh,-1,0,1),jh("cf2",e,t,Wh,1,0,1),jh("cf3",e,t,Wh,0,-1,1),jh("cf4",e,t,Wh,0,1,1),jh("cn1",e,t,Wh,-1,0,-1),jh("cn2",e,t,Wh,1,0,-1),jh("cn3",e,t,Wh,0,-1,-1),jh("cn4",e,t,Wh,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=oo,t.CatmullRomCurve3=Lo,t.CineonToneMapping=3,t.CircleBufferGeometry=co,t.CircleGeometry=co,t.ClampToEdgeWrapping=u,t.Clock=Xc,t.Color=rn,t.ColorKeyframeTrack=Jl,t.CompressedTexture=ao,t.CompressedTextureLoader=class extends ac{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new ao,o=new lc(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;e65504&&(console.warn("THREE.DataUtils.toHalfFloat(): value exceeds 65504."),t=65504),Kh[0]=t;const e=$h[0];let n=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=sc,t.DepthFormat=A,t.DepthStencilFormat=L,t.DepthTexture=lo,t.DirectionalLight=Ac,t.DirectionalLightHelper=class extends Fe{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 En;i.setAttribute("position",new vn([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new Ga({fog:!1,toneMapped:!1});this.lightPlane=new Xa(i,r),this.add(this.lightPlane),i=new En,i.setAttribute("position",new vn([0,0,0,0,0,1],3)),this.targetLine=new Xa(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(){Hh.setFromMatrixPosition(this.light.matrixWorld),Gh.setFromMatrixPosition(this.light.target.matrixWorld),kh.subVectors(Gh,Hh),this.lightPlane.lookAt(Gh),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(Gh),this.targetLine.scale.z=kh.length()}},t.DiscreteInterpolant=ql,t.DodecahedronBufferGeometry=mo,t.DodecahedronGeometry=mo,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 ln(t,e).setUsage(nt)},t.DynamicCopyUsage=35050,t.DynamicDrawUsage=nt,t.DynamicReadUsage=35049,t.EdgesGeometry=xo,t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new Za(new xo(t.geometry),new Ga({color:void 0!==e?e:16777215}))},t.EllipseCurve=Mo,t.EqualDepth=4,t.EqualStencilFunc=514,t.EquirectangularReflectionMapping=a,t.EquirectangularRefractionMapping=o,t.Euler=be,t.EventDispatcher=rt,t.ExtrudeBufferGeometry=vl,t.ExtrudeGeometry=vl,t.FaceColors=1,t.FileLoader=lc,t.FlatShading=1,t.Float16BufferAttribute=gn,t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new vn(t,e)},t.Float32BufferAttribute=vn,t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new yn(t,e)},t.Float64BufferAttribute=yn,t.FloatType=b,t.Fog=ta,t.FogExp2=$s,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.FrontSide=0,t.Frustum=ci,t.GLBufferAttribute=bh,t.GLSL1="100",t.GLSL3=it,t.GammaEncoding=J,t.GreaterDepth=6,t.GreaterEqualDepth=5,t.GreaterEqualStencilFunc=518,t.GreaterStencilFunc=516,t.GridHelper=Uh,t.Group=qs,t.HalfFloatType=w,t.HemisphereLight=mc,t.HemisphereLightHelper=class extends Fe{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Ml(e);i.rotateY(.5*Math.PI),this.material=new sn({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 ln(s,3)),this.add(new Wn(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");Fh.copy(this.light.color),Oh.copy(this.light.groundColor);for(let t=0,n=e.count;t0){const n=new rc(e);r=new cc(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e0){i=new cc(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=ml.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 ko,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;t 0 ) { const poseNodes = BindPoseNode[ nodeID ].PoseNode; @@ -1336,71 +1359,6 @@ } - setupMorphMaterials() { - - const scope = this; - sceneGraph.traverse( function ( child ) { - - if ( child.isMesh ) { - - if ( child.geometry.morphAttributes.position && child.geometry.morphAttributes.position.length ) { - - if ( Array.isArray( child.material ) ) { - - child.material.forEach( function ( material, i ) { - - scope.setupMorphMaterial( child, material, i ); - - } ); - - } else { - - scope.setupMorphMaterial( child, child.material ); - - } - - } - - } - - } ); - - } - - setupMorphMaterial( child, material, index ) { - - const uuid = child.uuid; - const matUuid = material.uuid; // if a geometry has morph targets, it cannot share the material with other geometries - - let sharedMat = false; - sceneGraph.traverse( function ( node ) { - - if ( node.isMesh ) { - - if ( Array.isArray( node.material ) ) { - - node.material.forEach( function ( mat ) { - - if ( mat.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; - - } ); - - } else if ( node.material.uuid === matUuid && node.uuid !== uuid ) sharedMat = true; - - } - - } ); - - if ( sharedMat === true ) { - - const clonedMat = material.clone(); - clonedMat.morphTargets = true; - if ( index === undefined ) child.material = clonedMat; else child.material[ index ] = clonedMat; - - } else material.morphTargets = true; - - } - } // parse Geometry data from FBXTree and return map of BufferGeometries @@ -2151,16 +2109,8 @@ } const curve = new THREE.NURBSCurve( degree, knots, controlPoints, startKnot, endKnot ); - const vertices = curve.getPoints( controlPoints.length * 7 ); - const positions = new Float32Array( vertices.length * 3 ); - vertices.forEach( function ( vertex, i ) { - - vertex.toArray( positions, i * 3 ); - - } ); - const geometry = new THREE.BufferGeometry(); - geometry.setAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) ); - return geometry; + const points = curve.getPoints( controlPoints.length * 12 ); + return new THREE.BufferGeometry().setFromPoints( points ); } @@ -3745,16 +3695,15 @@ } - const lLRM = new THREE.Matrix4().copy( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ); // Global Rotation + const lLRM = lPreRotationM.clone().multiply( lRotationM ).multiply( lPostRotationM ); // Global Rotation const lParentGRM = new THREE.Matrix4(); lParentGRM.extractRotation( lParentGX ); // Global Shear*Scaling const lParentTM = new THREE.Matrix4(); lParentTM.copyPosition( lParentGX ); - const lParentGSM = new THREE.Matrix4(); - const lParentGRSM = new THREE.Matrix4().copy( lParentTM ).invert().multiply( lParentGX ); - lParentGSM.copy( lParentGRM ).invert().multiply( lParentGRSM ); + const lParentGRSM = lParentTM.clone().invert().multiply( lParentGX ); + const lParentGSM = lParentGRM.clone().invert().multiply( lParentGRSM ); const lLSM = lScalingM; const lGlobalRS = new THREE.Matrix4(); @@ -3769,23 +3718,20 @@ } else { const lParentLSM = new THREE.Matrix4().scale( new THREE.Vector3().setFromMatrixScale( lParentLX ) ); - const lParentLSM_inv = new THREE.Matrix4().copy( lParentLSM ).invert(); - const lParentGSM_noLocal = new THREE.Matrix4().copy( lParentGSM ).multiply( lParentLSM_inv ); + const lParentLSM_inv = lParentLSM.clone().invert(); + const lParentGSM_noLocal = lParentGSM.clone().multiply( lParentLSM_inv ); lGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM ); } - const lRotationPivotM_inv = new THREE.Matrix4(); - lRotationPivotM_inv.copy( lRotationPivotM ).invert(); - const lScalingPivotM_inv = new THREE.Matrix4(); - lScalingPivotM_inv.copy( lScalingPivotM ).invert(); // Calculate the local transform matrix + const lRotationPivotM_inv = lRotationPivotM.clone().invert(); + const lScalingPivotM_inv = lScalingPivotM.clone().invert(); // Calculate the local transform matrix - let lTransform = new THREE.Matrix4(); - lTransform.copy( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); + let lTransform = lTranslationM.clone().multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv ); const lLocalTWithAllPivotAndOffsetInfo = new THREE.Matrix4().copyPosition( lTransform ); - const lGlobalTranslation = new THREE.Matrix4().copy( lParentGX ).multiply( lLocalTWithAllPivotAndOffsetInfo ); + const lGlobalTranslation = lParentGX.clone().multiply( lLocalTWithAllPivotAndOffsetInfo ); lGlobalT.copyPosition( lGlobalTranslation ); - lTransform = new THREE.Matrix4().copy( lGlobalT ).multiply( lGlobalRS ); // from global to local + lTransform = lGlobalT.clone().multiply( lGlobalRS ); // from global to local lTransform.premultiply( lParentGX.invert() ); return lTransform; diff --git a/sandbox/embed_selfhost_errors.html b/sandbox/embed_selfhost_errors.html index 4400631..76285f2 100644 --- a/sandbox/embed_selfhost_errors.html +++ b/sandbox/embed_selfhost_errors.html @@ -7,7 +7,7 @@ Online 3D Viewer - + @@ -99,7 +99,7 @@

+ diff --git a/sandbox/embed_selfhost_externallibs.html b/sandbox/embed_selfhost_externallibs.html index f3febda..b3da610 100644 --- a/sandbox/embed_selfhost_externallibs.html +++ b/sandbox/embed_selfhost_externallibs.html @@ -7,7 +7,7 @@ Online 3D Viewer - + @@ -95,17 +95,23 @@
+ model="../../test/testfiles/gltf/Box/glTF-Binary/Box.glb" + environmentmap="../website/assets/envmaps/fishermans_bastion/posx.jpg,../website/assets/envmaps/fishermans_bastion/negx.jpg,../website/assets/envmaps/fishermans_bastion/posy.jpg,../website/assets/envmaps/fishermans_bastion/negy.jpg,../website/assets/envmaps/fishermans_bastion/posz.jpg,../website/assets/envmaps/fishermans_bastion/negz.jpg"> +
+
-
+
-
+
diff --git a/sandbox/embed_selfhost_fullscreen.html b/sandbox/embed_selfhost_fullscreen.html index 5ab20d6..566005d 100644 --- a/sandbox/embed_selfhost_fullscreen.html +++ b/sandbox/embed_selfhost_fullscreen.html @@ -4,10 +4,10 @@ - + Online 3D Viewer - - + + diff --git a/sandbox/embed_selfhost_manual.html b/sandbox/embed_selfhost_manual.html index 0cd6cc7..36027a1 100644 --- a/sandbox/embed_selfhost_manual.html +++ b/sandbox/embed_selfhost_manual.html @@ -7,7 +7,7 @@ Online 3D Viewer - + @@ -80,7 +80,7 @@ border: 1px solid #eeeeee; margin: 0px 4px 4px 0px; } - + diff --git a/sandbox/embed_selfhost_multiple.html b/sandbox/embed_selfhost_multiple.html index 2b9f96d..046fc58 100644 --- a/sandbox/embed_selfhost_multiple.html +++ b/sandbox/embed_selfhost_multiple.html @@ -7,7 +7,7 @@ Online 3D Viewer - + @@ -102,7 +102,7 @@
-
+
- + Online 3D Viewer - - + + diff --git a/sandbox/embed_selfhost_single_scroll.html b/sandbox/embed_selfhost_single_scroll.html index 2fe298a..14318ae 100644 --- a/sandbox/embed_selfhost_single_scroll.html +++ b/sandbox/embed_selfhost_single_scroll.html @@ -4,10 +4,10 @@ - + Online 3D Viewer - - + + diff --git a/sandbox/invalid_driver_detector.html b/sandbox/invalid_driver_detector.html index e9f602e..7270cc5 100644 --- a/sandbox/invalid_driver_detector.html +++ b/sandbox/invalid_driver_detector.html @@ -7,7 +7,7 @@ Online 3D Viewer - + + - + diff --git a/website/index.html b/website/index.html index d0c7607..ba54f4d 100644 --- a/website/index.html +++ b/website/index.html @@ -12,7 +12,7 @@ - +