three-low-poly 0.9.22 → 0.9.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "three-low-poly",
3
- "version": "0.9.22",
3
+ "version": "0.9.24",
4
4
  "description": "Low poly modeling for Three.js",
5
5
  "author": "Jason Sturges <jason@jsonsturges.com> (https://jasonsturges.com)",
6
6
  "homepage": "https://jasonsturges.com/three-low-poly/",
7
- "repository": "github:jasonsturges/three-low-poly",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/jasonsturges/three-low-poly.git"
10
+ },
8
11
  "license": "ISC",
9
12
  "publishConfig": {
10
13
  "access": "public",
@@ -17,17 +20,15 @@
17
20
  "assets",
18
21
  "3d"
19
22
  ],
23
+ "main": "./dist/index.cjs",
24
+ "module": "./dist/index.mjs",
25
+ "types": "./dist/index.d.ts",
20
26
  "type": "module",
21
- "types": "dist/index.d.ts",
22
- "main": "./dist/index.cjs.js",
23
- "module": "./dist/index.es.js",
24
27
  "exports": {
25
28
  ".": {
26
- "require": "./dist/index.cjs.js",
27
- "import": "./dist/index.es.js",
28
- "browser": "./dist/index.iife.js",
29
- "umd": "./dist/index.umd.js",
30
- "types": "./dist/index.d.ts"
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.mjs",
31
+ "require": "./dist/index.cjs"
31
32
  }
32
33
  },
33
34
  "files": [
@@ -36,21 +37,22 @@
36
37
  "scripts": {
37
38
  "dev": "vite build --watch",
38
39
  "build": "tsc && vite build",
39
- "start:examples": "vite --host --open --config vite-examples.config.js",
40
- "build:examples": "vite build --config vite-examples.config.js"
40
+ "host": "vite --config vite.host.config.ts",
41
+ "build:host": "vite build --config vite.host.config.ts",
42
+ "typecheck:host": "tsc --noEmit -p app/tsconfig.json"
41
43
  },
42
44
  "dependencies": {
43
- "lil-gui": "^0.19.2",
44
- "three": "^0.170.0",
45
- "three-stdlib": "^2.34.0"
45
+ "lil-gui": "^0.21.0",
46
+ "three": "^0.180.0",
47
+ "three-stdlib": "^2.36.0"
46
48
  },
47
49
  "devDependencies": {
48
- "@types/three": "^0.170.0",
50
+ "@types/node": "^24.7.2",
51
+ "@types/three": "^0.180.0",
49
52
  "prettier": "^3.3.3",
50
53
  "tslib": "^2.8.1",
51
- "typescript": "^5.6.3",
52
- "vite": "^5.4.10",
53
- "vite-plugin-dts": "^4.3.0",
54
- "vite-plugin-typescript": "^1.0.4"
54
+ "typescript": "^5.9.3",
55
+ "vite": "^7.1.9",
56
+ "vite-plugin-dts": "^4.5.4"
55
57
  }
56
58
  }
package/dist/index.cjs.js DELETED
@@ -1,292 +0,0 @@
1
- "use strict";var qt=Object.defineProperty;var Yt=(t,e,o)=>e in t?qt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var v=(t,e,o)=>Yt(t,typeof e!="symbol"?e+"":e,o);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("three");function Xt(t,e,o,r){const i=t.position.clone(),s=i.clone().add(t.getWorldDirection(new n.Vector3).multiplyScalar(-e));let a=null;function l(c){a===null&&(a=c);const m=(c-a)/o;if(m>=1){t.position.copy(s),r&&r();return}t.position.lerpVectors(i,s,m),requestAnimationFrame(l)}requestAnimationFrame(l)}function Zt(t,e,o,r){const i=e.length-1;let s=null;function a(l){s===null&&(s=l);const u=(l-s)/o;if(u>=1){t.position.copy(e[e.length-1]),r&&r();return}const m=u*i,h=Math.floor(m),d=m-h,f=e[h],p=e[h+1];t.position.lerpVectors(f,p,d),t.lookAt(p),requestAnimationFrame(a)}requestAnimationFrame(a)}function jt(t,e,o,r,i){let s=null;function a(l){s||(s=l);const u=(l-s)/r;if(u>=1){i&&i();return}const m=u*Math.PI*2,h=e.x+o*Math.cos(m),d=e.z+o*Math.sin(m);t.position.set(h,t.position.y,d),t.lookAt(e),requestAnimationFrame(a)}requestAnimationFrame(a)}function Qt(t,e,o,r,i,s){let a=null,l=0;function c(u){a===null&&(a=u);const m=u-a,h=r/i,d=m%h/h,f=Math.sin(d*Math.PI*2)*Math.PI/6,p=e.x+o*Math.sin(f),M=e.z+o*Math.cos(f);if(t.position.set(p,t.position.y,M),t.lookAt(e),m>=(l+1)*h&&l++,l>=i){s&&s();return}requestAnimationFrame(c)}requestAnimationFrame(c)}function Kt(t,e,o,r,i,s,a){let l=null;function c(u){l===null&&(l=u);const h=(u-l)/s;if(h>=1){a&&a();return}const d=h*Math.PI*2*i,f=e.x+o*Math.cos(d),p=e.z+o*Math.sin(d),M=e.y+r*h;t.position.set(f,M,p),t.lookAt(e),requestAnimationFrame(c)}requestAnimationFrame(c)}function Wt(t,e,o,r){const i=t.position.clone();let s=null;function a(l){if(s===null&&(s=l),(l-s)/o>=1){t.position.copy(i),r&&r();return}const m=new n.Vector3((Math.random()-.5)*e,(Math.random()-.5)*e,(Math.random()-.5)*e);t.position.copy(i).add(m),requestAnimationFrame(a)}requestAnimationFrame(a)}function Jt(t,e,o,r,i,s){const a=t.fov;t.fov=o,t.updateProjectionMatrix();let l=null;function c(u){l===null&&(l=u);const h=(u-l)/i;if(h>=1){t.fov=r,t.updateProjectionMatrix(),t.lookAt(e),t.fov=a,t.updateProjectionMatrix(),s&&s();return}t.fov=n.MathUtils.lerp(o,r,h),t.updateProjectionMatrix(),t.lookAt(e),requestAnimationFrame(c)}requestAnimationFrame(c)}class $t{constructor(e){v(this,"speed");v(this,"maxIntensity");v(this,"minIntensity");v(this,"material");const{speed:o=2,maxIntensity:r=.8,minIntensity:i=.2}=e;this.speed=o,this.maxIntensity=r,this.minIntensity=i,this.material=e.material}update(e=0){this.material.emissiveIntensity=this.minIntensity+Math.abs(Math.sin(e*this.speed))*(this.maxIntensity-this.minIntensity)}}function D(t=0,e=1){return Math.random()*(e-t)+t}function eo(t=0,e=1){return Math.floor(Math.random()*(e-t+1))+t}function $(t=.5,e=0,o=1){return e+(o-e)*Math.pow(Math.random(),t)}function ee(t=.5,e=0,o=1){return e+(o-e)*Math.pow(1-Math.random(),t)}class to{constructor({light:e,minIntensity:o=.8,maxIntensity:r=1.2,x:i=0,y:s=0,z:a=0,jitterX:l=.02,jitterY:c=0,jitterZ:u=.02}={}){v(this,"light");v(this,"minIntensity");v(this,"maxIntensity");v(this,"x");v(this,"y");v(this,"z");v(this,"jitterX");v(this,"jitterY");v(this,"jitterZ");this.light=e,this.minIntensity=o,this.maxIntensity=r,this.x=i,this.y=s,this.z=a,this.jitterX=l,this.jitterY=c,this.jitterZ=u}update(){this.light&&(this.light.intensity=D(this.minIntensity,this.maxIntensity),this.light.position.x=Math.random()*this.jitterX-this.jitterX/2+this.x,this.light.position.y=Math.random()*this.jitterY-this.jitterY/2+this.y,this.light.position.z=Math.random()*this.jitterZ-this.jitterZ/2+this.z)}}function te(t,e,o){const r=e+Math.random()*(o-e);return setTimeout(t,r)}function oo(t,e,o){let r;function i(){const s=e+Math.random()*(o-e);r=setTimeout(()=>{t(),i()},s)}return i(),()=>clearTimeout(r)}class no{constructor({light:e,minIntensity:o=15,maxIntensity:r=20,minDuration:i=50,maxDuration:s=250}={}){v(this,"light");v(this,"minIntensity");v(this,"maxIntensity");v(this,"minDuration");v(this,"maxDuration");this.light=e,this.minIntensity=o,this.maxIntensity=r,this.minDuration=i,this.maxDuration=s}triggerLightning(){this.light&&(this.light.intensity=D(this.minIntensity,this.maxIntensity)),te(()=>{this.light&&(this.light.intensity=0)},this.minDuration,this.maxDuration)}update(){Math.random()>.98&&this.triggerLightning()}}const R={UP:new n.Vector3(0,1,0),DOWN:new n.Vector3(0,-1,0),LEFT:new n.Vector3(-1,0,0),RIGHT:new n.Vector3(1,0,0),FORWARD:new n.Vector3(0,0,1),BACKWARD:new n.Vector3(0,0,-1)},O={LINEAR:(t,e)=>1-t/e,QUADRATIC:(t,e)=>Math.pow(1-t/e,2),SQUARE_ROOT:(t,e)=>Math.pow(1-t/e,.5),LOGARITHMIC:(t,e)=>Math.log(1+(e-t))/Math.log(1+e),SINE:(t,e)=>Math.cos(t/e*Math.PI/2),EXPONENTIAL:(t,e)=>Math.exp(-t/e),CUBIC:(t,e)=>Math.pow(1-t/e,3),GAUSSIAN:(t,e)=>Math.exp(-Math.pow(t,2)/(2*Math.pow(e/3,2))),INVERSE:(t,e)=>e/(e+t),SMOOTHSTEP:(t,e)=>{const o=Math.max(0,Math.min(1,1-t/e));return o*o*(3-2*o)}},ro=(t,e,o,r,i=R.UP,s=O.LINEAR)=>{const a=t.attributes.position;for(let l=0;l<a.count;l++){const c=new n.Vector3;c.fromBufferAttribute(a,l);const u=c.distanceTo(e);if(u<o){const h=s(u,o)*r;c.add(i.clone().multiplyScalar(h)),a.setXYZ(l,c.x,c.y,c.z)}}a.needsUpdate=!0},so=(t,e,o,r,i,s=R.UP,a=O.LINEAR)=>{const l=t.attributes.position;for(let c=0;c<l.count;c++){const u=new n.Vector3;u.fromBufferAttribute(l,c);const m=u.distanceTo(e);if(m<o){const d=a(m,o)*i,f=u.dot(s.normalize()),p=r-f;u.add(s.clone().multiplyScalar(p*d)),l.setXYZ(c,u.x,u.y,u.z)}}l.needsUpdate=!0},ao=(t,e,o,r,i=R.UP,s=O.LINEAR)=>{const a=t.attributes.position;for(let l=0;l<a.count;l++){const c=new n.Vector3;c.fromBufferAttribute(a,l);const u=c.distanceTo(e);if(u<o){const m=s(u,o),h=r*m,d=i.clone().normalize();c.x+=n.MathUtils.randFloatSpread(h)*d.x,c.y+=n.MathUtils.randFloatSpread(h)*d.y,c.z+=n.MathUtils.randFloatSpread(h)*d.z,a.setXYZ(l,c.x,c.y,c.z)}}a.needsUpdate=!0},io=(t,e,o,r)=>{const i=t.attributes.position,s=new n.Vector3;for(let a=0;a<i.count;a++){const l=new n.Vector3;if(l.fromBufferAttribute(i,a),l.distanceTo(e)<o){let u=new n.Vector3,m=0;for(let h=0;h<i.count;h++)s.fromBufferAttribute(i,h),s.distanceTo(l)<o&&(u.add(s),m++);m>0&&(u.divideScalar(m),l.lerp(u,r),i.setXYZ(a,l.x,l.y,l.z))}}i.needsUpdate=!0},co=(t,e,o,r,i=!1,s=O.LINEAR)=>{const a=t.attributes.position;for(let l=0;l<a.count;l++){const c=new n.Vector3;c.fromBufferAttribute(a,l);const u=c.distanceTo(e);if(u<o){const h=s(u,o)*r*(i?-1:1),d=c.clone().sub(e).normalize();c.add(d.multiplyScalar(h)),a.setXYZ(l,c.x,c.y,c.z)}}a.needsUpdate=!0},lo=(t,e,o,r,i=R.UP,s=O.LINEAR)=>{const a=t.attributes.position,l=new n.Quaternion;for(let c=0;c<a.count;c++){const u=new n.Vector3;u.fromBufferAttribute(a,c);const m=u.distanceTo(e);if(m<o){const d=s(m,o)*r;l.setFromAxisAngle(i,d),u.sub(e).applyQuaternion(l).add(e),a.setXYZ(c,u.x,u.y,u.z)}}a.needsUpdate=!0},k={X:new n.Vector3(1,0,0),Y:new n.Vector3(0,1,0),Z:new n.Vector3(0,0,1),XY:new n.Vector3(1,1,0).normalize(),XZ:new n.Vector3(1,0,1).normalize(),YZ:new n.Vector3(0,1,1).normalize(),XYZ:new n.Vector3(1,1,1).normalize()};var E=(t=>(t.LEFT="left",t.RIGHT="right",t.TOP="top",t.BOTTOM="bottom",t.FRONT="front",t.BACK="back",t))(E||{});const C={CADMIUM_RED:15073318,CARDINAL_RED:12981270,CHERRY_RED:14165028,CRIMSON:12986408,ALIZARIN_CRIMSON:11674146,DARK_RED:9109504,RUST:12731693,CORAL_ORANGE:16734003,TANGERINE:16733440,ORANGE_PEEL:16737792,CADMIUM_ORANGE:16744228,ORANGE:16753920,AMBER:16755200,CADMIUM_YELLOW:16766720,GOLD:16766720,YELLOW:16776960,LIME_GREEN:10798080,SPRING_GREEN:8965205,MOSS_GREEN:8956467,FERN_GREEN:4950843,FOREST_GREEN:2263842,SAP_GREEN:5274922,OLIVE_DRAB:5597999,VIRIDIAN_GREEN:43115,MINT_GREEN:8965290,AQUAMARINE:65450,PHTHALO_BLUE:3977,AETHER_BLUE:3447003,SKY_BLUE:8965375,CERULEAN_BLUE:6139362,AZURE:30719,OCEAN_BLUE:30654,ROYAL_BLUE:5592575,MIDNIGHT_BLUE:51,ULTRAMARINE_BLUE:4149685,COBALT_VIOLET:6950317,DEEP_VIOLET:11141375,CORAL_PINK:16724838,VIVID_MAGENTA:16720639,MAGENTA:16711935,HOT_PINK:16711850,PINK_SHERBET:16751052,SOFT_PINK:16762823,BURNT_SIENNA:15299665,BURNT_UMBER:9057060,SIENNA:9132587,SADDLE_BROWN:9127187,COFFEE_BROWN:6045747,DARK_UMBER:4929057,RAW_UMBER:8545860,YELLOW_OCHRE:12951919,RAW_SIENNA:13808780,TAUPE:9141627,ONYX:197379,CARBON:3026478,CHARCOAL:3355443,SLATE_GRAY:4210752,ASH_GRAY:4473924,GRAPHITE:5263440,STEEL_GRAY:5592405,DIM_GRAY:6908265,IRON:7829367,GRAY:8421504,STONE:8947848,SILVER:11184810,LIGHT_GRAY:13421772,PALE_GRAY:15658734,WHITE_SMOKE:16119285,TITANIUM_WHITE:16777215},oe=t=>1-Math.cos(t*Math.PI/2),ne=t=>Math.sin(t*Math.PI/2),re=t=>-.5*(Math.cos(Math.PI*t)-1),se=t=>t*t,ae=t=>1-Math.pow(1-t,2),ie=t=>t<.5?2*t*t:1-Math.pow(-2*t+2,2)/2,ce=t=>t*t*t,le=t=>1-Math.pow(1-t,3),ue=t=>t<.5?4*t*t*t:1-Math.pow(-2*t+2,3)/2,me=t=>t*t*t*t,he=t=>1-Math.pow(1-t,4),de=t=>t<.5?8*t*t*t*t:1-Math.pow(-2*t+2,4)/2,fe=t=>t*t*t*t*t,pe=t=>1-Math.pow(1-t,5),Me=t=>t<.5?16*t*t*t*t*t:1-Math.pow(-2*t+2,5)/2,ye=t=>t===0?0:Math.pow(2,10*t-10),xe=t=>t===1?1:1-Math.pow(2,-10*t),we=t=>t===0?0:t===1?1:t<.5?Math.pow(2,20*t-10)/2:(2-Math.pow(2,-20*t+10))/2,ve=t=>1-Math.sqrt(1-Math.pow(t,2)),ge=t=>Math.sqrt(1-Math.pow(t-1,2)),Se=t=>t<.5?(1-Math.sqrt(1-Math.pow(2*t,2)))/2:(Math.sqrt(1-Math.pow(-2*t+2,2))+1)/2,Ge=t=>t,Ae=t=>t*t*(3-2*t),Ie=t=>1-Math.pow(1-t,.3),be=t=>Math.pow(t,.3),Ee=t=>Math.log(Math.max(.01,t))/Math.log(2),Be=t=>Math.sqrt(t),Te=t=>1-t,Pe=t=>Math.exp(-Math.pow(t-.5,2)/(2*.5)),uo={SINE_EASE_IN:oe,SINE_EASE_OUT:ne,SINE_EASE_IN_OUT:re,QUADRATIC_EASE_IN:se,QUADRATIC_EASE_OUT:ae,QUADRATIC_EASE_IN_OUT:ie,CUBIC_EASE_IN:ce,CUBIC_EASE_OUT:le,CUBIC_EASE_IN_OUT:ue,QUARTIC_EASE_IN:me,QUARTIC_EASE_OUT:he,QUARTIC_EASE_IN_OUT:de,QUINTIC_EASE_IN:fe,QUINTIC_EASE_OUT:pe,QUINTIC_EASE_IN_OUT:Me,EXPONENTIAL_EASE_IN:ye,EXPONENTIAL_EASE_OUT:xe,EXPONENTIAL_EASE_IN_OUT:we,CIRCULAR_EASE_IN:ve,CIRCULAR_EASE_OUT:ge,CIRCULAR_EASE_IN_OUT:Se,LINEAR:Ge,SMOOTHSTEP:Ae,CONCAVE:Ie,CONVEX:be,LOGARITHMIC:Ee,SQUARE_ROOT:Be,INVERSE:Te,GAUSSIAN:Pe},Ce=(t,e,o,r,i)=>{const s=Math.max(0,Math.min(1,t)),a=1-s;return a*a*a*e+3*a*a*s*o+3*a*s*s*r+s*s*s*i},Ve=(t,e=1)=>{const o=Math.max(.001,e);return(1-Math.exp(-o*t))/(1-Math.exp(-o))},Re=(t,e=1,o=1)=>{const r=Math.max(0,Math.min(1,t));return e*Math.pow(r,o)},Oe=(t,e=1,o=1)=>{const r=Math.max(.001,Math.min(1,t));return e*Math.log(o*r+1)},Ue=(t,e=1,o=0,r=0)=>{const i=Math.max(0,Math.min(1,t));return e*i*i+o*i+r},Ne=(t,e,o,r)=>{const i=Math.max(0,Math.min(1,t)),s=1-i;return s*s*e+2*s*i*o+i*i*r},Fe=(t,e=10)=>{const o=Math.max(0,Math.min(1,t));return 1/(1+Math.exp(-e*(o-.5)))},mo=t=>Math.sin(t*Math.PI*.5),P={CUBIC:Ce,DAMPED:Ve,EXPONENTIAL:Re,LOGARITHMIC:Oe,PARABOLIC:Ue,QUADRATIC:Ne,SIGMOID:Fe,SINUSOIDAL:mo};class ho extends n.InstancedMesh{constructor(o={}){const{count:r=20,width:i=1.5,height:s=3,depth:a=1.5,geometry:l=new n.SphereGeometry(.1,6,6),material:c=new n.MeshStandardMaterial({color:16777215,transparent:!0,opacity:.6,roughness:.3,metalness:.3})}=o;super(l,c,r);v(this,"bubblePositions",[]);v(this,"velocities",[]);v(this,"width");v(this,"height");v(this,"depth");this.height=s,this.width=i,this.depth=a;for(let u=0;u<this.count;u++){const m=new n.Vector3((Math.random()-.5)*i,Math.random()*(s-1)+.5,(Math.random()-.5)*a);this.bubblePositions.push(m),this.velocities.push(.01+Math.random()*.02),this.updateInstanceMatrix(u)}}updateInstanceMatrix(o){const r=this.bubblePositions[o],i=new n.Matrix4().setPosition(r);this.setMatrixAt(o,i),this.instanceMatrix.needsUpdate=!0}update(){for(let o=0;o<this.count;o++){const r=this.bubblePositions[o];r.y+=this.velocities[o],r.y>this.height&&(r.x=(Math.random()-.5)*this.width,r.y=0,r.z=(Math.random()-.5)*this.depth),this.updateInstanceMatrix(o)}}}class _e extends n.BufferGeometry{constructor(e=.1){super();const o=[],r=[],i=[[0,1],[.5,.75],[.75,.25],[.5,-.5],[0,-1],[-.5,-.5],[-.75,.25],[-.5,.75]];for(let a=0;a<i.length;a++){const[l,c]=i[a];o.push(l*e,c*e,0)}for(let a=1;a<i.length-1;a++)r.push(0,a,a+1);r.push(0,i.length-1,1);const s=new n.Float32BufferAttribute(o,3);this.setAttribute("position",s),this.setIndex(r),this.computeVertexNormals()}}class fo extends n.InstancedMesh{constructor(o={}){const{count:r=200,width:i=20,height:s=10,depth:a=20,geometry:l=new _e,material:c=new n.MeshStandardMaterial({color:8956467,metalness:.1,roughness:.8,flatShading:!0,side:n.DoubleSide})}=o;super(l,c,r);v(this,"dummyMatrix");v(this,"velocities");v(this,"width");v(this,"height");v(this,"depth");this.dummyMatrix=new n.Matrix4,this.velocities=[],this.width=i,this.height=s,this.depth=a;for(let u=0;u<r;u++){const m=(Math.random()-.5)*i,h=Math.random()*(s-1)+.5,d=(Math.random()-.5)*a,f=(Math.random()-.5)*Math.PI,p=(Math.random()-.5)*Math.PI,M=(Math.random()-.5)*Math.PI;this.dummyMatrix.makeRotationFromEuler(new n.Euler(f,p,M)),this.dummyMatrix.setPosition(m,h,d),this.setMatrixAt(u,this.dummyMatrix);const y=new n.Vector3((Math.random()-.5)*.01,-.005,(Math.random()-.5)*.01);this.velocities.push(y)}this.instanceMatrix.needsUpdate=!0}update(){for(let o=0;o<this.count;o++){const r=new n.Matrix4;this.getMatrixAt(o,r);const i=new n.Vector3;i.setFromMatrixPosition(r);const s=this.velocities[o];i.add(s),i.y<0&&(i.set((Math.random()-.5)*this.width,Math.random()*(this.height-1)+.5,(Math.random()-.5)*this.depth),s.set((Math.random()-.5)*.01,-.005,(Math.random()-.5)*.01)),r.setPosition(i),this.setMatrixAt(o,r)}this.instanceMatrix.needsUpdate=!0}}const g=(t,e)=>{const o=t[0].index!==null,r=new Set(Object.keys(t[0].attributes)),i=new Set(Object.keys(t[0].morphAttributes)),s={},a={},l=t[0].morphTargetsRelative,c=new n.BufferGeometry;let u=0;if(t.forEach((m,h)=>{let d=0;if(o!==(m.index!==null))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(let f in m.attributes){if(!r.has(f))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+'. All geometries must have compatible attributes; make sure "'+f+'" attribute exists among all geometries, or in none of them.'),null;s[f]===void 0&&(s[f]=[]),s[f].push(m.attributes[f]),d++}if(d!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+". Make sure all geometries have the same number of attributes."),null;if(l!==m.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(let f in m.morphAttributes){if(!i.has(f))return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+". .morphAttributes must be consistent throughout all geometries."),null;a[f]===void 0&&(a[f]=[]),a[f].push(m.morphAttributes[f])}if(c.userData.mergedUserData=c.userData.mergedUserData||[],c.userData.mergedUserData.push(m.userData),e){let f;if(m.index)f=m.index.count;else if(m.attributes.position!==void 0)f=m.attributes.position.count;else return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index "+h+". The geometry must have either an index or a position attribute"),null;c.addGroup(u,f,h),u+=f}}),o){let m=0;const h=[];t.forEach(d=>{const f=d.index;for(let p=0;p<f.count;++p)h.push(f.getX(p)+m);m+=d.attributes.position.count}),c.setIndex(h)}for(let m in s){const h=J(s[m]);if(!h)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+m+" attribute."),null;c.setAttribute(m,h)}for(let m in a){const h=a[m][0].length;if(h===0)break;c.morphAttributes=c.morphAttributes||{},c.morphAttributes[m]=[];for(let d=0;d<h;++d){const f=[];for(let M=0;M<a[m].length;++M)f.push(a[m][M][d]);const p=J(f);if(!p)return console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the "+m+" morphAttribute."),null;c.morphAttributes[m].push(p)}}return c},J=t=>{let e,o,r,i=0;if(t.forEach(s=>{if(e===void 0&&(e=s.array.constructor),e!==s.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(o===void 0&&(o=s.itemSize),o!==s.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(r===void 0&&(r=s.normalized),r!==s.normalized)return console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;i+=s.array.length}),e&&o){const s=new e(i);let a=0;return t.forEach(l=>{s.set(l.array,a),a+=l.array.length}),new n.BufferAttribute(s,o,r)}};function po(t,e=1e-4){e=Math.max(e,Number.EPSILON);const o={},r=t.getIndex(),i=t.getAttribute("position"),s=r?r.count:i.count;let a=0;const l=Object.keys(t.attributes),c={},u={},m=[],h=["getX","getY","getZ","getW"];for(let M=0,y=l.length;M<y;M++){const w=l[M];c[w]=[];const x=t.morphAttributes[w];x&&(u[w]=new Array(x.length).fill(0).map(()=>[]))}const d=Math.log10(1/e),f=Math.pow(10,d);for(let M=0;M<s;M++){const y=r?r.getX(M):M;let w="";for(let x=0,I=l.length;x<I;x++){const S=l[x],G=t.getAttribute(S),A=G.itemSize;for(let B=0;B<A;B++)w+=`${~~(G[h[B]](y)*f)},`}if(w in o)m.push(o[w]);else{for(let x=0,I=l.length;x<I;x++){const S=l[x],G=t.getAttribute(S),A=t.morphAttributes[S],B=G.itemSize,T=c[S],q=u[S];for(let U=0;U<B;U++){const N=h[U];if(T.push(G[N](y)),A)for(let b=0,Ht=A.length;b<Ht;b++)q[b].push(A[b][N](y))}}o[w]=a,m.push(a),a++}}const p=t.clone();for(let M=0,y=l.length;M<y;M++){const w=l[M],x=t.getAttribute(w),I=new x.array.constructor(c[w]),S=new n.BufferAttribute(I,x.itemSize,x.normalized);if(p.setAttribute(w,S),w in u)for(let G=0;G<u[w].length;G++){const A=t.morphAttributes[w][G],B=new A.array.constructor(u[w][G]),T=new n.BufferAttribute(B,A.itemSize,A.normalized);p.morphAttributes[w][G]=T}}return p.setIndex(m),p}class Mo extends n.BufferGeometry{constructor(e=(i,s,a)=>a.set(i,s,Math.cos(i)*Math.sin(s)),o=8,r=8){super(),this.type="ParametricGeometry",this.parameters={func:e,slices:o,stacks:r};const i=[],s=[],a=[],l=[],c=1e-5,u=new n.Vector3,m=new n.Vector3,h=new n.Vector3,d=new n.Vector3,f=new n.Vector3,p=o+1;for(let M=0;M<=r;M++){const y=M/r;for(let w=0;w<=o;w++){const x=w/o;e(x,y,m),s.push(m.x,m.y,m.z),x-c>=0?(e(x-c,y,h),d.subVectors(m,h)):(e(x+c,y,h),d.subVectors(h,m)),y-c>=0?(e(x,y-c,h),f.subVectors(m,h)):(e(x,y+c,h),f.subVectors(h,m)),u.crossVectors(d,f).normalize(),a.push(u.x,u.y,u.z),l.push(x,y)}}for(let M=0;M<r;M++)for(let y=0;y<o;y++){const w=M*p+y,x=M*p+y+1,I=(M+1)*p+y+1,S=(M+1)*p+y;i.push(w,x,S),i.push(x,I,S)}this.setIndex(i),this.setAttribute("position",new n.Float32BufferAttribute(s,3)),this.setAttribute("normal",new n.Float32BufferAttribute(a,3)),this.setAttribute("uv",new n.Float32BufferAttribute(l,2))}}class X extends n.BufferGeometry{constructor(e=1,o=1.5,r=.5,i=.05,s=.05){super();const a=e,l=o,c=r,u=i,m=s,h=[0,0,0,a,0,0,a,l,0,0,l,0,a,0,-c,0,0,-c,0,l,-c,a,l,-c,0,0,-c,0,0,0,0,l,0,0,l,-c,a,0,-u,u,0,-u,u,l,-u,a,l,-u,u,0,-c+u,a,0,-c+u,a,l,-c+u,u,l,-c+u,u,0,-u,u,0,-c+u,u,l,-c+u,u,l,-u,0,l,0,a,l,0,a,l,-u,u,l,-u,0,l,-c,u,l,-c+u,a,l,-c+u,a,l,-c,0,l,0,u,l,-u,u,l,-c+u,0,l,-c,0,0,0,u,0,-u,a,0,-u,a,0,0,0,0,-c,a,0,-c,a,0,-c+u,u,0,-c+u,0,0,0,0,0,-c,u,0,-c+u,u,0,-u,a,0,0,a,0,-u,a,l,-u,a,l,0,a,0,-c,a,l,-c,a,l,-c+u,a,0,-c+u],d=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0],f=e/(e*2+r),p=(e+r)/(e*2+r),M=[p,0,1,0,1,1,p,1,0,0,f,0,f,1,0,1,f,0,p,0,p,1,f,1,1,0,p,0,p,1,1,1,f,0,0,0,0,1,f,1,p,0,f,0,f,1,p,1,p,0,1,0,1,1,p,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1],y=[0,1,2,0,2,3,4,5,6,4,6,7,8,9,10,8,10,11,12,13,14,12,14,15,16,17,18,16,18,19,20,21,22,20,22,23,24,25,26,24,26,27,28,29,30,28,30,31,32,33,34,32,34,35,36,37,38,36,38,39,40,41,42,40,42,43,44,45,46,44,46,47,48,49,50,48,50,51,52,53,54,52,54,55],w=new Float32Array(h),x=new Float32Array(d),I=new Float32Array(M),S=new Uint16Array(y),G=new n.BufferGeometry;G.setAttribute("position",new n.BufferAttribute(w,3)),G.setAttribute("normal",new n.BufferAttribute(x,3)),G.setAttribute("uv",new n.BufferAttribute(I,2)),G.setIndex(new n.BufferAttribute(S,1));const A=new n.BoxGeometry(e-u-m,l-m*2,c-u*2);A.translate((e-u-m)/2+u,l/2,-c/2),this.copy(g([G,A],!0))}}function Le({scaleXMin:t=.4,scaleXMax:e=.7,scaleYMin:o=.3,scaleYMax:r=.95,scaleZMin:i=.1,scaleZMax:s=.5}={}){return new n.Vector3(D(t,e),$(.25,o,r),ee(.8,i,s))}function Z({coverMaterial:t,pagesMaterial:e,scales:o}){const r=new X,i=new n.InstancedMesh(r,[t,e],o.length),s=new n.Matrix4;let a=0;for(let l=0;l<o.length;l++){const c=o[l],u=new n.Matrix4;u.makeScale(c.x,c.y,c.z),s.identity(),s.multiply(u),s.setPosition(.01+Math.random()*.1,0,a+c.z*.5),i.setMatrixAt(l,s),a+=c.z*.5}return i}function yo({coverMaterial:t,pagesMaterial:e,count:o=10,scaleXMin:r=.4,scaleXMax:i=.7,scaleYMin:s=.3,scaleYMax:a=.95,scaleZMin:l=.1,scaleZMax:c=.5}){const u=Array.from({length:o},()=>Le({scaleXMin:r,scaleXMax:i,scaleYMin:s,scaleYMax:a,scaleZMin:l,scaleZMax:c}));return Z({coverMaterial:t,pagesMaterial:e,scales:u})}function xo({coverMaterial:t,pagesMaterial:e,length:o=10,scaleXMin:r=.4,scaleXMax:i=.7,scaleYMin:s=.3,scaleYMax:a=.95,scaleZMin:l=.1,scaleZMax:c=.5}){const u=[];let m=o;for(;m>0;){const h=Le({scaleXMin:r,scaleXMax:i,scaleYMin:s,scaleYMax:a,scaleZMin:l,scaleZMax:c});h.z=Math.min(h.z,m),u.push(h),m-=h.z}return Z({coverMaterial:t,pagesMaterial:e,scales:u})}class ze extends n.Shape{constructor(e=1){super();for(let o=0;o<6;o++){const r=Math.PI/3*o,i=Math.cos(r)*e,s=Math.sin(r)*e;o===0?this.moveTo(i,s):this.lineTo(i,s)}this.closePath()}}class H extends n.ExtrudeGeometry{constructor(e=1,o=.01){const r=new ze(e);super(r,{depth:o,bevelEnabled:!1})}}function wo(t){const{width:e,depth:o,height:r,count:i,gap:s,material:a}=t,l=a||new n.MeshStandardMaterial({color:16777215}),c=e/i,u=(c-s)*2/3,m=Math.sqrt(3)*u+s,h=Math.floor(o/m),d=i*h,f=new H(u,r);f.rotateX(-Math.PI/2);const p=new n.InstancedMesh(f,l,d),M=new n.Object3D;let y=0;for(let w=0;w<i;w++)for(let x=0;x<h;x++){const I=w*c,S=x*m+w%2*(m/2),G=I-i*c/2+c/2,A=S-h*m/2+m/2;M.position.set(G,0,A),M.updateMatrix(),p.setMatrixAt(y++,M.matrix)}return p.instanceMatrix.needsUpdate=!0,p}function vo(t){const{width:e,depth:o,height:r,radius:i,gap:s,material:a}=t,l=a||new n.MeshStandardMaterial({color:16777215}),c=i*3/2+s,u=Math.sqrt(3)*i+s,m=Math.floor(e/c),h=Math.floor(o/u),d=m*h,f=new H(i,r);f.rotateX(-Math.PI/2);const p=new n.InstancedMesh(f,l,d),M=new n.Object3D;let y=0;for(let w=0;w<m;w++)for(let x=0;x<h;x++){const I=w*c,S=x*u+w%2*(u/2),G=I-m*c/2+c/2,A=S-h*u/2+u/2;M.position.set(G,0,A),M.updateMatrix(),p.setMatrixAt(y++,M.matrix)}return p.instanceMatrix.needsUpdate=!0,p}class go extends n.BufferGeometry{constructor(e=2,o=.3,r=.6,i=5,s=5,a=Math.PI/4){super();const l=[],c=[];for(let f=0;f<i;f++){const p=f*o,M=p+o,y=f*r,w=y+r;l.push(-e/2,p,y,e/2,p,y,e/2,M,y,-e/2,M,y,-e/2,M,y,e/2,M,y,e/2,M,w,-e/2,M,w);const x=f*8;c.push(x,x+1,x+2,x,x+2,x+3),c.push(x+4,x+5,x+6,x+4,x+6,x+7)}const u=i*o,m=i*r,h=e*2;l.push(-h/2,u,m,h/2,u,m,h/2,u,m+r,-h/2,u,m+r);const d=i*8;c.push(d,d+1,d+2,d,d+2,d+3);for(let f=0;f<2;f++){const p=f===0?1:-1;for(let M=0;M<s;M++){const y=u+M*o,w=y+o,x=p*(h/4),I=m+r,S=M*r*Math.cos(a),G=M*r*Math.sin(a),A=x+p*S-e/2*Math.cos(a),B=x+p*S+e/2*Math.cos(a),T=I+G,q=A+p*r*Math.cos(a),U=B+p*r*Math.cos(a),N=T+r*Math.sin(a);l.push(A,y,T,B,y,T,B,w,T,A,w,T,A,w,T,B,w,T,U,w,N,q,w,N);const b=d+4+f*s*8+M*8;c.push(b,b+1,b+2,b,b+2,b+3),c.push(b+4,b+5,b+6,b+4,b+6,b+7)}}this.setIndex(c),this.setAttribute("position",new n.Float32BufferAttribute(l,3)),this.computeVertexNormals()}}class De extends n.BufferGeometry{constructor({width:e=5,height:o=3,depth:r=5,wallThickness:i=.05}={}){super();const s=e,a=o,l=r,c=i,u=[0,0,0,s,0,0,s,a,0,0,a,0,0,0,l,0,0,0,0,a,0,0,a,l,0,0,l,s,0,l,s,0,0,0,0,0,-c,-c,l,s,-c,l,s,0,l,0,0,l,s,-c,l,s,-c,-c,s,0,0,s,0,l,-c,-c,l,0,0,l,0,a,l,-c,a,l,s,0,0,s,-c,-c,s,a,-c,s,a,0,-c,a,l,0,a,l,0,a,0,-c,a,-c,0,a,0,s,a,0,s,a,-c,-c,a,-c,-c,-c,-c,s,-c,-c,s,-c,l,-c,-c,l,-c,-c,-c,-c,-c,l,-c,a,l,-c,a,-c,s,-c,-c,-c,-c,-c,-c,a,-c,s,a,-c],m=[0,1,3,1,2,3,4,5,7,5,6,7,8,9,11,9,10,11,12,13,15,13,14,15,16,17,19,17,18,19,20,21,23,21,22,23,24,25,27,25,26,27,28,29,31,29,30,31,32,33,35,33,34,35,36,37,39,37,38,39,40,41,43,41,42,43,44,45,47,45,46,47],h=[0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,0,0,-1,0,0,-1,0,0,-1,0,0,-1],d=[.5,0,1,0,1,1,.5,1,0,0,.5,0,.5,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,c/s,0,c/s,0,0,1,0,1,c/s,0,c/s,0,0,c/s,0,c/s,1,0,1,1-c/s,0,1,0,1,1,1-c/s,1,0,0,c/s,0,c/s,1,0,1,0,1-c/s,1,1-c/s,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1],f=new Float32Array(u),p=new Float32Array(h),M=new Float32Array(d);this.setAttribute("position",new n.BufferAttribute(f,3)),this.setAttribute("normal",new n.BufferAttribute(p,3)),this.setAttribute("uv",new n.BufferAttribute(M,2)),this.setIndex(m),this.addGroup(0,12,0),this.addGroup(12,6,1),this.addGroup(18,54,2)}}class So extends n.BufferGeometry{constructor(e=2,o=.3,r=.5,i=5,s=2){super();const a=[],l=[];for(let h=0;h<i;h++){const d=h*o,f=d+o,p=h*r,M=p+r;a.push(-e/2,d,p,e/2,d,p,e/2,f,p,-e/2,f,p,-e/2,f,p,e/2,f,p,e/2,f,M,-e/2,f,M);const y=h*8;l.push(y,y+1,y+2,y,y+2,y+3),l.push(y+4,y+5,y+6,y+4,y+6,y+7)}const c=i*o,u=i*r;a.push(-e/2,c,u,e/2,c,u,e/2,c,u+s,-e/2,c,u+s);const m=i*8;l.push(m,m+1,m+2,m,m+2,m+3);for(let h=0;h<i;h++){const d=c+h*o,f=d+o,p=-e/2-h*r,M=p-r;a.push(p,d,u+s,p,d,u+s-e,p,f,u+s-e,p,f,u+s,p,f,u+s,p,f,u+s-e,M,f,u+s-e,M,f,u+s);const y=m+4+h*8;l.push(y,y+1,y+2,y,y+2,y+3),l.push(y+4,y+5,y+6,y+4,y+6,y+7)}this.setIndex(l),this.setAttribute("position",new n.Float32BufferAttribute(a,3)),this.computeVertexNormals()}}class Go extends n.BufferGeometry{constructor(e=1,o=.4,r=.2,i=20,s=2,a=Math.PI/8){super();const l=[],c=[];let u=0;for(let m=0;m<i;m++){const h=s*Math.cos(u),d=s*Math.sin(u),f=m*r,p=f+r;l.push(h-e/2*Math.cos(u),f,d-e/2*Math.sin(u),h+e/2*Math.cos(u),f,d+e/2*Math.sin(u),h+e/2*Math.cos(u),p,d+e/2*Math.sin(u),h-e/2*Math.cos(u),p,d-e/2*Math.sin(u)),l.push(h-e/2*Math.cos(u),p,d-e/2*Math.sin(u),h+e/2*Math.cos(u),p,d+e/2*Math.sin(u),h+e/2*Math.cos(u)-o*Math.sin(u),p,d+e/2*Math.sin(u)+o*Math.cos(u),h-e/2*Math.cos(u)-o*Math.sin(u),p,d-e/2*Math.sin(u)+o*Math.cos(u));const M=m*8;c.push(M,M+1,M+2,M,M+2,M+3),c.push(M+4,M+5,M+6,M+4,M+6,M+7),u+=a}this.setIndex(c),this.setAttribute("position",new n.Float32BufferAttribute(l,3)),this.computeVertexNormals()}}class Ao extends n.BufferGeometry{constructor(e=2,o=.3,r=.5,i=10){super();const s=[],a=[];for(let l=0;l<i;l++){const c=l*o,u=c+o,m=l*r,h=m+r;s.push(-e/2,c,m,e/2,c,m,e/2,u,m,-e/2,u,m,-e/2,u,m,e/2,u,m,e/2,u,h,-e/2,u,h);const d=l*8;a.push(d,d+1,d+2,d,d+2,d+3),a.push(d+4,d+6,d+5,d+4,d+7,d+6)}this.setIndex(a),this.setAttribute("position",new n.Float32BufferAttribute(s,3)),this.computeVertexNormals()}}class ke extends n.BufferGeometry{constructor(){super();const e=[new n.Vector2(0,0),new n.Vector2(1.2,0),new n.Vector2(1.5,1.5),new n.Vector2(1,3),new n.Vector2(.6,3.5),new n.Vector2(.5,3.5)],o=new n.LatheGeometry(e,10),r=new n.CylinderGeometry(.6,.5,.3,10);r.translate(0,3.5,0),this.copy(g([o,r],!0))}}function j(t,e,o,r,i){const s=(r-e)/(o-t);return t+(i-e)/s}function He(t,e,o,r,i){const s=(r-e)/(o-t);return e+s*(i-t)}const Io={calculateXFromSlopeIntercept:j,calculateYFromSlopeIntercept:He};class qe extends n.BufferGeometry{constructor(){super();const e=[new n.Vector2(0,0),new n.Vector2(.8,0),new n.Vector2(1,1.5),new n.Vector2(.5,2.2),new n.Vector2(.6,2.5),new n.Vector2(.5,2.5)],o=new n.LatheGeometry(e,10),r=new n.CylinderGeometry(.55,.45,.2,10);r.translate(0,2.5,0);const i=[new n.Vector2(0,0),new n.Vector2(.8,0),new n.Vector2(j(.8,0,1,1.5,1),1),new n.Vector2(0,1)],s=new n.LatheGeometry(i,10);s.translate(0,.1,0),s.scale(.9,.9,.9),this.copy(g([o,r,s],!0))}}class Ye extends n.BufferGeometry{constructor({radius:e=.5,neckRadius:o=.2,height:r=3,neckHeight:i=1,segments:s=16}={}){super();const a=r-i,l=new n.CylinderGeometry(e,e,a,s);l.translate(0,a/2,0);const c=.3,u=new n.CylinderGeometry(o,e,c,s);u.translate(0,a+c/2,0);const m=new n.CylinderGeometry(o,o,i,s);m.translate(0,a+c+i/2,0),this.copy(g([l,u,m],!1))}}class Xe extends n.BufferGeometry{constructor(e=.4,o=1.2,r=.2){super();const i=o*.6,s=new n.BoxGeometry(e/2,i,r);s.translate(0,i/2,0);const a=e*1.5,l=new n.BoxGeometry(a,e/4,r);l.translate(0,i*.75,0),this.copy(g([s,l],!1)),this.computeVertexNormals()}}class Ze extends n.BufferGeometry{constructor(){super();const e=new n.BoxGeometry(5,1,5);e.translate(0,.5,0);const o=new n.BoxGeometry(4,3,4);o.translate(0,2.5,0);const r=[[-1.8,2.3,-2.2],[1.8,2.3,-2.2],[-1.8,2.3,2.2],[1.8,2.3,2.2]],i=[];r.forEach(u=>{const m=new n.CylinderGeometry(.2,.2,3.5,16);m.translate(u[0],u[1],u[2]),i.push(m)});const s=new n.ConeGeometry(3.5,2,4);s.rotateY(Math.PI/4),s.translate(0,5,0);const a=new n.Shape;a.moveTo(-1,0),a.lineTo(-1,2),a.absarc(0,2,1,Math.PI,0,!0),a.lineTo(1,0);const l={depth:.5,bevelEnabled:!1},c=new n.ExtrudeGeometry(a,l);c.translate(0,.5,1.7),c.setIndex([...Array(c.attributes.position.count).keys()]),this.copy(g([e,g([o,...i],!1),s,c],!0)),this.computeVertexNormals()}}class je extends n.BufferGeometry{constructor(e=1.75,o=.75){super();const r=e*.05,i=e*.15,s=e*.15,a=e*.75;let l=0;const c=new n.BoxGeometry(o,r,o);c.translate(0,l+r/2,0),l+=r;const u=new n.BoxGeometry(o*.8,i,o*.8);u.translate(0,l+i/2,0),l+=i;const m=new n.BoxGeometry(o*.6,s,o*.6);m.translate(0,l+s/2,0),l+=s;const h=new n.BoxGeometry(o*.4,a,o*.4);h.translate(0,l+a/2,0),l+=a;const d=new n.ConeGeometry(o*.4/Math.sqrt(2),.1,4,1,!1,Math.PI/4);d.translate(0,l+.1/2,0),this.copy(g([c,u,m,h,d],!1)),this.computeVertexNormals()}}class Qe extends n.BufferGeometry{constructor(e=.6,o=1,r=.2,i=.6){super();const s=o-i/2,a=new n.BoxGeometry(e,s,r);a.translate(0,s/2,0);const l=new n.CylinderGeometry(i/2,i/2,r,16,1,!1,0,Math.PI);l.rotateY(Math.PI/2),l.rotateX(Math.PI/2),l.translate(0,s,0),this.copy(g([a,l],!1)),this.computeVertexNormals()}}class Ke extends n.BufferGeometry{constructor(e=.5,o=.8,r=.15){super();const i=new n.BoxGeometry(e,o,r);i.translate(0,o/2,0),this.copy(i)}}class We extends n.BufferGeometry{constructor({height:e=2.25}={}){super();const o=new n.BoxGeometry(1.2,.5,1.2);o.translate(0,.25,0);const r=new n.BoxGeometry(1,e,1);r.translate(0,.5+e/2,0);const i=new n.BoxGeometry(1.4,.3,1.4);i.translate(0,.5+e+.15,0),this.copy(g([o,r,i],!1))}}class Q extends n.BufferGeometry{constructor({barHeight:e=2,barRadius:o=.05,spikeHeight:r=.3,spikeRadius:i=.075,spikeScaleZ:s=1,radialSegments:a=8}={}){super();const l=new n.CylinderGeometry(o,o,e,a);l.translate(0,e/2,0);const c=new n.ConeGeometry(i,r,a);c.translate(0,e+r/2,0),c.scale(1,1,s),this.copy(g([l,c],!1))}}class Je extends n.BufferGeometry{constructor({count:e=20,spacing:o=.4,barHeight:r=2,barRadius:i=.05,spikeHeight:s=.3,spikeRadius:a=.075,spikeScaleZ:l=1,railHeight:c=.1,railDepth:u=.05,railOffset:m=0,radialSegments:h=8}={}){super();const d=[],f=new Q({barHeight:r,barRadius:i,spikeHeight:s,spikeRadius:a,spikeScaleZ:l,radialSegments:h}),p=new n.BoxGeometry(e*o,c,u);for(let w=0;w<e;w++){const x=f.clone();x.translate(w*o,0,0),d.push(x)}const M=p.clone();M.translate(o*(e-1)/2,r-m-c/2,0),d.push(M);const y=p.clone();y.translate(o*(e-1)/2,c/2,0),d.push(y),this.copy(g(d))}}class $e extends n.BufferGeometry{constructor({width:e=5,height:o=8,depth:r=1,shelves:i=4,frameThickness:s=.1,open:a=!1}={}){super();const l=o,c=e,u=r,m=new n.BoxGeometry(s,l,u),h=new n.BoxGeometry(c-2*s,s,u),d=m.clone();d.translate(-c/2+s/2,l/2,0);const f=m.clone();f.translate(c/2-s/2,l/2,0);const p=h.clone();p.translate(0,l-s/2,0);const M=h.clone();M.translate(0,s/2,0);const y=new n.BoxGeometry(c,l,s);y.translate(0,l/2,-u/2+s/2);const w=[],x=(l-s)/(i+1);for(let I=1;I<=i;I++){const S=h.clone();S.translate(0,s/2+I*x,0),w.push(S)}this.copy(g([d,f,p,M,...a?[]:[y],...w],!1))}}class et extends n.BufferGeometry{constructor(){super();const e=new n.BoxGeometry(5,.3,3);e.translate(0,3.15,0);const o=[new n.Vector2(.2,0),new n.Vector2(.25,.5),new n.Vector2(.15,1.5),new n.Vector2(.3,3)],r=new n.LatheGeometry(o,32),s=g([[2.1,0,1.1],[-2.1,0,1.1],[2.1,0,-1.1],[-2.1,0,-1.1]].map(a=>{const l=r.clone();return l.translate(a[0],a[1],a[2]),l}));this.copy(g([e,s],!0))}}class K extends Mo{constructor({height:e=.25,radius:o=.05,segmentsU:r=16,segmentsV:i=16}={}){super((s,a,l)=>{const c=s*Math.PI*2,u=Math.sin(a*Math.PI),m=o*u*Math.cos(c),h=a*e,d=o*u*Math.sin(c);l.set(m,h,-d)},r,i)}}class tt extends n.BufferGeometry{constructor({radiusTop:e=.2,radiusBottom:o=.2,height:r=1,flameHeight:i=.25,flameRadius:s=.05,segments:a=16}={}){super();const l=new n.CylinderGeometry(e,o,r,a);l.translate(0,r/2,0);const c=new K({segmentsU:a,segmentsV:a,height:i,radius:s});c.translate(0,r,0),this.copy(g([l,c],!0))}}class bo extends n.BufferGeometry{constructor(e=1,o=2,r=.5,i=Math.PI/4){super();const s=o*Math.tan(i),a=e,l=o,c=r,u=[0,0,0,a,0,0,a+s,l,0,s,l,0,a,0,-c,0,0,-c,s,l,-c,a+s,l,-c,0,0,-c,0,0,0,s,l,0,s,l,-c,a,0,0,a,0,-c,a+s,l,-c,a+s,l,0,s,l,0,a+s,l,0,a+s,l,-c,s,l,-c,0,0,-c,a,0,-c,a,0,0,0,0,0],m=[0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0],h=[0,1,2,2,3,0,4,5,6,6,7,4,8,9,10,10,11,8,12,13,14,14,15,12,16,17,18,18,19,16,20,21,22,22,23,20],d=new Float32Array([0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1]),f=new Float32Array(u),p=new Float32Array(m),M=new Float32Array(d),y=new Uint16Array(h);this.setAttribute("position",new n.BufferAttribute(f,3)),this.setAttribute("normal",new n.BufferAttribute(p,3)),this.setAttribute("uv",new n.BufferAttribute(M,2)),this.setIndex(new n.BufferAttribute(y,1)),this.center()}}class ot extends n.BufferGeometry{constructor(){super();const e=[],o=[];for(let r=0;r<5;r++){const i=.8+Math.random()*.4,s=.8+Math.random()*.4,a=.8+Math.random()*.4,l=Math.random()*Math.PI,c=Math.random()*Math.PI,u=Math.random()*Math.PI,m=(Math.random()-.5)*4,h=0,d=(Math.random()-.5)*4,f=new n.DodecahedronGeometry(1,0);f.scale(i,s,a),f.rotateX(l),f.rotateY(c),f.rotateZ(u),f.translate(m,h,d),e.push(f);const p=new n.DodecahedronGeometry(1,0);p.scale(i*.9,s*.5,a*.9),p.rotateX(l),p.rotateY(c),p.rotateZ(u),p.translate(m,h+.3,d),o.push(p)}this.copy(g([g(e),g(o)],!0))}}function nt(t,e=k.XYZ,o=.5,r=2){t.deleteAttribute("uv"),t.deleteAttribute("normal"),t=po(t),t.computeVertexNormals();const i=t.getAttribute("position");for(let s=0;s<i.count;s++){const a=new n.Vector3().fromBufferAttribute(i,s),l=Math.random()*(r-o)+o,c=e.clone().multiplyScalar(l);a.add(c),i.setXYZ(s,a.x,a.y,a.z)}return i.needsUpdate=!0,t.computeVertexNormals(),t}class rt extends n.BufferGeometry{constructor(e=1,o=4,r=4){super();const i=new n.SphereGeometry(e,o,r);this.copy(nt(i,k.XYZ,.5,1)),this.computeVertexNormals(),this.center()}}class st extends n.BufferGeometry{constructor(){super();const e=[];for(let o=0;o<5;o++){const r=new n.DodecahedronGeometry(1,0);r.scale(.8+Math.random()*.4,.8+Math.random()*.4,.8+Math.random()*.4),r.rotateX(Math.random()*Math.PI),r.rotateY(Math.random()*Math.PI),r.rotateZ(Math.random()*Math.PI),r.translate((Math.random()-.5)*4,0,(Math.random()-.5)*4),e.push(r)}this.copy(g(e))}}class at extends n.Shape{constructor(e=5,o=.5,r=1){super();const i=Math.PI*2/e,s=i/2,a=i/4;this.moveTo(Math.cos(0)*r,-Math.sin(0)*r);for(let l=1;l<=e;++l){let c=Math.cos(i*l-a*3)*(o/Math.cos(a)),u=-Math.sin(i*l-a*3)*(o/Math.cos(a)),m=Math.cos(i*l-s)*o,h=-Math.sin(i*l-s)*o;this.quadraticCurveTo(c,u,m,h),c=Math.cos(i*l-a)*(o/Math.cos(a)),u=-Math.sin(i*l-a)*(o/Math.cos(a)),m=Math.cos(i*l)*r,h=-Math.sin(i*l)*r,this.quadraticCurveTo(c,u,m,h)}this.closePath()}}class it extends n.ExtrudeGeometry{constructor(e=5,o=.5,r=1,i=.25){const s=new at(e,o,r);super(s,{depth:i,bevelEnabled:!1})}}class ct extends n.Shape{constructor(e=5,o=.5,r=1,i=5,s=.25){super();const a=Math.PI*2/e,l=a/4;this.moveTo(Math.cos(0)*r,-Math.sin(0)*r);for(let c=1;c<=e;++c)this.lineTo(Math.cos(a*c-l*3)*o,-Math.sin(a*c-l*3)*o),this.lineTo(Math.cos(a*c-l*2)*o,-Math.sin(a*c-l*2)*o),this.lineTo(Math.cos(a*c-l)*r,-Math.sin(a*c-l)*r),this.lineTo(Math.cos(a*c)*r,-Math.sin(a*c)*r);if(this.closePath(),s>0&&i>2){const c=new n.Path,u=Math.PI*2/i;c.moveTo(Math.cos(0)*s,-Math.sin(0)*s);for(let m=1;m<i;++m)c.lineTo(Math.cos(u*m)*s,-Math.sin(u*m)*s);c.lineTo(Math.cos(0)*s,-Math.sin(0)*s),this.holes.push(c)}}}class lt extends n.ExtrudeGeometry{constructor(e=5,o=.5,r=1,i=5,s=.25,a=.25){const l=new ct(e,o,r,i,s);super(l,{depth:a,bevelEnabled:!1})}}class ut extends n.Shape{constructor(e=1,o=2.1,r=1.4,i=1.6){super(),this.moveTo(0,r*e/3),this.bezierCurveTo(-o*.375*e,r*e,-o*e,r*e/3,0,-i*e),this.bezierCurveTo(o*e,r*e/3,o*.375*e,r*e,0,r*e/3)}}class mt extends n.ExtrudeGeometry{constructor(e=1,o=2.1,r=1.4,i=1.6,s=.25){const a=new ut(e,o,r,i);super(a,{depth:s,bevelEnabled:!1})}}class ht extends n.Shape{constructor(e=5,o=.5,r=1){super();const i=Math.PI*2/e,s=i/2;this.moveTo(Math.cos(0)*r,Math.sin(0)*r);for(let a=1;a<=e;++a)this.lineTo(Math.cos(i*a-s)*o,Math.sin(i*a-s)*o),this.lineTo(Math.cos(i*a)*r,Math.sin(i*a)*r);this.closePath()}}class dt extends n.ExtrudeGeometry{constructor(e=5,o=.5,r=1,i=.25){const s=new ht(e,o,r);super(s,{depth:i,bevelEnabled:!1})}}class ft extends n.BufferGeometry{constructor(e=.1,o=.1,r=.4,i=8){super();const s=new n.CylinderGeometry(e*.6,o*.6,r,i);s.translate(0,0,0);const a=new n.SphereGeometry(e,i,i),l=a.clone(),c=a.clone(),u=a.clone(),m=a.clone();l.translate(0,r/2+e*.6,-e*.6),c.translate(0,r/2+e*.6,e*.6),u.translate(0,-r/2-o*.6,-o*.6),m.translate(0,-r/2-o*.6,o*.6),this.copy(g([s,l,c,u,m],!1))}}class pt extends n.BufferGeometry{constructor({flaskRadius:e=1,neckRadius:o=.3,height:r=2.5,neckHeight:i=1,radialSegments:s=16}={}){super();const a=[new n.Vector2(0,0),new n.Vector2(e*.875,0),new n.Vector2(e,.1),new n.Vector2(o,r),new n.Vector2(o,r+i),new n.Vector2(o*1.1,r+i+.3)],l=new n.LatheGeometry(a,s);this.copy(g([l],!1))}}const Eo=(t,e)=>t/(1-Math.cos(e)),W=(t,e)=>t/(2*Math.sin(e)),Mt=(t,e)=>t*(1-Math.cos(e)),Bo=(t,e)=>2*t*Math.sin(e),Y=(t,e)=>{const o=2*e;return Math.asin(o/(2*t))},To=(t,e,o)=>({x:t*Math.sin(o)*Math.cos(e),y:t*Math.sin(o)*Math.sin(e),z:t*Math.cos(o)}),Po=(t,e,o)=>{const r=Math.sqrt(t*t+e*e+o*o),i=Math.atan2(e,t),s=Math.acos(o/r);return{radius:r,theta:i,phi:s}};function yt(t,e,o,r=0,i=0,s=32){const a=r?Y(t,r):0,l=i?Math.PI-Y(t,i):Math.PI,c=[];for(let u=0;u<=s;u++){const m=l-(l-a)/s*u,h=t*Math.sin(m),d=e*Math.cos(m)+o;c.push(new n.Vector2(h,d))}return[...c]}class xt extends n.BufferGeometry{constructor(){super();const e=[...yt(1,1,.5,.2,0,32),new n.Vector2(.2,3)],o=new n.LatheGeometry(e,32);this.copy(o)}}class wt extends n.BufferGeometry{constructor(){super();const e=[new n.Vector2(1,0),new n.Vector2(1.2,.5),new n.Vector2(1.4,1.5),new n.Vector2(1.3,1.8),new n.Vector2(.8,1.8)],o=new n.LatheGeometry(e,12),r=new n.CircleGeometry(1,12);r.rotateX(-Math.PI/2),r.translate(0,0,0),this.copy(g([o,r],!1))}}class vt extends n.BufferGeometry{constructor({radius:e=.3,height:o=.4,count:r=3,thickness:i=.03,radialSegments:s=16}={}){super();const a=new n.TorusGeometry(e,i,8,s);a.rotateX(Math.PI/2),a.translate(0,o,0);const l=new n.CylinderGeometry(i*.6,i*.6,o,s),c=[];for(let u=0;u<r;u++){const m=u/r*Math.PI*2,h=l.clone();h.translate(Math.cos(m)*e,o/2,Math.sin(m)*e),c.push(h)}this.copy(g([a,...c],!1))}}class gt extends n.BufferGeometry{constructor(){super();const e=new n.CylinderGeometry(.5,.6,.3,16);e.translate(0,.15,0);const o=new n.CylinderGeometry(.15,.15,2,12,1,!0);o.translate(0,1.3,0);const r=new n.SphereGeometry(.3,16,16);r.translate(0,2.4,0),this.copy(g([e,g([o,r])],!0))}}class z extends n.BufferGeometry{constructor(e=.2,o=.2,r=3,i=32,s=!0){super();const a=new n.CylinderGeometry(e,o,r,i,1,s),l=new n.SphereGeometry(o,i,i/2,0,Math.PI*2,Math.PI/2,Math.PI/2);l.translate(0,-(r/2),0),this.copy(g([a,l],!1))}}class St extends n.BufferGeometry{constructor({radius:e=3,height:o=.6,widthSegments:r=64,heightSegments:i=16,phiStart:s=0,phiLength:a=Math.PI*2}={}){super(),this.copy(new n.SphereGeometry(e,r,i,s,a,0,Math.PI/2)),this.scale(1,o/e,1)}}class Gt extends n.BufferGeometry{constructor({radius:e=W(5,Math.PI/10),widthSegments:o=64,heightSegments:r=32,phiStart:i=0,phiLength:s=Math.PI*2,thetaLength:a=Math.PI/10}={}){super(),this.copy(new n.SphereGeometry(e,o,r,i,s,0,a));const l=Mt(e,a);this.translate(0,-e+l,0)}}class At extends n.BufferGeometry{constructor({trunkRadiusTop:e=.25,trunkRadiusBottom:o=.4,trunkHeight:r=2.5,trunkSegments:i=14,leafSize:s=.8,leafCount:a=6,leafDetail:l=0,leafSpreadRadius:c=1.5}={}){super();const u=new n.CylinderGeometry(e,o,r,i);u.translate(0,r/2,0);const m=[];for(let h=0;h<a;h++){const d=new n.DodecahedronGeometry(s,l);d.translate((Math.random()-.5)*c,(Math.random()-.5)*s+r,(Math.random()-.5)*c),m.push(d)}this.copy(g([u.toNonIndexed(),g(m,!1)],!0)),this.computeVertexNormals()}}class Co extends n.Mesh{constructor({width:e=5,height:o=3,depth:r=5,wallThickness:i=.05,interiorColor:s=C.WHITE_SMOKE,floorColor:a=C.RAW_SIENNA,exteriorColor:l=C.GRAY}={}){super(new De({width:e,height:o,depth:r,wallThickness:i}),[new n.MeshStandardMaterial({color:s}),new n.MeshStandardMaterial({color:a}),new n.MeshStandardMaterial({color:l})])}}const It={uniforms:{time:{value:0}},vertexShader:`
2
- varying vec3 vNormal;
3
- varying vec3 vPosition;
4
- void main() {
5
- vNormal = normalize(normal);
6
- vPosition = position;
7
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
8
- }
9
- `,fragmentShader:`
10
- varying vec3 vNormal;
11
- varying vec3 vPosition;
12
-
13
- // Simple 3D noise function
14
- float hash(vec3 p) {
15
- p = fract(p * 0.3183099 + vec3(0.71, 0.113, 0.419));
16
- p *= 17.0;
17
- return fract(p.x * p.y * p.z * (p.x + p.y + p.z));
18
- }
19
-
20
- float noise(vec3 p) {
21
- vec3 ip = floor(p);
22
- vec3 fp = fract(p);
23
- fp = fp * fp * (3.0 - 2.0 * fp); // Smoothstep
24
- return mix(
25
- mix(mix(hash(ip), hash(ip + vec3(1.0, 0.0, 0.0)), fp.x),
26
- mix(hash(ip + vec3(0.0, 1.0, 0.0)), hash(ip + vec3(1.0, 1.0, 0.0)), fp.x), fp.y),
27
- mix(mix(hash(ip + vec3(0.0, 0.0, 1.0)), hash(ip + vec3(1.0, 0.0, 1.0)), fp.x),
28
- mix(hash(ip + vec3(0.0, 1.0, 1.0)), hash(ip + vec3(1.0, 1.0, 1.0)), fp.x), fp.y),
29
- fp.z);
30
- }
31
-
32
- void main() {
33
- vec3 color = vec3(0.8, 0.8, 0.7); // Base moon color
34
- float n = noise(vPosition * 0.5); // Apply noise with frequency
35
- color *= 0.8 + 0.2 * n; // Modulate color by noise
36
- gl_FragColor = vec4(color, 1.0);
37
- }
38
- `};class Vo extends n.Mesh{constructor(){super(new n.SphereGeometry(5,32,32),new n.ShaderMaterial(It))}}class Ro extends n.Mesh{constructor({width:e=1,height:o=1.5,depth:r=.5,coverThickness:i=.05,pageIndent:s=.05,coverColor:a=C.DARK_RED,pageColor:l=C.TITANIUM_WHITE}={}){super(new X(e,o,r,i,s),[new n.MeshStandardMaterial({color:a,metalness:.1,roughness:.7,flatShading:!0}),new n.MeshStandardMaterial({color:l,flatShading:!0})])}}class Oo extends n.Mesh{constructor(){super(new ke,[new n.MeshStandardMaterial({color:8965290,transparent:!0,depthWrite:!1,opacity:.4,roughness:.1,metalness:.5}),new n.MeshStandardMaterial({color:9127187,roughness:1})])}}class Uo extends n.Mesh{constructor(){super(new qe,[new n.MeshStandardMaterial({color:8965375,transparent:!0,depthWrite:!1,opacity:.5,roughness:.1,metalness:.3}),new n.MeshStandardMaterial({color:9127187,roughness:1}),new n.MeshStandardMaterial({color:C.PINK_SHERBET,transparent:!0,depthWrite:!1,opacity:.5})])}}class No extends n.Mesh{constructor(){super(new Ye,new n.MeshPhysicalMaterial({color:5597999,roughness:.1,transmission:.9,thickness:.2,metalness:0,clearcoat:1,clearcoatRoughness:.1}))}}class Fo extends n.Mesh{constructor({width:e=.4,height:o=1.2,depth:r=.2}={}){super(new Xe(e,o,r),new n.MeshStandardMaterial({color:7829367,roughness:.8}))}}class _o extends n.Mesh{constructor(){super(new Ze,[new n.MeshStandardMaterial({color:8421504,flatShading:!0}),new n.MeshStandardMaterial({color:6908265,flatShading:!0}),new n.MeshStandardMaterial({color:5263440,flatShading:!0}),new n.MeshStandardMaterial({color:4210752,flatShading:!0})])}}class Lo extends n.Mesh{constructor({totalHeight:e=1.75,baseWidth:o=.75}={}){super(new je(e,o),new n.MeshStandardMaterial({color:7829367,roughness:.8}))}}class zo extends n.Mesh{constructor(e=.6,o=1,r=.2,i=.6){super(new Qe(e,o,r,i),new n.MeshStandardMaterial({color:7829367,roughness:.8}))}}class Do extends n.Mesh{constructor(e=.5,o=.8,r=.15){super(new Ke(e,o,r),new n.MeshStandardMaterial({color:7829367,roughness:.8}))}}class ko extends n.Mesh{constructor({height:e=2.25}={}){super(new We({height:e}),new n.MeshStandardMaterial({color:9141627,flatShading:!0}))}}class Ho extends n.Mesh{constructor({barHeight:e=2,barRadius:o=.05,spikeHeight:r=.3,spikeRadius:i=.075,spikeScaleZ:s=1,radialSegments:a=8}={}){super(new Q({barHeight:e,barRadius:o,spikeHeight:r,spikeRadius:i,spikeScaleZ:s,radialSegments:a}),new n.MeshStandardMaterial({color:3355443,metalness:.8,roughness:.4}))}}class qo extends n.Mesh{constructor({count:e=20,spacing:o=.4,barHeight:r=2,barRadius:i=.05,spikeHeight:s=.3,spikeRadius:a=.075,spikeScaleZ:l=1,railHeight:c=.1,railDepth:u=.05,railOffset:m=0,radialSegments:h=8}={}){super(new Je({count:e,spacing:o,barHeight:r,barRadius:i,spikeHeight:s,spikeRadius:a,spikeScaleZ:l,railHeight:c,railDepth:u,railOffset:m,radialSegments:h}),new n.MeshStandardMaterial({color:3355443,metalness:.8,roughness:.4}))}}class Yo extends n.Mesh{constructor({width:e=5,height:o=8,depth:r=1,shelves:i=4,frameThickness:s=.1,open:a=!1}={}){super(new $e({width:e,height:o,depth:r,shelves:i,frameThickness:s,open:a}),new n.MeshStandardMaterial({color:9127187}))}}class Xo extends n.Mesh{constructor(){super(new et,[new n.MeshStandardMaterial({color:9132587}),new n.MeshStandardMaterial({color:4929057})])}}class Zo extends n.Mesh{constructor({radiusTop:e=.2,radiusBottom:o=.2,height:r=1,flameHeight:i=.25,flameRadius:s=.05,segments:a=16}={}){super(new tt({radiusTop:e,radiusBottom:o,height:r,flameHeight:i,flameRadius:s,segments:a}),[new n.MeshStandardMaterial({color:16777215}),new n.MeshStandardMaterial({color:16766720,emissive:16753920,emissiveIntensity:.35})])}}class jo extends n.Mesh{constructor({height:e=.25,radius:o=.05,segmentsU:r=16,segmentsV:i=16}={}){super(new K({segmentsU:r,segmentsV:i,height:e,radius:o}),new n.MeshStandardMaterial({color:16766720,emissive:16753920,emissiveIntensity:.35}))}}class Qo extends n.Group{constructor(e=1.3,o=.5){super();const r=new n.CylinderGeometry(o,o,.2,16),i=new n.MeshStandardMaterial({color:9127187,flatShading:!0}),s=new n.Mesh(r,i);s.position.set(0,0,0),this.add(s);const a=new n.CylinderGeometry(o*.9,o*.9,e),l=new n.MeshStandardMaterial({color:16766720,flatShading:!0,transparent:!0,opacity:.6}),c=new n.Mesh(a,l);c.position.set(0,e/2+.1,0),this.add(c);const u=new n.ConeGeometry(o*1.1,.5,8),m=new n.MeshStandardMaterial({color:9127187,flatShading:!0}),h=new n.Mesh(u,m);h.position.set(0,e+.35,0),this.add(h);const d=new n.TorusGeometry(o*.8,.05,8,16),f=new n.MeshStandardMaterial({color:9127187,flatShading:!0}),p=new n.Mesh(d,f);p.position.set(0,e+.85,0),this.add(p);const M=new n.PointLight(16755200,1.5,15);M.position.set(0,e/2+.1,0),M.castShadow=!0,this.add(M)}}class Ko extends n.Mesh{constructor(){super(new ot,[new n.MeshStandardMaterial({color:8421504,flatShading:!0}),new n.MeshStandardMaterial({color:4950843,flatShading:!0,opacity:.8,transparent:!0})])}}class Wo extends n.Mesh{constructor(e=1,o=4,r=4){super(new rt(e,o,r),new n.MeshStandardMaterial({color:8421504,flatShading:!0}))}}class Jo extends n.Mesh{constructor(){super(new st,new n.MeshStandardMaterial({color:8421504,flatShading:!0}))}}class $o extends n.Group{constructor(){super();const e=new n.CylinderGeometry(.3,.4,.1,16),o=new n.MeshStandardMaterial({color:3355443,roughness:.6,metalness:.3}),r=new n.Mesh(e,o);r.position.y=.05;const i=new n.CylinderGeometry(.1,.1,.7,16),s=new n.MeshStandardMaterial({color:5592405,roughness:.5,metalness:.4}),a=new n.Mesh(i,s);a.position.y=.4;const l=new n.ConeGeometry(.075,.2,16),c=new n.MeshStandardMaterial({color:16733440,emissive:16733440,emissiveIntensity:.6,transparent:!0,opacity:.8}),u=new n.Mesh(l,c);u.position.y=.8,this.add(r,a,u)}}class en extends n.Group{constructor(){super();const e=new n.BoxGeometry(3,4,.1),o=new n.MeshStandardMaterial({color:3026478,roughness:.8,metalness:.6}),r=new n.BoxGeometry(.2,.5,.2),i=new n.MeshStandardMaterial({color:11184810,roughness:.5,metalness:.7}),s=new n.CylinderGeometry(.3,.3,.1,16),a=new n.MeshStandardMaterial({color:5592405,roughness:.7,metalness:.5}),l=new n.Mesh(e,o);for(let y=-1;y<=1;y++){const w=new n.Mesh(r,i);w.position.set(y,1.5,.1),l.add(w)}const c=new n.Mesh(s,a);c.rotation.x=Math.PI/2,c.position.set(0,.5,.15),l.add(c);const u=new n.SphereGeometry(.15,8,8),m=new n.MeshStandardMaterial({color:16711680,emissive:16711680,emissiveIntensity:.5}),h=new n.Mesh(u,m);h.position.set(0,-1,.1),l.add(h),this.add(l);let d=.015,f=.8,p=.2;function M(){requestAnimationFrame(M);const y=p+Math.abs(Math.sin(Date.now()*d))*(f-p);h.material.emissiveIntensity=y}M()}}class tn extends n.Mesh{constructor({flaskRadius:e=1,neckRadius:o=.3,height:r=2.5,neckHeight:i=1,radialSegments:s=16}={}){super(new pt({flaskRadius:e,neckRadius:o,height:r,neckHeight:i,radialSegments:s}),new n.MeshPhysicalMaterial({color:8965375,transparent:!0,opacity:.4,roughness:.1,metalness:.1,reflectivity:.8,transmission:.9,side:n.DoubleSide}))}}class on extends n.Mesh{constructor(){super(new xt,new n.MeshPhysicalMaterial({color:8965375,transparent:!0,depthWrite:!1,opacity:.4,roughness:.1,metalness:.1,reflectivity:.8,transmission:.9,side:n.DoubleSide}))}}class nn extends n.Group{constructor(){super();const e=new n.BoxGeometry(2,3,.1),o=new n.MeshStandardMaterial({color:3355443,roughness:.8,metalness:.5}),r=new n.Mesh(e,o),i=new n.CylinderGeometry(.1,.1,.2,8),s=new n.CylinderGeometry(.05,.05,1,8),a=new n.MeshStandardMaterial({color:11184810,roughness:.5,metalness:.7});for(let l=-.5;l<=.5;l+=.5){const c=new n.Mesh(i,a);c.position.set(l,1,.1);const u=new n.Mesh(s,a);u.position.y=.5,c.add(u),this.add(c)}this.add(r)}}class rn extends n.Group{constructor(){super();const e=new n.BoxGeometry(1,.2,.5),o=new n.MeshStandardMaterial({color:4473924,roughness:.6,metalness:.3}),r=new n.Mesh(e,o);r.position.y=.1;const i=new n.BoxGeometry(.2,1,.2),s=new n.Mesh(i,o);s.position.set(0,.6,-.2);const a=new n.CylinderGeometry(.1,.1,.4,8),l=new n.MeshStandardMaterial({color:3355443,roughness:.5,metalness:.6}),c=new n.Mesh(a,l);c.position.set(0,1.1,-.35),c.rotation.x=-Math.PI/4;const u=new n.BoxGeometry(.6,.1,.6),m=new n.MeshStandardMaterial({color:5592405,roughness:.8,metalness:.2}),h=new n.Mesh(u,m);h.position.set(0,.6,0),this.add(r,s,c,h)}}class sn extends n.Group{constructor(){super();const e=new wt,o=new n.CylinderGeometry(.2,.3,1.5,8);o.translate(0,.75,0);const r=new n.MeshStandardMaterial({color:6045747,roughness:1,metalness:0,side:n.DoubleSide}),i=new n.MeshStandardMaterial({color:9132587,roughness:.8,metalness:.1}),s=new n.Mesh(e,r);s.castShadow=!0;const a=new n.Mesh(o,i);a.castShadow=!0,a.position.set(.3,1.3,0),a.rotation.z=Math.PI/4,this.add(s,a)}}class an extends n.Mesh{constructor({width:o=3,height:r=4,depth:i=.1}={}){super();v(this,"geometry");v(this,"material");this.geometry=new n.BoxGeometry(o,r,i),this.material=new n.MeshStandardMaterial({color:3026478,roughness:.8,metalness:.6})}}class cn extends n.Mesh{constructor({radius:o=.15,color:r=16762823,emissive:i=16711680,emissiveIntensity:s=.5}={}){super();v(this,"geometry");v(this,"material");this.geometry=new n.SphereGeometry(o,8,8),this.material=new n.MeshStandardMaterial({color:r,emissive:i,emissiveIntensity:s})}}class ln extends n.Group{constructor(){super();const e=100,o=.05,r=new n.CatmullRomCurve3(Array.from({length:e},(u,m)=>{const h=m*.2;return new n.Vector3(Math.cos(h)*.4,m*o,Math.sin(h)*.4)})),i=new n.TubeGeometry(r,200,.1,8,!1),s=new n.MeshStandardMaterial({color:8965375,transparent:!0,opacity:.3,roughness:.1,metalness:.2,emissive:8965375}),a=new n.Mesh(i,s);this.add(a);function l(){s.emissiveIntensity=.2+Math.sin(Date.now()*.005)*.1}function c(){requestAnimationFrame(c),l()}c()}}class un extends n.Mesh{constructor({radius:e=.3,height:o=.4,count:r=3,thickness:i=.03,radialSegments:s=16}={}){super(new vt({radius:e,height:o,count:r,thickness:i,radialSegments:s}),new n.MeshStandardMaterial({color:8947848,roughness:.7,metalness:.3}))}}class mn extends n.Mesh{constructor(){super(new gt,[new n.MeshStandardMaterial({color:3355443,roughness:.6,metalness:.5}),new n.MeshStandardMaterial({color:16737792,roughness:.5,metalness:.8,side:n.DoubleSide})])}}class hn extends n.Mesh{constructor(e=.2,o=.2,r=3,i=32){super(new z(e,o,r,i),new n.MeshPhysicalMaterial({color:8965375,transparent:!0,opacity:.4,roughness:.1,metalness:.1,reflectivity:.8,transmission:.9,depthWrite:!1,side:n.DoubleSide}))}}class dn extends n.Group{constructor(e=3,o=[65450,16711850,11141375]){super();const r=new n.BoxGeometry(3,.2,1),i=new n.MeshStandardMaterial({color:9127187,roughness:.7,metalness:.3}),s=new n.Mesh(r,i);s.position.y=.5,s.castShadow=!0;const a=new z(.1,.1,1,16),l=new n.MeshStandardMaterial({color:11184810,transparent:!0,opacity:.4,roughness:.1,metalness:.5,depthWrite:!1,side:n.DoubleSide});for(let c=0;c<e;c++){const u=new n.Mesh(a,l),m=(c-(e-1)/2)*.8;u.position.set(m,1,0),u.castShadow=!0;const h=new z(.099,.099,.5,16,!1),d=o[c%o.length],f=new n.MeshStandardMaterial({color:d,emissive:d,emissiveIntensity:.5,transparent:!0,opacity:.6}),p=new n.Mesh(h,f);p.position.set(0,-.25,0),u.add(p),s.add(u)}this.add(s)}}class fn extends n.Mesh{constructor({sides:e=5,innerRadius:o=.5,outerRadius:r=1,depth:i=.25}={}){super(new it(e,o,r,i),new n.MeshStandardMaterial({color:16776960,emissive:16766720,emissiveIntensity:.25,metalness:.1,roughness:.3,flatShading:!0}))}}class pn extends n.Mesh{constructor({sides:e=5,innerRadius:o=.5,outerRadius:r=1,holeSides:i=5,holeRadius:s=.25,depth:a=.25}={}){super(new lt(e,o,r,i,s,a),new n.MeshStandardMaterial({color:11184810,metalness:.8,roughness:.2}))}}class Mn extends n.Mesh{constructor({size:e=1,width:o=2.1,height:r=1.4,tipDepth:i=1.6,depth:s=.25}={}){super(new mt(e,o,r,i,s),new n.MeshStandardMaterial({color:12986408,emissive:12981270,emissiveIntensity:.25,metalness:.1,roughness:.3,flatShading:!0}))}}class yn extends n.Mesh{constructor({radius:e=1,depth:o=.01}={}){super(new H(e,o),new n.MeshStandardMaterial({color:16777215,emissive:16777215,emissiveIntensity:.1,metalness:.1,roughness:.3,flatShading:!0}))}}class xn extends n.Mesh{constructor({points:e=5,innerRadius:o=.5,outerRadius:r=1,depth:i=.25}={}){super(new dt(e,o,r,i),new n.MeshStandardMaterial({color:16776960,emissive:16766720,emissiveIntensity:.25,metalness:.1,roughness:.3,flatShading:!0}))}}class wn extends n.Mesh{constructor(){super(new ft,new n.MeshStandardMaterial({color:16777215}))}}class vn extends n.Mesh{constructor({trunkRadiusTop:e=.25,trunkRadiusBottom:o=.4,trunkHeight:r=2.5,trunkSegments:i=14,trunkColor:s=9127187,leafSize:a=.8,leafCount:l=6,leafDetail:c=0,leafSpreadRadius:u=1.5,leafColor:m=2263842}={}){super(new At({trunkRadiusTop:e,trunkRadiusBottom:o,trunkHeight:r,trunkSegments:i,leafSize:a,leafCount:l,leafDetail:c,leafSpreadRadius:u}),[new n.MeshStandardMaterial({color:s,roughness:.9,metalness:0,flatShading:!0}),new n.MeshStandardMaterial({color:m,roughness:.8,metalness:0,flatShading:!0})])}}class gn extends n.Mesh{constructor({radius:e=3,height:o=.6,widthSegments:r=64,heightSegments:i=16,phiStart:s=0,phiLength:a=Math.PI*2}={}){super(new St({radius:e,height:o,widthSegments:r,heightSegments:i,phiStart:s,phiLength:a}),new n.MeshStandardMaterial({color:65280,flatShading:!0}))}}class Sn extends n.Mesh{constructor({radius:e=W(5,Math.PI/10),widthSegments:o=64,heightSegments:r=32,phiStart:i=0,phiLength:s=Math.PI*2,thetaLength:a=Math.PI/10}={}){super(new Gt({radius:e,widthSegments:o,heightSegments:r,phiStart:i,phiLength:s,thetaLength:a}),new n.MeshStandardMaterial({color:65280,flatShading:!0}))}}function Gn(t){if(!t)throw new Error("A material must be provided to add instance color support.");return t.onBeforeCompile=e=>{e.vertexShader=e.vertexShader.replace("void main() {",`attribute vec3 instanceColor;
39
- varying vec3 vColor;
40
- void main() {`),e.vertexShader=e.vertexShader.replace("#include <begin_vertex>",`#include <begin_vertex>
41
- vColor = instanceColor;`),e.fragmentShader=e.fragmentShader.replace("void main() {",`varying vec3 vColor;
42
- void main() {`),e.fragmentShader=e.fragmentShader.replace("#include <dithering_fragment>",`#include <dithering_fragment>
43
- gl_FragColor.rgb = vColor * gl_FragColor.rgb;`)},t}function An(t,{time:e=0,waveFrequency:o=.2,waveAmplitude:r=.5}={}){t.onBeforeCompile=i=>{i.uniforms.time={value:e},i.uniforms.waveFrequency={value:o},i.uniforms.waveAmplitude={value:r},i.vertexShader=`
44
- uniform float time;
45
- uniform float waveFrequency;
46
- uniform float waveAmplitude;
47
-
48
- vec3 waterDisplacement(vec3 position, vec3 normal) {
49
- vec3 displaced = position;
50
-
51
- // Displace along the normal direction instead of local y-axis
52
- displaced += normal * (sin(position.x * waveFrequency + time) * waveAmplitude);
53
- displaced += normal * (cos(position.z * waveFrequency + time) * waveAmplitude);
54
-
55
- return displaced;
56
- }
57
- `+i.vertexShader,i.vertexShader=i.vertexShader.replace("#include <begin_vertex>",`
58
- vec3 transformed = waterDisplacement(position, normal);
59
- `),t.userData.shader=i}}function In(t,e){t.userData.shader&&(t.userData.shader.uniforms.time.value+=e)}function bn(t,{time:e=0,intensity:o=1,axis:r=k.XYZ,scale:i=10}={}){t.onBeforeCompile=s=>{s.uniforms.time={value:e},s.uniforms.axis={value:r},s.uniforms.intensity={value:o},s.uniforms.scale={value:i},s.vertexShader=`
60
- uniform float time;
61
- uniform vec3 axis;
62
- uniform float intensity;
63
- uniform float scale;
64
-
65
- float mod289(float x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
66
- vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
67
- vec4 perm(vec4 x) { return mod289(((x * 34.0) + 1.0) * x); }
68
-
69
- float noise(vec3 p) {
70
- vec3 a = floor(p);
71
- vec3 d = p - a;
72
- d = d * d * (3.0 - 2.0 * d);
73
-
74
- vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);
75
- vec4 k1 = perm(b.xyxy);
76
- vec4 k2 = perm(k1.xyxy + b.zzww);
77
-
78
- vec4 c = k2 + a.zzzz;
79
- vec4 k3 = perm(c);
80
- vec4 k4 = perm(c + 1.0);
81
-
82
- vec4 o1 = fract(k3 * (1.0 / 41.0));
83
- vec4 o2 = fract(k4 * (1.0 / 41.0));
84
-
85
- vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
86
- vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
87
-
88
- return o4.y * d.y + o4.x * (1.0 - d.y);
89
- }
90
- `+s.vertexShader,s.vertexShader=s.vertexShader.replace("#include <begin_vertex>",`
91
- vec3 transformed = vec3(position);
92
- float n = noise(transformed * scale + time);
93
- transformed += normalize(axis) * n * intensity;
94
- vec3 transformedNormal = normal;
95
- `),t.userData.shader=s}}function En(t,e){t.userData.shader&&(t.userData.shader.uniforms.time.value+=e)}const F={uniforms:{turbidity:{value:10},rayleigh:{value:2},mieCoefficient:{value:.005},mieDirectionalG:{value:.8},sunPosition:{value:new n.Vector3().setFromSphericalCoords(1,n.MathUtils.degToRad(90),n.MathUtils.degToRad(180))},up:{value:new n.Vector3(0,1,0)}},vertexShader:`
96
- uniform vec3 sunPosition;
97
- uniform float rayleigh;
98
- uniform float turbidity;
99
- uniform float mieCoefficient;
100
- uniform vec3 up;
101
-
102
- varying vec3 vWorldPosition;
103
- varying vec3 vSunDirection;
104
- varying float vSunfade;
105
- varying vec3 vBetaR;
106
- varying vec3 vBetaM;
107
- varying float vSunE;
108
-
109
- // constants for atmospheric scattering
110
- const float e = 2.71828182845904523536028747135266249775724709369995957;
111
- const float pi = 3.141592653589793238462643383279502884197169;
112
-
113
- // wavelength of used primaries, according to preetham
114
- const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );
115
- // this pre-calculation replaces older TotalRayleigh(vec3 lambda) function:
116
- // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
117
- const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );
118
-
119
- // mie stuff
120
- // K coefficient for the primaries
121
- const float v = 4.0;
122
- const vec3 K = vec3( 0.686, 0.678, 0.666 );
123
- // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K
124
- const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );
125
-
126
- // earth shadow hack
127
- // cutoffAngle = pi / 1.95;
128
- const float cutoffAngle = 1.6110731556870734;
129
- const float steepness = 1.5;
130
- const float EE = 1000.0;
131
-
132
- float sunIntensity( float zenithAngleCos ) {
133
- zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );
134
- return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );
135
- }
136
-
137
- vec3 totalMie( float T ) {
138
- float c = ( 0.2 * T ) * 10E-18;
139
- return 0.434 * c * MieConst;
140
- }
141
-
142
- void main() {
143
- vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
144
- vWorldPosition = worldPosition.xyz;
145
-
146
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
147
- gl_Position.z = gl_Position.w; // set z to camera.far
148
-
149
- vSunDirection = normalize( sunPosition );
150
-
151
- vSunE = sunIntensity( dot( vSunDirection, up ) );
152
-
153
- vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );
154
-
155
- float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );
156
-
157
- // extinction (absorption + out scattering)
158
- // rayleigh coefficients
159
- vBetaR = totalRayleigh * rayleighCoefficient;
160
-
161
- // mie coefficients
162
- vBetaM = totalMie( turbidity ) * mieCoefficient;
163
- }
164
- `,fragmentShader:`
165
- varying vec3 vWorldPosition;
166
- varying vec3 vSunDirection;
167
- varying float vSunfade;
168
- varying vec3 vBetaR;
169
- varying vec3 vBetaM;
170
- varying float vSunE;
171
-
172
- uniform float mieDirectionalG;
173
- uniform vec3 up;
174
-
175
- // constants for atmospheric scattering
176
- const float pi = 3.141592653589793238462643383279502884197169;
177
-
178
- const float n = 1.0003; // refractive index of air
179
- const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)
180
-
181
- // optical length at zenith for molecules
182
- const float rayleighZenithLength = 8.4E3;
183
- const float mieZenithLength = 1.25E3;
184
- // 66 arc seconds -> degrees, and the cosine of that
185
- const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;
186
-
187
- // 3.0 / ( 16.0 * pi )
188
- const float THREE_OVER_SIXTEENPI = 0.05968310365946075;
189
- // 1.0 / ( 4.0 * pi )
190
- const float ONE_OVER_FOURPI = 0.07957747154594767;
191
-
192
- float rayleighPhase( float cosTheta ) {
193
- return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );
194
- }
195
-
196
- float hgPhase( float cosTheta, float g ) {
197
- float g2 = pow( g, 2.0 );
198
- float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );
199
- return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );
200
- }
201
-
202
- void main() {
203
- vec3 direction = normalize( vWorldPosition - cameraPosition );
204
-
205
- // optical length
206
- // cutoff angle at 90 to avoid singularity in next formula.
207
- float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );
208
- float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );
209
- float sR = rayleighZenithLength * inverse;
210
- float sM = mieZenithLength * inverse;
211
-
212
- // combined extinction factor
213
- vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );
214
-
215
- // in scattering
216
- float cosTheta = dot( direction, vSunDirection );
217
-
218
- float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );
219
- vec3 betaRTheta = vBetaR * rPhase;
220
-
221
- float mPhase = hgPhase( cosTheta, mieDirectionalG );
222
- vec3 betaMTheta = vBetaM * mPhase;
223
-
224
- vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );
225
- Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );
226
-
227
- // night sky
228
- float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]
229
- float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]
230
- vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );
231
- vec3 L0 = vec3( 0.1 ) * Fex;
232
-
233
- // composition + solar disc
234
- float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );
235
- L0 += ( vSunE * 19000.0 * Fex ) * sundisk;
236
-
237
- vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );
238
-
239
- vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );
240
-
241
- gl_FragColor = vec4( retColor, 1.0 );
242
-
243
- #include <tonemapping_fragment>
244
- #include <colorspace_fragment>
245
- }
246
- `},_={uniforms:{topColor:{value:new n.Color(.5,.8,1)},bottomColor:{value:new n.Color(1,1,1)}},vertexShader:`
247
- varying vec3 vPosition;
248
- void main() {
249
- vPosition = position;
250
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
251
- }
252
- `,fragmentShader:`
253
- uniform vec3 topColor;
254
- uniform vec3 bottomColor;
255
- varying vec3 vPosition;
256
- void main() {
257
- float y = normalize(vPosition).y * 0.5 + 0.5; // Normalizing y to range 0 to 1
258
- gl_FragColor = vec4(mix(bottomColor, topColor, y), 1.0);
259
- }
260
- `},Bn={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:`
261
- varying vec2 vUv;
262
- void main() {
263
- vUv = uv;
264
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
265
- }
266
- `,fragmentShader:`
267
- uniform float opacity;
268
- uniform sampler2D tDiffuse;
269
- varying vec2 vUv;
270
- void main() {
271
- vec4 texel = texture2D(tDiffuse, vUv);
272
- gl_FragColor = opacity * texel;
273
- }
274
- `},L={uniforms:{topColor:{value:new n.Color(51)},bottomColor:{value:new n.Color(17)},offset:{value:33},exponent:{value:.6}},vertexShader:`
275
- varying vec3 vWorldPosition;
276
- void main() {
277
- vec4 worldPosition = modelMatrix * vec4(position, 1.0);
278
- vWorldPosition = worldPosition.xyz;
279
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
280
- }
281
- `,fragmentShader:`
282
- uniform vec3 topColor;
283
- uniform vec3 bottomColor;
284
- uniform float offset;
285
- uniform float exponent;
286
- varying vec3 vWorldPosition;
287
- void main() {
288
- float h = normalize(vWorldPosition + offset).y;
289
- gl_FragColor = vec4(mix(bottomColor, topColor, max(pow(max(h, 0.0), exponent), 0.0)), 1.0);
290
- }
291
- `};class Tn extends n.Mesh{constructor(){super();v(this,"geometry");v(this,"material");this.geometry=new n.BoxGeometry(1,1,1),this.material=new n.ShaderMaterial({uniforms:F.uniforms,vertexShader:F.vertexShader,fragmentShader:F.fragmentShader,depthWrite:!1,side:n.BackSide}),this.scale.setScalar(45e4);const o=n.MathUtils.degToRad(89),r=n.MathUtils.degToRad(180),i=new n.Vector3().setFromSphericalCoords(1,o,r);this.material.uniforms.sunPosition.value=i}sunPosition(o,r){const i=new n.Vector3;i.setFromSphericalCoords(1,o,r),this.material.uniforms.sunPosition.value=i}}class Pn extends n.Mesh{constructor(o=1e3){super();v(this,"geometry");v(this,"material");this.geometry=new n.BoxGeometry(o,o,o),this.material=new n.ShaderMaterial({uniforms:_.uniforms,vertexShader:_.vertexShader,fragmentShader:_.fragmentShader,side:n.BackSide})}}class Cn extends n.Mesh{constructor(o=1e3){super();v(this,"geometry");v(this,"material");this.geometry=new n.SphereGeometry(o,32,15),this.material=new n.ShaderMaterial({vertexShader:L.vertexShader,fragmentShader:L.fragmentShader,uniforms:L.uniforms,side:n.BackSide})}}const Vn=t=>{const e=new Uint8Array(4*t*t);for(let r=0;r<t*t;r++){const i=r*4,s=(r%t^Math.floor(r/t))&1?255:0;e[i]=s,e[i+1]=s,e[i+2]=s,e[i+3]=255}const o=new n.DataTexture(e,t,t,n.RGBAFormat,n.UnsignedByteType);return o.wrapS=n.RepeatWrapping,o.wrapT=n.RepeatWrapping,o.minFilter=n.NearestFilter,o.needsUpdate=!0,o};function Rn(t,e){if(t.length===0)throw new Error("No objects provided for alignment.");const o=new n.Box3,r=new n.Vector3,i=t.map(a=>(o.setFromObject(a),a.getWorldPosition(r),{object:a,boundingBox:o.clone(),worldPosition:r.clone()})),s=i.reduce((a,{boundingBox:l})=>{switch(e){case E.LEFT:return Math.min(a,l.min.x);case E.RIGHT:return Math.max(a,l.max.x);case E.BOTTOM:return Math.min(a,l.min.y);case E.TOP:return Math.max(a,l.max.y);case E.BACK:return Math.min(a,l.min.z);case E.FRONT:return Math.max(a,l.max.z);default:throw new Error(`Unsupported side type: ${e}`)}},e===E.RIGHT||e===E.TOP||e===E.FRONT?-1/0:1/0);i.forEach(({object:a,boundingBox:l})=>{switch(e){case E.LEFT:a.position.x+=s-l.min.x;break;case E.RIGHT:a.position.x+=s-l.max.x;break;case E.BOTTOM:a.position.y+=s-l.min.y;break;case E.TOP:a.position.y+=s-l.max.y;break;case E.BACK:a.position.z+=s-l.min.z;break;case E.FRONT:a.position.z+=s-l.max.z;break}})}function On(t,e=R.RIGHT,o=0){const r=e.clone().normalize();let i=new n.Vector3;const s=new n.Box3;t.forEach(a=>{s.setFromObject(a);const c=new n.Vector3(s.max.x-s.min.x,s.max.y-s.min.y,s.max.z-s.min.z).dot(r),u=new n.Vector3;s.getCenter(u);const m=r.clone().multiplyScalar(c/2);a.position.copy(i.clone().add(m).sub(u).add(a.position)),i.add(r.clone().multiplyScalar(c+o))})}function Un(t,e,o=new n.Vector3(0,0,0)){const r=new n.Box3().setFromObject(t);if(r.isEmpty())console.warn("The object has no geometry or is not visible.");else{const i=r.min,s=new n.Vector3((i.x+r.max.x)/2,i.y,(i.z+r.max.z)/2);t.localToWorld(s);const a=e.clone().sub(s).add(o),l=t.worldToLocal(a.clone());t.position.add(l)}}function Nn(t,e){const o=new n.Box3().setFromBufferAttribute(new n.Float32BufferAttribute(t.attributes.position.array,3));if(o.isEmpty())console.warn("The geometry is empty or invalid.");else{const r=o.min.y;t.translate(0,e-r,0)}}function Fn(t,e,o=new n.Vector3(0,0,0)){const r=new n.Box3().setFromObject(t);if(r.isEmpty())console.warn("The InstancedMesh has no geometry or is not visible.");else{const i=r.min.y,s=new n.Vector3(0,e.y-i,0).add(o),a=t.worldToLocal(s.clone());t.position.add(a)}}function _n(t,e,o,r=new n.Vector3(0,0,0)){const i=new n.Box3().setFromObject(t);if(i.isEmpty())console.warn("The instanced mesh has invalid geometry.");else{const s=i.min.y,a=new n.Matrix4;t.getMatrixAt(o,a);const l=new n.Vector3,c=new n.Quaternion,u=new n.Vector3;a.decompose(l,c,u);const m=t.worldToLocal(e.clone());l.y=m.y-s+r.y,a.compose(l,c,u),t.setMatrixAt(o,a),t.instanceMatrix.needsUpdate=!0}}function bt(t,e=new n.Vector3(0,0,0),o=new n.Vector3(0,0,0)){const i=new n.Box3().setFromObject(t).getCenter(new n.Vector3),s=new n.Vector3().addVectors(e,o),a=new n.Vector3().subVectors(s,i);t.position.add(a)}function Et(t,e=new n.Vector3(0,0,0),o=new n.Vector3(0,0,0)){const i=new n.Box3().setFromObject(t).getCenter(new n.Vector3),s=new n.Vector3().addVectors(e,o);t.translateX(s.x-i.x),t.translateY(s.y-i.y),t.translateZ(s.z-i.z),t.updateMatrixWorld(!0)}function Bt(t,e=new n.Vector3(0,0,0),o=new n.Vector3(0,0,0)){t.geometry.computeBoundingBox();const r=t.geometry.boundingBox;if(r){const i=r.getCenter(new n.Vector3),s=new n.Vector3().addVectors(e,o),a=new n.Vector3().subVectors(s,i);t.geometry.translate(a.x,a.y,a.z)}}const Ln={object:bt,objectGeometry:Et,meshGeometry:Bt};function zn(t){const e=parseInt(t.slice(1),16);return[e>>16&255,e>>8&255,e&255]}function Dn(t){const[e,o,r]=V(t);return Pt(e,o,r)}function V(t){const e=t>>16&255,o=t>>8&255,r=t&255;return[e,o,r]}function kn(t,e,o){e/=100,o/=100;function r(c,u,m){return m<0&&(m+=1),m>1&&(m-=1),m<1/6?c+(u-c)*6*m:m<1/2?u:m<2/3?c+(u-c)*(2/3-m)*6:c}let i,s,a;if(e===0)i=s=a=o;else{const c=o<.5?o*(1+e):o+e-o*e,u=2*o-c;i=r(u,c,t/360+1/3),s=r(u,c,t/360),a=r(u,c,t/360-1/3)}const l=c=>Math.round(c*255);return[l(i),l(s),l(a)]}function Tt(t,e,o){e/=100,o/=100;const r=a=>(a+t/30)%12,i=e*Math.min(o,1-o),s=a=>o-i*Math.max(-1,Math.min(r(a)-3,Math.min(9-r(a),1)));return[s(0)*255,s(8)*255,s(4)*255]}function Hn(t,e,o){return[t/255,e/255,o/255]}function qn(t,e,o){return t=Math.round(t),e=Math.round(e),o=Math.round(o),(t<<16)+(e<<8)+o}function Pt(t,e,o){t/=255,e/=255,o/=255;const r=Math.max(t,e,o),i=Math.min(t,e,o),s=r-i;let a=0,l=0;const c=(r+i)/2;s!==0&&(r===t?a=((e-o)/s+(e<o?6:0))*60:r===e?a=((o-t)/s+2)*60:r===o&&(a=((t-e)/s+4)*60)),s!==0&&(l=s/(1-Math.abs(2*c-1))),a=Math.round(a),l=Math.round(l*100);const u=Math.round(c*100);return[a,l,u]}function Ct(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2))}function Vt(t,e){return Math.abs(t[0]-e[0])+Math.abs(t[1]-e[1])+Math.abs(t[2]-e[2])}function Yn(t,e){const o=V(t);let r=null,i=1/0;for(const s of e){const a=V(s),l=Ct(o,a);l<i&&(i=l,r=s)}return r}function Xn(t,e){const o=V(t);let r=null,i=1/0;for(const s of e){const a=V(s),l=Vt(o,a);l<i&&(i=l,r=s)}return r}function Zn(t){const e=(t+Math.floor(-30+Math.random()*61))%360,o=Math.floor(60+Math.random()*21),r=Math.floor(50+Math.random()*21);return Tt(e,o,r)}function jn(t,e){if(!e.geometry.isBufferGeometry)throw new Error("Mesh must have a BufferGeometry.");const r=e.geometry.getAttribute("position"),i=new n.Vector3,s=new n.Vector3;let a=1/0;for(let l=0;l<r.count;l++){s.fromBufferAttribute(r,l);const c=s.distanceTo(t);c<a&&(a=c,i.copy(s))}return e.localToWorld(i),i}function Qn(t,e,o){return Math.max(0,Math.min(1,(t-e)/(o-e)))}function Kn(t,e,o,r,i,s=20,a=0,l=1){const c=[];for(let u=0;u<=s;u++){const m=u/s,h=t(Qn(m,a,l)),d=e+h*(o-e),f=r+m*(i-r);c.push(new n.Vector2(d,f))}return c}const Rt=(t,e,o,r,i=24)=>{let s=[];for(let a=0;a<=i;a++){const l=a/i,c=P.CUBIC(l,t.x,e.x,o.x,r.x),u=P.CUBIC(l,t.y,e.y,o.y,r.y);s.push(new n.Vector2(c,u))}return s},Ot=(t,e,o,r=24)=>{let i=[];for(let s=0;s<=r;s++){const a=s/r,l=P.DAMPED(a,o)*(e.x-t.x)+t.x,c=t.y+a*(e.y-t.y);i.push(new n.Vector2(l,c))}return i},Ut=(t,e,o,r,i=24)=>{let s=[];for(let a=0;a<=i;a++){const l=a/i,c=P.EXPONENTIAL(l,o,r)*(e.x-t.x)+t.x,u=t.y+l*(e.y-t.y);s.push(new n.Vector2(c,u))}return s},Nt=(t,e,o,r,i=24)=>{let s=[];for(let a=0;a<=i;a++){const l=a/i,c=P.LOGARITHMIC(l,o,r)*(e.x-t.x)+t.x,u=t.y+l*(e.y-t.y);s.push(new n.Vector2(c,u))}return s},Ft=(t,e,o,r,i,s=24)=>{let a=[];for(let l=0;l<=s;l++){const c=l/s,u=o*c*c+r*c+i+t.x,m=t.y+c*(e.y-t.y);a.push(new n.Vector2(u,m))}return a},_t=(t,e,o,r=24)=>{let i=[];for(let s=0;s<=r;s++){const a=s/r,l=P.QUADRATIC(a,t.x,e.x,o.x),c=P.QUADRATIC(a,t.y,e.y,o.y);i.push(new n.Vector2(l,c))}return i},Lt=(t,e,o,r=24)=>{let i=[];for(let s=0;s<=r;s++){const a=s/r,l=P.SIGMOID(a,o)*(e.x-t.x)+t.x,c=t.y+a*(e.y-t.y);i.push(new n.Vector2(l,c))}return i},Wn={createCubicCurvePoints:Rt,createDampedCurvePoints:Ot,createExponentialCurvePoints:Ut,createLogarithmicCurvePoints:Nt,createParabolicCurvePoints:Ft,createQuadraticCurvePoints:_t,createSigmoidCurvePoints:Lt};function Jn(t,e,o,r,i,s=[0,0],a=[1,0],l=[0,1],c=[1,1]){const u=i||zt(t,e,o);return[{pos:t,norm:u,uv:s},{pos:e,norm:u,uv:a},{pos:r,norm:u,uv:c},{pos:t,norm:u,uv:s},{pos:r,norm:u,uv:c},{pos:o,norm:u,uv:l}]}function zt(t,e,o){const r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],i=[o[0]-t[0],o[1]-t[1],o[2]-t[2]],s=[r[1]*i[2]-r[2]*i[1],r[2]*i[0]-r[0]*i[2],r[0]*i[1]-r[1]*i[0]],a=Math.sqrt(s[0]**2+s[1]**2+s[2]**2);return s.map(l=>l/a)}function $n(t,e){return t.map(([o,r,i])=>{switch(e){case"x":return[r,i];case"y":return[o,i];case"z":return[o,r];default:throw new Error(`Invalid axis: ${e}`)}})}function Dt(t){const[e,o,r]=t,i=Math.abs(e),s=Math.abs(o),a=Math.abs(r);return i>=s&&i>=a?[r>0?r:-r,o]:s>=i&&s>=a?[e,r>0?r:-r]:[e,o]}function er(t){return t.map(e=>Dt(e))}function tr(t){return t.map(([e,o,r])=>{const i=Math.atan2(r,e),s=Math.acos(o/Math.sqrt(e**2+o**2+r**2)),a=i/(2*Math.PI)+.5,l=1-s/Math.PI;return[a,l]})}function or(t){return t.map(([e,o,r])=>[Math.atan2(r,e)/(2*Math.PI)+.5,o])}function nr(t){return t.map(([e,o,r])=>{const i=Math.sqrt(e**2+r**2);return[Math.atan2(r,e)/(2*Math.PI)+.5,i]})}function kt(t,e,o,r,i){return[(t[0]-e)/(o-e),(t[1]-r)/(i-r)]}function rr(t,e,o){const[r,i]=e,[s,a]=o;return t.map(l=>kt(l,r,s,i,a))}function sr(t){const e=Math.min(...t.map(s=>s[0])),o=Math.max(...t.map(s=>s[0])),r=Math.min(...t.map(s=>s[1])),i=Math.max(...t.map(s=>s[1]));return{minBounds:[e,r],maxBounds:[o,i]}}exports.AtmosphericSkybox=Tn;exports.Axis=k;exports.BifurcatedStaircaseGeometry=go;exports.Bone=wn;exports.BoneGeometry=ft;exports.Book=Ro;exports.BookGeometry=X;exports.Bookshelf=Yo;exports.BookshelfGeometry=$e;exports.BoxSide=E;exports.BubblingEffect=ho;exports.BunsenBurner=$o;exports.Burst=fn;exports.BurstGeometry=it;exports.BurstShape=at;exports.Candle=Zo;exports.CandleGeometry=tt;exports.Center=Ln;exports.ColorPalette=C;exports.CrossHeadstone=Fo;exports.CrossHeadstoneGeometry=Xe;exports.DaySkybox=Pn;exports.Desk=Xo;exports.DeskGeometry=et;exports.Diorama=Co;exports.DioramaGeometry=De;exports.Direction=R;exports.Easing=uo;exports.ElectricPanel=en;exports.EllipticLeafGeometry=_e;exports.EmissivePulseAnimation=$t;exports.ErlenmeyerFlask=tn;exports.ErlenmeyerFlaskGeometry=pt;exports.Falloff=O;exports.Flame=jo;exports.FlameGeometry=K;exports.FlorenceFlask=on;exports.FlorenceFlaskGeometry=xt;exports.Gear=pn;exports.GearGeometry=lt;exports.GearShape=ct;exports.Heart=Mn;exports.HeartGeometry=mt;exports.HeartShape=ut;exports.Hexagon=yn;exports.HexagonGeometry=H;exports.HexagonShape=ze;exports.Hill=gn;exports.HillGeometry=St;exports.Jar=Oo;exports.JarGeometry=ke;exports.LShapedStaircaseGeometry=So;exports.Lantern=Qo;exports.LeafEffect=fo;exports.LeverPanel=nn;exports.LightFlickerAnimation=to;exports.LightningAnimation=no;exports.LineEquations=Io;exports.Mausoleum=_o;exports.MausoleumGeometry=Ze;exports.Microscope=rn;exports.Moon=Vo;exports.MortarAndPestle=sn;exports.MortarGeometry=wt;exports.MossyRocks=Ko;exports.MossyRocksGeometry=ot;exports.Mound=Sn;exports.MoundGeometry=Gt;exports.NightSkybox=Cn;exports.ObeliskHeadstone=Lo;exports.ObeliskHeadstoneGeometry=je;exports.Panel=an;exports.PanelLight=cn;exports.ParallelogramBoxGeometry=bo;exports.ParametricCurve=P;exports.ParametricCurveUtils=Wn;exports.PotionBottle=Uo;exports.PotionBottleGeometry=qe;exports.Rock=Wo;exports.RockGeometry=rt;exports.Rocks=Jo;exports.RocksGeometry=st;exports.RoundedHeadstone=zo;exports.RoundedHeadstoneGeometry=Qe;exports.SpiralStaircaseGeometry=Go;exports.SpiralTube=ln;exports.SquareHeadstone=Do;exports.SquareHeadstoneGeometry=Ke;exports.StaircaseGeometry=Ao;exports.Stand=un;exports.StandGeometry=vt;exports.Star=xn;exports.StarGeometry=dt;exports.StarShape=ht;exports.StoneFencePost=ko;exports.StoneFencePostGeometry=We;exports.TeslaCoil=mn;exports.TeslaCoilGeometry=gt;exports.TestTube=hn;exports.TestTubeGeometry=z;exports.TestTubeRack=dn;exports.Tree=vn;exports.TreeGeometry=At;exports.WineBottle=No;exports.WineBottleGeometry=Ye;exports.WroughtIronBar=Ho;exports.WroughtIronBarGeometry=Q;exports.WroughtIronFence=qo;exports.WroughtIronFenceGeometry=Je;exports.addInstanceColor=Gn;exports.addNoiseDisplacement=bn;exports.addWaterDisplacement=An;exports.alignBufferGeometryToSurface=Nn;exports.alignInstancedMeshIndexToSurface=_n;exports.alignInstancedMeshToSurface=Fn;exports.alignObjectToSurface=Un;exports.alignToEdge=Rn;exports.alignToRow=On;exports.appendSphericalCurve=yt;exports.atmosphericShader=F;exports.calculateChannelDifference=Vt;exports.calculateDistance=Ct;exports.calculateNormal=zt;exports.calculateUVBounds=sr;exports.calculateXFromSlopeIntercept=j;exports.calculateYFromSlopeIntercept=He;exports.cameraDollyAnimation=Xt;exports.cameraFlythroughAnimation=Zt;exports.cameraOrbitAnimation=jt;exports.cameraPendulumAnimation=Qt;exports.cameraSpiralAscensionAnimation=Kt;exports.cameraWobbleAnimation=Wt;exports.cameraZoomInAnimation=Jt;exports.capHeightFromRadius=Mt;exports.capWidthFromRadius=Bo;exports.cartesianToSpherical=Po;exports.centerMeshGeometry=Bt;exports.centerObject=bt;exports.centerObjectGeometry=Et;exports.checkerboardTexture=Vn;exports.circularEaseIn=ve;exports.circularEaseInOut=Se;exports.circularEaseOut=ge;exports.concave=Ie;exports.convex=be;exports.createCubicCurvePoints=Rt;exports.createDampedCurvePoints=Ot;exports.createExponentialCurvePoints=Ut;exports.createHexagonalTilesByCount=wo;exports.createHexagonalTilesByRadius=vo;exports.createLogarithmicCurvePoints=Nt;exports.createParabolicCurvePoints=Ft;exports.createQuad=Jn;exports.createQuadraticCurvePoints=_t;exports.createSigmoidCurvePoints=Lt;exports.cubicCurve=Ce;exports.cubicEaseIn=ce;exports.cubicEaseInOut=ue;exports.cubicEaseOut=le;exports.cubicUVMapping=Dt;exports.cubicUVMappingBatch=er;exports.cylindricalUVMapping=or;exports.dampedCurve=Ve;exports.daySkyShader=_;exports.displacementBrush=ro;exports.exponentialCurve=Re;exports.exponentialEaseIn=ye;exports.exponentialEaseInOut=we;exports.exponentialEaseOut=xe;exports.fadeShader=Bn;exports.findClosestColor=Yn;exports.findClosestColorChannelWise=Xn;exports.findClosestPoint=jn;exports.flattenBrush=so;exports.gaussian=Pe;exports.getAnalogousColors=Zn;exports.hexToHsl=Dn;exports.hexToRgb=V;exports.hslToHex=kn;exports.hslToRgb=Tt;exports.interpolateCurve=Kn;exports.inverse=Te;exports.linear=Ge;exports.logarithmic=Ee;exports.logarithmicCurve=Oe;exports.logarithmicRandomMax=$;exports.logarithmicRandomMin=ee;exports.moonShader=It;exports.nightSkyShader=L;exports.noiseBrush=ao;exports.normalizeRgb=Hn;exports.normalizeUV=kt;exports.normalizeUVBatch=rr;exports.parabolicCurve=Ue;exports.parseHexCode=zn;exports.planarUVMapping=$n;exports.polarUVMapping=nr;exports.quadraticCurve=Ne;exports.quadraticEaseIn=se;exports.quadraticEaseInOut=ie;exports.quadraticEaseOut=ae;exports.quarticEaseIn=me;exports.quarticEaseInOut=de;exports.quarticEaseOut=he;exports.quinticEaseIn=fe;exports.quinticEaseInOut=Me;exports.quinticEaseOut=pe;exports.radiusFromCapHeight=Eo;exports.radiusFromCapWidth=W;exports.randomFloat=D;exports.randomInteger=eo;exports.randomTransformVertices=nt;exports.rgbToHex=qn;exports.rgbToHsl=Pt;exports.rowOfBooksByCount=yo;exports.rowOfBooksByLength=xo;exports.rowOfBooksByScales=Z;exports.setRandomInterval=oo;exports.setRandomTimeout=te;exports.sigmoidCurve=Fe;exports.sineEaseIn=oe;exports.sineEaseInOut=re;exports.sineEaseOut=ne;exports.smoothBrush=io;exports.smoothstep=Ae;exports.sphericalToCartesian=To;exports.sphericalUVMapping=tr;exports.spikeBrush=co;exports.squareRoot=Be;exports.thetaLengthForRadius=Y;exports.twistBrush=lo;exports.updateNoiseDisplacementTime=En;exports.updateWaterDisplacementTime=In;
292
- //# sourceMappingURL=index.cjs.js.map