@luma.gl/gltf 9.3.0-alpha.8 → 9.3.0
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.
- package/dist/dist.dev.js +4396 -3081
- package/dist/dist.min.js +33 -14
- package/dist/gltf/animations/animations.d.ts +43 -3
- package/dist/gltf/animations/animations.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.d.ts +2 -0
- package/dist/gltf/animations/interpolate.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.js +27 -22
- package/dist/gltf/animations/interpolate.js.map +1 -1
- package/dist/gltf/create-gltf-model.d.ts.map +1 -1
- package/dist/gltf/create-gltf-model.js +29 -10
- package/dist/gltf/create-gltf-model.js.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.js +2 -2
- package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
- package/dist/gltf/gltf-animator.d.ts +12 -1
- package/dist/gltf/gltf-animator.d.ts.map +1 -1
- package/dist/gltf/gltf-animator.js +98 -6
- package/dist/gltf/gltf-animator.js.map +1 -1
- package/dist/gltf/gltf-extension-support.d.ts +3 -0
- package/dist/gltf/gltf-extension-support.d.ts.map +1 -1
- package/dist/gltf/gltf-extension-support.js +10 -5
- package/dist/gltf/gltf-extension-support.js.map +1 -1
- package/dist/index.cjs +763 -272
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-animations.js +319 -18
- package/dist/parsers/parse-gltf-animations.js.map +1 -1
- package/dist/parsers/parse-gltf-lights.d.ts +6 -2
- package/dist/parsers/parse-gltf-lights.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-lights.js +9 -6
- package/dist/parsers/parse-gltf-lights.js.map +1 -1
- package/dist/parsers/parse-gltf.d.ts +2 -0
- package/dist/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/parsers/parse-gltf.js +21 -7
- package/dist/parsers/parse-gltf.js.map +1 -1
- package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
- package/dist/parsers/parse-pbr-material.js +114 -81
- package/dist/parsers/parse-pbr-material.js.map +1 -1
- package/dist/pbr/pbr-environment.d.ts.map +1 -1
- package/dist/pbr/pbr-environment.js +7 -3
- package/dist/pbr/pbr-environment.js.map +1 -1
- package/dist/pbr/texture-transform.d.ts +24 -0
- package/dist/pbr/texture-transform.d.ts.map +1 -0
- package/dist/pbr/texture-transform.js +98 -0
- package/dist/pbr/texture-transform.js.map +1 -0
- package/dist/webgl-to-webgpu/convert-webgl-topology.js +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
- package/package.json +5 -5
- package/src/gltf/animations/animations.ts +73 -3
- package/src/gltf/animations/interpolate.ts +50 -43
- package/src/gltf/create-gltf-model.ts +29 -10
- package/src/gltf/create-scenegraph-from-gltf.ts +2 -2
- package/src/gltf/gltf-animator.ts +177 -8
- package/src/gltf/gltf-extension-support.ts +17 -5
- package/src/index.ts +1 -1
- package/src/parsers/parse-gltf-animations.ts +461 -21
- package/src/parsers/parse-gltf-lights.ts +27 -8
- package/src/parsers/parse-gltf.ts +23 -7
- package/src/parsers/parse-pbr-material.ts +184 -79
- package/src/pbr/pbr-environment.ts +10 -3
- package/src/pbr/texture-transform.ts +263 -0
- package/src/webgl-to-webgpu/convert-webgl-topology.ts +1 -1
package/dist/dist.min.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['luma'] = factory();
|
|
6
6
|
else root['luma'] = factory();})(globalThis, function () {
|
|
7
|
-
"use strict";var __exports__=(()=>{var qn=Object.create;var ft=Object.defineProperty;var Vn=Object.getOwnPropertyDescriptor;var Kn=Object.getOwnPropertyNames;var $n=Object.getPrototypeOf,Wn=Object.prototype.hasOwnProperty;var It=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Yn=(e,t)=>{for(var n in t)ft(e,n,{get:t[n],enumerable:!0})},lt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Kn(t))!Wn.call(e,s)&&s!==n&&ft(e,s,{get:()=>t[s],enumerable:!(r=Vn(t,s))||r.enumerable});return e},pt=(e,t,n)=>(lt(e,t,"default"),n&<(n,t,"default")),F=(e,t,n)=>(n=e!=null?qn($n(e)):{},lt(t||!e||!e.__esModule?ft(n,"default",{value:e,enumerable:!0}):n,e)),Gn=e=>lt(ft({},"__esModule",{value:!0}),e);var $=It((Ys,se)=>{se.exports=globalThis.luma});var Z=It((Gs,ie)=>{ie.exports=globalThis.luma});var Zt=It((oc,Ln)=>{Ln.exports=globalThis.luma});var at={};Yn(at,{GLTFAnimator:()=>J,createScenegraphsFromGLTF:()=>Bn,getGLTFExtensionSupport:()=>Ot,loadPBREnvironment:()=>Ee,parseGLTFLights:()=>Nt,parsePBRMaterial:()=>rt});pt(at,F($(),1));var Bt=F(Z(),1);function W(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var H={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Xn=H.self||H.window||H.global||{},jn=H.window||H.self||H.global||{},Jn=H.global||H.self||H.window||{},Qn=H.document||{};var Pt=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var oe=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Zn=oe&&parseFloat(oe[1])||0;var tr="",ce={};function bt(e){for(let t in ce)if(e.startsWith(t)){let n=ce[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${tr}${e}`),e}var ae="4.4.0-alpha.18";var er=globalThis.loaders?.parseImageNode,vt=typeof Image<"u",Ft=typeof ImageBitmap<"u",nr=Boolean(er),kt=Pt?!0:nr;function le(e){switch(e){case"auto":return Ft||vt||kt;case"imagebitmap":return Ft;case"image":return vt;case"data":return kt;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function fe(){if(Ft)return"imagebitmap";if(vt)return"image";if(kt)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function pe(e){let t=rr(e);if(!t)throw new Error("Not an image");return t}function Ct(e){return ht(e)}function ht(e){switch(pe(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),n=t.getContext("2d");if(!n)throw new Error("getImageData");return t.width=e.width,t.height=e.height,n.drawImage(e,0,0),n.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function rr(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var sr=/^data:image\/svg\+xml/,ir=/\.svg((\?|#).*)?$/;function mt(e){return e&&(sr.test(e)||ir.test(e))}function he(e,t){if(mt(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return zt(e,t)}function zt(e,t){if(mt(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function dt(e,t,n){let r=he(e,n),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await or(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function or(e,t){let n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((r,s)=>{try{n.onload=()=>r(n),n.onerror=i=>{let o=i instanceof Error?i.message:"error";s(new Error(o))}}catch(i){s(i)}})}var me=!0;async function de(e,t,n){let r;mt(n)?r=await dt(e,t,n):r=zt(e,n);let s=t&&t.imagebitmap;return await cr(r,s)}async function cr(e,t=null){if((ar(t)||!me)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),me=!1}return await createImageBitmap(e)}function ar(e){if(!e)return!0;for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}function xe(e){return!hr(e,"ftyp",4)||!(e[8]&96)?null:lr(e)}function lr(e){switch(fr(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function fr(e,t,n){return String.fromCharCode(...e.slice(t,n))}function pr(e){return[...e].map(t=>t.charCodeAt(0))}function hr(e,t,n=0){let r=pr(t);for(let s=0;s<r.length;++s)if(r[s]!==e[s+n])return!1;return!0}var U=!1,tt=!0;function xt(e){let t=et(e);return dr(t)||gr(t)||xr(t)||ur(t)||mr(t)}function mr(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),n=xe(t);return n?{mimeType:n.mimeType,width:0,height:0}:null}function dr(e){let t=et(e);return t.byteLength>=24&&t.getUint32(0,U)===2303741511?{mimeType:"image/png",width:t.getUint32(16,U),height:t.getUint32(20,U)}:null}function xr(e){let t=et(e);return t.byteLength>=10&&t.getUint32(0,U)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,tt),height:t.getUint16(8,tt)}:null}function ur(e){let t=et(e);return t.byteLength>=14&&t.getUint16(0,U)===16973&&t.getUint32(2,tt)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,tt),height:t.getUint32(22,tt)}:null}function gr(e){let t=et(e);if(!(t.byteLength>=3&&t.getUint16(0,U)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=Mr(),i=2;for(;i+9<t.byteLength;){let o=t.getUint16(i,U);if(s.has(o))return{mimeType:"image/jpeg",height:t.getUint16(i+5,U),width:t.getUint16(i+7,U)};if(!r.has(o))return null;i+=2,i+=t.getUint16(i,U)}return null}function Mr(){let e=new Set([65499,65476,65484,65501,65534]);for(let n=65504;n<65520;++n)e.add(n);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function et(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function ue(e,t){let{mimeType:n}=xt(e)||{},r=globalThis.loaders?.parseImageNode;return W(r),await r(e,n)}async function ge(e,t,n){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=n||{},o=Tr(s),c;switch(o){case"imagebitmap":c=await de(e,t,i);break;case"image":c=await dt(e,t,i);break;case"data":c=await ue(e,t);break;default:W(!1)}return s==="data"&&(c=ht(c)),c}function Tr(e){switch(e){case"auto":case"data":return fe();default:return le(e),e}}var Ar=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],Er=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],yr={image:{type:"auto",decode:!0}},ut={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:ae,mimeTypes:Er,extensions:Ar,parse:ge,tests:[e=>Boolean(xt(new DataView(e)))],options:yr};function gt(e,t,n){let r=typeof e=="function"?e({...t,...n}):e,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),bt(r)}var _r=e=>e&&typeof e=="object";async function Me(e,t,n={}){return await Ht(e,t,n)}async function Ht(e,t,n){return Array.isArray(e)?await Sr(e,t,n):_r(e)?await Rr(e,t,n):await t(e,n)}async function Rr(e,t,n){let r=[],s={};for(let i in e){let o=e[i],c=Ht(o,t,n).then(a=>{s[i]=a});r.push(c)}return await Promise.all(r),s}async function Sr(e,t,n={}){let r=e.map(s=>Ht(s,t,n));return await Promise.all(r)}async function Te(e,t,n){return await Me(e,r=>Ut(r,t,n))}async function Ut(e,t,n){let s=await(await fetch(e,n.fetch)).arrayBuffer();return await t(s,n)}async function nt(e,t={}){let n=await Nr(e,t);return await Te(n,ut.parse,t)}async function Nr(e,t,n={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await wr(e,r,t,n):gt(e,t,n)}async function wr(e,t,n,r){let s=[];if(t==="auto"){let i=gt(e,n,{...r,lod:0}),o=await Ut(i,ut.parse,n),{width:c,height:a}=Ct(o);t=Lr({width:c,height:a}),s.push(i)}W(t>0);for(let i=s.length;i<t;++i){let o=gt(e,n,{...r,lod:i});s.push(o)}return s}function Lr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}function Ee(e,t){let n=t.specularMipLevels??1,r=new Bt.DynamicTexture(e,{id:"brdfLUT",sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"},data:nt(t.brdfLutUrl)}),s=Ae(e,{id:"DiffuseEnvSampler",getTextureForFace:o=>nt(t.getTexUrl("diffuse",Mt.indexOf(o),0)),sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}}),i=Ae(e,{id:"SpecularEnvSampler",getTextureForFace:o=>{let c=[],a=Mt.indexOf(o);for(let l=0;l<n;l++)c.push(nt(t.getTexUrl("specular",a,l)));return Promise.all(c)},sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}});return{brdfLutTexture:r,diffuseEnvSampler:s,specularEnvSampler:i}}var Mt=["+X","-X","+Y","-Y","+Z","-Z"];function Ae(e,{id:t,getTextureForFace:n,sampler:r}){let s=Promise.all(Mt.map(i=>n(i))).then(i=>{let o={};return Mt.forEach((c,a)=>{o[c]=i[a]}),o});return new Bt.DynamicTexture(e,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var N=F($(),1);var y;(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN",e[e.ONE=1]="ONE",e[e.SRC_ALPHA=770]="SRC_ALPHA",e[e.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",e[e.FUNC_ADD=32774]="FUNC_ADD",e[e.LINEAR=9729]="LINEAR",e[e.NEAREST=9728]="NEAREST",e[e.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",e[e.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",e[e.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",e[e.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",e[e.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",e[e.TEXTURE_WRAP_S=10242]="TEXTURE_WRAP_S",e[e.TEXTURE_WRAP_T=10243]="TEXTURE_WRAP_T",e[e.REPEAT=10497]="REPEAT",e[e.CLAMP_TO_EDGE=33071]="CLAMP_TO_EDGE",e[e.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",e[e.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL"})(y||(y={}));function _e(e){return{addressModeU:ye(e.wrapS),addressModeV:ye(e.wrapT),magFilter:Or(e.magFilter),...Ir(e.minFilter)}}function ye(e){switch(e){case y.CLAMP_TO_EDGE:return"clamp-to-edge";case y.REPEAT:return"repeat";case y.MIRRORED_REPEAT:return"mirror-repeat";default:return}}function Or(e){switch(e){case y.NEAREST:return"nearest";case y.LINEAR:return"linear";default:return}}function Ir(e){switch(e){case y.NEAREST:return{minFilter:"nearest"};case y.LINEAR:return{minFilter:"linear"};case y.NEAREST_MIPMAP_NEAREST:return{minFilter:"nearest",mipmapFilter:"nearest"};case y.LINEAR_MIPMAP_NEAREST:return{minFilter:"linear",mipmapFilter:"nearest"};case y.NEAREST_MIPMAP_LINEAR:return{minFilter:"nearest",mipmapFilter:"linear"};case y.LINEAR_MIPMAP_LINEAR:return{minFilter:"linear",mipmapFilter:"linear"};default:return{}}}function rt(e,t,n,r){let s={defines:{MANUAL_SRGB:!0,SRGB_FAST_APPROXIMATION:!0},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=!0;let{imageBasedLightingEnvironment:i}=r;return i&&(s.bindings.pbr_diffuseEnvSampler=i.diffuseEnvSampler.texture,s.bindings.pbr_specularEnvSampler=i.specularEnvSampler.texture,s.bindings.pbr_brdfLUT=i.brdfLutTexture.texture,s.uniforms.IBLenabled=!0,s.uniforms.scaleIBLAmbient=[1,1]),r?.pbrDebug&&(s.defines.PBR_DEBUG=!0,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),n.NORMAL&&(s.defines.HAS_NORMALS=!0),n.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=!0),n.TEXCOORD_0&&(s.defines.HAS_UV=!0),n.JOINTS_0&&n.WEIGHTS_0&&(s.defines.HAS_SKIN=!0),n.COLOR_0&&(s.defines.HAS_COLORS=!0),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=!0),r?.lights&&(s.defines.USE_LIGHTS=!0),t&&(r.validateAttributes!==!1&&Pr(t,n),vr(e,t,s,r.gltf)),s}function Pr(e,t){let n=br(e);if(n.length>0&&!t.TEXCOORD_0&&N.log.warn(`glTF material uses ${n.join(", ")} but primitive is missing TEXCOORD_0; textured shading will sample the default UV coordinates`)(),Boolean(e.unlit||e.extensions?.KHR_materials_unlit)||t.NORMAL)return;let s=e.normalTexture?"lit PBR shading with normalTexture":"lit PBR shading";N.log.warn(`glTF primitive is missing NORMAL while using ${s}; shading will fall back to geometric normals`)()}function br(e){let t=[];return e.pbrMetallicRoughness?.baseColorTexture&&t.push("baseColorTexture"),e.pbrMetallicRoughness?.metallicRoughnessTexture&&t.push("metallicRoughnessTexture"),e.normalTexture&&t.push("normalTexture"),e.occlusionTexture&&t.push("occlusionTexture"),e.emissiveTexture&&t.push("emissiveTexture"),e.extensions?.KHR_materials_specular?.specularTexture&&t.push("KHR_materials_specular.specularTexture"),e.extensions?.KHR_materials_specular?.specularColorTexture&&t.push("KHR_materials_specular.specularColorTexture"),e.extensions?.KHR_materials_transmission?.transmissionTexture&&t.push("KHR_materials_transmission.transmissionTexture"),e.extensions?.KHR_materials_clearcoat?.clearcoatTexture&&t.push("KHR_materials_clearcoat.clearcoatTexture"),e.extensions?.KHR_materials_clearcoat?.clearcoatRoughnessTexture&&t.push("KHR_materials_clearcoat.clearcoatRoughnessTexture"),e.extensions?.KHR_materials_sheen?.sheenColorTexture&&t.push("KHR_materials_sheen.sheenColorTexture"),e.extensions?.KHR_materials_sheen?.sheenRoughnessTexture&&t.push("KHR_materials_sheen.sheenRoughnessTexture"),e.extensions?.KHR_materials_iridescence?.iridescenceTexture&&t.push("KHR_materials_iridescence.iridescenceTexture"),e.extensions?.KHR_materials_anisotropy?.anisotropyTexture&&t.push("KHR_materials_anisotropy.anisotropyTexture"),t}function vr(e,t,n,r){if(n.uniforms.unlit=Boolean(t.unlit||t.extensions?.KHR_materials_unlit),t.pbrMetallicRoughness&&Cr(e,t.pbrMetallicRoughness,n,r),t.normalTexture){w(e,t.normalTexture,"pbr_normalSampler",n,{featureOptions:{define:"HAS_NORMALMAP",enabledUniformName:"normalMapEnabled"},gltf:r});let{scale:s=1}=t.normalTexture;n.uniforms.normalScale=s}if(t.occlusionTexture){w(e,t.occlusionTexture,"pbr_occlusionSampler",n,{featureOptions:{define:"HAS_OCCLUSIONMAP",enabledUniformName:"occlusionMapEnabled"},gltf:r});let{strength:s=1}=t.occlusionTexture;n.uniforms.occlusionStrength=s}switch(n.uniforms.emissiveFactor=t.emissiveFactor||[0,0,0],t.emissiveTexture&&w(e,t.emissiveTexture,"pbr_emissiveSampler",n,{featureOptions:{define:"HAS_EMISSIVEMAP",enabledUniformName:"emissiveMapEnabled"},gltf:r}),zr(e,t.extensions,n,r),t.alphaMode||"OPAQUE"){case"OPAQUE":break;case"MASK":{let{alphaCutoff:s=.5}=t;n.defines.ALPHA_CUTOFF=!0,n.uniforms.alphaCutoffEnabled=!0,n.uniforms.alphaCutoff=s;break}case"BLEND":N.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),Fr(n);break}}function Fr(e){e.parameters.blend=!0,e.parameters.blendColorOperation="add",e.parameters.blendColorSrcFactor="src-alpha",e.parameters.blendColorDstFactor="one-minus-src-alpha",e.parameters.blendAlphaOperation="add",e.parameters.blendAlphaSrcFactor="one",e.parameters.blendAlphaDstFactor="one-minus-src-alpha",e.glParameters.blend=!0,e.glParameters.blendEquation=y.FUNC_ADD,e.glParameters.blendFunc=[y.SRC_ALPHA,y.ONE_MINUS_SRC_ALPHA,y.ONE,y.ONE_MINUS_SRC_ALPHA]}function kr(e){e.parameters.blend=!0,e.parameters.depthWriteEnabled=!1,e.parameters.blendColorOperation="add",e.parameters.blendColorSrcFactor="one",e.parameters.blendColorDstFactor="one-minus-src-alpha",e.parameters.blendAlphaOperation="add",e.parameters.blendAlphaSrcFactor="one",e.parameters.blendAlphaDstFactor="one-minus-src-alpha",e.glParameters.blend=!0,e.glParameters.depthMask=!1,e.glParameters.blendEquation=y.FUNC_ADD,e.glParameters.blendFunc=[y.ONE,y.ONE_MINUS_SRC_ALPHA,y.ONE,y.ONE_MINUS_SRC_ALPHA]}function Cr(e,t,n,r){t.baseColorTexture&&w(e,t.baseColorTexture,"pbr_baseColorSampler",n,{featureOptions:{define:"HAS_BASECOLORMAP",enabledUniformName:"baseColorMapEnabled"},gltf:r}),n.uniforms.baseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&w(e,t.metallicRoughnessTexture,"pbr_metallicRoughnessSampler",n,{featureOptions:{define:"HAS_METALROUGHNESSMAP",enabledUniformName:"metallicRoughnessMapEnabled"},gltf:r});let{metallicFactor:s=1,roughnessFactor:i=1}=t;n.uniforms.metallicRoughnessValues=[s,i]}function zr(e,t,n,r){t&&(Hr(t)&&(n.defines.USE_MATERIAL_EXTENSIONS=!0),Ur(e,t.KHR_materials_specular,n,r),Br(t.KHR_materials_ior,n),Dr(e,t.KHR_materials_transmission,n,r),qr(e,t.KHR_materials_volume,n,r),Vr(e,t.KHR_materials_clearcoat,n,r),Kr(e,t.KHR_materials_sheen,n,r),$r(e,t.KHR_materials_iridescence,n,r),Wr(e,t.KHR_materials_anisotropy,n,r),Yr(t.KHR_materials_emissive_strength,n))}function Hr(e){return Boolean(e.KHR_materials_specular||e.KHR_materials_ior||e.KHR_materials_transmission||e.KHR_materials_volume||e.KHR_materials_clearcoat||e.KHR_materials_sheen||e.KHR_materials_iridescence||e.KHR_materials_anisotropy)}function Ur(e,t,n,r){t&&(t.specularColorFactor&&(n.uniforms.specularColorFactor=t.specularColorFactor),t.specularFactor!==void 0&&(n.uniforms.specularIntensityFactor=t.specularFactor),t.specularColorTexture&&w(e,t.specularColorTexture,"pbr_specularColorSampler",n,{featureOptions:{define:"HAS_SPECULARCOLORMAP",enabledUniformName:"specularColorMapEnabled"},gltf:r}),t.specularTexture&&w(e,t.specularTexture,"pbr_specularIntensitySampler",n,{featureOptions:{define:"HAS_SPECULARINTENSITYMAP",enabledUniformName:"specularIntensityMapEnabled"},gltf:r}))}function Br(e,t){e?.ior!==void 0&&(t.uniforms.ior=e.ior)}function Dr(e,t,n,r){t&&(t.transmissionFactor!==void 0&&(n.uniforms.transmissionFactor=t.transmissionFactor),t.transmissionTexture&&w(e,t.transmissionTexture,"pbr_transmissionSampler",n,{featureOptions:{define:"HAS_TRANSMISSIONMAP",enabledUniformName:"transmissionMapEnabled"},gltf:r}),((t.transmissionFactor??0)>0||t.transmissionTexture)&&(N.log.warn("KHR_materials_transmission uses a premultiplied-alpha blending approximation and may require mesh sorting")(),kr(n)))}function qr(e,t,n,r){t&&(t.thicknessFactor!==void 0&&(n.uniforms.thicknessFactor=t.thicknessFactor),t.thicknessTexture&&w(e,t.thicknessTexture,"pbr_thicknessSampler",n,{featureOptions:{define:"HAS_THICKNESSMAP"},gltf:r}),t.attenuationDistance!==void 0&&(n.uniforms.attenuationDistance=t.attenuationDistance),t.attenuationColor&&(n.uniforms.attenuationColor=t.attenuationColor))}function Vr(e,t,n,r){t&&(t.clearcoatFactor!==void 0&&(n.uniforms.clearcoatFactor=t.clearcoatFactor),t.clearcoatRoughnessFactor!==void 0&&(n.uniforms.clearcoatRoughnessFactor=t.clearcoatRoughnessFactor),t.clearcoatTexture&&w(e,t.clearcoatTexture,"pbr_clearcoatSampler",n,{featureOptions:{define:"HAS_CLEARCOATMAP",enabledUniformName:"clearcoatMapEnabled"},gltf:r}),t.clearcoatRoughnessTexture&&w(e,t.clearcoatRoughnessTexture,"pbr_clearcoatRoughnessSampler",n,{featureOptions:{define:"HAS_CLEARCOATROUGHNESSMAP",enabledUniformName:"clearcoatRoughnessMapEnabled"},gltf:r}),t.clearcoatNormalTexture&&w(e,t.clearcoatNormalTexture,"pbr_clearcoatNormalSampler",n,{featureOptions:{define:"HAS_CLEARCOATNORMALMAP"},gltf:r}))}function Kr(e,t,n,r){t&&(t.sheenColorFactor&&(n.uniforms.sheenColorFactor=t.sheenColorFactor),t.sheenRoughnessFactor!==void 0&&(n.uniforms.sheenRoughnessFactor=t.sheenRoughnessFactor),t.sheenColorTexture&&w(e,t.sheenColorTexture,"pbr_sheenColorSampler",n,{featureOptions:{define:"HAS_SHEENCOLORMAP",enabledUniformName:"sheenColorMapEnabled"},gltf:r}),t.sheenRoughnessTexture&&w(e,t.sheenRoughnessTexture,"pbr_sheenRoughnessSampler",n,{featureOptions:{define:"HAS_SHEENROUGHNESSMAP",enabledUniformName:"sheenRoughnessMapEnabled"},gltf:r}))}function $r(e,t,n,r){t&&(t.iridescenceFactor!==void 0&&(n.uniforms.iridescenceFactor=t.iridescenceFactor),t.iridescenceIor!==void 0&&(n.uniforms.iridescenceIor=t.iridescenceIor),(t.iridescenceThicknessMinimum!==void 0||t.iridescenceThicknessMaximum!==void 0)&&(n.uniforms.iridescenceThicknessRange=[t.iridescenceThicknessMinimum??100,t.iridescenceThicknessMaximum??400]),t.iridescenceTexture&&w(e,t.iridescenceTexture,"pbr_iridescenceSampler",n,{featureOptions:{define:"HAS_IRIDESCENCEMAP",enabledUniformName:"iridescenceMapEnabled"},gltf:r}),t.iridescenceThicknessTexture&&w(e,t.iridescenceThicknessTexture,"pbr_iridescenceThicknessSampler",n,{featureOptions:{define:"HAS_IRIDESCENCETHICKNESSMAP"},gltf:r}))}function Wr(e,t,n,r){t&&(t.anisotropyStrength!==void 0&&(n.uniforms.anisotropyStrength=t.anisotropyStrength),t.anisotropyRotation!==void 0&&(n.uniforms.anisotropyRotation=t.anisotropyRotation),t.anisotropyTexture&&w(e,t.anisotropyTexture,"pbr_anisotropySampler",n,{featureOptions:{define:"HAS_ANISOTROPYMAP",enabledUniformName:"anisotropyMapEnabled"},gltf:r}))}function Yr(e,t){e?.emissiveStrength!==void 0&&(t.uniforms.emissiveStrength=e.emissiveStrength)}function w(e,t,n,r,s={}){let{featureOptions:i={},gltf:o}=s,{define:c,enabledUniformName:a}=i,l=Gr(t,o),h=l.texture?.source?.image;if(!h){N.log.warn(`Skipping unresolved glTF texture for ${String(n)}`)();return}let f={wrapS:10497,wrapT:10497,minFilter:9729,magFilter:9729,...l?.texture?.sampler},p={id:l.uniformName||l.id,sampler:_e(f)},m;if(h.compressed)m=jr(e,h,p);else{let{width:d,height:x}=e.getExternalImageSize(h);m=e.createTexture({...p,width:d,height:x,data:h})}r.bindings[n]=m,c&&(r.defines[c]=!0),a&&(r.uniforms[a]=!0),r.generatedTextures.push(m)}function Gr(e,t){if(e.texture||e.index===void 0||!t?.textures)return e;let n=t.textures[e.index];return n?"texture"in n&&n.texture?{...n,...e,texture:n.texture}:"source"in n?{...e,texture:n}:e:e}function Dt(e,t){return e.createTexture({...t,format:"rgba8unorm",width:1,height:1,mipLevels:1})}function Re(e){return e.textureFormat}function Xr(e,t,n){let{blockWidth:r=1,blockHeight:s=1}=N.textureFormatDecoder.getInfo(n),i=1;for(let o=1;;o++){let c=Math.max(1,e>>o),a=Math.max(1,t>>o);if(c<r||a<s)break;i++}return i}function jr(e,t,n){let r;if(Array.isArray(t.data)&&t.data[0]?.data?r=t.data:"mipmaps"in t&&Array.isArray(t.mipmaps)?r=t.mipmaps:r=[],r.length===0||!r[0]?.data)return N.log.warn("createCompressedTexture: compressed image has no valid mip levels, creating fallback")(),Dt(e,n);let s=r[0],i=s.width??t.width??0,o=s.height??t.height??0;if(i<=0||o<=0)return N.log.warn("createCompressedTexture: base level has invalid dimensions, creating fallback")(),Dt(e,n);let c=Re(s);if(!c)return N.log.warn("createCompressedTexture: compressed image has no textureFormat, creating fallback")(),Dt(e,n);let a=Xr(i,o,c),l=Math.min(r.length,a),h=1;for(let p=1;p<l;p++){let m=r[p];if(!m.data||m.width<=0||m.height<=0){N.log.warn(`createCompressedTexture: mip level ${p} has invalid data/dimensions, truncating`)();break}let d=Re(m);if(d&&d!==c){N.log.warn(`createCompressedTexture: mip level ${p} format '${d}' differs from base '${c}', truncating`)();break}let x=Math.max(1,i>>p),u=Math.max(1,o>>p);if(m.width!==x||m.height!==u){N.log.warn(`createCompressedTexture: mip level ${p} dimensions ${m.width}x${m.height} don't match expected ${x}x${u}, truncating`)();break}h++}let f=e.createTexture({...n,format:c,usage:N.Texture.TEXTURE|N.Texture.COPY_DST,width:i,height:o,mipLevels:h,data:s.data});for(let p=1;p<h;p++)f.writeData(r[p].data,{width:r[p].width,height:r[p].height,mipLevel:p});return f}var ro=1/Math.PI*180,so=1/180*Math.PI,Jr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Jr}};var L=globalThis.mathgl.config;function Se(e,{precision:t=L.precision}={}){return e=Qr(e),`${parseFloat(e.toPrecision(t))}`}function Y(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function qt(e,t,n){let r=L.EPSILON;n&&(L.EPSILON=n);try{if(e===t)return!0;if(Y(e)&&Y(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;++s)if(!qt(e[s],t[s]))return!1;return!0}return e&&e.equals?e.equals(t):t&&t.equals?t.equals(e):typeof e=="number"&&typeof t=="number"?Math.abs(e-t)<=L.EPSILON*Math.max(1,Math.abs(e),Math.abs(t)):!1}finally{L.EPSILON=r}}function Qr(e){return Math.round(e/L.EPSILON)*L.EPSILON}var V=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(t,n=0){for(let r=0;r<this.ELEMENTS;++r)this[r]=t[r+n];return this.check()}toArray(t=[],n=0){for(let r=0;r<this.ELEMENTS;++r)t[n+r]=this[r];return t}toObject(t){return t}from(t){return Array.isArray(t)?this.copy(t):this.fromObject(t)}to(t){return t===this?this:Y(t)?this.toArray(t):this.toObject(t)}toTarget(t){return t?this.to(t):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(L)}formatString(t){let n="";for(let r=0;r<this.ELEMENTS;++r)n+=(r>0?", ":"")+Se(this[r],t);return`${t.printTypes?this.constructor.name:""}[${n}]`}equals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(!qt(this[n],t[n]))return!1;return!0}exactEquals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(this[n]!==t[n])return!1;return!0}negate(){for(let t=0;t<this.ELEMENTS;++t)this[t]=-this[t];return this.check()}lerp(t,n,r){if(r===void 0)return this.lerp(this,t,n);for(let s=0;s<this.ELEMENTS;++s){let i=t[s],o=typeof n=="number"?n:n[s];this[s]=i+r*(o-i)}return this.check()}min(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(t[n],this[n]);return this.check()}max(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.max(t[n],this[n]);return this.check()}clamp(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t[r]),n[r]);return this.check()}add(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]+=n[r];return this.check()}subtract(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]-=n[r];return this.check()}scale(t){if(typeof t=="number")for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;else for(let n=0;n<this.ELEMENTS&&n<t.length;++n)this[n]*=t[n];return this.check()}multiplyByScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}check(){if(L.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let t=this.length===this.ELEMENTS;for(let n=0;n<this.ELEMENTS;++n)t=t&&Number.isFinite(this[n]);return t}sub(t){return this.subtract(t)}setScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=t;return this.check()}addScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]+=t;return this.check()}subScalar(t){return this.addScalar(-t)}multiplyScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}divideScalar(t){return this.multiplyByScalar(1/t)}clampScalar(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t),n);return this.check()}get elements(){return this}};function Zr(e,t){if(e.length!==t)return!1;for(let n=0;n<e.length;++n)if(!Number.isFinite(e[n]))return!1;return!0}function R(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function G(e,t,n=""){if(L.debug&&!Zr(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function Vt(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var Tt=class extends V{get x(){return this[0]}set x(t){this[0]=R(t)}get y(){return this[1]}set y(t){this[1]=R(t)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let t=0;for(let n=0;n<this.ELEMENTS;++n)t+=this[n]*this[n];return t}magnitudeSquared(){return this.lengthSquared()}distance(t){return Math.sqrt(this.distanceSquared(t))}distanceSquared(t){let n=0;for(let r=0;r<this.ELEMENTS;++r){let s=this[r]-t[r];n+=s*s}return R(n)}dot(t){let n=0;for(let r=0;r<this.ELEMENTS;++r)n+=this[r]*t[r];return R(n)}normalize(){let t=this.magnitude();if(t!==0)for(let n=0;n<this.ELEMENTS;++n)this[n]/=t;return this.check()}multiply(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]*=n[r];return this.check()}divide(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]/=n[r];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(t){return this.distance(t)}distanceToSquared(t){return this.distanceSquared(t)}getComponent(t){return Vt(t>=0&&t<this.ELEMENTS,"index is out of range"),R(this[t])}setComponent(t,n){return Vt(t>=0&&t<this.ELEMENTS,"index is out of range"),this[t]=n,this.check()}addVectors(t,n){return this.copy(t).add(n)}subVectors(t,n){return this.copy(t).subtract(n)}multiplyVectors(t,n){return this.copy(t).multiply(n)}addScaledVector(t,n){return this.add(new this.constructor(t).multiplyScalar(n))}};var O=typeof Float32Array<"u"?Float32Array:Array;var uo=Math.PI/180;function ts(){let e=new O(2);return O!=Float32Array&&(e[0]=0,e[1]=0),e}function Le(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[4]*s+n[12],e[1]=n[1]*r+n[5]*s+n[13],e}var go=function(){let e=ts();return function(t,n,r,s,i,o){let c,a;for(n||(n=2),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],i(e,e,o),t[c]=e[0],t[c+1]=e[1];return t}}();function Oe(e,t,n){let r=t[0],s=t[1],i=n[3]*r+n[7]*s||1;return e[0]=(n[0]*r+n[4]*s)/i,e[1]=(n[1]*r+n[5]*s)/i,e}function Ie(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i||1;return e[0]=(n[0]*r+n[4]*s+n[8]*i)/o,e[1]=(n[1]*r+n[5]*s+n[9]*i)/o,e[2]=(n[2]*r+n[6]*s+n[10]*i)/o,e}function Pe(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[2]*s,e[1]=n[1]*r+n[3]*s,e[2]=t[2],e[3]=t[3],e}function be(e,t,n){let r=t[0],s=t[1],i=t[2];return e[0]=n[0]*r+n[3]*s+n[6]*i,e[1]=n[1]*r+n[4]*s+n[7]*i,e[2]=n[2]*r+n[5]*s+n[8]*i,e[3]=t[3],e}function Kt(){let e=new O(3);return O!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function es(e){let t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function $t(e,t,n){let r=new O(3);return r[0]=e,r[1]=t,r[2]=n,r}function ve(e,t){let n=t[0],r=t[1],s=t[2],i=n*n+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function Fe(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function At(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2];return e[0]=s*a-i*c,e[1]=i*o-r*a,e[2]=r*c-s*o,e}function Et(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*s+n[8]*i+n[12])/o,e[1]=(n[1]*r+n[5]*s+n[9]*i+n[13])/o,e[2]=(n[2]*r+n[6]*s+n[10]*i+n[14])/o,e}function ke(e,t,n){let r=n[0],s=n[1],i=n[2],o=n[3],c=t[0],a=t[1],l=t[2],h=s*l-i*a,f=i*c-r*l,p=r*a-s*c,m=s*p-i*f,d=i*h-r*p,x=r*f-s*h,u=o*2;return h*=u,f*=u,p*=u,m*=2,d*=2,x*=2,e[0]=c+h+m,e[1]=a+f+d,e[2]=l+p+x,e}var Ce=es;var Ao=function(){let e=Kt();return function(t,n,r,s,i,o){let c,a;for(n||(n=3),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2];return t}}();var yt,X=class extends Tt{static get ZERO(){return yt||(yt=new X(0,0,0,0),Object.freeze(yt)),yt}constructor(t=0,n=0,r=0,s=0){super(-0,-0,-0,-0),Y(t)&&arguments.length===1?this.copy(t):(L.debug&&(R(t),R(n),R(r),R(s)),this[0]=t,this[1]=n,this[2]=r,this[3]=s)}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}fromObject(t){return L.debug&&(R(t.x),R(t.y),R(t.z),R(t.w)),this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this}toObject(t){return t.x=this[0],t.y=this[1],t.z=this[2],t.w=this[3],t}get ELEMENTS(){return 4}get z(){return this[2]}set z(t){this[2]=R(t)}get w(){return this[3]}set w(t){this[3]=R(t)}transform(t){return Et(this,this,t),this.check()}transformByMatrix3(t){return be(this,this,t),this.check()}transformByMatrix2(t){return Pe(this,this,t),this.check()}transformByQuaternion(t){return ke(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var _t=class extends V{toString(){let t="[";if(L.printRowMajor){t+="row-major:";for(let n=0;n<this.RANK;++n)for(let r=0;r<this.RANK;++r)t+=` ${this[r*this.RANK+n]}`}else{t+="column-major:";for(let n=0;n<this.ELEMENTS;++n)t+=` ${this[n]}`}return t+="]",t}getElementIndex(t,n){return n*this.RANK+t}getElement(t,n){return this[n*this.RANK+t]}setElement(t,n,r){return this[n*this.RANK+t]=R(r),this}getColumn(t,n=new Array(this.RANK).fill(-0)){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)n[s]=this[r+s];return n}setColumn(t,n){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)this[r+s]=n[s];return this}};function ze(){let e=new O(9);return O!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function ss(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function He(e,t){if(e===t){let n=t[1],r=t[2],s=t[3],i=t[6],o=t[7],c=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=s,e[13]=o,e[14]=c}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function Ue(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=t[4],c=t[5],a=t[6],l=t[7],h=t[8],f=t[9],p=t[10],m=t[11],d=t[12],x=t[13],u=t[14],E=t[15],S=n*c-r*o,g=n*a-s*o,M=n*l-i*o,T=r*a-s*c,A=r*l-i*c,I=s*l-i*a,P=h*x-f*d,b=h*u-p*d,v=h*E-m*d,k=f*u-p*x,C=f*E-m*x,z=p*E-m*u,_=S*z-g*C+M*k+T*v-A*b+I*P;return _?(_=1/_,e[0]=(c*z-a*C+l*k)*_,e[1]=(s*C-r*z-i*k)*_,e[2]=(x*I-u*A+E*T)*_,e[3]=(p*A-f*I-m*T)*_,e[4]=(a*v-o*z-l*b)*_,e[5]=(n*z-s*v+i*b)*_,e[6]=(u*M-d*I-E*g)*_,e[7]=(h*I-p*M+m*g)*_,e[8]=(o*C-c*v+l*P)*_,e[9]=(r*v-n*C-i*P)*_,e[10]=(d*A-x*M+E*S)*_,e[11]=(f*M-h*A-m*S)*_,e[12]=(c*b-o*k-a*P)*_,e[13]=(n*k-r*b+s*P)*_,e[14]=(x*g-d*T-u*S)*_,e[15]=(h*T-f*g+p*S)*_,e):null}function Be(e){let t=e[0],n=e[1],r=e[2],s=e[3],i=e[4],o=e[5],c=e[6],a=e[7],l=e[8],h=e[9],f=e[10],p=e[11],m=e[12],d=e[13],x=e[14],u=e[15],E=t*o-n*i,S=t*c-r*i,g=n*c-r*o,M=l*d-h*m,T=l*x-f*m,A=h*x-f*d,I=t*A-n*T+r*M,P=i*A-o*T+c*M,b=l*g-h*S+f*E,v=m*g-d*S+x*E;return a*I-s*P+u*b-p*v}function Wt(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=t[4],a=t[5],l=t[6],h=t[7],f=t[8],p=t[9],m=t[10],d=t[11],x=t[12],u=t[13],E=t[14],S=t[15],g=n[0],M=n[1],T=n[2],A=n[3];return e[0]=g*r+M*c+T*f+A*x,e[1]=g*s+M*a+T*p+A*u,e[2]=g*i+M*l+T*m+A*E,e[3]=g*o+M*h+T*d+A*S,g=n[4],M=n[5],T=n[6],A=n[7],e[4]=g*r+M*c+T*f+A*x,e[5]=g*s+M*a+T*p+A*u,e[6]=g*i+M*l+T*m+A*E,e[7]=g*o+M*h+T*d+A*S,g=n[8],M=n[9],T=n[10],A=n[11],e[8]=g*r+M*c+T*f+A*x,e[9]=g*s+M*a+T*p+A*u,e[10]=g*i+M*l+T*m+A*E,e[11]=g*o+M*h+T*d+A*S,g=n[12],M=n[13],T=n[14],A=n[15],e[12]=g*r+M*c+T*f+A*x,e[13]=g*s+M*a+T*p+A*u,e[14]=g*i+M*l+T*m+A*E,e[15]=g*o+M*h+T*d+A*S,e}function De(e,t,n){let r=n[0],s=n[1],i=n[2],o,c,a,l,h,f,p,m,d,x,u,E;return t===e?(e[12]=t[0]*r+t[4]*s+t[8]*i+t[12],e[13]=t[1]*r+t[5]*s+t[9]*i+t[13],e[14]=t[2]*r+t[6]*s+t[10]*i+t[14],e[15]=t[3]*r+t[7]*s+t[11]*i+t[15]):(o=t[0],c=t[1],a=t[2],l=t[3],h=t[4],f=t[5],p=t[6],m=t[7],d=t[8],x=t[9],u=t[10],E=t[11],e[0]=o,e[1]=c,e[2]=a,e[3]=l,e[4]=h,e[5]=f,e[6]=p,e[7]=m,e[8]=d,e[9]=x,e[10]=u,e[11]=E,e[12]=o*r+h*s+d*i+t[12],e[13]=c*r+f*s+x*i+t[13],e[14]=a*r+p*s+u*i+t[14],e[15]=l*r+m*s+E*i+t[15]),e}function qe(e,t,n){let r=n[0],s=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*s,e[5]=t[5]*s,e[6]=t[6]*s,e[7]=t[7]*s,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Ve(e,t,n,r){let s=r[0],i=r[1],o=r[2],c=Math.sqrt(s*s+i*i+o*o),a,l,h,f,p,m,d,x,u,E,S,g,M,T,A,I,P,b,v,k,C,z,_,Q;return c<1e-6?null:(c=1/c,s*=c,i*=c,o*=c,l=Math.sin(n),a=Math.cos(n),h=1-a,f=t[0],p=t[1],m=t[2],d=t[3],x=t[4],u=t[5],E=t[6],S=t[7],g=t[8],M=t[9],T=t[10],A=t[11],I=s*s*h+a,P=i*s*h+o*l,b=o*s*h-i*l,v=s*i*h-o*l,k=i*i*h+a,C=o*i*h+s*l,z=s*o*h+i*l,_=i*o*h-s*l,Q=o*o*h+a,e[0]=f*I+x*P+g*b,e[1]=p*I+u*P+M*b,e[2]=m*I+E*P+T*b,e[3]=d*I+S*P+A*b,e[4]=f*v+x*k+g*C,e[5]=p*v+u*k+M*C,e[6]=m*v+E*k+T*C,e[7]=d*v+S*k+A*C,e[8]=f*z+x*_+g*Q,e[9]=p*z+u*_+M*Q,e[10]=m*z+E*_+T*Q,e[11]=d*z+S*_+A*Q,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function Ke(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[4],o=t[5],c=t[6],a=t[7],l=t[8],h=t[9],f=t[10],p=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=i*s+l*r,e[5]=o*s+h*r,e[6]=c*s+f*r,e[7]=a*s+p*r,e[8]=l*s-i*r,e[9]=h*s-o*r,e[10]=f*s-c*r,e[11]=p*s-a*r,e}function $e(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],l=t[8],h=t[9],f=t[10],p=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*s-l*r,e[1]=o*s-h*r,e[2]=c*s-f*r,e[3]=a*s-p*r,e[8]=i*r+l*s,e[9]=o*r+h*s,e[10]=c*r+f*s,e[11]=a*r+p*s,e}function We(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],l=t[4],h=t[5],f=t[6],p=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*s+l*r,e[1]=o*s+h*r,e[2]=c*s+f*r,e[3]=a*s+p*r,e[4]=l*s-i*r,e[5]=h*s-o*r,e[6]=f*s-c*r,e[7]=p*s-a*r,e}function Ye(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n+n,c=r+r,a=s+s,l=n*o,h=r*o,f=r*c,p=s*o,m=s*c,d=s*a,x=i*o,u=i*c,E=i*a;return e[0]=1-f-d,e[1]=h+E,e[2]=p-u,e[3]=0,e[4]=h-E,e[5]=1-l-d,e[6]=m+x,e[7]=0,e[8]=p+u,e[9]=m-x,e[10]=1-l-f,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ge(e,t,n,r,s,i,o){let c=1/(n-t),a=1/(s-r),l=1/(i-o);return e[0]=i*2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i*2*a,e[6]=0,e[7]=0,e[8]=(n+t)*c,e[9]=(s+r)*a,e[10]=(o+i)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*l,e[15]=0,e}function is(e,t,n,r,s){let i=1/Math.tan(t/2);if(e[0]=i/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,s!=null&&s!==1/0){let o=1/(r-s);e[10]=(s+r)*o,e[14]=2*s*r*o}else e[10]=-1,e[14]=-2*r;return e}var Xe=is;function os(e,t,n,r,s,i,o){let c=1/(t-n),a=1/(r-s),l=1/(i-o);return e[0]=-2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*c,e[13]=(s+r)*a,e[14]=(o+i)*l,e[15]=1,e}var je=os;function Je(e,t,n,r){let s,i,o,c,a,l,h,f,p,m,d=t[0],x=t[1],u=t[2],E=r[0],S=r[1],g=r[2],M=n[0],T=n[1],A=n[2];return Math.abs(d-M)<1e-6&&Math.abs(x-T)<1e-6&&Math.abs(u-A)<1e-6?ss(e):(f=d-M,p=x-T,m=u-A,s=1/Math.sqrt(f*f+p*p+m*m),f*=s,p*=s,m*=s,i=S*m-g*p,o=g*f-E*m,c=E*p-S*f,s=Math.sqrt(i*i+o*o+c*c),s?(s=1/s,i*=s,o*=s,c*=s):(i=0,o=0,c=0),a=p*c-m*o,l=m*i-f*c,h=f*o-p*i,s=Math.sqrt(a*a+l*l+h*h),s?(s=1/s,a*=s,l*=s,h*=s):(a=0,l=0,h=0),e[0]=i,e[1]=a,e[2]=f,e[3]=0,e[4]=o,e[5]=l,e[6]=p,e[7]=0,e[8]=c,e[9]=h,e[10]=m,e[11]=0,e[12]=-(i*d+o*x+c*u),e[13]=-(a*d+l*x+h*u),e[14]=-(f*d+p*x+m*u),e[15]=1,e)}function cs(){let e=new O(4);return O!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function Qe(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function Ze(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function tn(e){let t=e[0],n=e[1],r=e[2],s=e[3];return Math.sqrt(t*t+n*n+r*r+s*s)}function en(e){let t=e[0],n=e[1],r=e[2],s=e[3];return t*t+n*n+r*r+s*s}function nn(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i;return o>0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=s*o,e[3]=i*o,e}function rn(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function sn(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3];return e[0]=s+r*(n[0]-s),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e[3]=c+r*(n[3]-c),e}function on(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3];return e[0]=n[0]*r+n[4]*s+n[8]*i+n[12]*o,e[1]=n[1]*r+n[5]*s+n[9]*i+n[13]*o,e[2]=n[2]*r+n[6]*s+n[10]*i+n[14]*o,e[3]=n[3]*r+n[7]*s+n[11]*i+n[15]*o,e}function cn(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2],l=n[3],h=l*r+c*i-a*s,f=l*s+a*r-o*i,p=l*i+o*s-c*r,m=-o*r-c*s-a*i;return e[0]=h*l+m*-o+f*-a-p*-c,e[1]=f*l+m*-c+p*-o-h*-a,e[2]=p*l+m*-a+h*-c-f*-o,e[3]=t[3],e}var bo=function(){let e=cs();return function(t,n,r,s,i,o){let c,a;for(n||(n=4),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],e[3]=t[c+3],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2],t[c+3]=e[3];return t}}();var Xt;(function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL0ROW3=3]="COL0ROW3",e[e.COL1ROW0=4]="COL1ROW0",e[e.COL1ROW1=5]="COL1ROW1",e[e.COL1ROW2=6]="COL1ROW2",e[e.COL1ROW3=7]="COL1ROW3",e[e.COL2ROW0=8]="COL2ROW0",e[e.COL2ROW1=9]="COL2ROW1",e[e.COL2ROW2=10]="COL2ROW2",e[e.COL2ROW3=11]="COL2ROW3",e[e.COL3ROW0=12]="COL3ROW0",e[e.COL3ROW1=13]="COL3ROW1",e[e.COL3ROW2=14]="COL3ROW2",e[e.COL3ROW3=15]="COL3ROW3"})(Xt||(Xt={}));var ls=45*Math.PI/180,fs=1,Yt=.1,Gt=500,ps=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),B=class extends _t{static get IDENTITY(){return ms()}static get ZERO(){return hs()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return Xt}constructor(t){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),arguments.length===1&&Array.isArray(t)?this.copy(t):this.identity()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this[4]=t[4],this[5]=t[5],this[6]=t[6],this[7]=t[7],this[8]=t[8],this[9]=t[9],this[10]=t[10],this[11]=t[11],this[12]=t[12],this[13]=t[13],this[14]=t[14],this[15]=t[15],this.check()}set(t,n,r,s,i,o,c,a,l,h,f,p,m,d,x,u){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this[4]=i,this[5]=o,this[6]=c,this[7]=a,this[8]=l,this[9]=h,this[10]=f,this[11]=p,this[12]=m,this[13]=d,this[14]=x,this[15]=u,this.check()}setRowMajor(t,n,r,s,i,o,c,a,l,h,f,p,m,d,x,u){return this[0]=t,this[1]=i,this[2]=l,this[3]=m,this[4]=n,this[5]=o,this[6]=h,this[7]=d,this[8]=r,this[9]=c,this[10]=f,this[11]=x,this[12]=s,this[13]=a,this[14]=p,this[15]=u,this.check()}toRowMajor(t){return t[0]=this[0],t[1]=this[4],t[2]=this[8],t[3]=this[12],t[4]=this[1],t[5]=this[5],t[6]=this[9],t[7]=this[13],t[8]=this[2],t[9]=this[6],t[10]=this[10],t[11]=this[14],t[12]=this[3],t[13]=this[7],t[14]=this[11],t[15]=this[15],t}identity(){return this.copy(ps)}fromObject(t){return this.check()}fromQuaternion(t){return Ye(this,t),this.check()}frustum(t){let{left:n,right:r,bottom:s,top:i,near:o=Yt,far:c=Gt}=t;return c===1/0?ds(this,n,r,s,i,o):Ge(this,n,r,s,i,o,c),this.check()}lookAt(t){let{eye:n,center:r=[0,0,0],up:s=[0,1,0]}=t;return Je(this,n,r,s),this.check()}ortho(t){let{left:n,right:r,bottom:s,top:i,near:o=Yt,far:c=Gt}=t;return je(this,n,r,s,i,o,c),this.check()}orthographic(t){let{fovy:n=ls,aspect:r=fs,focalDistance:s=1,near:i=Yt,far:o=Gt}=t;an(n);let c=n/2,a=s*Math.tan(c),l=a*r;return this.ortho({left:-l,right:l,bottom:-a,top:a,near:i,far:o})}perspective(t){let{fovy:n=45*Math.PI/180,aspect:r=1,near:s=.1,far:i=500}=t;return an(n),Xe(this,n,r,s,i),this.check()}determinant(){return Be(this)}getScale(t=[-0,-0,-0]){return t[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),t[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),t[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),t}getTranslation(t=[-0,-0,-0]){return t[0]=this[12],t[1]=this[13],t[2]=this[14],t}getRotation(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*i,t[6]=this[6]*o,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*i,t[10]=this[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=this[4]*s,t[4]=this[5]*i,t[5]=this[6]*o,t[6]=this[8]*s,t[7]=this[9]*i,t[8]=this[10]*o,t}transpose(){return He(this,this),this.check()}invert(){return Ue(this,this),this.check()}multiplyLeft(t){return Wt(this,t,this),this.check()}multiplyRight(t){return Wt(this,this,t),this.check()}rotateX(t){return Ke(this,this,t),this.check()}rotateY(t){return $e(this,this,t),this.check()}rotateZ(t){return We(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,n){return Ve(this,this,t,n),this.check()}scale(t){return qe(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return De(this,this,t),this.check()}transform(t,n){return t.length===4?(n=on(n||[-0,-0,-0,-0],t,this),G(n,4),n):this.transformAsPoint(t,n)}transformAsPoint(t,n){let{length:r}=t,s;switch(r){case 2:s=Le(n||[-0,-0],t,this);break;case 3:s=Et(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return G(s,t.length),s}transformAsVector(t,n){let r;switch(t.length){case 2:r=Oe(n||[-0,-0],t,this);break;case 3:r=Ie(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return G(r,t.length),r}transformPoint(t,n){return this.transformAsPoint(t,n)}transformVector(t,n){return this.transformAsPoint(t,n)}transformDirection(t,n){return this.transformAsVector(t,n)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,n,r){return this.identity().translate([t,n,r])}},Rt,St;function hs(){return Rt||(Rt=new B([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(Rt)),Rt}function ms(){return St||(St=new B,Object.freeze(St)),St}function an(e){if(e>Math.PI*2)throw Error("expected radians")}function ds(e,t,n,r,s,i){let o=2*i/(n-t),c=2*i/(s-r),a=(n+t)/(n-t),l=(s+r)/(s-r),h=-1,f=-1,p=-2*i;return e[0]=o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=a,e[9]=l,e[10]=h,e[11]=f,e[12]=0,e[13]=0,e[14]=p,e[15]=0,e}function ln(){let e=new O(4);return O!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function fn(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function jt(e,t,n){n=n*.5;let r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e}function Jt(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=n[0],a=n[1],l=n[2],h=n[3];return e[0]=r*h+o*c+s*l-i*a,e[1]=s*h+o*a+i*c-r*l,e[2]=i*h+o*l+r*a-s*c,e[3]=o*h-r*c-s*a-i*l,e}function pn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+o*c,e[1]=s*a+i*c,e[2]=i*a-s*c,e[3]=o*a-r*c,e}function hn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a-i*c,e[1]=s*a+o*c,e[2]=i*a+r*c,e[3]=o*a-s*c,e}function mn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+s*c,e[1]=s*a-r*c,e[2]=i*a+o*c,e[3]=o*a-i*c,e}function dn(e,t){let n=t[0],r=t[1],s=t[2];return e[0]=n,e[1]=r,e[2]=s,e[3]=Math.sqrt(Math.abs(1-n*n-r*r-s*s)),e}function it(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3],a=n[0],l=n[1],h=n[2],f=n[3],p,m,d,x,u;return p=s*a+i*l+o*h+c*f,p<0&&(p=-p,a=-a,l=-l,h=-h,f=-f),1-p>1e-6?(m=Math.acos(p),u=Math.sin(m),d=Math.sin((1-r)*m)/u,x=Math.sin(r*m)/u):(d=1-r,x=r),e[0]=d*s+x*a,e[1]=d*i+x*l,e[2]=d*o+x*h,e[3]=d*c+x*f,e}function xn(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i,c=o?1/o:0;return e[0]=-n*c,e[1]=-r*c,e[2]=-s*c,e[3]=i*c,e}function un(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function Qt(e,t){let n=t[0]+t[4]+t[8],r;if(n>0)r=Math.sqrt(n+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{let s=0;t[4]>t[0]&&(s=1),t[8]>t[s*3+s]&&(s=2);let i=(s+1)%3,o=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[i*3+i]-t[o*3+o]+1),e[s]=.5*r,r=.5/r,e[3]=(t[i*3+o]-t[o*3+i])*r,e[i]=(t[i*3+s]+t[s*3+i])*r,e[o]=(t[o*3+s]+t[s*3+o])*r}return e}var gn=Qe;var Mn=Ze,Tn=rn,An=sn,En=tn;var yn=en;var _n=nn;var Rn=function(){let e=Kt(),t=$t(1,0,0),n=$t(0,1,0);return function(r,s,i){let o=Fe(s,i);return o<-.999999?(At(e,t,s),Ce(e)<1e-6&&At(e,n,s),ve(e,e),jt(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(At(e,s,i),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,_n(r,r))}}(),Wo=function(){let e=ln(),t=ln();return function(n,r,s,i,o,c){return it(e,r,o,c),it(t,s,i,c),it(n,e,t,2*c*(1-c)),n}}(),Yo=function(){let e=ze();return function(t,n,r,s){return e[0]=r[0],e[3]=r[1],e[6]=r[2],e[1]=s[0],e[4]=s[1],e[7]=s[2],e[2]=-n[0],e[5]=-n[1],e[8]=-n[2],_n(t,Qt(t,e))}}();var xs=[0,0,0,1],ot=class extends V{constructor(t=0,n=0,r=0,s=1){super(-0,-0,-0,-0),Array.isArray(t)&&arguments.length===1?this.copy(t):this.set(t,n,r,s)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}fromObject(t){return this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this.check()}fromMatrix3(t){return Qt(this,t),this.check()}fromAxisRotation(t,n){return jt(this,t,n),this.check()}identity(){return fn(this),this.check()}setAxisAngle(t,n){return this.fromAxisRotation(t,n)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=R(t)}get y(){return this[1]}set y(t){this[1]=R(t)}get z(){return this[2]}set z(t){this[2]=R(t)}get w(){return this[3]}set w(t){this[3]=R(t)}len(){return En(this)}lengthSquared(){return yn(this)}dot(t){return Tn(this,t)}rotationTo(t,n){return Rn(this,t,n),this.check()}add(t){return gn(this,this,t),this.check()}calculateW(){return dn(this,this),this.check()}conjugate(){return un(this,this),this.check()}invert(){return xn(this,this),this.check()}lerp(t,n,r){return r===void 0?this.lerp(this,t,n):(An(this,t,n,r),this.check())}multiplyRight(t){return Jt(this,this,t),this.check()}multiplyLeft(t){return Jt(this,t,this),this.check()}normalize(){let t=this.len(),n=t>0?1/t:0;return this[0]=this[0]*n,this[1]=this[1]*n,this[2]=this[2]*n,this[3]=this[3]*n,t===0&&(this[3]=1),this.check()}rotateX(t){return pn(this,this,t),this.check()}rotateY(t){return hn(this,this,t),this.check()}rotateZ(t){return mn(this,this,t),this.check()}scale(t){return Mn(this,this,t),this.check()}slerp(t,n,r){let s,i,o;switch(arguments.length){case 1:({start:s=xs,target:i,ratio:o}=t);break;case 2:s=this,i=t,o=n;break;default:s=t,i=n,o=r}return it(this,s,i,o),this.check()}transformVector4(t,n=new X){return cn(n,t,this),G(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,n){return this.setAxisAngle(t,n)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};var us=255;function Nt(e){let t=e.lights||e.extensions?.KHR_lights_punctual?.lights;if(!t||!Array.isArray(t)||t.length===0)return[];let n=[],r=Es(e.nodes||[]),s=new Map;for(let i of e.nodes||[]){let o=i.light??i.extensions?.KHR_lights_punctual?.light;if(typeof o!="number")continue;let c=t[o];if(!c)continue;let a=gs(c.color||[1,1,1]),l=c.intensity??1,h=c.range,f=Sn(i,r,s);switch(c.type){case"directional":n.push(Ts(f,a,l));break;case"point":n.push(Ms(f,a,l,h));break;case"spot":n.push(As(f,a,l,h,c.spot));break;default:break}}return n}function gs(e){return e.map(t=>t*us)}function Ms(e,t,n,r){let s=Nn(e),i=[1,0,0];return r!==void 0&&r>0&&(i=[1,0,1/(r*r)]),{type:"point",position:s,color:t,intensity:n,attenuation:i}}function Ts(e,t,n){return{type:"directional",direction:wn(e),color:t,intensity:n}}function As(e,t,n,r,s={}){let i=Nn(e),o=wn(e),c=[1,0,0];return r!==void 0&&r>0&&(c=[1,0,1/(r*r)]),{type:"spot",position:i,direction:o,color:t,intensity:n,attenuation:c,innerConeAngle:s.innerConeAngle??0,outerConeAngle:s.outerConeAngle??Math.PI/4}}function Es(e){let t=new Map;for(let n of e)for(let r of n.children||[])t.set(r.id,n);return t}function Sn(e,t,n){let r=n.get(e.id);if(r)return r;let s=ys(e),i=t.get(e.id),o=i?new B(Sn(i,t,n)).multiplyRight(s):s;return n.set(e.id,o),o}function ys(e){if(e.matrix)return new B(e.matrix);let t=new B;return e.translation&&t.translate(e.translation),e.rotation&&t.multiplyRight(new B().fromQuaternion(e.rotation)),e.scale&&t.scale(e.scale),t}function Nn(e){return e.transformAsPoint([0,0,0])}function wn(e){return e.transformDirection([0,0,-1])}var K=F(Z(),1),vn=F(Zt(),1);function On(e){switch(e){case y.POINTS:return"point-list";case y.LINES:return"line-list";case y.LINE_STRIP:return"line-strip";case y.TRIANGLES:return"triangle-list";case y.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(e))}}var D=F($(),1),In=F(Z(),1),ct=F(Zt(),1),j=F(Z(),1),_s=`
|
|
7
|
+
"use strict";var __exports__=(()=>{var bn=Object.create;var Me=Object.defineProperty;var Nn=Object.getOwnPropertyDescriptor;var On=Object.getOwnPropertyNames;var Ln=Object.getPrototypeOf,In=Object.prototype.hasOwnProperty;var We=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Nt=(t,e)=>{for(var r in e)Me(t,r,{get:e[r],enumerable:!0})},ge=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of On(e))!In.call(t,s)&&s!==r&&Me(t,s,{get:()=>e[s],enumerable:!(n=Nn(e,s))||n.enumerable});return t},Te=(t,e,r)=>(ge(t,e,"default"),r&&ge(r,e,"default")),k=(t,e,r)=>(r=t!=null?bn(Ln(t)):{},ge(e||!t||!t.__esModule?Me(r,"default",{value:t,enumerable:!0}):r,t)),vn=t=>ge(Me({},"__esModule",{value:!0}),t);var G=We((li,Ot)=>{Ot.exports=globalThis.luma});var oe=We((fi,Lt)=>{Lt.exports=globalThis.luma});var $e=We((kc,cn)=>{cn.exports=globalThis.luma});var xe={};Nt(xe,{GLTFAnimator:()=>re,createScenegraphsFromGLTF:()=>wn,getGLTFExtensionSupport:()=>qe,loadPBREnvironment:()=>Yt,parseGLTFLights:()=>Ve,parsePBRMaterial:()=>he});Te(xe,k(G(),1));var st=k(oe(),1);async function Ye(t,e,r,n){return n._parse(t,e,r,n)}function j(t,e){if(!t)throw new Error(e||"loader assertion failed.")}var K={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Pn=K.self||K.window||K.global||{},Cn=K.window||K.self||K.global||{},Fn=K.global||K.self||K.window||{},kn=K.document||{};var Xe=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var It=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Hn=It&&parseFloat(It[1])||0;var Un="",vt={};function ye(t){for(let e in vt)if(t.startsWith(e)){let r=vt[e];t=t.replace(e,r)}return!t.startsWith("http://")&&!t.startsWith("https://")&&(t=`${Un}${t}`),t}var J={};Nt(J,{dirname:()=>Bn,filename:()=>zn,join:()=>Kn,resolve:()=>$n});function Pt(){if(typeof process<"u"&&typeof process.cwd<"u")return process.cwd();let t=window.location?.pathname;return t?.slice(0,t.lastIndexOf("/")+1)||""}function zn(t){let e=t?t.lastIndexOf("/"):-1;return e>=0?t.substr(e+1):t}function Bn(t){let e=t?t.lastIndexOf("/"):-1;return e>=0?t.substr(0,e):""}function Kn(...t){let e="/";return t=t.map((r,n)=>(n&&(r=r.replace(new RegExp(`^${e}`),"")),n!==t.length-1&&(r=r.replace(new RegExp(`${e}$`),"")),r)),t.join(e)}function $n(...t){let e=[];for(let o=0;o<t.length;o++)e[o]=t[o];let r="",n=!1,s;for(let o=e.length-1;o>=-1&&!n;o--){let i;o>=0?i=e[o]:(s===void 0&&(s=Pt()),i=s),i.length!==0&&(r=`${i}/${r}`,n=i.charCodeAt(0)===ie)}return r=Vn(r,!n),n?`/${r}`:r.length>0?r:"."}var ie=47,Ge=46;function Vn(t,e){let r="",n=-1,s=0,o,i=!1;for(let a=0;a<=t.length;++a){if(a<t.length)o=t.charCodeAt(a);else{if(o===ie)break;o=ie}if(o===ie){if(!(n===a-1||s===1))if(n!==a-1&&s===2){if(r.length<2||!i||r.charCodeAt(r.length-1)!==Ge||r.charCodeAt(r.length-2)!==Ge){if(r.length>2){let c=r.length-1,l=c;for(;l>=0&&r.charCodeAt(l)!==ie;--l);if(l!==c){r=l===-1?"":r.slice(0,l),n=a,s=0,i=!1;continue}}else if(r.length===2||r.length===1){r="",n=a,s=0,i=!1;continue}}e&&(r.length>0?r+="/..":r="..",i=!0)}else{let c=t.slice(n+1,a);r.length>0?r+=`/${c}`:r=c,i=!1}n=a,s=0}else o===Ge&&s!==-1?++s:s=-1}return r}var Ct="4.4.0";var Dn=globalThis.loaders?.parseImageNode,je=typeof Image<"u",Je=typeof ImageBitmap<"u",qn=Boolean(Dn),Qe=Xe?!0:qn;function Ft(t){switch(t){case"auto":return Je||je||Qe;case"imagebitmap":return Je;case"image":return je;case"data":return Qe;default:throw new Error(`@loaders.gl/images: image ${t} not supported in this environment`)}}function kt(){if(Je)return"imagebitmap";if(je)return"image";if(Qe)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function Ht(t){let e=Wn(t);if(!e)throw new Error("Not an image");return e}function _e(t){return Re(t)}function Re(t){switch(Ht(t)){case"data":return t;case"image":case"imagebitmap":let e=document.createElement("canvas"),r=e.getContext("2d");if(!r)throw new Error("getImageData");return e.width=t.width,e.height=t.height,r.drawImage(t,0,0),r.getImageData(0,0,t.width,t.height);default:throw new Error("getImageData")}}function Wn(t){return typeof ImageBitmap<"u"&&t instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&t instanceof Image?"image":t&&typeof t=="object"&&t.data&&t.width&&t.height?"data":null}var Yn=/^data:image\/svg\+xml/,Xn=/\.svg((\?|#).*)?$/;function Ae(t){return t&&(Yn.test(t)||Xn.test(t))}function Ut(t,e){if(Ae(e)){let n=new TextDecoder().decode(t);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(n=unescape(encodeURIComponent(n)))}catch(o){throw new Error(o.message)}return`data:image/svg+xml;base64,${btoa(n)}`}return Ze(t,e)}function Ze(t,e){if(Ae(e))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(t)])}async function Ee(t,e,r){let n=Ut(t,r),s=self.URL||self.webkitURL,o=typeof n!="string"&&s.createObjectURL(n);try{return await Gn(o||n,e)}finally{o&&s.revokeObjectURL(o)}}async function Gn(t,e){let r=new Image;return r.src=t,e.image&&e.image.decode&&r.decode?(await r.decode(),r):await new Promise((n,s)=>{try{r.onload=()=>n(r),r.onerror=o=>{let i=o instanceof Error?o.message:"error";s(new Error(i))}}catch(o){s(o)}})}var zt=!0;async function Bt(t,e,r){let n;Ae(r)?n=await Ee(t,e,r):n=Ze(t,r);let s=e&&e.imagebitmap;return await jn(n,s)}async function jn(t,e=null){if((Jn(e)||!zt)&&(e=null),e)try{return await createImageBitmap(t,e)}catch(r){console.warn(r),zt=!1}return await createImageBitmap(t)}function Jn(t){if(!t)return!0;for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}function Kt(t){return!ts(t,"ftyp",4)||!(t[8]&96)?null:Qn(t)}function Qn(t){switch(Zn(t,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Zn(t,e,r){return String.fromCharCode(...t.slice(e,r))}function es(t){return[...t].map(e=>e.charCodeAt(0))}function ts(t,e,r=0){let n=es(e);for(let s=0;s<n.length;++s)if(n[s]!==t[s+r])return!1;return!0}var $=!1,ae=!0;function we(t){let e=ce(t);return ns(e)||is(e)||ss(e)||os(e)||rs(e)}function rs(t){let e=new Uint8Array(t instanceof DataView?t.buffer:t),r=Kt(e);return r?{mimeType:r.mimeType,width:0,height:0}:null}function ns(t){let e=ce(t);return e.byteLength>=24&&e.getUint32(0,$)===2303741511?{mimeType:"image/png",width:e.getUint32(16,$),height:e.getUint32(20,$)}:null}function ss(t){let e=ce(t);return e.byteLength>=10&&e.getUint32(0,$)===1195984440?{mimeType:"image/gif",width:e.getUint16(6,ae),height:e.getUint16(8,ae)}:null}function os(t){let e=ce(t);return e.byteLength>=14&&e.getUint16(0,$)===16973&&e.getUint32(2,ae)===e.byteLength?{mimeType:"image/bmp",width:e.getUint32(18,ae),height:e.getUint32(22,ae)}:null}function is(t){let e=ce(t);if(!(e.byteLength>=3&&e.getUint16(0,$)===65496&&e.getUint8(2)===255))return null;let{tableMarkers:n,sofMarkers:s}=as(),o=2;for(;o+9<e.byteLength;){let i=e.getUint16(o,$);if(s.has(i))return{mimeType:"image/jpeg",height:e.getUint16(o+5,$),width:e.getUint16(o+7,$)};if(!n.has(i))return null;o+=2,o+=e.getUint16(o,$)}return null}function as(){let t=new Set([65499,65476,65484,65501,65534]);for(let r=65504;r<65520;++r)t.add(r);return{tableMarkers:t,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function ce(t){if(t instanceof DataView)return t;if(ArrayBuffer.isView(t))return new DataView(t.buffer);if(t instanceof ArrayBuffer)return new DataView(t);throw new Error("toDataView")}async function $t(t,e){let{mimeType:r}=we(t)||{},n=globalThis.loaders?.parseImageNode;return j(n),await n(t,r)}async function Vt(t,e,r){e=e||{};let s=(e.image||{}).type||"auto",{url:o}=r||{},i=cs(s),a;switch(i){case"imagebitmap":a=await Bt(t,e,o);break;case"image":a=await Ee(t,e,o);break;case"data":a=await $t(t,e);break;default:j(!1)}return s==="data"&&(a=Re(a)),a}function cs(t){switch(t){case"auto":case"data":return kt();default:return Ft(t),t}}var ls=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],fs=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],ps={image:{type:"auto",decode:!0}},Se={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:Ct,mimeTypes:fs,extensions:ls,parse:Vt,tests:[t=>Boolean(we(new DataView(t)))],options:ps};var hs=t=>t&&typeof t=="object";async function Dt(t,e,r={}){return await et(t,e,r)}async function et(t,e,r){return Array.isArray(t)?await ds(t,e,r):hs(t)?await us(t,e,r):await e(t,r)}async function us(t,e,r){let n=[],s={};for(let o in t){let i=t[o],a=et(i,e,r).then(c=>{s[o]=c});n.push(a)}return await Promise.all(n),s}async function ds(t,e,r={}){let n=t.map(s=>et(s,e,r));return await Promise.all(n)}async function qt(t,e={},r){let n=be(e);return await Dt(t,async s=>await tt(s,n,r))}async function tt(t,e={},r){let n=xs(t,e,r),o=await _s(e,r)(n),i=Rs(e);if(r){let c=As(n,o,r);return await Ye(o,[Se],i,c)}let a=await o.arrayBuffer();return await Se.parse(a,i)}function be(t={}){if(t.core?.baseUrl)return t;let e=t.baseUrl;return e?{...t,core:{...t.core,baseUrl:e}}:t}function xs(t,e={},r){let n=ye(t);if(Es(t))return n;let s=gs(e,r);if(!s){if(n!==t||t.startsWith("@"))return n;throw new Error(`Unable to resolve relative image URL ${t} without a base URL`)}return ye(Ts(s,t))}function gs(t,e){return e?.baseUrl?e.baseUrl:t.baseUrl?rt(t.baseUrl):t.core?.baseUrl?Ms(t.core.baseUrl):null}function rt(t){return t.endsWith("/")?t.slice(0,-1):t}function Ms(t){return rt(J.dirname(t))}function Ts(t,e){if(ys(t))return new URL(e,`${rt(t)}/`).toString();let r=t.startsWith("/")?t:`/${t}`,n=J.resolve(r,e);return t.startsWith("/")?n:n.slice(1)}function ys(t){return t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")||t.startsWith("blob:")}function _s(t,e){let r=t.fetch??t.core?.fetch;return e?.fetch?e.fetch:typeof r=="function"?r:r&&typeof r=="object"?n=>fetch(n,r):fetch}function Rs(t){let e=t.core,r={...t};if(delete r.baseUrl,!e?.baseUrl)return r;let n={...e};return delete n.baseUrl,{...r,core:n}}function As(t,e,r){let n=e.url||t,[s,o=""]=n.split("?");return{...r,url:n,response:e,filename:J.filename(s),baseUrl:J.dirname(s),queryString:o}}function Es(t){return t.startsWith("data:")||t.startsWith("blob:")||t.startsWith("file:")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("/")}function Ne(t,e,r){return typeof t=="function"?t({...e,...r}):t}async function le(t,e={}){let r=await ws(t,e);return await qt(r,be(e))}async function ws(t,e,r={}){let n=e&&e.image&&e.image.mipLevels||0;return n!==0?await Ss(t,n,e,r):Ne(t,e,r)}async function Ss(t,e,r,n){let s=[],o=be(r);if(e==="auto"){let i=Ne(t,r,{...n,lod:0}),a=await tt(i,o),{width:c,height:l}=_e(a);e=bs({width:c,height:l}),s.push(i)}j(e>0);for(let i=s.length;i<e;++i){let a=Ne(t,r,{...n,lod:i});s.push(a)}return s}function bs(t){return 1+Math.floor(Math.log2(Math.max(t.width,t.height)))}function Yt(t,e){let r=e.specularMipLevels??1,n=new st.DynamicTexture(t,{id:"brdfLUT",sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"},data:le(nt(e.brdfLutUrl))}),s=Wt(t,{id:"DiffuseEnvSampler",getTextureForFace:i=>le(nt(e.getTexUrl("diffuse",Oe.indexOf(i),0))),sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}}),o=Wt(t,{id:"SpecularEnvSampler",getTextureForFace:i=>{let a=[],c=Oe.indexOf(i);for(let l=0;l<r;l++)a.push(le(nt(e.getTexUrl("specular",c,l))));return Promise.all(a)},sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}});return{brdfLutTexture:n,diffuseEnvSampler:s,specularEnvSampler:o}}var Oe=["+X","-X","+Y","-Y","+Z","-Z"];function nt(t){let e=globalThis.document?.baseURI??globalThis.location?.href;return e?new URL(t,e).toString():t}function Wt(t,{id:e,getTextureForFace:r,sampler:n}){let s=Promise.all(Oe.map(o=>r(o))).then(o=>{let i={};return Oe.forEach((a,c)=>{i[a]=o[c]}),i});return new st.DynamicTexture(t,{id:e,dimension:"cube",mipmaps:!1,sampler:n,data:s})}var b=k(G(),1);var R;(function(t){t[t.POINTS=0]="POINTS",t[t.LINES=1]="LINES",t[t.LINE_LOOP=2]="LINE_LOOP",t[t.LINE_STRIP=3]="LINE_STRIP",t[t.TRIANGLES=4]="TRIANGLES",t[t.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",t[t.TRIANGLE_FAN=6]="TRIANGLE_FAN",t[t.ONE=1]="ONE",t[t.SRC_ALPHA=770]="SRC_ALPHA",t[t.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",t[t.FUNC_ADD=32774]="FUNC_ADD",t[t.LINEAR=9729]="LINEAR",t[t.NEAREST=9728]="NEAREST",t[t.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",t[t.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",t[t.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",t[t.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",t[t.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",t[t.TEXTURE_WRAP_S=10242]="TEXTURE_WRAP_S",t[t.TEXTURE_WRAP_T=10243]="TEXTURE_WRAP_T",t[t.REPEAT=10497]="REPEAT",t[t.CLAMP_TO_EDGE=33071]="CLAMP_TO_EDGE",t[t.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",t[t.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL"})(R||(R={}));function Gt(t){return{addressModeU:Xt(t.wrapS),addressModeV:Xt(t.wrapT),magFilter:Ns(t.magFilter),...Os(t.minFilter)}}function Xt(t){switch(t){case R.CLAMP_TO_EDGE:return"clamp-to-edge";case R.REPEAT:return"repeat";case R.MIRRORED_REPEAT:return"mirror-repeat";default:return}}function Ns(t){switch(t){case R.NEAREST:return"nearest";case R.LINEAR:return"linear";default:return}}function Os(t){switch(t){case R.NEAREST:return{minFilter:"nearest"};case R.LINEAR:return{minFilter:"linear"};case R.NEAREST_MIPMAP_NEAREST:return{minFilter:"nearest",mipmapFilter:"nearest"};case R.LINEAR_MIPMAP_NEAREST:return{minFilter:"linear",mipmapFilter:"nearest"};case R.NEAREST_MIPMAP_LINEAR:return{minFilter:"nearest",mipmapFilter:"linear"};case R.LINEAR_MIPMAP_LINEAR:return{minFilter:"linear",mipmapFilter:"linear"};default:return{}}}var Ra=1/Math.PI*180,Aa=1/180*Math.PI,Ls={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Ls}};var N=globalThis.mathgl.config;function jt(t,{precision:e=N.precision}={}){return t=Is(t),`${parseFloat(t.toPrecision(e))}`}function Q(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function ot(t,e,r){let n=N.EPSILON;r&&(N.EPSILON=r);try{if(t===e)return!0;if(Q(t)&&Q(e)){if(t.length!==e.length)return!1;for(let s=0;s<t.length;++s)if(!ot(t[s],e[s]))return!1;return!0}return t&&t.equals?t.equals(e):e&&e.equals?e.equals(t):typeof t=="number"&&typeof e=="number"?Math.abs(t-e)<=N.EPSILON*Math.max(1,Math.abs(t),Math.abs(e)):!1}finally{N.EPSILON=n}}function Is(t){return Math.round(t/N.EPSILON)*N.EPSILON}var W=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(e,r=0){for(let n=0;n<this.ELEMENTS;++n)this[n]=e[n+r];return this.check()}toArray(e=[],r=0){for(let n=0;n<this.ELEMENTS;++n)e[r+n]=this[n];return e}toObject(e){return e}from(e){return Array.isArray(e)?this.copy(e):this.fromObject(e)}to(e){return e===this?this:Q(e)?this.toArray(e):this.toObject(e)}toTarget(e){return e?this.to(e):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(N)}formatString(e){let r="";for(let n=0;n<this.ELEMENTS;++n)r+=(n>0?", ":"")+jt(this[n],e);return`${e.printTypes?this.constructor.name:""}[${r}]`}equals(e){if(!e||this.length!==e.length)return!1;for(let r=0;r<this.ELEMENTS;++r)if(!ot(this[r],e[r]))return!1;return!0}exactEquals(e){if(!e||this.length!==e.length)return!1;for(let r=0;r<this.ELEMENTS;++r)if(this[r]!==e[r])return!1;return!0}negate(){for(let e=0;e<this.ELEMENTS;++e)this[e]=-this[e];return this.check()}lerp(e,r,n){if(n===void 0)return this.lerp(this,e,r);for(let s=0;s<this.ELEMENTS;++s){let o=e[s],i=typeof r=="number"?r:r[s];this[s]=o+n*(i-o)}return this.check()}min(e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(e[r],this[r]);return this.check()}max(e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.max(e[r],this[r]);return this.check()}clamp(e,r){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e[n]),r[n]);return this.check()}add(...e){for(let r of e)for(let n=0;n<this.ELEMENTS;++n)this[n]+=r[n];return this.check()}subtract(...e){for(let r of e)for(let n=0;n<this.ELEMENTS;++n)this[n]-=r[n];return this.check()}scale(e){if(typeof e=="number")for(let r=0;r<this.ELEMENTS;++r)this[r]*=e;else for(let r=0;r<this.ELEMENTS&&r<e.length;++r)this[r]*=e[r];return this.check()}multiplyByScalar(e){for(let r=0;r<this.ELEMENTS;++r)this[r]*=e;return this.check()}check(){if(N.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let e=this.length===this.ELEMENTS;for(let r=0;r<this.ELEMENTS;++r)e=e&&Number.isFinite(this[r]);return e}sub(e){return this.subtract(e)}setScalar(e){for(let r=0;r<this.ELEMENTS;++r)this[r]=e;return this.check()}addScalar(e){for(let r=0;r<this.ELEMENTS;++r)this[r]+=e;return this.check()}subScalar(e){return this.addScalar(-e)}multiplyScalar(e){for(let r=0;r<this.ELEMENTS;++r)this[r]*=e;return this.check()}divideScalar(e){return this.multiplyByScalar(1/e)}clampScalar(e,r){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e),r);return this.check()}get elements(){return this}};function vs(t,e){if(t.length!==e)return!1;for(let r=0;r<t.length;++r)if(!Number.isFinite(t[r]))return!1;return!0}function w(t){if(!Number.isFinite(t))throw new Error(`Invalid number ${JSON.stringify(t)}`);return t}function Y(t,e,r=""){if(N.debug&&!vs(t,e))throw new Error(`math.gl: ${r} some fields set to invalid numbers'`);return t}function it(t,e){if(!t)throw new Error(`math.gl assertion ${e}`)}var Le=class extends W{get x(){return this[0]}set x(e){this[0]=w(e)}get y(){return this[1]}set y(e){this[1]=w(e)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let e=0;for(let r=0;r<this.ELEMENTS;++r)e+=this[r]*this[r];return e}magnitudeSquared(){return this.lengthSquared()}distance(e){return Math.sqrt(this.distanceSquared(e))}distanceSquared(e){let r=0;for(let n=0;n<this.ELEMENTS;++n){let s=this[n]-e[n];r+=s*s}return w(r)}dot(e){let r=0;for(let n=0;n<this.ELEMENTS;++n)r+=this[n]*e[n];return w(r)}normalize(){let e=this.magnitude();if(e!==0)for(let r=0;r<this.ELEMENTS;++r)this[r]/=e;return this.check()}multiply(...e){for(let r of e)for(let n=0;n<this.ELEMENTS;++n)this[n]*=r[n];return this.check()}divide(...e){for(let r of e)for(let n=0;n<this.ELEMENTS;++n)this[n]/=r[n];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(e){return this.distance(e)}distanceToSquared(e){return this.distanceSquared(e)}getComponent(e){return it(e>=0&&e<this.ELEMENTS,"index is out of range"),w(this[e])}setComponent(e,r){return it(e>=0&&e<this.ELEMENTS,"index is out of range"),this[e]=r,this.check()}addVectors(e,r){return this.copy(e).add(r)}subVectors(e,r){return this.copy(e).subtract(r)}multiplyVectors(e,r){return this.copy(e).multiply(r)}addScaledVector(e,r){return this.add(new this.constructor(e).multiplyScalar(r))}};var I=typeof Float32Array<"u"?Float32Array:Array;var Ca=Math.PI/180;function Ps(){let t=new I(2);return I!=Float32Array&&(t[0]=0,t[1]=0),t}function Zt(t,e,r){let n=e[0],s=e[1];return t[0]=r[0]*n+r[3]*s+r[6],t[1]=r[1]*n+r[4]*s+r[7],t}function er(t,e,r){let n=e[0],s=e[1];return t[0]=r[0]*n+r[4]*s+r[12],t[1]=r[1]*n+r[5]*s+r[13],t}var Fa=function(){let t=Ps();return function(e,r,n,s,o,i){let a,c;for(r||(r=2),n||(n=0),s?c=Math.min(s*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],o(t,t,i),e[a]=t[0],e[a+1]=t[1];return e}}();function tr(t,e,r){let n=e[0],s=e[1],o=r[3]*n+r[7]*s||1;return t[0]=(r[0]*n+r[4]*s)/o,t[1]=(r[1]*n+r[5]*s)/o,t}function rr(t,e,r){let n=e[0],s=e[1],o=e[2],i=r[3]*n+r[7]*s+r[11]*o||1;return t[0]=(r[0]*n+r[4]*s+r[8]*o)/i,t[1]=(r[1]*n+r[5]*s+r[9]*o)/i,t[2]=(r[2]*n+r[6]*s+r[10]*o)/i,t}function nr(t,e,r){let n=e[0],s=e[1];return t[0]=r[0]*n+r[2]*s,t[1]=r[1]*n+r[3]*s,t[2]=e[2],t[3]=e[3],t}function Ie(t,e,r){let n=e[0],s=e[1],o=e[2];return t[0]=r[0]*n+r[3]*s+r[6]*o,t[1]=r[1]*n+r[4]*s+r[7]*o,t[2]=r[2]*n+r[5]*s+r[8]*o,t[3]=e[3],t}function at(){let t=new I(3);return I!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Cs(t){let e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function ct(t,e,r){let n=new I(3);return n[0]=t,n[1]=e,n[2]=r,n}function sr(t,e){let r=e[0],n=e[1],s=e[2],o=r*r+n*n+s*s;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function or(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ve(t,e,r){let n=e[0],s=e[1],o=e[2],i=r[0],a=r[1],c=r[2];return t[0]=s*c-o*a,t[1]=o*i-n*c,t[2]=n*a-s*i,t}function Pe(t,e,r){let n=e[0],s=e[1],o=e[2],i=r[3]*n+r[7]*s+r[11]*o+r[15];return i=i||1,t[0]=(r[0]*n+r[4]*s+r[8]*o+r[12])/i,t[1]=(r[1]*n+r[5]*s+r[9]*o+r[13])/i,t[2]=(r[2]*n+r[6]*s+r[10]*o+r[14])/i,t}function ir(t,e,r){let n=e[0],s=e[1],o=e[2];return t[0]=n*r[0]+s*r[3]+o*r[6],t[1]=n*r[1]+s*r[4]+o*r[7],t[2]=n*r[2]+s*r[5]+o*r[8],t}function ar(t,e,r){let n=r[0],s=r[1],o=r[2],i=r[3],a=e[0],c=e[1],l=e[2],m=s*l-o*c,p=o*a-n*l,f=n*c-s*a,h=s*f-o*p,u=o*m-n*f,d=n*p-s*m,x=i*2;return m*=x,p*=x,f*=x,h*=2,u*=2,d*=2,t[0]=a+m+h,t[1]=c+p+u,t[2]=l+f+d,t}var cr=Cs;var Ua=function(){let t=at();return function(e,r,n,s,o,i){let a,c;for(r||(r=3),n||(n=0),s?c=Math.min(s*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],o(t,t,i),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}}();var Ce,Z=class extends Le{static get ZERO(){return Ce||(Ce=new Z(0,0,0,0),Object.freeze(Ce)),Ce}constructor(e=0,r=0,n=0,s=0){super(-0,-0,-0,-0),Q(e)&&arguments.length===1?this.copy(e):(N.debug&&(w(e),w(r),w(n),w(s)),this[0]=e,this[1]=r,this[2]=n,this[3]=s)}set(e,r,n,s){return this[0]=e,this[1]=r,this[2]=n,this[3]=s,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}fromObject(e){return N.debug&&(w(e.x),w(e.y),w(e.z),w(e.w)),this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this}toObject(e){return e.x=this[0],e.y=this[1],e.z=this[2],e.w=this[3],e}get ELEMENTS(){return 4}get z(){return this[2]}set z(e){this[2]=w(e)}get w(){return this[3]}set w(e){this[3]=w(e)}transform(e){return Pe(this,this,e),this.check()}transformByMatrix3(e){return Ie(this,this,e),this.check()}transformByMatrix2(e){return nr(this,this,e),this.check()}transformByQuaternion(e){return ar(this,this,e),this.check()}applyMatrix4(e){return e.transform(this,this),this}};var ee=class extends W{toString(){let e="[";if(N.printRowMajor){e+="row-major:";for(let r=0;r<this.RANK;++r)for(let n=0;n<this.RANK;++n)e+=` ${this[n*this.RANK+r]}`}else{e+="column-major:";for(let r=0;r<this.ELEMENTS;++r)e+=` ${this[r]}`}return e+="]",e}getElementIndex(e,r){return r*this.RANK+e}getElement(e,r){return this[r*this.RANK+e]}setElement(e,r,n){return this[r*this.RANK+e]=w(n),this}getColumn(e,r=new Array(this.RANK).fill(-0)){let n=e*this.RANK;for(let s=0;s<this.RANK;++s)r[s]=this[n+s];return r}setColumn(e,r){let n=e*this.RANK;for(let s=0;s<this.RANK;++s)this[n+s]=r[s];return this}};function lr(){let t=new I(9);return I!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t}function fr(t,e){if(t===e){let r=e[1],n=e[2],s=e[5];t[1]=e[3],t[2]=e[6],t[3]=r,t[5]=e[7],t[6]=n,t[7]=s}else 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];return t}function pr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=e[4],a=e[5],c=e[6],l=e[7],m=e[8],p=m*i-a*l,f=-m*o+a*c,h=l*o-i*c,u=r*p+n*f+s*h;return u?(u=1/u,t[0]=p*u,t[1]=(-m*n+s*l)*u,t[2]=(a*n-s*i)*u,t[3]=f*u,t[4]=(m*r-s*c)*u,t[5]=(-a*r+s*o)*u,t[6]=h*u,t[7]=(-l*r+n*c)*u,t[8]=(i*r-n*o)*u,t):null}function mr(t){let e=t[0],r=t[1],n=t[2],s=t[3],o=t[4],i=t[5],a=t[6],c=t[7],l=t[8];return e*(l*o-i*c)+r*(-l*s+i*a)+n*(c*s-o*a)}function lt(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3],a=e[4],c=e[5],l=e[6],m=e[7],p=e[8],f=r[0],h=r[1],u=r[2],d=r[3],x=r[4],g=r[5],A=r[6],M=r[7],T=r[8];return t[0]=f*n+h*i+u*l,t[1]=f*s+h*a+u*m,t[2]=f*o+h*c+u*p,t[3]=d*n+x*i+g*l,t[4]=d*s+x*a+g*m,t[5]=d*o+x*c+g*p,t[6]=A*n+M*i+T*l,t[7]=A*s+M*a+T*m,t[8]=A*o+M*c+T*p,t}function hr(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3],a=e[4],c=e[5],l=e[6],m=e[7],p=e[8],f=r[0],h=r[1];return t[0]=n,t[1]=s,t[2]=o,t[3]=i,t[4]=a,t[5]=c,t[6]=f*n+h*i+l,t[7]=f*s+h*a+m,t[8]=f*o+h*c+p,t}function ur(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3],a=e[4],c=e[5],l=e[6],m=e[7],p=e[8],f=Math.sin(r),h=Math.cos(r);return t[0]=h*n+f*i,t[1]=h*s+f*a,t[2]=h*o+f*c,t[3]=h*i-f*n,t[4]=h*a-f*s,t[5]=h*c-f*o,t[6]=l,t[7]=m,t[8]=p,t}function ft(t,e,r){let n=r[0],s=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=s*e[3],t[4]=s*e[4],t[5]=s*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function dr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=r+r,a=n+n,c=s+s,l=r*i,m=n*i,p=n*a,f=s*i,h=s*a,u=s*c,d=o*i,x=o*a,g=o*c;return t[0]=1-p-u,t[3]=m-g,t[6]=f+x,t[1]=m+g,t[4]=1-l-u,t[7]=h-d,t[2]=f-x,t[5]=h+d,t[8]=1-l-p,t}var pt;(function(t){t[t.COL0ROW0=0]="COL0ROW0",t[t.COL0ROW1=1]="COL0ROW1",t[t.COL0ROW2=2]="COL0ROW2",t[t.COL1ROW0=3]="COL1ROW0",t[t.COL1ROW1=4]="COL1ROW1",t[t.COL1ROW2=5]="COL1ROW2",t[t.COL2ROW0=6]="COL2ROW0",t[t.COL2ROW1=7]="COL2ROW1",t[t.COL2ROW2=8]="COL2ROW2"})(pt||(pt={}));var Hs=Object.freeze([1,0,0,0,1,0,0,0,1]),H=class extends ee{static get IDENTITY(){return zs()}static get ZERO(){return Us()}get ELEMENTS(){return 9}get RANK(){return 3}get INDICES(){return pt}constructor(e,...r){super(-0,-0,-0,-0,-0,-0,-0,-0,-0),arguments.length===1&&Array.isArray(e)?this.copy(e):r.length>0?this.copy([e,...r]):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this.check()}identity(){return this.copy(Hs)}fromObject(e){return this.check()}fromQuaternion(e){return dr(this,e),this.check()}set(e,r,n,s,o,i,a,c,l){return this[0]=e,this[1]=r,this[2]=n,this[3]=s,this[4]=o,this[5]=i,this[6]=a,this[7]=c,this[8]=l,this.check()}setRowMajor(e,r,n,s,o,i,a,c,l){return this[0]=e,this[1]=s,this[2]=a,this[3]=r,this[4]=o,this[5]=c,this[6]=n,this[7]=i,this[8]=l,this.check()}determinant(){return mr(this)}transpose(){return fr(this,this),this.check()}invert(){return pr(this,this),this.check()}multiplyLeft(e){return lt(this,e,this),this.check()}multiplyRight(e){return lt(this,this,e),this.check()}rotate(e){return ur(this,this,e),this.check()}scale(e){return Array.isArray(e)?ft(this,this,e):ft(this,this,[e,e]),this.check()}translate(e){return hr(this,this,e),this.check()}transform(e,r){let n;switch(e.length){case 2:n=Zt(r||[-0,-0],e,this);break;case 3:n=ir(r||[-0,-0,-0],e,this);break;case 4:n=Ie(r||[-0,-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return Y(n,e.length),n}transformVector(e,r){return this.transform(e,r)}transformVector2(e,r){return this.transform(e,r)}transformVector3(e,r){return this.transform(e,r)}},Fe,ke=null;function Us(){return Fe||(Fe=new H([0,0,0,0,0,0,0,0,0]),Object.freeze(Fe)),Fe}function zs(){return ke||(ke=new H,Object.freeze(ke)),ke}function Bs(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function xr(t,e){if(t===e){let r=e[1],n=e[2],s=e[3],o=e[6],i=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=o,t[11]=e[14],t[12]=s,t[13]=i,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function gr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=e[4],a=e[5],c=e[6],l=e[7],m=e[8],p=e[9],f=e[10],h=e[11],u=e[12],d=e[13],x=e[14],g=e[15],A=r*a-n*i,M=r*c-s*i,T=r*l-o*i,y=n*c-s*a,_=n*l-o*a,v=s*l-o*c,P=m*d-p*u,C=m*x-f*u,F=m*g-h*u,U=p*x-f*d,z=p*g-h*d,B=f*g-h*x,E=A*B-M*z+T*U+y*F-_*C+v*P;return E?(E=1/E,t[0]=(a*B-c*z+l*U)*E,t[1]=(s*z-n*B-o*U)*E,t[2]=(d*v-x*_+g*y)*E,t[3]=(f*_-p*v-h*y)*E,t[4]=(c*F-i*B-l*C)*E,t[5]=(r*B-s*F+o*C)*E,t[6]=(x*T-u*v-g*M)*E,t[7]=(m*v-f*T+h*M)*E,t[8]=(i*z-a*F+l*P)*E,t[9]=(n*F-r*z-o*P)*E,t[10]=(u*_-d*T+g*A)*E,t[11]=(p*T-m*_-h*A)*E,t[12]=(a*C-i*U-c*P)*E,t[13]=(r*U-n*C+s*P)*E,t[14]=(d*M-u*y-x*A)*E,t[15]=(m*y-p*M+f*A)*E,t):null}function Mr(t){let e=t[0],r=t[1],n=t[2],s=t[3],o=t[4],i=t[5],a=t[6],c=t[7],l=t[8],m=t[9],p=t[10],f=t[11],h=t[12],u=t[13],d=t[14],x=t[15],g=e*i-r*o,A=e*a-n*o,M=r*a-n*i,T=l*u-m*h,y=l*d-p*h,_=m*d-p*u,v=e*_-r*y+n*T,P=o*_-i*y+a*T,C=l*M-m*A+p*g,F=h*M-u*A+d*g;return c*v-s*P+x*C-f*F}function mt(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3],a=e[4],c=e[5],l=e[6],m=e[7],p=e[8],f=e[9],h=e[10],u=e[11],d=e[12],x=e[13],g=e[14],A=e[15],M=r[0],T=r[1],y=r[2],_=r[3];return t[0]=M*n+T*a+y*p+_*d,t[1]=M*s+T*c+y*f+_*x,t[2]=M*o+T*l+y*h+_*g,t[3]=M*i+T*m+y*u+_*A,M=r[4],T=r[5],y=r[6],_=r[7],t[4]=M*n+T*a+y*p+_*d,t[5]=M*s+T*c+y*f+_*x,t[6]=M*o+T*l+y*h+_*g,t[7]=M*i+T*m+y*u+_*A,M=r[8],T=r[9],y=r[10],_=r[11],t[8]=M*n+T*a+y*p+_*d,t[9]=M*s+T*c+y*f+_*x,t[10]=M*o+T*l+y*h+_*g,t[11]=M*i+T*m+y*u+_*A,M=r[12],T=r[13],y=r[14],_=r[15],t[12]=M*n+T*a+y*p+_*d,t[13]=M*s+T*c+y*f+_*x,t[14]=M*o+T*l+y*h+_*g,t[15]=M*i+T*m+y*u+_*A,t}function Tr(t,e,r){let n=r[0],s=r[1],o=r[2],i,a,c,l,m,p,f,h,u,d,x,g;return e===t?(t[12]=e[0]*n+e[4]*s+e[8]*o+e[12],t[13]=e[1]*n+e[5]*s+e[9]*o+e[13],t[14]=e[2]*n+e[6]*s+e[10]*o+e[14],t[15]=e[3]*n+e[7]*s+e[11]*o+e[15]):(i=e[0],a=e[1],c=e[2],l=e[3],m=e[4],p=e[5],f=e[6],h=e[7],u=e[8],d=e[9],x=e[10],g=e[11],t[0]=i,t[1]=a,t[2]=c,t[3]=l,t[4]=m,t[5]=p,t[6]=f,t[7]=h,t[8]=u,t[9]=d,t[10]=x,t[11]=g,t[12]=i*n+m*s+u*o+e[12],t[13]=a*n+p*s+d*o+e[13],t[14]=c*n+f*s+x*o+e[14],t[15]=l*n+h*s+g*o+e[15]),t}function yr(t,e,r){let n=r[0],s=r[1],o=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*s,t[5]=e[5]*s,t[6]=e[6]*s,t[7]=e[7]*s,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function _r(t,e,r,n){let s=n[0],o=n[1],i=n[2],a=Math.sqrt(s*s+o*o+i*i),c,l,m,p,f,h,u,d,x,g,A,M,T,y,_,v,P,C,F,U,z,B,E,se;return a<1e-6?null:(a=1/a,s*=a,o*=a,i*=a,l=Math.sin(r),c=Math.cos(r),m=1-c,p=e[0],f=e[1],h=e[2],u=e[3],d=e[4],x=e[5],g=e[6],A=e[7],M=e[8],T=e[9],y=e[10],_=e[11],v=s*s*m+c,P=o*s*m+i*l,C=i*s*m-o*l,F=s*o*m-i*l,U=o*o*m+c,z=i*o*m+s*l,B=s*i*m+o*l,E=o*i*m-s*l,se=i*i*m+c,t[0]=p*v+d*P+M*C,t[1]=f*v+x*P+T*C,t[2]=h*v+g*P+y*C,t[3]=u*v+A*P+_*C,t[4]=p*F+d*U+M*z,t[5]=f*F+x*U+T*z,t[6]=h*F+g*U+y*z,t[7]=u*F+A*U+_*z,t[8]=p*B+d*E+M*se,t[9]=f*B+x*E+T*se,t[10]=h*B+g*E+y*se,t[11]=u*B+A*E+_*se,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function Rr(t,e,r){let n=Math.sin(r),s=Math.cos(r),o=e[4],i=e[5],a=e[6],c=e[7],l=e[8],m=e[9],p=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=o*s+l*n,t[5]=i*s+m*n,t[6]=a*s+p*n,t[7]=c*s+f*n,t[8]=l*s-o*n,t[9]=m*s-i*n,t[10]=p*s-a*n,t[11]=f*s-c*n,t}function Ar(t,e,r){let n=Math.sin(r),s=Math.cos(r),o=e[0],i=e[1],a=e[2],c=e[3],l=e[8],m=e[9],p=e[10],f=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=o*s-l*n,t[1]=i*s-m*n,t[2]=a*s-p*n,t[3]=c*s-f*n,t[8]=o*n+l*s,t[9]=i*n+m*s,t[10]=a*n+p*s,t[11]=c*n+f*s,t}function Er(t,e,r){let n=Math.sin(r),s=Math.cos(r),o=e[0],i=e[1],a=e[2],c=e[3],l=e[4],m=e[5],p=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=o*s+l*n,t[1]=i*s+m*n,t[2]=a*s+p*n,t[3]=c*s+f*n,t[4]=l*s-o*n,t[5]=m*s-i*n,t[6]=p*s-a*n,t[7]=f*s-c*n,t}function wr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=r+r,a=n+n,c=s+s,l=r*i,m=n*i,p=n*a,f=s*i,h=s*a,u=s*c,d=o*i,x=o*a,g=o*c;return t[0]=1-p-u,t[1]=m+g,t[2]=f-x,t[3]=0,t[4]=m-g,t[5]=1-l-u,t[6]=h+d,t[7]=0,t[8]=f+x,t[9]=h-d,t[10]=1-l-p,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Sr(t,e,r,n,s,o,i){let a=1/(r-e),c=1/(s-n),l=1/(o-i);return t[0]=o*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(s+n)*c,t[10]=(i+o)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=i*o*2*l,t[15]=0,t}function Ks(t,e,r,n,s){let o=1/Math.tan(e/2);if(t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,s!=null&&s!==1/0){let i=1/(n-s);t[10]=(s+n)*i,t[14]=2*s*n*i}else t[10]=-1,t[14]=-2*n;return t}var br=Ks;function $s(t,e,r,n,s,o,i){let a=1/(e-r),c=1/(n-s),l=1/(o-i);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(s+n)*c,t[14]=(i+o)*l,t[15]=1,t}var Nr=$s;function Or(t,e,r,n){let s,o,i,a,c,l,m,p,f,h,u=e[0],d=e[1],x=e[2],g=n[0],A=n[1],M=n[2],T=r[0],y=r[1],_=r[2];return Math.abs(u-T)<1e-6&&Math.abs(d-y)<1e-6&&Math.abs(x-_)<1e-6?Bs(t):(p=u-T,f=d-y,h=x-_,s=1/Math.sqrt(p*p+f*f+h*h),p*=s,f*=s,h*=s,o=A*h-M*f,i=M*p-g*h,a=g*f-A*p,s=Math.sqrt(o*o+i*i+a*a),s?(s=1/s,o*=s,i*=s,a*=s):(o=0,i=0,a=0),c=f*a-h*i,l=h*o-p*a,m=p*i-f*o,s=Math.sqrt(c*c+l*l+m*m),s?(s=1/s,c*=s,l*=s,m*=s):(c=0,l=0,m=0),t[0]=o,t[1]=c,t[2]=p,t[3]=0,t[4]=i,t[5]=l,t[6]=f,t[7]=0,t[8]=a,t[9]=m,t[10]=h,t[11]=0,t[12]=-(o*u+i*d+a*x),t[13]=-(c*u+l*d+m*x),t[14]=-(p*u+f*d+h*x),t[15]=1,t)}function Vs(){let t=new I(4);return I!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function Lr(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}function Ir(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}function vr(t){let e=t[0],r=t[1],n=t[2],s=t[3];return Math.sqrt(e*e+r*r+n*n+s*s)}function Pr(t){let e=t[0],r=t[1],n=t[2],s=t[3];return e*e+r*r+n*n+s*s}function Cr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=r*r+n*n+s*s+o*o;return i>0&&(i=1/Math.sqrt(i)),t[0]=r*i,t[1]=n*i,t[2]=s*i,t[3]=o*i,t}function Fr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function kr(t,e,r,n){let s=e[0],o=e[1],i=e[2],a=e[3];return t[0]=s+n*(r[0]-s),t[1]=o+n*(r[1]-o),t[2]=i+n*(r[2]-i),t[3]=a+n*(r[3]-a),t}function Hr(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3];return t[0]=r[0]*n+r[4]*s+r[8]*o+r[12]*i,t[1]=r[1]*n+r[5]*s+r[9]*o+r[13]*i,t[2]=r[2]*n+r[6]*s+r[10]*o+r[14]*i,t[3]=r[3]*n+r[7]*s+r[11]*o+r[15]*i,t}function Ur(t,e,r){let n=e[0],s=e[1],o=e[2],i=r[0],a=r[1],c=r[2],l=r[3],m=l*n+a*o-c*s,p=l*s+c*n-i*o,f=l*o+i*s-a*n,h=-i*n-a*s-c*o;return t[0]=m*l+h*-i+p*-c-f*-a,t[1]=p*l+h*-a+f*-i-m*-c,t[2]=f*l+h*-c+m*-a-p*-i,t[3]=e[3],t}var nc=function(){let t=Vs();return function(e,r,n,s,o,i){let a,c;for(r||(r=4),n||(n=0),s?c=Math.min(s*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],t[3]=e[a+3],o(t,t,i),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2],e[a+3]=t[3];return e}}();var dt;(function(t){t[t.COL0ROW0=0]="COL0ROW0",t[t.COL0ROW1=1]="COL0ROW1",t[t.COL0ROW2=2]="COL0ROW2",t[t.COL0ROW3=3]="COL0ROW3",t[t.COL1ROW0=4]="COL1ROW0",t[t.COL1ROW1=5]="COL1ROW1",t[t.COL1ROW2=6]="COL1ROW2",t[t.COL1ROW3=7]="COL1ROW3",t[t.COL2ROW0=8]="COL2ROW0",t[t.COL2ROW1=9]="COL2ROW1",t[t.COL2ROW2=10]="COL2ROW2",t[t.COL2ROW3=11]="COL2ROW3",t[t.COL3ROW0=12]="COL3ROW0",t[t.COL3ROW1=13]="COL3ROW1",t[t.COL3ROW2=14]="COL3ROW2",t[t.COL3ROW3=15]="COL3ROW3"})(dt||(dt={}));var qs=45*Math.PI/180,Ws=1,ht=.1,ut=500,Ys=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),V=class extends ee{static get IDENTITY(){return Gs()}static get ZERO(){return Xs()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return dt}constructor(e){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),arguments.length===1&&Array.isArray(e)?this.copy(e):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this[9]=e[9],this[10]=e[10],this[11]=e[11],this[12]=e[12],this[13]=e[13],this[14]=e[14],this[15]=e[15],this.check()}set(e,r,n,s,o,i,a,c,l,m,p,f,h,u,d,x){return this[0]=e,this[1]=r,this[2]=n,this[3]=s,this[4]=o,this[5]=i,this[6]=a,this[7]=c,this[8]=l,this[9]=m,this[10]=p,this[11]=f,this[12]=h,this[13]=u,this[14]=d,this[15]=x,this.check()}setRowMajor(e,r,n,s,o,i,a,c,l,m,p,f,h,u,d,x){return this[0]=e,this[1]=o,this[2]=l,this[3]=h,this[4]=r,this[5]=i,this[6]=m,this[7]=u,this[8]=n,this[9]=a,this[10]=p,this[11]=d,this[12]=s,this[13]=c,this[14]=f,this[15]=x,this.check()}toRowMajor(e){return e[0]=this[0],e[1]=this[4],e[2]=this[8],e[3]=this[12],e[4]=this[1],e[5]=this[5],e[6]=this[9],e[7]=this[13],e[8]=this[2],e[9]=this[6],e[10]=this[10],e[11]=this[14],e[12]=this[3],e[13]=this[7],e[14]=this[11],e[15]=this[15],e}identity(){return this.copy(Ys)}fromObject(e){return this.check()}fromQuaternion(e){return wr(this,e),this.check()}frustum(e){let{left:r,right:n,bottom:s,top:o,near:i=ht,far:a=ut}=e;return a===1/0?js(this,r,n,s,o,i):Sr(this,r,n,s,o,i,a),this.check()}lookAt(e){let{eye:r,center:n=[0,0,0],up:s=[0,1,0]}=e;return Or(this,r,n,s),this.check()}ortho(e){let{left:r,right:n,bottom:s,top:o,near:i=ht,far:a=ut}=e;return Nr(this,r,n,s,o,i,a),this.check()}orthographic(e){let{fovy:r=qs,aspect:n=Ws,focalDistance:s=1,near:o=ht,far:i=ut}=e;zr(r);let a=r/2,c=s*Math.tan(a),l=c*n;return this.ortho({left:-l,right:l,bottom:-c,top:c,near:o,far:i})}perspective(e){let{fovy:r=45*Math.PI/180,aspect:n=1,near:s=.1,far:o=500}=e;return zr(r),br(this,r,n,s,o),this.check()}determinant(){return Mr(this)}getScale(e=[-0,-0,-0]){return e[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),e[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),e[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),e}getTranslation(e=[-0,-0,-0]){return e[0]=this[12],e[1]=this[13],e[2]=this[14],e}getRotation(e,r){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],r=r||[-0,-0,-0];let n=this.getScale(r),s=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*s,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=0,e[4]=this[4]*s,e[5]=this[5]*o,e[6]=this[6]*i,e[7]=0,e[8]=this[8]*s,e[9]=this[9]*o,e[10]=this[10]*i,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}getRotationMatrix3(e,r){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0],r=r||[-0,-0,-0];let n=this.getScale(r),s=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*s,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=this[4]*s,e[4]=this[5]*o,e[5]=this[6]*i,e[6]=this[8]*s,e[7]=this[9]*o,e[8]=this[10]*i,e}transpose(){return xr(this,this),this.check()}invert(){return gr(this,this),this.check()}multiplyLeft(e){return mt(this,e,this),this.check()}multiplyRight(e){return mt(this,this,e),this.check()}rotateX(e){return Rr(this,this,e),this.check()}rotateY(e){return Ar(this,this,e),this.check()}rotateZ(e){return Er(this,this,e),this.check()}rotateXYZ(e){return this.rotateX(e[0]).rotateY(e[1]).rotateZ(e[2])}rotateAxis(e,r){return _r(this,this,e,r),this.check()}scale(e){return yr(this,this,Array.isArray(e)?e:[e,e,e]),this.check()}translate(e){return Tr(this,this,e),this.check()}transform(e,r){return e.length===4?(r=Hr(r||[-0,-0,-0,-0],e,this),Y(r,4),r):this.transformAsPoint(e,r)}transformAsPoint(e,r){let{length:n}=e,s;switch(n){case 2:s=er(r||[-0,-0],e,this);break;case 3:s=Pe(r||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return Y(s,e.length),s}transformAsVector(e,r){let n;switch(e.length){case 2:n=tr(r||[-0,-0],e,this);break;case 3:n=rr(r||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return Y(n,e.length),n}transformPoint(e,r){return this.transformAsPoint(e,r)}transformVector(e,r){return this.transformAsPoint(e,r)}transformDirection(e,r){return this.transformAsVector(e,r)}makeRotationX(e){return this.identity().rotateX(e)}makeTranslation(e,r,n){return this.identity().translate([e,r,n])}},He,Ue;function Xs(){return He||(He=new V([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(He)),He}function Gs(){return Ue||(Ue=new V,Object.freeze(Ue)),Ue}function zr(t){if(t>Math.PI*2)throw Error("expected radians")}function js(t,e,r,n,s,o){let i=2*o/(r-e),a=2*o/(s-n),c=(r+e)/(r-e),l=(s+n)/(s-n),m=-1,p=-1,f=-2*o;return t[0]=i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=c,t[9]=l,t[10]=m,t[11]=p,t[12]=0,t[13]=0,t[14]=f,t[15]=0,t}function Br(){let t=new I(4);return I!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function Kr(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function xt(t,e,r){r=r*.5;let n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t}function gt(t,e,r){let n=e[0],s=e[1],o=e[2],i=e[3],a=r[0],c=r[1],l=r[2],m=r[3];return t[0]=n*m+i*a+s*l-o*c,t[1]=s*m+i*c+o*a-n*l,t[2]=o*m+i*l+n*c-s*a,t[3]=i*m-n*a-s*c-o*l,t}function $r(t,e,r){r*=.5;let n=e[0],s=e[1],o=e[2],i=e[3],a=Math.sin(r),c=Math.cos(r);return t[0]=n*c+i*a,t[1]=s*c+o*a,t[2]=o*c-s*a,t[3]=i*c-n*a,t}function Vr(t,e,r){r*=.5;let n=e[0],s=e[1],o=e[2],i=e[3],a=Math.sin(r),c=Math.cos(r);return t[0]=n*c-o*a,t[1]=s*c+i*a,t[2]=o*c+n*a,t[3]=i*c-s*a,t}function Dr(t,e,r){r*=.5;let n=e[0],s=e[1],o=e[2],i=e[3],a=Math.sin(r),c=Math.cos(r);return t[0]=n*c+s*a,t[1]=s*c-n*a,t[2]=o*c+i*a,t[3]=i*c-o*a,t}function qr(t,e){let r=e[0],n=e[1],s=e[2];return t[0]=r,t[1]=n,t[2]=s,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-s*s)),t}function pe(t,e,r,n){let s=e[0],o=e[1],i=e[2],a=e[3],c=r[0],l=r[1],m=r[2],p=r[3],f,h,u,d,x;return f=s*c+o*l+i*m+a*p,f<0&&(f=-f,c=-c,l=-l,m=-m,p=-p),1-f>1e-6?(h=Math.acos(f),x=Math.sin(h),u=Math.sin((1-n)*h)/x,d=Math.sin(n*h)/x):(u=1-n,d=n),t[0]=u*s+d*c,t[1]=u*o+d*l,t[2]=u*i+d*m,t[3]=u*a+d*p,t}function Wr(t,e){let r=e[0],n=e[1],s=e[2],o=e[3],i=r*r+n*n+s*s+o*o,a=i?1/i:0;return t[0]=-r*a,t[1]=-n*a,t[2]=-s*a,t[3]=o*a,t}function Yr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t}function Mt(t,e){let r=e[0]+e[4]+e[8],n;if(r>0)n=Math.sqrt(r+1),t[3]=.5*n,n=.5/n,t[0]=(e[5]-e[7])*n,t[1]=(e[6]-e[2])*n,t[2]=(e[1]-e[3])*n;else{let s=0;e[4]>e[0]&&(s=1),e[8]>e[s*3+s]&&(s=2);let o=(s+1)%3,i=(s+2)%3;n=Math.sqrt(e[s*3+s]-e[o*3+o]-e[i*3+i]+1),t[s]=.5*n,n=.5/n,t[3]=(e[o*3+i]-e[i*3+o])*n,t[o]=(e[o*3+s]+e[s*3+o])*n,t[i]=(e[i*3+s]+e[s*3+i])*n}return t}var Xr=Lr;var Gr=Ir,jr=Fr,Jr=kr,Qr=vr;var Zr=Pr;var en=Cr;var tn=function(){let t=at(),e=ct(1,0,0),r=ct(0,1,0);return function(n,s,o){let i=or(s,o);return i<-.999999?(ve(t,e,s),cr(t)<1e-6&&ve(t,r,s),sr(t,t),xt(n,t,Math.PI),n):i>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(ve(t,s,o),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+i,en(n,n))}}(),gc=function(){let t=Br(),e=Br();return function(r,n,s,o,i,a){return pe(t,n,i,a),pe(e,s,o,a),pe(r,t,e,2*a*(1-a)),r}}(),Mc=function(){let t=lr();return function(e,r,n,s){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=s[0],t[4]=s[1],t[7]=s[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],en(e,Mt(e,t))}}();var Js=[0,0,0,1],me=class extends W{constructor(e=0,r=0,n=0,s=1){super(-0,-0,-0,-0),Array.isArray(e)&&arguments.length===1?this.copy(e):this.set(e,r,n,s)}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this.check()}set(e,r,n,s){return this[0]=e,this[1]=r,this[2]=n,this[3]=s,this.check()}fromObject(e){return this[0]=e.x,this[1]=e.y,this[2]=e.z,this[3]=e.w,this.check()}fromMatrix3(e){return Mt(this,e),this.check()}fromAxisRotation(e,r){return xt(this,e,r),this.check()}identity(){return Kr(this),this.check()}setAxisAngle(e,r){return this.fromAxisRotation(e,r)}get ELEMENTS(){return 4}get x(){return this[0]}set x(e){this[0]=w(e)}get y(){return this[1]}set y(e){this[1]=w(e)}get z(){return this[2]}set z(e){this[2]=w(e)}get w(){return this[3]}set w(e){this[3]=w(e)}len(){return Qr(this)}lengthSquared(){return Zr(this)}dot(e){return jr(this,e)}rotationTo(e,r){return tn(this,e,r),this.check()}add(e){return Xr(this,this,e),this.check()}calculateW(){return qr(this,this),this.check()}conjugate(){return Yr(this,this),this.check()}invert(){return Wr(this,this),this.check()}lerp(e,r,n){return n===void 0?this.lerp(this,e,r):(Jr(this,e,r,n),this.check())}multiplyRight(e){return gt(this,this,e),this.check()}multiplyLeft(e){return gt(this,e,this),this.check()}normalize(){let e=this.len(),r=e>0?1/e:0;return this[0]=this[0]*r,this[1]=this[1]*r,this[2]=this[2]*r,this[3]=this[3]*r,e===0&&(this[3]=1),this.check()}rotateX(e){return $r(this,this,e),this.check()}rotateY(e){return Vr(this,this,e),this.check()}rotateZ(e){return Dr(this,this,e),this.check()}scale(e){return Gr(this,this,e),this.check()}slerp(e,r,n){let s,o,i;switch(arguments.length){case 1:({start:s=Js,target:o,ratio:i}=e);break;case 2:s=this,o=e,i=r;break;default:s=e,o=r,i=n}return pe(this,s,o,i),this.check()}transformVector4(e,r=new Z){return Ur(r,e,this),Y(r,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(e,r){return this.setAxisAngle(e,r)}premultiply(e){return this.multiplyLeft(e)}multiply(e){return this.multiplyRight(e)}};var Tt=[O("baseColor","pbr_baseColorSampler","baseColorTexture",["pbrMetallicRoughness","baseColorTexture"]),O("metallicRoughness","pbr_metallicRoughnessSampler","metallicRoughnessTexture",["pbrMetallicRoughness","metallicRoughnessTexture"]),O("normal","pbr_normalSampler","normalTexture",["normalTexture"]),O("occlusion","pbr_occlusionSampler","occlusionTexture",["occlusionTexture"]),O("emissive","pbr_emissiveSampler","emissiveTexture",["emissiveTexture"]),O("specularColor","pbr_specularColorSampler","KHR_materials_specular.specularColorTexture",["extensions","KHR_materials_specular","specularColorTexture"]),O("specularIntensity","pbr_specularIntensitySampler","KHR_materials_specular.specularTexture",["extensions","KHR_materials_specular","specularTexture"]),O("transmission","pbr_transmissionSampler","KHR_materials_transmission.transmissionTexture",["extensions","KHR_materials_transmission","transmissionTexture"]),O("thickness","pbr_thicknessSampler","KHR_materials_volume.thicknessTexture",["extensions","KHR_materials_volume","thicknessTexture"]),O("clearcoat","pbr_clearcoatSampler","KHR_materials_clearcoat.clearcoatTexture",["extensions","KHR_materials_clearcoat","clearcoatTexture"]),O("clearcoatRoughness","pbr_clearcoatRoughnessSampler","KHR_materials_clearcoat.clearcoatRoughnessTexture",["extensions","KHR_materials_clearcoat","clearcoatRoughnessTexture"]),O("clearcoatNormal","pbr_clearcoatNormalSampler","KHR_materials_clearcoat.clearcoatNormalTexture",["extensions","KHR_materials_clearcoat","clearcoatNormalTexture"]),O("sheenColor","pbr_sheenColorSampler","KHR_materials_sheen.sheenColorTexture",["extensions","KHR_materials_sheen","sheenColorTexture"]),O("sheenRoughness","pbr_sheenRoughnessSampler","KHR_materials_sheen.sheenRoughnessTexture",["extensions","KHR_materials_sheen","sheenRoughnessTexture"]),O("iridescence","pbr_iridescenceSampler","KHR_materials_iridescence.iridescenceTexture",["extensions","KHR_materials_iridescence","iridescenceTexture"]),O("iridescenceThickness","pbr_iridescenceThicknessSampler","KHR_materials_iridescence.iridescenceThicknessTexture",["extensions","KHR_materials_iridescence","iridescenceThicknessTexture"]),O("anisotropy","pbr_anisotropySampler","KHR_materials_anisotropy.anisotropyTexture",["extensions","KHR_materials_anisotropy","anisotropyTexture"])],Qs=new Map(Tt.map(t=>[t.slot,t]));function O(t,e,r,n){return{slot:t,binding:e,displayName:r,pathSegments:n,uvSetUniform:`${t}UVSet`,uvTransformUniform:`${t}UVTransform`}}function rn(){return Tt}function Be(t){let e=Qs.get(t);if(!e)throw new Error(`Unknown PBR texture transform slot ${t}`);return e}function Ke(t){let e=t?.extensions?.KHR_texture_transform;return{offset:e?.offset?[e.offset[0],e.offset[1]]:[0,0],rotation:e?.rotation??0,scale:e?.scale?[e.scale[0],e.scale[1]]:[1,1]}}function yt(t){return t?.extensions?.KHR_texture_transform?.texCoord??t?.texCoord??0}function nn(t){return Tt.find(e=>e.pathSegments.length===t.length&&e.pathSegments.every((r,n)=>t[n]===r))||null}function ze(t){let e=new H().set(1,0,0,0,1,0,t.offset[0],t.offset[1],1),r=new H().set(Math.cos(t.rotation),Math.sin(t.rotation),0,-Math.sin(t.rotation),Math.cos(t.rotation),0,0,0,1),n=new H().set(t.scale[0],0,0,0,t.scale[1],0,0,0,1);return Array.from(e.multiplyRight(r).multiplyRight(n))}function sn(t,e){let r=new H(ze(t)),n=new H(ze(e)),s=new H(r).invert();return Array.from(n.multiplyRight(s))}function he(t,e,r,n){let s={defines:{MANUAL_SRGB:!0,SRGB_FAST_APPROXIMATION:!0},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=!0;let{imageBasedLightingEnvironment:o}=n;return o&&(s.bindings.pbr_diffuseEnvSampler=o.diffuseEnvSampler.texture,s.bindings.pbr_specularEnvSampler=o.specularEnvSampler.texture,s.bindings.pbr_brdfLUT=o.brdfLutTexture.texture,s.uniforms.IBLenabled=!0,s.uniforms.scaleIBLAmbient=[1,1]),n?.pbrDebug&&(s.defines.PBR_DEBUG=!0,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),r.NORMAL&&(s.defines.HAS_NORMALS=!0),r.TANGENT&&n?.useTangents&&(s.defines.HAS_TANGENTS=!0),r.TEXCOORD_0&&(s.defines.HAS_UV=!0),r.TEXCOORD_1&&(s.defines.HAS_UV_1=!0),r.JOINTS_0&&r.WEIGHTS_0&&(s.defines.HAS_SKIN=!0),r.COLOR_0&&(s.defines.HAS_COLORS=!0),n?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=!0),n?.lights&&(s.defines.USE_LIGHTS=!0),e&&(n.validateAttributes!==!1&&Zs(e,r),to(t,e,s,r,n.gltf)),s}function Zs(t,e){let r=on(t,0);r.length>0&&!e.TEXCOORD_0&&b.log.warn(`glTF material uses ${r.join(", ")} but primitive is missing TEXCOORD_0; textured shading will sample the default UV coordinates`)();let n=on(t,1);if(n.length>0&&!e.TEXCOORD_1&&b.log.warn(`glTF material uses ${n.join(", ")} with TEXCOORD_1 but primitive is missing TEXCOORD_1; those textures will be skipped`)(),Boolean(t.unlit||t.extensions?.KHR_materials_unlit)||e.NORMAL)return;let o=t.normalTexture?"lit PBR shading with normalTexture":"lit PBR shading";b.log.warn(`glTF primitive is missing NORMAL while using ${o}; shading will fall back to geometric normals`)()}function on(t,e){let r=[];for(let n of rn()){let s=eo(t,n.pathSegments);s&&yt(s)===e&&r.push(n.displayName)}return r}function eo(t,e){let r=t;for(let n of e)if(r=r?.[n],!r)return null;return r}function to(t,e,r,n,s){if(r.uniforms.unlit=Boolean(e.unlit||e.extensions?.KHR_materials_unlit),e.pbrMetallicRoughness&&so(t,e.pbrMetallicRoughness,r,n,s),e.normalTexture){L(t,e.normalTexture,"pbr_normalSampler",r,{featureOptions:{define:"HAS_NORMALMAP",enabledUniformName:"normalMapEnabled"},gltf:s,attributes:n,textureTransformSlot:"normal"});let{scale:o=1}=e.normalTexture;r.uniforms.normalScale=o}if(e.occlusionTexture){L(t,e.occlusionTexture,"pbr_occlusionSampler",r,{featureOptions:{define:"HAS_OCCLUSIONMAP",enabledUniformName:"occlusionMapEnabled"},gltf:s,attributes:n,textureTransformSlot:"occlusion"});let{strength:o=1}=e.occlusionTexture;r.uniforms.occlusionStrength=o}switch(r.uniforms.emissiveFactor=e.emissiveFactor||[0,0,0],e.emissiveTexture&&L(t,e.emissiveTexture,"pbr_emissiveSampler",r,{featureOptions:{define:"HAS_EMISSIVEMAP",enabledUniformName:"emissiveMapEnabled"},gltf:s,attributes:n,textureTransformSlot:"emissive"}),oo(t,e.extensions,r,s,n),e.alphaMode||"OPAQUE"){case"OPAQUE":break;case"MASK":{let{alphaCutoff:o=.5}=e;r.defines.ALPHA_CUTOFF=!0,r.uniforms.alphaCutoffEnabled=!0,r.uniforms.alphaCutoff=o;break}case"BLEND":b.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),ro(r);break}}function ro(t){t.parameters.blend=!0,t.parameters.blendColorOperation="add",t.parameters.blendColorSrcFactor="src-alpha",t.parameters.blendColorDstFactor="one-minus-src-alpha",t.parameters.blendAlphaOperation="add",t.parameters.blendAlphaSrcFactor="one",t.parameters.blendAlphaDstFactor="one-minus-src-alpha",t.glParameters.blend=!0,t.glParameters.blendEquation=R.FUNC_ADD,t.glParameters.blendFunc=[R.SRC_ALPHA,R.ONE_MINUS_SRC_ALPHA,R.ONE,R.ONE_MINUS_SRC_ALPHA]}function no(t){t.parameters.blend=!0,t.parameters.depthWriteEnabled=!1,t.parameters.blendColorOperation="add",t.parameters.blendColorSrcFactor="one",t.parameters.blendColorDstFactor="one-minus-src-alpha",t.parameters.blendAlphaOperation="add",t.parameters.blendAlphaSrcFactor="one",t.parameters.blendAlphaDstFactor="one-minus-src-alpha",t.glParameters.blend=!0,t.glParameters.depthMask=!1,t.glParameters.blendEquation=R.FUNC_ADD,t.glParameters.blendFunc=[R.ONE,R.ONE_MINUS_SRC_ALPHA,R.ONE,R.ONE_MINUS_SRC_ALPHA]}function so(t,e,r,n,s){e.baseColorTexture&&L(t,e.baseColorTexture,"pbr_baseColorSampler",r,{featureOptions:{define:"HAS_BASECOLORMAP",enabledUniformName:"baseColorMapEnabled"},gltf:s,attributes:n,textureTransformSlot:"baseColor"}),r.uniforms.baseColorFactor=e.baseColorFactor||[1,1,1,1],e.metallicRoughnessTexture&&L(t,e.metallicRoughnessTexture,"pbr_metallicRoughnessSampler",r,{featureOptions:{define:"HAS_METALROUGHNESSMAP",enabledUniformName:"metallicRoughnessMapEnabled"},gltf:s,attributes:n,textureTransformSlot:"metallicRoughness"});let{metallicFactor:o=1,roughnessFactor:i=1}=e;r.uniforms.metallicRoughnessValues=[o,i]}function oo(t,e,r,n,s={}){e&&(io(e)&&(r.defines.USE_MATERIAL_EXTENSIONS=!0),ao(t,e.KHR_materials_specular,r,n,s),co(e.KHR_materials_ior,r),lo(t,e.KHR_materials_transmission,r,n,s),fo(t,e.KHR_materials_volume,r,n,s),po(t,e.KHR_materials_clearcoat,r,n,s),mo(t,e.KHR_materials_sheen,r,n,s),ho(t,e.KHR_materials_iridescence,r,n,s),uo(t,e.KHR_materials_anisotropy,r,n,s),xo(e.KHR_materials_emissive_strength,r))}function io(t){return Boolean(t.KHR_materials_specular||t.KHR_materials_ior||t.KHR_materials_transmission||t.KHR_materials_volume||t.KHR_materials_clearcoat||t.KHR_materials_sheen||t.KHR_materials_iridescence||t.KHR_materials_anisotropy)}function ao(t,e,r,n,s={}){e&&(e.specularColorFactor&&(r.uniforms.specularColorFactor=e.specularColorFactor),e.specularFactor!==void 0&&(r.uniforms.specularIntensityFactor=e.specularFactor),e.specularColorTexture&&L(t,e.specularColorTexture,"pbr_specularColorSampler",r,{featureOptions:{define:"HAS_SPECULARCOLORMAP",enabledUniformName:"specularColorMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"specularColor"}),e.specularTexture&&L(t,e.specularTexture,"pbr_specularIntensitySampler",r,{featureOptions:{define:"HAS_SPECULARINTENSITYMAP",enabledUniformName:"specularIntensityMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"specularIntensity"}))}function co(t,e){t?.ior!==void 0&&(e.uniforms.ior=t.ior)}function lo(t,e,r,n,s={}){e&&(e.transmissionFactor!==void 0&&(r.uniforms.transmissionFactor=e.transmissionFactor),e.transmissionTexture&&L(t,e.transmissionTexture,"pbr_transmissionSampler",r,{featureOptions:{define:"HAS_TRANSMISSIONMAP",enabledUniformName:"transmissionMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"transmission"}),((e.transmissionFactor??0)>0||e.transmissionTexture)&&(b.log.warn("KHR_materials_transmission uses a premultiplied-alpha blending approximation and may require mesh sorting")(),no(r)))}function fo(t,e,r,n,s={}){e&&(e.thicknessFactor!==void 0&&(r.uniforms.thicknessFactor=e.thicknessFactor),e.thicknessTexture&&L(t,e.thicknessTexture,"pbr_thicknessSampler",r,{featureOptions:{define:"HAS_THICKNESSMAP"},gltf:n,attributes:s,textureTransformSlot:"thickness"}),e.attenuationDistance!==void 0&&(r.uniforms.attenuationDistance=e.attenuationDistance),e.attenuationColor&&(r.uniforms.attenuationColor=e.attenuationColor))}function po(t,e,r,n,s={}){e&&(e.clearcoatFactor!==void 0&&(r.uniforms.clearcoatFactor=e.clearcoatFactor),e.clearcoatRoughnessFactor!==void 0&&(r.uniforms.clearcoatRoughnessFactor=e.clearcoatRoughnessFactor),e.clearcoatTexture&&L(t,e.clearcoatTexture,"pbr_clearcoatSampler",r,{featureOptions:{define:"HAS_CLEARCOATMAP",enabledUniformName:"clearcoatMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"clearcoat"}),e.clearcoatRoughnessTexture&&L(t,e.clearcoatRoughnessTexture,"pbr_clearcoatRoughnessSampler",r,{featureOptions:{define:"HAS_CLEARCOATROUGHNESSMAP",enabledUniformName:"clearcoatRoughnessMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"clearcoatRoughness"}),e.clearcoatNormalTexture&&L(t,e.clearcoatNormalTexture,"pbr_clearcoatNormalSampler",r,{featureOptions:{define:"HAS_CLEARCOATNORMALMAP"},gltf:n,attributes:s,textureTransformSlot:"clearcoatNormal"}))}function mo(t,e,r,n,s={}){e&&(e.sheenColorFactor&&(r.uniforms.sheenColorFactor=e.sheenColorFactor),e.sheenRoughnessFactor!==void 0&&(r.uniforms.sheenRoughnessFactor=e.sheenRoughnessFactor),e.sheenColorTexture&&L(t,e.sheenColorTexture,"pbr_sheenColorSampler",r,{featureOptions:{define:"HAS_SHEENCOLORMAP",enabledUniformName:"sheenColorMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"sheenColor"}),e.sheenRoughnessTexture&&L(t,e.sheenRoughnessTexture,"pbr_sheenRoughnessSampler",r,{featureOptions:{define:"HAS_SHEENROUGHNESSMAP",enabledUniformName:"sheenRoughnessMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"sheenRoughness"}))}function ho(t,e,r,n,s={}){e&&(e.iridescenceFactor!==void 0&&(r.uniforms.iridescenceFactor=e.iridescenceFactor),e.iridescenceIor!==void 0&&(r.uniforms.iridescenceIor=e.iridescenceIor),(e.iridescenceThicknessMinimum!==void 0||e.iridescenceThicknessMaximum!==void 0)&&(r.uniforms.iridescenceThicknessRange=[e.iridescenceThicknessMinimum??100,e.iridescenceThicknessMaximum??400]),e.iridescenceTexture&&L(t,e.iridescenceTexture,"pbr_iridescenceSampler",r,{featureOptions:{define:"HAS_IRIDESCENCEMAP",enabledUniformName:"iridescenceMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"iridescence"}),e.iridescenceThicknessTexture&&L(t,e.iridescenceThicknessTexture,"pbr_iridescenceThicknessSampler",r,{featureOptions:{define:"HAS_IRIDESCENCETHICKNESSMAP"},gltf:n,attributes:s,textureTransformSlot:"iridescenceThickness"}))}function uo(t,e,r,n,s={}){e&&(e.anisotropyStrength!==void 0&&(r.uniforms.anisotropyStrength=e.anisotropyStrength),e.anisotropyRotation!==void 0&&(r.uniforms.anisotropyRotation=e.anisotropyRotation),e.anisotropyTexture&&L(t,e.anisotropyTexture,"pbr_anisotropySampler",r,{featureOptions:{define:"HAS_ANISOTROPYMAP",enabledUniformName:"anisotropyMapEnabled"},gltf:n,attributes:s,textureTransformSlot:"anisotropy"}))}function xo(t,e){t?.emissiveStrength!==void 0&&(e.uniforms.emissiveStrength=t.emissiveStrength)}function L(t,e,r,n,s={}){let{featureOptions:o={},gltf:i,attributes:a={},textureTransformSlot:c}=s,{define:l,enabledUniformName:m}=o,p=yt(e);if(p>1){b.log.warn(`Skipping ${String(r)} because ${p} is not supported; only TEXCOORD_0 and TEXCOORD_1 are currently available`)();return}if(p===1&&!a.TEXCOORD_1){b.log.warn(`Skipping ${String(r)} because it requires TEXCOORD_1 but the primitive does not provide TEXCOORD_1`)();return}let f=go(e,i),h=f.texture?.source?.image;if(!h){b.log.warn(`Skipping unresolved glTF texture for ${String(r)}`)();return}let u={wrapS:10497,wrapT:10497,minFilter:9729,magFilter:9729,...f?.texture?.sampler},d={id:f.uniformName||f.id,sampler:Gt(u)},x;if(h.compressed)x=To(t,h,d);else{let{width:g,height:A}=t.getExternalImageSize(h);x=t.createTexture({...d,width:g,height:A,data:h})}if(n.bindings[r]=x,l&&(n.defines[l]=!0),m&&(n.uniforms[m]=!0),c){let g=Be(c);n.uniforms[g.uvSetUniform]=p,n.uniforms[g.uvTransformUniform]=ze(Ke(e))}n.generatedTextures.push(x)}function go(t,e){if(t.texture||t.index===void 0||!e?.textures)return t;let r=e.textures[t.index];return r?"texture"in r&&r.texture?{...r,...t,texture:r.texture}:"source"in r?{...t,texture:r}:t:t}function _t(t,e){return t.createTexture({...e,format:"rgba8unorm",width:1,height:1,mipLevels:1})}function an(t){return t.textureFormat}function Mo(t,e,r){let{blockWidth:n=1,blockHeight:s=1}=b.textureFormatDecoder.getInfo(r),o=1;for(let i=1;;i++){let a=Math.max(1,t>>i),c=Math.max(1,e>>i);if(a<n||c<s)break;o++}return o}function To(t,e,r){let n;if(Array.isArray(e.data)&&e.data[0]?.data?n=e.data:"mipmaps"in e&&Array.isArray(e.mipmaps)?n=e.mipmaps:n=[],n.length===0||!n[0]?.data)return b.log.warn("createCompressedTexture: compressed image has no valid mip levels, creating fallback")(),_t(t,r);let s=n[0],o=s.width??e.width??0,i=s.height??e.height??0;if(o<=0||i<=0)return b.log.warn("createCompressedTexture: base level has invalid dimensions, creating fallback")(),_t(t,r);let a=an(s);if(!a)return b.log.warn("createCompressedTexture: compressed image has no textureFormat, creating fallback")(),_t(t,r);let c=Mo(o,i,a),l=Math.min(n.length,c),m=1;for(let f=1;f<l;f++){let h=n[f];if(!h.data||h.width<=0||h.height<=0){b.log.warn(`createCompressedTexture: mip level ${f} has invalid data/dimensions, truncating`)();break}let u=an(h);if(u&&u!==a){b.log.warn(`createCompressedTexture: mip level ${f} format '${u}' differs from base '${a}', truncating`)();break}let d=Math.max(1,o>>f),x=Math.max(1,i>>f);if(h.width!==d||h.height!==x){b.log.warn(`createCompressedTexture: mip level ${f} dimensions ${h.width}x${h.height} don't match expected ${d}x${x}, truncating`)();break}m++}let p=t.createTexture({...r,format:a,usage:b.Texture.TEXTURE|b.Texture.COPY_DST,width:o,height:i,mipLevels:m,data:s.data});for(let f=1;f<m;f++)p.writeData(n[f].data,{width:n[f].width,height:n[f].height,mipLevel:f});return p}var ln=k($e(),1);function Ve(t,e={}){let r=t.lights||t.extensions?.KHR_lights_punctual?.lights;if(!r||!Array.isArray(r)||r.length===0)return[];let n=[],s=Eo(t.nodes||[]),o=new Map;for(let i of t.nodes||[]){let a=i.light??i.extensions?.KHR_lights_punctual?.light;if(typeof a!="number")continue;let c=r[a];if(!c)continue;let l=yo(c.color||[1,1,1],e.useByteColors??!0),m=c.intensity??1,p=c.range,f=fn(i,s,o);switch(c.type){case"directional":n.push(Ro(f,l,m));break;case"point":n.push(_o(f,l,m,p));break;case"spot":n.push(Ao(f,l,m,p,c.spot));break;default:break}}return n}function yo(t,e){return e?t.map(r=>r*255):(0,ln.normalizeByteColor3)(t,!1)}function _o(t,e,r,n){let s=pn(t),o=[1,0,0];return n!==void 0&&n>0&&(o=[1,0,1/(n*n)]),{type:"point",position:s,color:e,intensity:r,attenuation:o}}function Ro(t,e,r){return{type:"directional",direction:mn(t),color:e,intensity:r}}function Ao(t,e,r,n,s={}){let o=pn(t),i=mn(t),a=[1,0,0];return n!==void 0&&n>0&&(a=[1,0,1/(n*n)]),{type:"spot",position:o,direction:i,color:e,intensity:r,attenuation:a,innerConeAngle:s.innerConeAngle??0,outerConeAngle:s.outerConeAngle??Math.PI/4}}function Eo(t){let e=new Map;for(let r of t)for(let n of r.children||[])e.set(n.id,r);return e}function fn(t,e,r){let n=r.get(t.id);if(n)return n;let s=wo(t),o=e.get(t.id),i=o?new V(fn(o,e,r)).multiplyRight(s):s;return r.set(t.id,i),i}function wo(t){if(t.matrix)return new V(t.matrix);let e=new V;return t.translation&&e.translate(t.translation),t.rotation&&e.multiplyRight(new V().fromQuaternion(t.rotation)),t.scale&&e.scale(t.scale),e}function pn(t){return t.transformAsPoint([0,0,0])}function mn(t){return t.transformDirection([0,0,-1])}var X=k(oe(),1),xn=k($e(),1);function hn(t){switch(t){case R.POINTS:return"point-list";case R.LINES:return"line-list";case R.LINE_STRIP:return"line-strip";case R.TRIANGLES:return"triangle-list";case R.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(t))}}var D=k(G(),1),un=k(oe(),1),ue=k($e(),1),te=k(oe(),1),So=`
|
|
8
8
|
struct VertexInputs {
|
|
9
9
|
@location(0) positions: vec3f,
|
|
10
10
|
#ifdef HAS_NORMALS
|
|
@@ -16,19 +16,23 @@ struct VertexInputs {
|
|
|
16
16
|
#ifdef HAS_UV
|
|
17
17
|
@location(3) texCoords: vec2f,
|
|
18
18
|
#endif
|
|
19
|
+
#ifdef HAS_UV_1
|
|
20
|
+
@location(4) texCoords1: vec2f,
|
|
21
|
+
#endif
|
|
19
22
|
#ifdef HAS_SKIN
|
|
20
|
-
@location(
|
|
21
|
-
@location(
|
|
23
|
+
@location(5) JOINTS_0: vec4u,
|
|
24
|
+
@location(6) WEIGHTS_0: vec4f,
|
|
22
25
|
#endif
|
|
23
26
|
};
|
|
24
27
|
|
|
25
28
|
struct FragmentInputs {
|
|
26
29
|
@builtin(position) position: vec4f,
|
|
27
30
|
@location(0) pbrPosition: vec3f,
|
|
28
|
-
@location(1)
|
|
29
|
-
@location(2)
|
|
31
|
+
@location(1) pbrUV0: vec2f,
|
|
32
|
+
@location(2) pbrUV1: vec2f,
|
|
33
|
+
@location(3) pbrNormal: vec3f,
|
|
30
34
|
#ifdef HAS_TANGENTS
|
|
31
|
-
@location(
|
|
35
|
+
@location(4) pbrTangent: vec4f,
|
|
32
36
|
#endif
|
|
33
37
|
};
|
|
34
38
|
|
|
@@ -38,13 +42,17 @@ fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
|
|
|
38
42
|
var position = vec4f(inputs.positions, 1.0);
|
|
39
43
|
var normal = vec3f(0.0, 0.0, 1.0);
|
|
40
44
|
var tangent = vec4f(1.0, 0.0, 0.0, 1.0);
|
|
41
|
-
var
|
|
45
|
+
var uv0 = vec2f(0.0, 0.0);
|
|
46
|
+
var uv1 = vec2f(0.0, 0.0);
|
|
42
47
|
|
|
43
48
|
#ifdef HAS_NORMALS
|
|
44
49
|
normal = inputs.normals;
|
|
45
50
|
#endif
|
|
46
51
|
#ifdef HAS_UV
|
|
47
|
-
|
|
52
|
+
uv0 = inputs.texCoords;
|
|
53
|
+
#endif
|
|
54
|
+
#ifdef HAS_UV_1
|
|
55
|
+
uv1 = inputs.texCoords1;
|
|
48
56
|
#endif
|
|
49
57
|
#ifdef HAS_TANGENTS
|
|
50
58
|
tangent = inputs.TANGENT;
|
|
@@ -70,7 +78,8 @@ fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
|
|
|
70
78
|
|
|
71
79
|
outputs.position = pbrProjection.modelViewProjectionMatrix * position;
|
|
72
80
|
outputs.pbrPosition = worldPosition.xyz / worldPosition.w;
|
|
73
|
-
outputs.
|
|
81
|
+
outputs.pbrUV0 = uv0;
|
|
82
|
+
outputs.pbrUV1 = uv1;
|
|
74
83
|
outputs.pbrNormal = normal;
|
|
75
84
|
return outputs;
|
|
76
85
|
}
|
|
@@ -78,7 +87,8 @@ fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
|
|
|
78
87
|
@fragment
|
|
79
88
|
fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
80
89
|
fragmentInputs.pbr_vPosition = inputs.pbrPosition;
|
|
81
|
-
fragmentInputs.
|
|
90
|
+
fragmentInputs.pbr_vUV0 = inputs.pbrUV0;
|
|
91
|
+
fragmentInputs.pbr_vUV1 = inputs.pbrUV1;
|
|
82
92
|
fragmentInputs.pbr_vNormal = inputs.pbrNormal;
|
|
83
93
|
#ifdef HAS_TANGENTS
|
|
84
94
|
let tangent = normalize(inputs.pbrTangent.xyz);
|
|
@@ -87,7 +97,7 @@ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
|
87
97
|
#endif
|
|
88
98
|
return pbr_filterColor(vec4f(1.0));
|
|
89
99
|
}
|
|
90
|
-
`,
|
|
100
|
+
`,bo=`#version 300 es
|
|
91
101
|
|
|
92
102
|
// in vec4 POSITION;
|
|
93
103
|
in vec4 positions;
|
|
@@ -106,6 +116,10 @@ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
|
106
116
|
in vec2 texCoords;
|
|
107
117
|
#endif
|
|
108
118
|
|
|
119
|
+
#ifdef HAS_UV_1
|
|
120
|
+
in vec2 texCoords1;
|
|
121
|
+
#endif
|
|
122
|
+
|
|
109
123
|
#ifdef HAS_SKIN
|
|
110
124
|
in uvec4 JOINTS_0;
|
|
111
125
|
in vec4 WEIGHTS_0;
|
|
@@ -115,6 +129,7 @@ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
|
115
129
|
vec4 _NORMAL = vec4(0.);
|
|
116
130
|
vec4 _TANGENT = vec4(0.);
|
|
117
131
|
vec2 _TEXCOORD_0 = vec2(0.);
|
|
132
|
+
vec2 _TEXCOORD_1 = vec2(0.);
|
|
118
133
|
|
|
119
134
|
#ifdef HAS_NORMALS
|
|
120
135
|
_NORMAL = normals;
|
|
@@ -128,6 +143,10 @@ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
|
128
143
|
_TEXCOORD_0 = texCoords;
|
|
129
144
|
#endif
|
|
130
145
|
|
|
146
|
+
#ifdef HAS_UV_1
|
|
147
|
+
_TEXCOORD_1 = texCoords1;
|
|
148
|
+
#endif
|
|
149
|
+
|
|
131
150
|
vec4 pos = positions;
|
|
132
151
|
|
|
133
152
|
#ifdef HAS_SKIN
|
|
@@ -137,16 +156,16 @@ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
|
137
156
|
_TANGENT = vec4((skinMat * vec4(_TANGENT.xyz, 0.)).xyz, _TANGENT.w);
|
|
138
157
|
#endif
|
|
139
158
|
|
|
140
|
-
pbr_setPositionNormalTangentUV(pos, _NORMAL, _TANGENT, _TEXCOORD_0);
|
|
159
|
+
pbr_setPositionNormalTangentUV(pos, _NORMAL, _TANGENT, _TEXCOORD_0, _TEXCOORD_1);
|
|
141
160
|
gl_Position = pbrProjection.modelViewProjectionMatrix * pos;
|
|
142
161
|
}
|
|
143
|
-
`,
|
|
162
|
+
`,No=`#version 300 es
|
|
144
163
|
out vec4 fragmentColor;
|
|
145
164
|
|
|
146
165
|
void main(void) {
|
|
147
166
|
vec3 pos = pbr_vPosition;
|
|
148
167
|
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
149
168
|
}
|
|
150
|
-
`;function te(e,t){let n=t.materialFactory||new j.MaterialFactory(e,{modules:[ct.pbrMaterial]}),r={...t.parsedPPBRMaterial.uniforms};delete r.camera;let s=Object.fromEntries(Object.entries({...r,...t.parsedPPBRMaterial.bindings}).filter(([o,c])=>n.ownsBinding(o)&&Ns(c))),i=n.createMaterial({id:t.id,bindings:s});return i.setProps({pbrMaterial:r}),i}function Pn(e,t){let{id:n,geometry:r,parsedPPBRMaterial:s,vertexCount:i,modelOptions:o={}}=t;D.log.info(4,"createGLTFModel defines: ",s.defines)();let c=[],a={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},l={id:n,source:_s,vs:Rs,fs:Ss,geometry:r,topology:r.topology,vertexCount:i,modules:[ct.pbrMaterial,ct.skin],...o,defines:{...s.defines,...o.defines},parameters:{...a,...s.parameters,...o.parameters}},h=t.material||te(e,{id:n?`${n}-material`:void 0,parsedPPBRMaterial:s});l.material=h;let f=new j.Model(e,l),p={...s.uniforms,...o.uniforms,...s.bindings,...o.bindings},m=ws(f.shaderInputs.getModules(),h,p);return f.shaderInputs.setProps(m),new j.ModelNode({managedResources:c,model:f})}function Ns(e){return e instanceof D.Buffer||e instanceof In.DynamicTexture||e instanceof D.Sampler||e instanceof D.Texture||e instanceof D.TextureView}function ws(e,t,n){let r=new Map;for(let i of e){for(let o of Object.keys(i.uniformTypes||{}))r.set(o,i.name);for(let o of i.bindingLayout||[])r.set(o.name,i.name)}let s={};for(let[i,o]of Object.entries(n)){if(o===void 0)continue;let c=r.get(i);!c||t.ownsModule(c)||(s[c]||={},s[c][i]=o)}return s}var Ls={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:void 0,lights:!0,useTangents:!1};function Fn(e,t,n={}){let r={...Ls,...n},s=new K.MaterialFactory(e,{modules:[vn.pbrMaterial]}),i=(t.materials||[]).map((f,p)=>te(e,{id:vs(f,p),parsedPPBRMaterial:rt(e,f,{},{...r,gltf:t,validateAttributes:!1}),materialFactory:s})),o=new Map;(t.materials||[]).forEach((f,p)=>{o.set(f.id,i[p])});let c=new Map;t.meshes.forEach((f,p)=>{let m=Is(e,f,t,o,r);c.set(f.id,m)});let a=new Map,l=new Map;return t.nodes.forEach((f,p)=>{let m=Os(e,f,r);a.set(p,m),l.set(f.id,m)}),t.nodes.forEach((f,p)=>{if(a.get(p).add((f.children??[]).map(({id:m})=>{let d=l.get(m);if(!d)throw new Error(`Cannot find child ${m} of node ${p}`);return d})),f.mesh){let m=c.get(f.mesh.id);if(!m)throw new Error(`Cannot find mesh child ${f.mesh.id} of node ${p}`);a.get(p).add(m)}}),{scenes:t.scenes.map(f=>{let p=(f.nodes||[]).map(({id:m})=>{let d=l.get(m);if(!d)throw new Error(`Cannot find child ${m} of scene ${f.name||f.id}`);return d});return new K.GroupNode({id:f.name||f.id,children:p})}),materials:i,gltfMeshIdToNodeMap:c,gltfNodeIdToNodeMap:l,gltfNodeIndexToNodeMap:a}}function Os(e,t,n){return new K.GroupNode({id:t.name||t.id,children:[],matrix:t.matrix,position:t.translation,rotation:t.rotation,scale:t.scale})}function Is(e,t,n,r,s){let o=(t.primitives||[]).map((a,l)=>Ps({device:e,gltfPrimitive:a,primitiveIndex:l,gltfMesh:t,gltf:n,gltfMaterialIdToMaterialMap:r,options:s}));return new K.GroupNode({id:t.name||t.id,children:o})}function Ps({device:e,gltfPrimitive:t,primitiveIndex:n,gltfMesh:r,gltf:s,gltfMaterialIdToMaterialMap:i,options:o}){let c=t.name||`${r.name||r.id}-primitive-${n}`,a=On(t.mode||4),l=t.indices?t.indices.count:bs(t.attributes),h=bn(c,t,a),f=rt(e,t.material,h.attributes,{...o,gltf:s}),p=Pn(e,{id:c,geometry:bn(c,t,a),material:t.material&&i.get(t.material.id)||null,parsedPPBRMaterial:f,modelOptions:o.modelOptions,vertexCount:l});return p.bounds=[t.attributes.POSITION.min,t.attributes.POSITION.max],p}function bs(e){throw new Error("getVertexCount not implemented")}function bn(e,t,n){let r={};for(let[s,i]of Object.entries(t.attributes)){let{components:o,size:c,value:a}=i;r[s]={size:c??o,value:a}}return new K.Geometry({id:e,topology:n,indices:t.indices.value,attributes:r})}function vs(e,t){return e.name||e.id||`material-${t}`}var Cn=F($(),1);var ee=F($(),1);function wt(e,t,n){switch(t){case"translation":return e.setPosition(n).updateMatrix();case"rotation":return e.setRotation(n).updateMatrix();case"scale":return e.setScale(n).updateMatrix();default:return ee.log.warn(`Bad animation path ${t}`)(),null}}function kn(e,{input:t,interpolation:n,output:r},s,i){let o=t[t.length-1],c=e%o,a=t.findIndex(p=>p>=c),l=Math.max(0,a-1),h=t[l],f=t[a];switch(n){case"STEP":Cs(s,i,r[l]);break;case"LINEAR":if(f>h){let p=(c-h)/(f-h);Fs(s,i,r[l],r[a],p)}break;case"CUBICSPLINE":if(f>h){let p=(c-h)/(f-h),m=f-h,d=r[3*l+1],x=r[3*l+2],u=r[3*a+0],E=r[3*a+1];ks(s,i,{p0:d,outTangent0:x,inTangent1:u,p1:E,tDiff:m,ratio:p})}break;default:ee.log.warn(`Interpolation ${n} not supported`)();break}}function Fs(e,t,n,r,s){if(t==="rotation")wt(e,t,new ot().slerp({start:n,target:r,ratio:s}));else{let i=[];for(let o=0;o<n.length;o++)i[o]=s*r[o]+(1-s)*n[o];wt(e,t,i)}}function ks(e,t,{p0:n,outTangent0:r,inTangent1:s,p1:i,tDiff:o,ratio:c}){let a=[];for(let l=0;l<n.length;l++){let h=r[l]*o,f=s[l]*o;a[l]=(2*Math.pow(c,3)-3*Math.pow(c,2)+1)*n[l]+(Math.pow(c,3)-2*Math.pow(c,2)+c)*h+(-2*Math.pow(c,3)+3*Math.pow(c,2))*i[l]+(Math.pow(c,3)-Math.pow(c,2))*f}wt(e,t,a)}function Cs(e,t,n){wt(e,t,n)}var ne=class{animation;gltfNodeIdToNodeMap;startTime=0;playing=!0;speed=1;constructor(t){this.animation=t.animation,this.gltfNodeIdToNodeMap=t.gltfNodeIdToNodeMap,this.animation.name||="unnamed",Object.assign(this,t)}setTime(t){if(!this.playing)return;let r=(t/1e3-this.startTime)*this.speed;this.animation.channels.forEach(({sampler:s,targetNodeId:i,path:o})=>{let c=this.gltfNodeIdToNodeMap.get(i);if(!c)throw new Error(`Cannot find animation target node ${i}`);kn(r,s,c,o)})}},J=class{animations;constructor(t){this.animations=t.animations.map((n,r)=>{let s=n.name||`Animation-${r}`;return new ne({gltfNodeIdToNodeMap:t.gltfNodeIdToNodeMap,animation:{name:s,channels:n.channels}})})}animate(t){Cn.log.warn("GLTFAnimator#animate is deprecated. Use GLTFAnimator#setTime instead")(),this.setTime(t)}setTime(t){this.animations.forEach(n=>n.setTime(t))}getAnimations(){return this.animations}};var zn=F($(),1);var zs={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Hs={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function re(e){let t=Hs[e.componentType],n=zs[e.type],r=n*e.count,{buffer:s,byteOffset:i=0}=e.bufferView?.data??{};return{typedArray:new t(s,i+(e.byteOffset||0),r),components:n}}function Hn(e){let t=e.animations||[],n=new Map,r=new Map;return t.flatMap((s,i)=>{let o=s.name||`Animation-${i}`,c=new Map,a=s.channels.flatMap(({sampler:l,target:h})=>{let f=Us(h.path);if(!f)return[];let p=e.nodes[h.node??0];if(!p)throw new Error(`Cannot find animation target ${h.node}`);let m=c.get(l);if(!m){let d=s.samplers[l];if(!d)throw new Error(`Cannot find animation sampler ${l}`);let{input:x,interpolation:u="LINEAR",output:E}=d;m={input:Bs(e.accessors[x],n),interpolation:u,output:Ds(e.accessors[E],r)},c.set(l,m)}return{sampler:m,targetNodeId:p.id,path:f}});return a.length?[{name:o,channels:a}]:[]})}function Us(e){return e==="pointer"?(zn.log.warn("KHR_animation_pointer channels are not supported and will be skipped")(),null):e}function Bs(e,t){if(t.has(e))return t.get(e);let{typedArray:n,components:r}=re(e);Un(r===1,"accessorToJsArray1D must have exactly 1 component");let s=Array.from(n);return t.set(e,s),s}function Ds(e,t){if(t.has(e))return t.get(e);let{typedArray:n,components:r}=re(e);Un(r>=1,"accessorToJsArray2D must have at least 1 component");let s=[];for(let i=0;i<n.length;i+=r)s.push(Array.from(n.slice(i,i+r)));return t.set(e,s),s}function Un(e,t){if(!e)throw new Error(t)}var qs={supportLevel:"none",comment:"Not currently listed in the luma.gl glTF extension support registry."},Vs={KHR_draco_mesh_compression:{supportLevel:"built-in",comment:"Decoded by loaders.gl before luma.gl builds the scenegraph."},EXT_meshopt_compression:{supportLevel:"built-in",comment:"Meshopt-compressed primitives are decoded during load."},KHR_mesh_quantization:{supportLevel:"built-in",comment:"Quantized accessors are unpacked before geometry creation."},KHR_lights_punctual:{supportLevel:"built-in",comment:"Parsed into luma.gl Light objects."},KHR_materials_unlit:{supportLevel:"built-in",comment:"Unlit materials bypass the default lighting path."},KHR_materials_emissive_strength:{supportLevel:"built-in",comment:"Applied by the stock PBR shader."},KHR_texture_basisu:{supportLevel:"built-in",comment:"BasisU / KTX2 textures pass through when the device supports them."},KHR_texture_transform:{supportLevel:"built-in",comment:"UV transforms are applied during load."},EXT_texture_webp:{supportLevel:"loader-only",comment:"Texture source is resolved during load; final support depends on browser and device decode support."},EXT_texture_avif:{supportLevel:"loader-only",comment:"Texture source is resolved during load; final support depends on browser and device decode support."},KHR_materials_specular:{supportLevel:"built-in",comment:"The stock shader now applies specular factors and textures to the dielectric F0 term."},KHR_materials_ior:{supportLevel:"built-in",comment:"The stock shader now drives dielectric reflectance from the glTF IOR value."},KHR_materials_transmission:{supportLevel:"built-in",comment:"The stock shader now applies transmission to the base layer and exposes transparency through alpha, without a scene-color refraction buffer."},KHR_materials_volume:{supportLevel:"built-in",comment:"Thickness and attenuation now tint transmitted light in the stock shader."},KHR_materials_clearcoat:{supportLevel:"built-in",comment:"The stock shader now adds a secondary clearcoat specular lobe."},KHR_materials_sheen:{supportLevel:"built-in",comment:"The stock shader now adds a sheen lobe for cloth-like materials."},KHR_materials_iridescence:{supportLevel:"built-in",comment:"The stock shader now tints specular response with a view-dependent thin-film iridescence approximation."},KHR_materials_anisotropy:{supportLevel:"built-in",comment:"The stock shader now shapes highlights and IBL response with an anisotropy-direction approximation."},KHR_materials_pbrSpecularGlossiness:{supportLevel:"loader-only",comment:"Extension data can be loaded, but it is not translated into the default metallic-roughness material path."},KHR_materials_variants:{supportLevel:"loader-only",comment:"Variant metadata can be loaded, but applications must choose and apply variants."},EXT_mesh_gpu_instancing:{supportLevel:"none",comment:"GPU instancing data is not yet converted into luma.gl instanced draw setup."},KHR_node_visibility:{supportLevel:"none",comment:"Node-visibility animations and toggles are not mapped onto runtime scenegraph state."},KHR_animation_pointer:{supportLevel:"none",comment:"Animation pointers are not mapped onto runtime scenegraph updates."},KHR_materials_diffuse_transmission:{supportLevel:"none",comment:"Diffuse-transmission shading is not implemented in the stock PBR shader."},KHR_materials_dispersion:{supportLevel:"none",comment:"Chromatic dispersion is not implemented in the stock PBR shader."},KHR_materials_volume_scatter:{supportLevel:"none",comment:"Volume scattering is not implemented in the stock PBR shader."},KHR_xmp:{supportLevel:"none",comment:"Metadata payloads remain in the loaded glTF, but luma.gl does not interpret them."},KHR_xmp_json_ld:{supportLevel:"none",comment:"Metadata is preserved in the glTF, but luma.gl does not interpret it."},EXT_lights_image_based:{supportLevel:"none",comment:"Use loadPBREnvironment() or custom environment setup instead."},EXT_texture_video:{supportLevel:"none",comment:"Video textures are not created automatically by the stock pipeline."},MSFT_lod:{supportLevel:"none",comment:"Level-of-detail switching is not implemented in the stock scenegraph loader."}};function Ot(e){let n=Array.from(Ks(e)).sort().map(r=>{let s=Vs[r]||qs;return[r,{extensionName:r,supported:s.supportLevel==="built-in",supportLevel:s.supportLevel,comment:s.comment}]});return new Map(n)}function Ks(e){let t=e,n=new Set;return Lt(n,e.extensionsUsed),Lt(n,e.extensionsRequired),Lt(n,t.extensionsRemoved),Lt(n,Object.keys(e.extensions||{})),(t.lights?.length||e.nodes.some(r=>"light"in r))&&n.add("KHR_lights_punctual"),e.materials.some(r=>{let s=r;return s.unlit||s.extensions?.KHR_materials_unlit})&&n.add("KHR_materials_unlit"),n}function Lt(e,t=[]){for(let n of t)e.add(n)}function Bn(e,t,n){let{scenes:r,materials:s,gltfMeshIdToNodeMap:i,gltfNodeIdToNodeMap:o,gltfNodeIndexToNodeMap:c}=Fn(e,t,n),a=Hn(t),l=new J({animations:a,gltfNodeIdToNodeMap:o}),h=Nt(t),f=Ot(t),p=r.map(d=>Dn(d.getBounds())),m=$s(p);return{scenes:r,materials:s,animator:l,lights:h,extensionSupport:f,sceneBounds:p,modelBounds:m,gltfMeshIdToNodeMap:i,gltfNodeIdToNodeMap:o,gltfNodeIndexToNodeMap:c,gltf:t}}function Dn(e){if(!e)return{bounds:null,center:[0,0,0],size:[0,0,0],radius:.5,recommendedOrbitDistance:1};let t=[[e[0][0],e[0][1],e[0][2]],[e[1][0],e[1][1],e[1][2]]],n=[t[1][0]-t[0][0],t[1][1]-t[0][1],t[1][2]-t[0][2]],r=[t[0][0]+n[0]*.5,t[0][1]+n[1]*.5,t[0][2]+n[2]*.5],s=Math.max(n[0],n[1],n[2])*.5,i=Math.max(.5*Math.hypot(n[0],n[1],n[2]),.001);return{bounds:t,center:r,size:n,radius:i,recommendedOrbitDistance:Math.max(Math.max(s,.001)/Math.tan(Math.PI/6)*1.15,i*1.1)}}function $s(e){let t=null;for(let n of e)if(n.bounds){if(!t){t=[[...n.bounds[0]],[...n.bounds[1]]];continue}for(let r=0;r<3;r++)t[0][r]=Math.min(t[0][r],n.bounds[0][r]),t[1][r]=Math.max(t[1][r],n.bounds[1][r])}return Dn(t)}return Gn(at);})();
|
|
169
|
+
`;function Rt(t,e){let r=e.materialFactory||new te.MaterialFactory(t,{modules:[ue.pbrMaterial]}),n={...e.parsedPPBRMaterial.uniforms};delete n.camera;let s=Object.fromEntries(Object.entries({...n,...e.parsedPPBRMaterial.bindings}).filter(([i,a])=>r.ownsBinding(i)&&Oo(a))),o=r.createMaterial({id:e.id,bindings:s});return o.setProps({pbrMaterial:n}),o}function dn(t,e){let{id:r,geometry:n,parsedPPBRMaterial:s,vertexCount:o,modelOptions:i={}}=e;D.log.info(4,"createGLTFModel defines: ",s.defines)();let a=[],c={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},l={id:r,source:So,vs:bo,fs:No,geometry:n,topology:n.topology,vertexCount:o,modules:[ue.pbrMaterial,ue.skin],...i,defines:{...s.defines,...i.defines},parameters:{...c,...s.parameters,...i.parameters}},m=e.material||Rt(t,{id:r?`${r}-material`:void 0,parsedPPBRMaterial:s});l.material=m;let p=new te.Model(t,l),f={...s.uniforms,...i.uniforms,...s.bindings,...i.bindings},h=Lo(p.shaderInputs.getModules(),m,f);return p.shaderInputs.setProps(h),new te.ModelNode({managedResources:a,model:p})}function Oo(t){return t instanceof D.Buffer||t instanceof un.DynamicTexture||t instanceof D.Sampler||t instanceof D.Texture||t instanceof D.TextureView}function Lo(t,e,r){let n=new Map;for(let o of t){for(let i of Object.keys(o.uniformTypes||{}))n.set(i,o.name);for(let i of o.bindingLayout||[])n.set(i.name,o.name)}let s={};for(let[o,i]of Object.entries(r)){if(i===void 0)continue;let a=n.get(o);!a||e.ownsModule(a)||(s[a]||={},s[a][o]=i)}return s}var Io={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:void 0,lights:!0,useTangents:!1,useByteColors:!0};function gn(t,e,r={}){let n={...Io,...r},s=new X.MaterialFactory(t,{modules:[xn.pbrMaterial]}),o=(e.materials||[]).map((p,f)=>Rt(t,{id:Ho(p,f),parsedPPBRMaterial:he(t,p,{},{...n,gltf:e,validateAttributes:!1}),materialFactory:s})),i=new Map;(e.materials||[]).forEach((p,f)=>{i.set(p.id,o[f])});let a=new Map;e.meshes.forEach((p,f)=>{let h=Po(t,p,e,i,n);a.set(p.id,h)});let c=new Map,l=new Map;return e.nodes.forEach((p,f)=>{let h=vo(t,p,n);c.set(f,h),l.set(p.id,h)}),e.nodes.forEach((p,f)=>{if(c.get(f).add((p.children??[]).map(({id:h})=>{let u=l.get(h);if(!u)throw new Error(`Cannot find child ${h} of node ${f}`);return u})),p.mesh){let h=a.get(p.mesh.id);if(!h)throw new Error(`Cannot find mesh child ${p.mesh.id} of node ${f}`);c.get(f).add(h)}}),{scenes:e.scenes.map(p=>{let f=(p.nodes||[]).map(({id:h})=>{let u=l.get(h);if(!u)throw new Error(`Cannot find child ${h} of scene ${p.name||p.id}`);return u});return new X.GroupNode({id:p.name||p.id,children:f})}),materials:o,gltfMeshIdToNodeMap:a,gltfNodeIdToNodeMap:l,gltfNodeIndexToNodeMap:c}}function vo(t,e,r){return new X.GroupNode({id:e.name||e.id,children:[],matrix:e.matrix,position:e.translation,rotation:e.rotation,scale:e.scale})}function Po(t,e,r,n,s){let i=(e.primitives||[]).map((c,l)=>Co({device:t,gltfPrimitive:c,primitiveIndex:l,gltfMesh:e,gltf:r,gltfMaterialIdToMaterialMap:n,options:s}));return new X.GroupNode({id:e.name||e.id,children:i})}function Co({device:t,gltfPrimitive:e,primitiveIndex:r,gltfMesh:n,gltf:s,gltfMaterialIdToMaterialMap:o,options:i}){let a=e.name||`${n.name||n.id}-primitive-${r}`,c=hn(e.mode??4),l=e.indices?e.indices.count:Fo(e.attributes),m=ko(a,e,c),p=he(t,e.material,m.attributes,{...i,gltf:s}),f=dn(t,{id:a,geometry:m,material:e.material&&o.get(e.material.id)||null,parsedPPBRMaterial:p,modelOptions:i.modelOptions,vertexCount:l});return f.bounds=[e.attributes.POSITION.min,e.attributes.POSITION.max],f}function Fo(t){let e=1/0;for(let r of Object.values(t))if(r){let{value:n,size:s,components:o}=r,i=s??o;n?.length!==void 0&&i>=1&&(e=Math.min(e,n.length/i))}if(!Number.isFinite(e))throw new Error("Could not determine vertex count from attributes");return e}function ko(t,e,r){let n={};for(let[s,o]of Object.entries(e.attributes)){let{components:i,size:a,value:c,normalized:l}=o;n[s]={size:a??i,value:c,normalized:l}}return new X.Geometry({id:t,topology:r,indices:e.indices?.value,attributes:n})}function Ho(t,e){return t.name||t.id||`material-${e}`}var Tn=k(G(),1);var At=k(G(),1);function Uo(t,e,r){switch(e){case"translation":return t.setPosition(r).updateMatrix();case"rotation":return t.setRotation(r).updateMatrix();case"scale":return t.setScale(r).updateMatrix();default:return At.log.warn(`Bad animation path ${e}`)(),null}}function Mn(t,{input:e,interpolation:r,output:n},s,o){let i=Et(t,{input:e,interpolation:r,output:n},o);i&&Uo(s,o,i)}function Et(t,{input:e,interpolation:r,output:n},s){let o=e[e.length-1];if(!Number.isFinite(o)||o<=0)return n[0]||null;let i=t%o,a=e.findIndex(p=>p>=i);if(a<0)return n[n.length-1]||null;let c=Math.max(0,a-1),l=e[c],m=e[a];switch(r){case"STEP":return n[c];case"LINEAR":if(m>l){let p=(i-l)/(m-l);return zo(s,n[c],n[a],p)}return n[c]||null;case"CUBICSPLINE":if(m>l){let p=(i-l)/(m-l),f=m-l,h=n[3*c+1],u=n[3*c+2],d=n[3*a+0],x=n[3*a+1];return Bo({p0:h,outTangent0:u,inTangent1:d,p1:x,tDiff:f,ratio:p})}return n[3*c+1]||null;default:return At.log.warn(`Interpolation ${r} not supported`)(),null}}function zo(t,e,r,n){if(t==="rotation")return new me().slerp({start:e,target:r,ratio:n});let s=[];for(let o=0;o<e.length;o++)s[o]=n*r[o]+(1-n)*e[o];return s}function Bo({p0:t,outTangent0:e,inTangent1:r,p1:n,tDiff:s,ratio:o}){let i=[];for(let a=0;a<t.length;a++){let c=e[a]*s,l=r[a]*s;i[a]=(2*Math.pow(o,3)-3*Math.pow(o,2)+1)*t[a]+(Math.pow(o,3)-2*Math.pow(o,2)+o)*c+(-2*Math.pow(o,3)+3*Math.pow(o,2))*n[a]+(Math.pow(o,3)-Math.pow(o,2))*l}return i}var wt=class{animation;gltfNodeIdToNodeMap;materials;startTime=0;playing=!0;speed=1;materialTextureTransformState=new Map;constructor(e){if(this.animation=e.animation,this.gltfNodeIdToNodeMap=e.gltfNodeIdToNodeMap,this.materials=e.materials||[],this.animation.name||="unnamed",Object.assign(this,e),this.animation.channels.some(r=>r.type!=="node")&&!this.materials.length)throw new Error(`Animation ${this.animation.name} targets materials, but GLTFAnimator was created without a materials array`)}setTime(e){if(!this.playing)return;let n=(e/1e3-this.startTime)*this.speed;this.animation.channels.forEach(s=>{if(s.type==="node"){let{sampler:a,targetNodeId:c,path:l}=s,m=this.gltfNodeIdToNodeMap.get(c);if(!m)throw new Error(`Cannot find animation target node ${c}`);Mn(n,a,m,l);return}let o=this.materials[s.targetMaterialIndex];if(!o)throw new Error(`Cannot find animation target material ${s.targetMaterialIndex} for ${s.pointer}`);let i=Et(n,s.sampler);i&&(s.type==="material"?Ko(o,s,i):Do(o,s,i,this.materialTextureTransformState))})}},re=class{animations;constructor(e){this.animations=e.animations.map((r,n)=>{let s=r.name||`Animation-${n}`;return new wt({gltfNodeIdToNodeMap:e.gltfNodeIdToNodeMap,materials:e.materials,animation:{name:s,channels:r.channels}})})}animate(e){Tn.log.warn("GLTFAnimator#animate is deprecated. Use GLTFAnimator#setTime instead")(),this.setTime(e)}setTime(e){this.animations.forEach(r=>r.setTime(e))}getAnimations(){return this.animations}};function Ko(t,e,r){let n=e.component!==void 0?{[e.property]:Vo($o(t,e.property),e.component,r[0])}:{[e.property]:r.length===1?r[0]:r};t.setProps({pbrMaterial:n})}function $o(t,e){let n=t.shaderInputs.getUniformValues().pbrMaterial?.[e];return Array.isArray(n)?[...n]:[]}function Vo(t,e,r){let n=[...t];return n[e]=r,n}function Do(t,e,r,n){let s=Be(e.textureSlot),o=qo(n,t,e);switch(e.path){case"offset":e.component!==void 0?o.offset[e.component]=r[0]:o.offset=[r[0],r[1]];break;case"rotation":o.rotation=r[0];break;case"scale":e.component!==void 0?o.scale[e.component]=r[0]:o.scale=[r[0],r[1]];break}t.setProps({pbrMaterial:{[s.uvTransformUniform]:sn(e.baseTransform,o)}})}function qo(t,e,r){let n=t.get(e)||{},s=n[r.textureSlot];return s||(s={offset:[...r.baseTransform.offset],rotation:r.baseTransform.rotation,scale:[...r.baseTransform.scale]},n[r.textureSlot]=s,t.set(e,n)),s}var ne=k(G(),1);var Wo={supportLevel:"none",comment:"Not currently listed in the luma.gl glTF extension support registry."},yn={KHR_draco_mesh_compression:{supportLevel:"built-in",comment:"Decoded by loaders.gl before luma.gl builds the scenegraph."},EXT_meshopt_compression:{supportLevel:"built-in",comment:"Meshopt-compressed primitives are decoded during load."},KHR_mesh_quantization:{supportLevel:"built-in",comment:"Quantized accessors are unpacked before geometry creation."},KHR_lights_punctual:{supportLevel:"built-in",comment:"Parsed into luma.gl Light objects."},KHR_materials_unlit:{supportLevel:"built-in",comment:"Unlit materials bypass the default lighting path."},KHR_materials_emissive_strength:{supportLevel:"built-in",comment:"Applied by the stock PBR shader."},KHR_texture_basisu:{supportLevel:"built-in",comment:"BasisU / KTX2 textures pass through when the device supports them."},KHR_texture_transform:{supportLevel:"built-in",comment:"UV transforms are applied during load."},EXT_texture_webp:{supportLevel:"loader-only",comment:"Texture source is resolved during load; final support depends on browser and device decode support."},EXT_texture_avif:{supportLevel:"loader-only",comment:"Texture source is resolved during load; final support depends on browser and device decode support."},KHR_materials_specular:{supportLevel:"built-in",comment:"The stock shader now applies specular factors and textures to the dielectric F0 term."},KHR_materials_ior:{supportLevel:"built-in",comment:"The stock shader now drives dielectric reflectance from the glTF IOR value."},KHR_materials_transmission:{supportLevel:"built-in",comment:"The stock shader now applies transmission to the base layer and exposes transparency through alpha, without a scene-color refraction buffer."},KHR_materials_volume:{supportLevel:"built-in",comment:"Thickness and attenuation now tint transmitted light in the stock shader."},KHR_materials_clearcoat:{supportLevel:"built-in",comment:"The stock shader now adds a secondary clearcoat specular lobe."},KHR_materials_sheen:{supportLevel:"built-in",comment:"The stock shader now adds a sheen lobe for cloth-like materials."},KHR_materials_iridescence:{supportLevel:"built-in",comment:"The stock shader now tints specular response with a view-dependent thin-film iridescence approximation."},KHR_materials_anisotropy:{supportLevel:"built-in",comment:"The stock shader now shapes highlights and IBL response with an anisotropy-direction approximation."},KHR_materials_pbrSpecularGlossiness:{supportLevel:"loader-only",comment:"Extension data can be loaded, but it is not translated into the default metallic-roughness material path."},KHR_materials_variants:{supportLevel:"loader-only",comment:"Variant metadata can be loaded, but applications must choose and apply variants."},EXT_mesh_gpu_instancing:{supportLevel:"none",comment:"GPU instancing data is not yet converted into luma.gl instanced draw setup."},KHR_node_visibility:{supportLevel:"none",comment:"Node-visibility animations and toggles are not mapped onto runtime scenegraph state."},KHR_animation_pointer:{supportLevel:"parsed-and-wired",comment:"Selected node TRS, material factor, and KHR_texture_transform offset/rotation/scale pointers are wired to runtime updates; unsupported targets are skipped."},KHR_materials_diffuse_transmission:{supportLevel:"none",comment:"Diffuse-transmission shading is not implemented in the stock PBR shader."},KHR_materials_dispersion:{supportLevel:"none",comment:"Chromatic dispersion is not implemented in the stock PBR shader."},KHR_materials_volume_scatter:{supportLevel:"none",comment:"Volume scattering is not implemented in the stock PBR shader."},KHR_xmp:{supportLevel:"none",comment:"Metadata payloads remain in the loaded glTF, but luma.gl does not interpret them."},KHR_xmp_json_ld:{supportLevel:"none",comment:"Metadata is preserved in the glTF, but luma.gl does not interpret it."},EXT_lights_image_based:{supportLevel:"none",comment:"Use loadPBREnvironment() or custom environment setup instead."},EXT_texture_video:{supportLevel:"none",comment:"Video textures are not created automatically by the stock pipeline."},MSFT_lod:{supportLevel:"none",comment:"Level-of-detail switching is not implemented in the stock scenegraph loader."}};function qe(t){let r=Array.from(Yo(t)).sort().map(n=>{let s=yn[n]||Wo;return[n,{extensionName:n,supported:s.supportLevel==="built-in"||s.supportLevel==="parsed-and-wired",supportLevel:s.supportLevel,comment:s.comment}]});return new Map(r)}function St(t){return yn[t]||null}function Yo(t){let e=t,r=new Set;return De(r,t.extensionsUsed),De(r,t.extensionsRequired),De(r,e.extensionsRemoved),De(r,Object.keys(t.extensions||{})),(e.lights?.length||(t.nodes||[]).some(n=>"light"in n))&&r.add("KHR_lights_punctual"),(t.materials||[]).some(n=>{let s=n;return s.unlit||s.extensions?.KHR_materials_unlit})&&r.add("KHR_materials_unlit"),r}function De(t,e=[]){for(let r of e)t.add(r)}var Xo={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Go={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function bt(t){let e=Go[t.componentType],r=Xo[t.type],n=r*t.count,{buffer:s,byteOffset:o=0}=t.bufferView?.data??{};return{typedArray:new e(s,o+(t.byteOffset||0),n),components:r}}function _n(t){let e=t.animations||[],r=new Map,n=new Map;return e.flatMap((s,o)=>{let i=s.name||`Animation-${o}`,a=new Map,c=s.channels.flatMap(({sampler:l,target:m})=>{let p=a.get(l);if(!p){let h=s.samplers[l];if(!h)throw new Error(`Cannot find animation sampler ${l}`);let{input:u,interpolation:d="LINEAR",output:x}=h;p={input:oi(t.accessors[u],r),interpolation:d,output:ii(t.accessors[x],n)},a.set(l,p)}let f=jo(t,m,p);return f?[f]:[]});return c.length?[{name:i,channels:c}]:[]})}function jo(t,e,r){if(e.path==="pointer")return Jo(t,e,r);let n=Rn(e.path);if(!n)return null;let s=t.nodes[e.node??0];if(!s)throw new Error(`Cannot find animation target ${e.node}`);return{type:"node",sampler:r,targetNodeId:s.id,path:n}}function Jo(t,e,r){let n=e.extensions?.KHR_animation_pointer?.pointer;if(typeof n!="string"||!n.startsWith("/"))return ne.log.warn("KHR_animation_pointer channel is missing a valid JSON pointer and will be skipped")(),null;let s=ni(n);switch(s[0]){case"nodes":return Qo(t,s,r,n);case"materials":return Zo(t,s,r,n);default:return de(n,`top-level target "${s[0]}" has no runtime animation mapping`),null}}function Qo(t,e,r,n){if(e.length!==3)return de(n,"node pointers must use /nodes/{index}/{translation|rotation|scale|weights}"),null;let s=Number(e[1]),o=t.nodes[s];if(!Number.isInteger(s)||!o)return ne.log.warn(`KHR_animation_pointer target ${n} references a missing node and will be skipped`)(),null;let i=Rn(e[2]);return i?i==="weights"?(ne.log.warn(`KHR_animation_pointer target ${n} will be skipped because morph weights are not implemented in GLTFAnimator`)(),null):{type:"node",sampler:r,targetNodeId:o.id,path:i}:(de(n,`node property "${e[2]}" has no runtime animation mapping`),null)}function Zo(t,e,r,n){if(e.length<3)return de(n,"material pointers must include a material index and target property path"),null;let s=Number(e[1]),o=t.materials[s];if(!Number.isInteger(s)||!o)return ne.log.warn(`KHR_animation_pointer target ${n} references a missing material and will be skipped`)(),null;let i=ei(o,e.slice(2));return"reason"in i?(de(n,i.reason),null):{sampler:r,pointer:n,targetMaterialIndex:s,...i}}function Rn(t){switch(t){case"translation":case"rotation":case"scale":case"weights":return t;default:return null}}function ei(t,e){let r=ti(t,e);if(!("reason"in r)||r.reason!=="not-a-texture-transform-target")return r;switch(e.join("/")){case"pbrMetallicRoughness/baseColorFactor":return t.pbrMetallicRoughness?{type:"material",property:"baseColorFactor"}:{reason:S(e)};case"pbrMetallicRoughness/metallicFactor":return t.pbrMetallicRoughness?{type:"material",property:"metallicRoughnessValues",component:0}:{reason:S(e)};case"pbrMetallicRoughness/roughnessFactor":return t.pbrMetallicRoughness?{type:"material",property:"metallicRoughnessValues",component:1}:{reason:S(e)};case"normalTexture/scale":return t.normalTexture?{type:"material",property:"normalScale"}:{reason:S(e)};case"occlusionTexture/strength":return t.occlusionTexture?{type:"material",property:"occlusionStrength"}:{reason:S(e)};case"emissiveFactor":return{type:"material",property:"emissiveFactor"};case"alphaCutoff":return{type:"material",property:"alphaCutoff"};case"extensions/KHR_materials_specular/specularFactor":return t.extensions?.KHR_materials_specular?{type:"material",property:"specularIntensityFactor"}:{reason:S(e)};case"extensions/KHR_materials_specular/specularColorFactor":return t.extensions?.KHR_materials_specular?{type:"material",property:"specularColorFactor"}:{reason:S(e)};case"extensions/KHR_materials_ior/ior":return t.extensions?.KHR_materials_ior?{type:"material",property:"ior"}:{reason:S(e)};case"extensions/KHR_materials_transmission/transmissionFactor":return t.extensions?.KHR_materials_transmission?{type:"material",property:"transmissionFactor"}:{reason:S(e)};case"extensions/KHR_materials_volume/thicknessFactor":return t.extensions?.KHR_materials_volume?{type:"material",property:"thicknessFactor"}:{reason:S(e)};case"extensions/KHR_materials_volume/attenuationDistance":return t.extensions?.KHR_materials_volume?{type:"material",property:"attenuationDistance"}:{reason:S(e)};case"extensions/KHR_materials_volume/attenuationColor":return t.extensions?.KHR_materials_volume?{type:"material",property:"attenuationColor"}:{reason:S(e)};case"extensions/KHR_materials_clearcoat/clearcoatFactor":return t.extensions?.KHR_materials_clearcoat?{type:"material",property:"clearcoatFactor"}:{reason:S(e)};case"extensions/KHR_materials_clearcoat/clearcoatRoughnessFactor":return t.extensions?.KHR_materials_clearcoat?{type:"material",property:"clearcoatRoughnessFactor"}:{reason:S(e)};case"extensions/KHR_materials_sheen/sheenColorFactor":return t.extensions?.KHR_materials_sheen?{type:"material",property:"sheenColorFactor"}:{reason:S(e)};case"extensions/KHR_materials_sheen/sheenRoughnessFactor":return t.extensions?.KHR_materials_sheen?{type:"material",property:"sheenRoughnessFactor"}:{reason:S(e)};case"extensions/KHR_materials_iridescence/iridescenceFactor":return t.extensions?.KHR_materials_iridescence?{type:"material",property:"iridescenceFactor"}:{reason:S(e)};case"extensions/KHR_materials_iridescence/iridescenceIor":return t.extensions?.KHR_materials_iridescence?{type:"material",property:"iridescenceIor"}:{reason:S(e)};case"extensions/KHR_materials_iridescence/iridescenceThicknessMinimum":return t.extensions?.KHR_materials_iridescence?{type:"material",property:"iridescenceThicknessRange",component:0}:{reason:S(e)};case"extensions/KHR_materials_iridescence/iridescenceThicknessMaximum":return t.extensions?.KHR_materials_iridescence?{type:"material",property:"iridescenceThicknessRange",component:1}:{reason:S(e)};case"extensions/KHR_materials_anisotropy/anisotropyStrength":return t.extensions?.KHR_materials_anisotropy?{type:"material",property:"anisotropyStrength"}:{reason:S(e)};case"extensions/KHR_materials_anisotropy/anisotropyRotation":return t.extensions?.KHR_materials_anisotropy?{type:"material",property:"anisotropyRotation"}:{reason:S(e)};case"extensions/KHR_materials_emissive_strength/emissiveStrength":return t.extensions?.KHR_materials_emissive_strength?{type:"material",property:"emissiveStrength"}:{reason:S(e)};default:return{reason:S(e)}}}function ti(t,e){let r=e.lastIndexOf("extensions");if(r<0||e[r+1]!=="KHR_texture_transform"||r<1)return{reason:"not-a-texture-transform-target"};let n=nn(e.slice(0,r));if(!n)return{reason:si(e.slice(0,r))};let s=ri(t,n.pathSegments);if(!s)return{reason:`texture-transform target "${e.slice(0,r).join("/")}" does not exist on the referenced material`};let o=e[r+2];if(o==="texCoord")return{reason:"animated KHR_texture_transform.texCoord is unsupported because texCoord selection is structural, not a runtime float/vector update"};if(o!=="offset"&&o!=="rotation"&&o!=="scale")return{reason:`KHR_texture_transform property "${o}" is not animatable; supported properties are offset, rotation, and scale`};let i=e[r+3];if(e.length>r+4)return{reason:`KHR_texture_transform.${o} does not support nested property paths`};let a;if(i!==void 0){if(a=Number(i),o==="rotation")return{reason:"KHR_texture_transform.rotation does not support component indices"};if(!Number.isInteger(a)||a<0||a>1)return{reason:`KHR_texture_transform.${o} component index "${i}" is invalid; only 0 and 1 are supported`}}return{type:"textureTransform",textureSlot:n.slot,path:o,component:a,baseTransform:Ke(s)}}function ri(t,e){let r=t;for(let n of e)if(r=r?.[n],!r)return null;return r}function ni(t){return t.slice(1).split("/").map(e=>e.replace(/~1/g,"/").replace(/~0/g,"~"))}function S(t){let e=An(t);if(e){let r=St(e);if(r?.supportLevel==="none")return`${e} is referenced by this pointer, but ${r.comment.charAt(0).toLowerCase()}${r.comment.slice(1)}`}return`no runtime target exists for material property "${t.join("/")}"`}function si(t){let e=An(t);if(e){let r=St(e);if(r?.supportLevel==="none")return`${e} is referenced by this pointer, but ${r.comment.charAt(0).toLowerCase()}${r.comment.slice(1)}`}return`texture-transform target "${t.join("/")}" has no runtime texture-slot mapping`}function An(t){let e=t.indexOf("extensions"),r=t[e+1];return e>=0&&r?r:null}function de(t,e){ne.log.warn(`KHR_animation_pointer target ${t} will be skipped because ${e}`)()}function oi(t,e){if(e.has(t))return e.get(t);let{typedArray:r,components:n}=bt(t);En(n===1,"accessorToJsArray1D must have exactly 1 component");let s=Array.from(r);return e.set(t,s),s}function ii(t,e){if(e.has(t))return e.get(t);let{typedArray:r,components:n}=bt(t);En(n>=1,"accessorToJsArray2D must have at least 1 component");let s=[];for(let o=0;o<r.length;o+=n)s.push(Array.from(r.slice(o,o+n)));return e.set(t,s),s}function En(t,e){if(!t)throw new Error(e)}function wn(t,e,r){let{scenes:n,materials:s,gltfMeshIdToNodeMap:o,gltfNodeIdToNodeMap:i,gltfNodeIndexToNodeMap:a}=gn(t,e,r),c=_n(e),l=new re({animations:c,gltfNodeIdToNodeMap:i,materials:s}),m=Ve(e,{useByteColors:r?.useByteColors??!0}),p=qe(e),f=n.map(u=>Sn(u.getBounds())),h=ai(f);return{scenes:n,materials:s,animator:l,lights:m,extensionSupport:p,sceneBounds:f,modelBounds:h,gltfMeshIdToNodeMap:o,gltfNodeIdToNodeMap:i,gltfNodeIndexToNodeMap:a,gltf:e}}function Sn(t){if(!t)return{bounds:null,center:[0,0,0],size:[0,0,0],radius:.5,recommendedOrbitDistance:1};let e=[[t[0][0],t[0][1],t[0][2]],[t[1][0],t[1][1],t[1][2]]],r=[e[1][0]-e[0][0],e[1][1]-e[0][1],e[1][2]-e[0][2]],n=[e[0][0]+r[0]*.5,e[0][1]+r[1]*.5,e[0][2]+r[2]*.5],s=Math.max(r[0],r[1],r[2])*.5,o=Math.max(.5*Math.hypot(r[0],r[1],r[2]),.001);return{bounds:e,center:n,size:r,radius:o,recommendedOrbitDistance:Math.max(Math.max(s,.001)/Math.tan(Math.PI/6)*1.15,o*1.1)}}function ai(t){let e=null;for(let r of t)if(r.bounds){if(!e){e=[[...r.bounds[0]],[...r.bounds[1]]];continue}for(let n=0;n<3;n++)e[0][n]=Math.min(e[0][n],r.bounds[0][n]),e[1][n]=Math.max(e[1][n],r.bounds[1][n])}return Sn(e)}return vn(xe);})();
|
|
151
170
|
return __exports__;
|
|
152
171
|
});
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
export type GLTFAnimation = {
|
|
3
3
|
/** Application-visible animation name. */
|
|
4
4
|
name: string;
|
|
5
|
-
/** Channels that drive
|
|
5
|
+
/** Channels that drive runtime node or material properties. */
|
|
6
6
|
channels: GLTFAnimationChannel[];
|
|
7
7
|
};
|
|
8
8
|
/** Supported glTF animation target paths. */
|
|
9
9
|
export type GLTFAnimationPath = 'translation' | 'rotation' | 'scale' | 'weights';
|
|
10
|
-
/** Parsed glTF animation channel. */
|
|
11
|
-
export type
|
|
10
|
+
/** Parsed glTF animation channel that targets a scenegraph node. */
|
|
11
|
+
export type GLTFNodeAnimationChannel = {
|
|
12
|
+
/** Channel target kind. */
|
|
13
|
+
type: 'node';
|
|
12
14
|
/** Node property written by this channel. */
|
|
13
15
|
path: GLTFAnimationPath;
|
|
14
16
|
/** Time/value sampler used to evaluate the channel. */
|
|
@@ -16,6 +18,44 @@ export type GLTFAnimationChannel = {
|
|
|
16
18
|
/** Target node identifier in the generated scenegraph. */
|
|
17
19
|
targetNodeId: string;
|
|
18
20
|
};
|
|
21
|
+
/** Material uniform property targeted by a parsed animation pointer. */
|
|
22
|
+
export type GLTFMaterialAnimationProperty = 'alphaCutoff' | 'anisotropyRotation' | 'anisotropyStrength' | 'attenuationColor' | 'attenuationDistance' | 'baseColorFactor' | 'clearcoatFactor' | 'clearcoatRoughnessFactor' | 'emissiveFactor' | 'emissiveStrength' | 'ior' | 'iridescenceFactor' | 'iridescenceIor' | 'iridescenceThicknessRange' | 'metallicRoughnessValues' | 'normalScale' | 'occlusionStrength' | 'sheenColorFactor' | 'sheenRoughnessFactor' | 'specularColorFactor' | 'specularIntensityFactor' | 'thicknessFactor' | 'transmissionFactor';
|
|
23
|
+
/** Parsed glTF animation channel that targets a material uniform. */
|
|
24
|
+
export type GLTFMaterialAnimationChannel = {
|
|
25
|
+
/** Channel target kind. */
|
|
26
|
+
type: 'material';
|
|
27
|
+
/** Time/value sampler used to evaluate the channel. */
|
|
28
|
+
sampler: GLTFAnimationSampler;
|
|
29
|
+
/** Original JSON pointer from `KHR_animation_pointer`. */
|
|
30
|
+
pointer: string;
|
|
31
|
+
/** Target material index in the source glTF. */
|
|
32
|
+
targetMaterialIndex: number;
|
|
33
|
+
/** Material uniform property updated by this channel. */
|
|
34
|
+
property: GLTFMaterialAnimationProperty;
|
|
35
|
+
/** Component index inside a packed material uniform, when only one element is animated. */
|
|
36
|
+
component?: number;
|
|
37
|
+
};
|
|
38
|
+
/** Parsed glTF animation channel that targets a runtime texture-transform delta. */
|
|
39
|
+
export type GLTFTextureTransformAnimationChannel = {
|
|
40
|
+
/** Channel target kind. */
|
|
41
|
+
type: 'textureTransform';
|
|
42
|
+
/** Time/value sampler used to evaluate the channel. */
|
|
43
|
+
sampler: GLTFAnimationSampler;
|
|
44
|
+
/** Original JSON pointer from `KHR_animation_pointer`. */
|
|
45
|
+
pointer: string;
|
|
46
|
+
/** Target material index in the source glTF. */
|
|
47
|
+
targetMaterialIndex: number;
|
|
48
|
+
/** Texture slot updated by this channel. */
|
|
49
|
+
textureSlot: import('../../pbr/texture-transform').PBRTextureTransformSlot;
|
|
50
|
+
/** Texture transform component updated by this channel. */
|
|
51
|
+
path: import('../../pbr/texture-transform').PBRTextureTransformPath;
|
|
52
|
+
/** Component index when animating a single offset or scale element. */
|
|
53
|
+
component?: number;
|
|
54
|
+
/** Static source transform baked by loaders.gl before runtime animation. */
|
|
55
|
+
baseTransform: import('../../pbr/texture-transform').PBRTextureTransform;
|
|
56
|
+
};
|
|
57
|
+
/** Parsed glTF animation channel. */
|
|
58
|
+
export type GLTFAnimationChannel = GLTFNodeAnimationChannel | GLTFMaterialAnimationChannel | GLTFTextureTransformAnimationChannel;
|
|
19
59
|
/** Parsed glTF animation sampler. */
|
|
20
60
|
export type GLTFAnimationSampler = {
|
|
21
61
|
/** Keyframe times in seconds. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/animations.ts"],"names":[],"mappings":"AAIA,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb
|
|
1
|
+
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/animations.ts"],"names":[],"mappings":"AAIA,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjF,oEAAoE;AACpE,MAAM,MAAM,wBAAwB,GAAG;IACrC,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,iBAAiB,CAAC;IACxB,uDAAuD;IACvD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,6BAA6B,GACrC,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,0BAA0B,GAC1B,gBAAgB,GAChB,kBAAkB,GAClB,KAAK,GACL,mBAAmB,GACnB,gBAAgB,GAChB,2BAA2B,GAC3B,yBAAyB,GACzB,aAAa,GACb,mBAAmB,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,yBAAyB,GACzB,iBAAiB,GACjB,oBAAoB,CAAC;AAEzB,qEAAqE;AACrE,MAAM,MAAM,4BAA4B,GAAG;IACzC,2BAA2B;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,EAAE,6BAA6B,CAAC;IACxC,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,oCAAoC,GAAG;IACjD,2BAA2B;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,uDAAuD;IACvD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4CAA4C;IAC5C,WAAW,EAAE,OAAO,6BAA6B,EAAE,uBAAuB,CAAC;IAC3E,2DAA2D;IAC3D,IAAI,EAAE,OAAO,6BAA6B,EAAE,uBAAuB,CAAC;IACpE,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,EAAE,OAAO,6BAA6B,EAAE,mBAAmB,CAAC;CAC1E,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,4BAA4B,GAC5B,oCAAoC,CAAC;AAEzC,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB,CAAC"}
|
|
@@ -2,4 +2,6 @@ import { GLTFAnimationPath, GLTFAnimationSampler } from "./animations.js";
|
|
|
2
2
|
import { GroupNode } from '@luma.gl/engine';
|
|
3
3
|
/** Evaluates a glTF animation sampler at the supplied time and applies the result to a node. */
|
|
4
4
|
export declare function interpolate(time: number, { input, interpolation, output }: GLTFAnimationSampler, target: GroupNode, path: GLTFAnimationPath): void;
|
|
5
|
+
/** Evaluates a glTF animation sampler at the supplied time. */
|
|
6
|
+
export declare function evaluateSampler(time: number, { input, interpolation, output }: GLTFAnimationSampler, path?: GLTFAnimationPath): number[] | null;
|
|
5
7
|
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,wBAAqB;AACrE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAwB1C,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAC,EAAE,oBAAoB,EACpD,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,wBAAqB;AACrE,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAwB1C,gGAAgG;AAChG,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAC,EAAE,oBAAoB,EACpD,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,iBAAiB,QAMxB;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,EAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAC,EAAE,oBAAoB,EACpD,IAAI,CAAC,EAAE,iBAAiB,GACvB,MAAM,EAAE,GAAG,IAAI,CA8CjB"}
|