@luma.gl/gltf 9.2.5 → 9.3.0-alpha.10
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 +1362 -313
- package/dist/dist.min.js +98 -46
- package/dist/gltf/animations/animations.d.ts +16 -4
- package/dist/gltf/animations/animations.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.d.ts +4 -3
- package/dist/gltf/animations/interpolate.d.ts.map +1 -1
- package/dist/gltf/animations/interpolate.js +27 -36
- package/dist/gltf/animations/interpolate.js.map +1 -1
- package/dist/gltf/create-gltf-model.d.ts +15 -1
- package/dist/gltf/create-gltf-model.d.ts.map +1 -1
- package/dist/gltf/create-gltf-model.js +154 -48
- package/dist/gltf/create-gltf-model.js.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.d.ts +39 -2
- package/dist/gltf/create-scenegraph-from-gltf.d.ts.map +1 -1
- package/dist/gltf/create-scenegraph-from-gltf.js +76 -6
- package/dist/gltf/create-scenegraph-from-gltf.js.map +1 -1
- package/dist/gltf/gltf-animator.d.ts +26 -0
- package/dist/gltf/gltf-animator.d.ts.map +1 -1
- package/dist/gltf/gltf-animator.js +22 -19
- package/dist/gltf/gltf-animator.js.map +1 -1
- package/dist/gltf/gltf-extension-support.d.ts +10 -0
- package/dist/gltf/gltf-extension-support.d.ts.map +1 -0
- package/dist/gltf/gltf-extension-support.js +173 -0
- package/dist/gltf/gltf-extension-support.js.map +1 -0
- package/dist/index.cjs +1302 -276
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parse-gltf-animations.d.ts +1 -0
- package/dist/parsers/parse-gltf-animations.d.ts.map +1 -1
- package/dist/parsers/parse-gltf-animations.js +73 -28
- package/dist/parsers/parse-gltf-animations.js.map +1 -1
- package/dist/parsers/parse-gltf-lights.d.ts +5 -0
- package/dist/parsers/parse-gltf-lights.d.ts.map +1 -0
- package/dist/parsers/parse-gltf-lights.js +163 -0
- package/dist/parsers/parse-gltf-lights.js.map +1 -0
- package/dist/parsers/parse-gltf.d.ts +19 -2
- package/dist/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/parsers/parse-gltf.js +101 -61
- package/dist/parsers/parse-gltf.js.map +1 -1
- package/dist/parsers/parse-pbr-material.d.ts +115 -2
- package/dist/parsers/parse-pbr-material.d.ts.map +1 -1
- package/dist/parsers/parse-pbr-material.js +570 -54
- package/dist/parsers/parse-pbr-material.js.map +1 -1
- package/dist/pbr/pbr-environment.d.ts +10 -4
- package/dist/pbr/pbr-environment.d.ts.map +1 -1
- package/dist/pbr/pbr-environment.js +18 -15
- package/dist/pbr/pbr-environment.js.map +1 -1
- package/dist/pbr/pbr-material.d.ts +13 -3
- package/dist/pbr/pbr-material.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts +12 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-attribute.js +3 -0
- package/dist/webgl-to-webgpu/convert-webgl-attribute.js.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts +11 -5
- package/dist/webgl-to-webgpu/convert-webgl-sampler.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js +16 -12
- package/dist/webgl-to-webgpu/convert-webgl-sampler.js.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts +2 -9
- package/dist/webgl-to-webgpu/convert-webgl-topology.d.ts.map +1 -1
- package/dist/webgl-to-webgpu/convert-webgl-topology.js +2 -14
- package/dist/webgl-to-webgpu/convert-webgl-topology.js.map +1 -1
- package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts +27 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.d.ts.map +1 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.js +34 -0
- package/dist/webgl-to-webgpu/gltf-webgl-constants.js.map +1 -0
- package/package.json +8 -9
- package/src/gltf/animations/animations.ts +17 -5
- package/src/gltf/animations/interpolate.ts +49 -68
- package/src/gltf/create-gltf-model.ts +214 -48
- package/src/gltf/create-scenegraph-from-gltf.ts +134 -11
- package/src/gltf/gltf-animator.ts +34 -25
- package/src/gltf/gltf-extension-support.ts +214 -0
- package/src/index.ts +11 -2
- package/src/parsers/parse-gltf-animations.ts +94 -33
- package/src/parsers/parse-gltf-lights.ts +218 -0
- package/src/parsers/parse-gltf.ts +170 -90
- package/src/parsers/parse-pbr-material.ts +870 -80
- package/src/pbr/pbr-environment.ts +44 -21
- package/src/pbr/pbr-material.ts +18 -3
- package/src/webgl-to-webgpu/convert-webgl-attribute.ts +12 -1
- package/src/webgl-to-webgpu/convert-webgl-sampler.ts +38 -29
- package/src/webgl-to-webgpu/convert-webgl-topology.ts +2 -14
- package/src/webgl-to-webgpu/gltf-webgl-constants.ts +35 -0
- package/dist/utils/deep-copy.d.ts +0 -3
- package/dist/utils/deep-copy.d.ts.map +0 -1
- package/dist/utils/deep-copy.js +0 -21
- package/dist/utils/deep-copy.js.map +0 -1
- package/src/utils/deep-copy.ts +0 -22
package/dist/dist.min.js
CHANGED
|
@@ -4,52 +4,90 @@
|
|
|
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 ve=Object.create;var st=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var be=Object.getPrototypeOf,Fe=Object.prototype.hasOwnProperty;var it=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),qe=(n,t)=>{for(var e in t)st(n,e,{get:t[e],enumerable:!0})},rt=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ze(t))!Fe.call(n,s)&&s!==e&&st(n,s,{get:()=>t[s],enumerable:!(r=ke(t,s))||r.enumerable});return n},ct=(n,t,e)=>(rt(n,t,"default"),e&&rt(e,t,"default")),z=(n,t,e)=>(e=n!=null?ve(be(n)):{},rt(t||!n||!n.__esModule?st(e,"default",{value:n,enumerable:!0}):e,n)),Be=n=>rt(st({},"__esModule",{value:!0}),n);var D=it((cs,jt)=>{jt.exports=globalThis.luma});var ot=it((os,Qt)=>{Qt.exports=globalThis.luma});var zt=it((fi,xn)=>{xn.exports=globalThis.luma});var Te=it((yc,ye)=>{ye.exports=globalThis.luma});var et={};qe(et,{GLTFAnimator:()=>X,createScenegraphsFromGLTF:()=>ue,loadPBREnvironment:()=>mn,parsePBRMaterial:()=>xt});ct(et,z(D(),1));var kt=z(ot(),1);function V(n,t){if(!n)throw new Error(t||"loader assertion failed.")}var b={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},Ce=b.self||b.window||b.global||{},Ve=b.window||b.self||b.global||{},Ue=b.global||b.self||b.window||{},De=b.document||{};var Ot=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Zt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Ye=Zt&&parseFloat(Zt[1])||0;var $e="",Kt={};function Lt(n){for(let t in Kt)if(n.startsWith(t)){let e=Kt[t];n=n.replace(t,e)}return!n.startsWith("http://")&&!n.startsWith("https://")&&(n=`${$e}${n}`),n}var Jt="4.3.2";var Ge=globalThis.loaders?.parseImageNode,Rt=typeof Image<"u",Nt=typeof ImageBitmap<"u",We=Boolean(Ge),Pt=Ot?!0:We;function tn(n){switch(n){case"auto":return Nt||Rt||Pt;case"imagebitmap":return Nt;case"image":return Rt;case"data":return Pt;default:throw new Error(`@loaders.gl/images: image ${n} not supported in this environment`)}}function nn(){if(Nt)return"imagebitmap";if(Rt)return"image";if(Pt)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function en(n){let t=Xe(n);if(!t)throw new Error("Not an image");return t}function _t(n){return at(n)}function at(n){switch(en(n)){case"data":return n;case"image":case"imagebitmap":let t=document.createElement("canvas"),e=t.getContext("2d");if(!e)throw new Error("getImageData");return t.width=n.width,t.height=n.height,e.drawImage(n,0,0),e.getImageData(0,0,n.width,n.height);default:throw new Error("getImageData")}}function Xe(n){return typeof ImageBitmap<"u"&&n instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&n instanceof Image?"image":n&&typeof n=="object"&&n.data&&n.width&&n.height?"data":null}var He=/^data:image\/svg\+xml/,je=/\.svg((\?|#).*)?$/;function ft(n){return n&&(He.test(n)||je.test(n))}function rn(n,t){if(ft(t)){let r=new TextDecoder().decode(n);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 It(n,t)}function It(n,t){if(ft(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(n)])}async function ht(n,t,e){let r=rn(n,e),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await Qe(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function Qe(n,t){let e=new Image;return e.src=n,t.image&&t.image.decode&&e.decode?(await e.decode(),e):await new Promise((r,s)=>{try{e.onload=()=>r(e),e.onerror=i=>{let c=i instanceof Error?i.message:"error";s(new Error(c))}}catch(i){s(i)}})}var Ze={},sn=!0;async function cn(n,t,e){let r;ft(e)?r=await ht(n,t,e):r=It(n,e);let s=t&&t.imagebitmap;return await Ke(r,s)}async function Ke(n,t=null){if((Je(t)||!sn)&&(t=null),t)try{return await createImageBitmap(n,t)}catch(e){console.warn(e),sn=!1}return await createImageBitmap(n)}function Je(n){for(let t in n||Ze)return!1;return!0}function on(n){return!rr(n,"ftyp",4)||!(n[8]&96)?null:tr(n)}function tr(n){switch(nr(n,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function nr(n,t,e){return String.fromCharCode(...n.slice(t,e))}function er(n){return[...n].map(t=>t.charCodeAt(0))}function rr(n,t,e=0){let r=er(t);for(let s=0;s<r.length;++s)if(r[s]!==n[s+e])return!1;return!0}var F=!1,j=!0;function lt(n){let t=Q(n);return ir(t)||ar(t)||cr(t)||or(t)||sr(t)}function sr(n){let t=new Uint8Array(n instanceof DataView?n.buffer:n),e=on(t);return e?{mimeType:e.mimeType,width:0,height:0}:null}function ir(n){let t=Q(n);return t.byteLength>=24&&t.getUint32(0,F)===2303741511?{mimeType:"image/png",width:t.getUint32(16,F),height:t.getUint32(20,F)}:null}function cr(n){let t=Q(n);return t.byteLength>=10&&t.getUint32(0,F)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,j),height:t.getUint16(8,j)}:null}function or(n){let t=Q(n);return t.byteLength>=14&&t.getUint16(0,F)===16973&&t.getUint32(2,j)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,j),height:t.getUint32(22,j)}:null}function ar(n){let t=Q(n);if(!(t.byteLength>=3&&t.getUint16(0,F)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=fr(),i=2;for(;i+9<t.byteLength;){let c=t.getUint16(i,F);if(s.has(c))return{mimeType:"image/jpeg",height:t.getUint16(i+5,F),width:t.getUint16(i+7,F)};if(!r.has(c))return null;i+=2,i+=t.getUint16(i,F)}return null}function fr(){let n=new Set([65499,65476,65484,65501,65534]);for(let e=65504;e<65520;++e)n.add(e);return{tableMarkers:n,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function Q(n){if(n instanceof DataView)return n;if(ArrayBuffer.isView(n))return new DataView(n.buffer);if(n instanceof ArrayBuffer)return new DataView(n);throw new Error("toDataView")}async function an(n,t){let{mimeType:e}=lt(n)||{},r=globalThis.loaders?.parseImageNode;return V(r),await r(n,e)}async function fn(n,t,e){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=e||{},c=hr(s),o;switch(c){case"imagebitmap":o=await cn(n,t,i);break;case"image":o=await ht(n,t,i);break;case"data":o=await an(n,t);break;default:V(!1)}return s==="data"&&(o=at(o)),o}function hr(n){switch(n){case"auto":case"data":return nn();default:return tn(n),n}}var lr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],pr=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],mr={image:{type:"auto",decode:!0}},pt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:Jt,mimeTypes:pr,extensions:lr,parse:fn,tests:[n=>Boolean(lt(new DataView(n)))],options:mr};function mt(n,t,e){let r=typeof n=="function"?n({...t,...e}):n,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Lt(r)}var xr=n=>n&&typeof n=="object";async function hn(n,t,e={}){return await ut(n,t,e)}async function ut(n,t,e){return Array.isArray(n)?await dr(n,t,e):xr(n)?await Mr(n,t,e):await t(n,e)}async function Mr(n,t,e){let r=[],s={};for(let i in n){let c=n[i],o=ut(c,t,e).then(a=>{s[i]=a});r.push(o)}return await Promise.all(r),s}async function dr(n,t,e={}){let r=n.map(s=>ut(s,t,e));return await Promise.all(r)}async function ln(n,t,e){return await hn(n,r=>vt(r,t,e))}async function vt(n,t,e){let s=await(await fetch(n,e.fetch)).arrayBuffer();return await t(s,e)}async function Z(n,t={}){let e=await gr(n,t);return await ln(e,pt.parse,t)}async function gr(n,t,e={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await yr(n,r,t,e):mt(n,t,e)}async function yr(n,t,e,r){let s=[];if(t==="auto"){let i=mt(n,e,{...r,lod:0}),c=await vt(i,pt.parse,e),{width:o,height:a}=_t(c);t=Tr({width:o,height:a}),s.push(i)}V(t>0);for(let i=s.length;i<t;++i){let c=mt(n,e,{...r,lod:i});s.push(c)}return s}function Tr(n){return 1+Math.floor(Math.log2(Math.max(n.width,n.height)))}function mn(n,t){let e=new kt.AsyncTexture(n,{id:"brdfLUT",sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"},data:Z(t.brdfLutUrl)}),r=pn(n,{id:"DiffuseEnvSampler",getTextureForFace:i=>Z(t.getTexUrl("diffuse",i,0)),sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}}),s=pn(n,{id:"SpecularEnvSampler",getTextureForFace:i=>{let c=[];for(let o=0;o<=t.specularMipLevels-1;o++)c.push(Z(t.getTexUrl("specular",i,o)));return c},sampler:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",minFilter:"linear",magFilter:"linear"}});return{brdfLutTexture:e,diffuseEnvSampler:r,specularEnvSampler:s}}var Ar=[0,1,2,3,4,5];function pn(n,{id:t,getTextureForFace:e,sampler:r}){let s={};return Ar.forEach(i=>{s[String(i)]=e(i)}),new kt.AsyncTexture(n,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var mi=z(zt(),1),gn=z(D(),1);var hi=z(zt(),1);function dn(n){return{addressModeU:Mn(n.wrapS),addressModeV:Mn(n.wrapT),magFilter:Er(n.magFilter),...wr(n.minFilter)}}function Mn(n){switch(n){case 33071:return"clamp-to-edge";case 10497:return"repeat";case 33648:return"mirror-repeat";default:return}}function Er(n){switch(n){case 9728:return"nearest";case 9729:return"linear";default:return}}function wr(n){switch(n){case 9728:return{minFilter:"nearest"};case 9729:return{minFilter:"linear"};case 9984:return{minFilter:"nearest",mipmapFilter:"nearest"};case 9985:return{minFilter:"linear",mipmapFilter:"nearest"};case 9986:return{minFilter:"nearest",mipmapFilter:"linear"};case 9987:return{minFilter:"linear",mipmapFilter:"linear"};default:return{}}}function xt(n,t,e,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.scaleIBLAmbient=[1,1]),r?.pbrDebug&&(s.defines.PBR_DEBUG=!0,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),e.NORMAL&&(s.defines.HAS_NORMALS=!0),e.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=!0),e.TEXCOORD_0&&(s.defines.HAS_UV=!0),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=!0),r?.lights&&(s.defines.USE_LIGHTS=!0),t&&Sr(n,t,s),s}function Sr(n,t,e){if(e.uniforms.unlit=Boolean(t.unlit),t.pbrMetallicRoughness&&Or(n,t.pbrMetallicRoughness,e),t.normalTexture){K(n,t.normalTexture,"pbr_normalSampler","HAS_NORMALMAP",e);let{scale:r=1}=t.normalTexture;e.uniforms.normalScale=r}if(t.occlusionTexture){K(n,t.occlusionTexture,"pbr_occlusionSampler","HAS_OCCLUSIONMAP",e);let{strength:r=1}=t.occlusionTexture;e.uniforms.occlusionStrength=r}switch(t.emissiveTexture&&(K(n,t.emissiveTexture,"pbr_emissiveSampler","HAS_EMISSIVEMAP",e),e.uniforms.emissiveFactor=t.emissiveFactor||[0,0,0]),t.alphaMode||"MASK"){case"MASK":let{alphaCutoff:r=.5}=t;e.defines.ALPHA_CUTOFF=!0,e.uniforms.alphaCutoff=r;break;case"BLEND":gn.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),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=32774,e.glParameters.blendFunc=[770,771,1,771];break}}function Or(n,t,e){t.baseColorTexture&&K(n,t.baseColorTexture,"pbr_baseColorSampler","HAS_BASECOLORMAP",e),e.uniforms.baseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&K(n,t.metallicRoughnessTexture,"pbr_metallicRoughnessSampler","HAS_METALROUGHNESSMAP",e);let{metallicFactor:r=1,roughnessFactor:s=1}=t;e.uniforms.metallicRoughnessValues=[r,s]}function K(n,t,e,r,s){let i=t.texture.source.image,c;i.compressed?c=i:c={data:i};let o={wrapS:10497,wrapT:10497,...t?.texture?.sampler},a=n.createTexture({id:t.uniformName||t.id,sampler:dn(o),...c});s.bindings[e]=a,r&&(s.defines[r]=!0),s.generatedTextures.push(a)}var W=z(ot(),1);var gi=1/Math.PI*180,yi=1/180*Math.PI,Lr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Lr}};var L=globalThis.mathgl.config;function yn(n,{precision:t=L.precision}={}){return n=Rr(n),`${parseFloat(n.toPrecision(t))}`}function Y(n){return Array.isArray(n)||ArrayBuffer.isView(n)&&!(n instanceof DataView)}function bt(n,t,e){let r=L.EPSILON;e&&(L.EPSILON=e);try{if(n===t)return!0;if(Y(n)&&Y(t)){if(n.length!==t.length)return!1;for(let s=0;s<n.length;++s)if(!bt(n[s],t[s]))return!1;return!0}return n&&n.equals?n.equals(t):t&&t.equals?t.equals(n):typeof n=="number"&&typeof t=="number"?Math.abs(n-t)<=L.EPSILON*Math.max(1,Math.abs(n),Math.abs(t)):!1}finally{L.EPSILON=r}}function Rr(n){return Math.round(n/L.EPSILON)*L.EPSILON}var C=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(t,e=0){for(let r=0;r<this.ELEMENTS;++r)this[r]=t[r+e];return this.check()}toArray(t=[],e=0){for(let r=0;r<this.ELEMENTS;++r)t[e+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 e="";for(let r=0;r<this.ELEMENTS;++r)e+=(r>0?", ":"")+yn(this[r],t);return`${t.printTypes?this.constructor.name:""}[${e}]`}equals(t){if(!t||this.length!==t.length)return!1;for(let e=0;e<this.ELEMENTS;++e)if(!bt(this[e],t[e]))return!1;return!0}exactEquals(t){if(!t||this.length!==t.length)return!1;for(let e=0;e<this.ELEMENTS;++e)if(this[e]!==t[e])return!1;return!0}negate(){for(let t=0;t<this.ELEMENTS;++t)this[t]=-this[t];return this.check()}lerp(t,e,r){if(r===void 0)return this.lerp(this,t,e);for(let s=0;s<this.ELEMENTS;++s){let i=t[s],c=typeof e=="number"?e:e[s];this[s]=i+r*(c-i)}return this.check()}min(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=Math.min(t[e],this[e]);return this.check()}max(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=Math.max(t[e],this[e]);return this.check()}clamp(t,e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t[r]),e[r]);return this.check()}add(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]+=e[r];return this.check()}subtract(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]-=e[r];return this.check()}scale(t){if(typeof t=="number")for(let e=0;e<this.ELEMENTS;++e)this[e]*=t;else for(let e=0;e<this.ELEMENTS&&e<t.length;++e)this[e]*=t[e];return this.check()}multiplyByScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]*=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 e=0;e<this.ELEMENTS;++e)t=t&&Number.isFinite(this[e]);return t}sub(t){return this.subtract(t)}setScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]=t;return this.check()}addScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]+=t;return this.check()}subScalar(t){return this.addScalar(-t)}multiplyScalar(t){for(let e=0;e<this.ELEMENTS;++e)this[e]*=t;return this.check()}divideScalar(t){return this.multiplyByScalar(1/t)}clampScalar(t,e){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t),e);return this.check()}get elements(){return this}};function Nr(n,t){if(n.length!==t)return!1;for(let e=0;e<n.length;++e)if(!Number.isFinite(n[e]))return!1;return!0}function S(n){if(!Number.isFinite(n))throw new Error(`Invalid number ${JSON.stringify(n)}`);return n}function $(n,t,e=""){if(L.debug&&!Nr(n,t))throw new Error(`math.gl: ${e} some fields set to invalid numbers'`);return n}function Ft(n,t){if(!n)throw new Error(`math.gl assertion ${t}`)}var Mt=class extends C{get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let t=0;for(let e=0;e<this.ELEMENTS;++e)t+=this[e]*this[e];return t}magnitudeSquared(){return this.lengthSquared()}distance(t){return Math.sqrt(this.distanceSquared(t))}distanceSquared(t){let e=0;for(let r=0;r<this.ELEMENTS;++r){let s=this[r]-t[r];e+=s*s}return S(e)}dot(t){let e=0;for(let r=0;r<this.ELEMENTS;++r)e+=this[r]*t[r];return S(e)}normalize(){let t=this.magnitude();if(t!==0)for(let e=0;e<this.ELEMENTS;++e)this[e]/=t;return this.check()}multiply(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]*=e[r];return this.check()}divide(...t){for(let e of t)for(let r=0;r<this.ELEMENTS;++r)this[r]/=e[r];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(t){return this.distance(t)}distanceToSquared(t){return this.distanceSquared(t)}getComponent(t){return Ft(t>=0&&t<this.ELEMENTS,"index is out of range"),S(this[t])}setComponent(t,e){return Ft(t>=0&&t<this.ELEMENTS,"index is out of range"),this[t]=e,this.check()}addVectors(t,e){return this.copy(t).add(e)}subVectors(t,e){return this.copy(t).subtract(e)}multiplyVectors(t,e){return this.copy(t).multiply(e)}addScaledVector(t,e){return this.add(new this.constructor(t).multiplyScalar(e))}};var R=typeof Float32Array<"u"?Float32Array:Array;var _i=Math.PI/180;function Pr(){let n=new R(2);return R!=Float32Array&&(n[0]=0,n[1]=0),n}function En(n,t,e){let r=t[0],s=t[1];return n[0]=e[0]*r+e[4]*s+e[12],n[1]=e[1]*r+e[5]*s+e[13],n}var Ii=function(){let n=Pr();return function(t,e,r,s,i,c){let o,a;for(e||(e=2),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,o=r;o<a;o+=e)n[0]=t[o],n[1]=t[o+1],i(n,n,c),t[o]=n[0],t[o+1]=n[1];return t}}();function wn(n,t,e){let r=t[0],s=t[1],i=e[3]*r+e[7]*s||1;return n[0]=(e[0]*r+e[4]*s)/i,n[1]=(e[1]*r+e[5]*s)/i,n}function Sn(n,t,e){let r=t[0],s=t[1],i=t[2],c=e[3]*r+e[7]*s+e[11]*i||1;return n[0]=(e[0]*r+e[4]*s+e[8]*i)/c,n[1]=(e[1]*r+e[5]*s+e[9]*i)/c,n[2]=(e[2]*r+e[6]*s+e[10]*i)/c,n}function On(n,t,e){let r=t[0],s=t[1];return n[0]=e[0]*r+e[2]*s,n[1]=e[1]*r+e[3]*s,n[2]=t[2],n[3]=t[3],n}function Ln(n,t,e){let r=t[0],s=t[1],i=t[2];return n[0]=e[0]*r+e[3]*s+e[6]*i,n[1]=e[1]*r+e[4]*s+e[7]*i,n[2]=e[2]*r+e[5]*s+e[8]*i,n[3]=t[3],n}function qt(){let n=new R(3);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n}function _r(n){let t=n[0],e=n[1],r=n[2];return Math.sqrt(t*t+e*e+r*r)}function Bt(n,t,e){let r=new R(3);return r[0]=n,r[1]=t,r[2]=e,r}function Rn(n,t){let e=t[0],r=t[1],s=t[2],i=e*e+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),n[0]=t[0]*i,n[1]=t[1]*i,n[2]=t[2]*i,n}function Nn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function dt(n,t,e){let r=t[0],s=t[1],i=t[2],c=e[0],o=e[1],a=e[2];return n[0]=s*a-i*o,n[1]=i*c-r*a,n[2]=r*o-s*c,n}function gt(n,t,e){let r=t[0],s=t[1],i=t[2],c=e[3]*r+e[7]*s+e[11]*i+e[15];return c=c||1,n[0]=(e[0]*r+e[4]*s+e[8]*i+e[12])/c,n[1]=(e[1]*r+e[5]*s+e[9]*i+e[13])/c,n[2]=(e[2]*r+e[6]*s+e[10]*i+e[14])/c,n}function Pn(n,t,e){let r=e[0],s=e[1],i=e[2],c=e[3],o=t[0],a=t[1],f=t[2],h=s*f-i*a,l=i*o-r*f,p=r*a-s*o,m=s*p-i*l,x=i*h-r*p,M=r*l-s*h,d=c*2;return h*=d,l*=d,p*=d,m*=2,x*=2,M*=2,n[0]=o+h+m,n[1]=a+l+x,n[2]=f+p+M,n}var _n=_r;var ki=function(){let n=qt();return function(t,e,r,s,i,c){let o,a;for(e||(e=3),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,o=r;o<a;o+=e)n[0]=t[o],n[1]=t[o+1],n[2]=t[o+2],i(n,n,c),t[o]=n[0],t[o+1]=n[1],t[o+2]=n[2];return t}}();var yt,G=class extends Mt{static get ZERO(){return yt||(yt=new G(0,0,0,0),Object.freeze(yt)),yt}constructor(t=0,e=0,r=0,s=0){super(-0,-0,-0,-0),Y(t)&&arguments.length===1?this.copy(t):(L.debug&&(S(t),S(e),S(r),S(s)),this[0]=t,this[1]=e,this[2]=r,this[3]=s)}set(t,e,r,s){return this[0]=t,this[1]=e,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&&(S(t.x),S(t.y),S(t.z),S(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]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}transform(t){return gt(this,this,t),this.check()}transformByMatrix3(t){return Ln(this,this,t),this.check()}transformByMatrix2(t){return On(this,this,t),this.check()}transformByQuaternion(t){return Pn(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var Tt=class extends C{toString(){let t="[";if(L.printRowMajor){t+="row-major:";for(let e=0;e<this.RANK;++e)for(let r=0;r<this.RANK;++r)t+=` ${this[r*this.RANK+e]}`}else{t+="column-major:";for(let e=0;e<this.ELEMENTS;++e)t+=` ${this[e]}`}return t+="]",t}getElementIndex(t,e){return e*this.RANK+t}getElement(t,e){return this[e*this.RANK+t]}setElement(t,e,r){return this[e*this.RANK+t]=S(r),this}getColumn(t,e=new Array(this.RANK).fill(-0)){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)e[s]=this[r+s];return e}setColumn(t,e){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)this[r+s]=e[s];return this}};function In(){let n=new R(9);return R!=Float32Array&&(n[1]=0,n[2]=0,n[3]=0,n[5]=0,n[6]=0,n[7]=0),n[0]=1,n[4]=1,n[8]=1,n}function vr(n){return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function un(n,t){if(n===t){let e=t[1],r=t[2],s=t[3],i=t[6],c=t[7],o=t[11];n[1]=t[4],n[2]=t[8],n[3]=t[12],n[4]=e,n[6]=t[9],n[7]=t[13],n[8]=r,n[9]=i,n[11]=t[14],n[12]=s,n[13]=c,n[14]=o}else n[0]=t[0],n[1]=t[4],n[2]=t[8],n[3]=t[12],n[4]=t[1],n[5]=t[5],n[6]=t[9],n[7]=t[13],n[8]=t[2],n[9]=t[6],n[10]=t[10],n[11]=t[14],n[12]=t[3],n[13]=t[7],n[14]=t[11],n[15]=t[15];return n}function vn(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],c=t[4],o=t[5],a=t[6],f=t[7],h=t[8],l=t[9],p=t[10],m=t[11],x=t[12],M=t[13],d=t[14],E=t[15],O=e*o-r*c,g=e*a-s*c,y=e*f-i*c,T=r*a-s*o,A=r*f-i*o,N=s*f-i*a,P=h*M-l*x,_=h*d-p*x,I=h*E-m*x,u=l*d-p*M,v=l*E-m*M,k=p*E-m*d,w=O*k-g*v+y*u+T*I-A*_+N*P;return w?(w=1/w,n[0]=(o*k-a*v+f*u)*w,n[1]=(s*v-r*k-i*u)*w,n[2]=(M*N-d*A+E*T)*w,n[3]=(p*A-l*N-m*T)*w,n[4]=(a*I-c*k-f*_)*w,n[5]=(e*k-s*I+i*_)*w,n[6]=(d*y-x*N-E*g)*w,n[7]=(h*N-p*y+m*g)*w,n[8]=(c*v-o*I+f*P)*w,n[9]=(r*I-e*v-i*P)*w,n[10]=(x*A-M*y+E*O)*w,n[11]=(l*y-h*A-m*O)*w,n[12]=(o*_-c*u-a*P)*w,n[13]=(e*u-r*_+s*P)*w,n[14]=(M*g-x*T-d*O)*w,n[15]=(h*T-l*g+p*O)*w,n):null}function kn(n){let t=n[0],e=n[1],r=n[2],s=n[3],i=n[4],c=n[5],o=n[6],a=n[7],f=n[8],h=n[9],l=n[10],p=n[11],m=n[12],x=n[13],M=n[14],d=n[15],E=t*c-e*i,O=t*o-r*i,g=e*o-r*c,y=f*x-h*m,T=f*M-l*m,A=h*M-l*x,N=t*A-e*T+r*y,P=i*A-c*T+o*y,_=f*g-h*O+l*E,I=m*g-x*O+M*E;return a*N-s*P+d*_-p*I}function Ct(n,t,e){let r=t[0],s=t[1],i=t[2],c=t[3],o=t[4],a=t[5],f=t[6],h=t[7],l=t[8],p=t[9],m=t[10],x=t[11],M=t[12],d=t[13],E=t[14],O=t[15],g=e[0],y=e[1],T=e[2],A=e[3];return n[0]=g*r+y*o+T*l+A*M,n[1]=g*s+y*a+T*p+A*d,n[2]=g*i+y*f+T*m+A*E,n[3]=g*c+y*h+T*x+A*O,g=e[4],y=e[5],T=e[6],A=e[7],n[4]=g*r+y*o+T*l+A*M,n[5]=g*s+y*a+T*p+A*d,n[6]=g*i+y*f+T*m+A*E,n[7]=g*c+y*h+T*x+A*O,g=e[8],y=e[9],T=e[10],A=e[11],n[8]=g*r+y*o+T*l+A*M,n[9]=g*s+y*a+T*p+A*d,n[10]=g*i+y*f+T*m+A*E,n[11]=g*c+y*h+T*x+A*O,g=e[12],y=e[13],T=e[14],A=e[15],n[12]=g*r+y*o+T*l+A*M,n[13]=g*s+y*a+T*p+A*d,n[14]=g*i+y*f+T*m+A*E,n[15]=g*c+y*h+T*x+A*O,n}function zn(n,t,e){let r=e[0],s=e[1],i=e[2],c,o,a,f,h,l,p,m,x,M,d,E;return t===n?(n[12]=t[0]*r+t[4]*s+t[8]*i+t[12],n[13]=t[1]*r+t[5]*s+t[9]*i+t[13],n[14]=t[2]*r+t[6]*s+t[10]*i+t[14],n[15]=t[3]*r+t[7]*s+t[11]*i+t[15]):(c=t[0],o=t[1],a=t[2],f=t[3],h=t[4],l=t[5],p=t[6],m=t[7],x=t[8],M=t[9],d=t[10],E=t[11],n[0]=c,n[1]=o,n[2]=a,n[3]=f,n[4]=h,n[5]=l,n[6]=p,n[7]=m,n[8]=x,n[9]=M,n[10]=d,n[11]=E,n[12]=c*r+h*s+x*i+t[12],n[13]=o*r+l*s+M*i+t[13],n[14]=a*r+p*s+d*i+t[14],n[15]=f*r+m*s+E*i+t[15]),n}function bn(n,t,e){let r=e[0],s=e[1],i=e[2];return n[0]=t[0]*r,n[1]=t[1]*r,n[2]=t[2]*r,n[3]=t[3]*r,n[4]=t[4]*s,n[5]=t[5]*s,n[6]=t[6]*s,n[7]=t[7]*s,n[8]=t[8]*i,n[9]=t[9]*i,n[10]=t[10]*i,n[11]=t[11]*i,n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15],n}function Fn(n,t,e,r){let s=r[0],i=r[1],c=r[2],o=Math.sqrt(s*s+i*i+c*c),a,f,h,l,p,m,x,M,d,E,O,g,y,T,A,N,P,_,I,u,v,k,w,H;return o<1e-6?null:(o=1/o,s*=o,i*=o,c*=o,f=Math.sin(e),a=Math.cos(e),h=1-a,l=t[0],p=t[1],m=t[2],x=t[3],M=t[4],d=t[5],E=t[6],O=t[7],g=t[8],y=t[9],T=t[10],A=t[11],N=s*s*h+a,P=i*s*h+c*f,_=c*s*h-i*f,I=s*i*h-c*f,u=i*i*h+a,v=c*i*h+s*f,k=s*c*h+i*f,w=i*c*h-s*f,H=c*c*h+a,n[0]=l*N+M*P+g*_,n[1]=p*N+d*P+y*_,n[2]=m*N+E*P+T*_,n[3]=x*N+O*P+A*_,n[4]=l*I+M*u+g*v,n[5]=p*I+d*u+y*v,n[6]=m*I+E*u+T*v,n[7]=x*I+O*u+A*v,n[8]=l*k+M*w+g*H,n[9]=p*k+d*w+y*H,n[10]=m*k+E*w+T*H,n[11]=x*k+O*w+A*H,t!==n&&(n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n)}function qn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[4],c=t[5],o=t[6],a=t[7],f=t[8],h=t[9],l=t[10],p=t[11];return t!==n&&(n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[4]=i*s+f*r,n[5]=c*s+h*r,n[6]=o*s+l*r,n[7]=a*s+p*r,n[8]=f*s-i*r,n[9]=h*s-c*r,n[10]=l*s-o*r,n[11]=p*s-a*r,n}function Bn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[0],c=t[1],o=t[2],a=t[3],f=t[8],h=t[9],l=t[10],p=t[11];return t!==n&&(n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[0]=i*s-f*r,n[1]=c*s-h*r,n[2]=o*s-l*r,n[3]=a*s-p*r,n[8]=i*r+f*s,n[9]=c*r+h*s,n[10]=o*r+l*s,n[11]=a*r+p*s,n}function Cn(n,t,e){let r=Math.sin(e),s=Math.cos(e),i=t[0],c=t[1],o=t[2],a=t[3],f=t[4],h=t[5],l=t[6],p=t[7];return t!==n&&(n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n[0]=i*s+f*r,n[1]=c*s+h*r,n[2]=o*s+l*r,n[3]=a*s+p*r,n[4]=f*s-i*r,n[5]=h*s-c*r,n[6]=l*s-o*r,n[7]=p*s-a*r,n}function Vn(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],c=e+e,o=r+r,a=s+s,f=e*c,h=r*c,l=r*o,p=s*c,m=s*o,x=s*a,M=i*c,d=i*o,E=i*a;return n[0]=1-l-x,n[1]=h+E,n[2]=p-d,n[3]=0,n[4]=h-E,n[5]=1-f-x,n[6]=m+M,n[7]=0,n[8]=p+d,n[9]=m-M,n[10]=1-f-l,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function Un(n,t,e,r,s,i,c){let o=1/(e-t),a=1/(s-r),f=1/(i-c);return n[0]=i*2*o,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=i*2*a,n[6]=0,n[7]=0,n[8]=(e+t)*o,n[9]=(s+r)*a,n[10]=(c+i)*f,n[11]=-1,n[12]=0,n[13]=0,n[14]=c*i*2*f,n[15]=0,n}function kr(n,t,e,r,s){let i=1/Math.tan(t/2);if(n[0]=i/e,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=i,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[11]=-1,n[12]=0,n[13]=0,n[15]=0,s!=null&&s!==1/0){let c=1/(r-s);n[10]=(s+r)*c,n[14]=2*s*r*c}else n[10]=-1,n[14]=-2*r;return n}var Dn=kr;function zr(n,t,e,r,s,i,c){let o=1/(t-e),a=1/(r-s),f=1/(i-c);return n[0]=-2*o,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=-2*a,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=2*f,n[11]=0,n[12]=(t+e)*o,n[13]=(s+r)*a,n[14]=(c+i)*f,n[15]=1,n}var Yn=zr;function $n(n,t,e,r){let s,i,c,o,a,f,h,l,p,m,x=t[0],M=t[1],d=t[2],E=r[0],O=r[1],g=r[2],y=e[0],T=e[1],A=e[2];return Math.abs(x-y)<1e-6&&Math.abs(M-T)<1e-6&&Math.abs(d-A)<1e-6?vr(n):(l=x-y,p=M-T,m=d-A,s=1/Math.sqrt(l*l+p*p+m*m),l*=s,p*=s,m*=s,i=O*m-g*p,c=g*l-E*m,o=E*p-O*l,s=Math.sqrt(i*i+c*c+o*o),s?(s=1/s,i*=s,c*=s,o*=s):(i=0,c=0,o=0),a=p*o-m*c,f=m*i-l*o,h=l*c-p*i,s=Math.sqrt(a*a+f*f+h*h),s?(s=1/s,a*=s,f*=s,h*=s):(a=0,f=0,h=0),n[0]=i,n[1]=a,n[2]=l,n[3]=0,n[4]=c,n[5]=f,n[6]=p,n[7]=0,n[8]=o,n[9]=h,n[10]=m,n[11]=0,n[12]=-(i*x+c*M+o*d),n[13]=-(a*x+f*M+h*d),n[14]=-(l*x+p*M+m*d),n[15]=1,n)}function br(){let n=new R(4);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0,n[3]=0),n}function Gn(n,t,e){return n[0]=t[0]+e[0],n[1]=t[1]+e[1],n[2]=t[2]+e[2],n[3]=t[3]+e[3],n}function Wn(n,t,e){return n[0]=t[0]*e,n[1]=t[1]*e,n[2]=t[2]*e,n[3]=t[3]*e,n}function Xn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return Math.sqrt(t*t+e*e+r*r+s*s)}function Hn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return t*t+e*e+r*r+s*s}function jn(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],c=e*e+r*r+s*s+i*i;return c>0&&(c=1/Math.sqrt(c)),n[0]=e*c,n[1]=r*c,n[2]=s*c,n[3]=i*c,n}function Qn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Zn(n,t,e,r){let s=t[0],i=t[1],c=t[2],o=t[3];return n[0]=s+r*(e[0]-s),n[1]=i+r*(e[1]-i),n[2]=c+r*(e[2]-c),n[3]=o+r*(e[3]-o),n}function Kn(n,t,e){let r=t[0],s=t[1],i=t[2],c=t[3];return n[0]=e[0]*r+e[4]*s+e[8]*i+e[12]*c,n[1]=e[1]*r+e[5]*s+e[9]*i+e[13]*c,n[2]=e[2]*r+e[6]*s+e[10]*i+e[14]*c,n[3]=e[3]*r+e[7]*s+e[11]*i+e[15]*c,n}function Jn(n,t,e){let r=t[0],s=t[1],i=t[2],c=e[0],o=e[1],a=e[2],f=e[3],h=f*r+o*i-a*s,l=f*s+a*r-c*i,p=f*i+c*s-o*r,m=-c*r-o*s-a*i;return n[0]=h*f+m*-c+l*-a-p*-o,n[1]=l*f+m*-o+p*-c-h*-a,n[2]=p*f+m*-a+h*-o-l*-c,n[3]=t[3],n}var Gi=function(){let n=br();return function(t,e,r,s,i,c){let o,a;for(e||(e=4),r||(r=0),s?a=Math.min(s*e+r,t.length):a=t.length,o=r;o<a;o+=e)n[0]=t[o],n[1]=t[o+1],n[2]=t[o+2],n[3]=t[o+3],i(n,n,c),t[o]=n[0],t[o+1]=n[1],t[o+2]=n[2],t[o+3]=n[3];return t}}();var Dt;(function(n){n[n.COL0ROW0=0]="COL0ROW0",n[n.COL0ROW1=1]="COL0ROW1",n[n.COL0ROW2=2]="COL0ROW2",n[n.COL0ROW3=3]="COL0ROW3",n[n.COL1ROW0=4]="COL1ROW0",n[n.COL1ROW1=5]="COL1ROW1",n[n.COL1ROW2=6]="COL1ROW2",n[n.COL1ROW3=7]="COL1ROW3",n[n.COL2ROW0=8]="COL2ROW0",n[n.COL2ROW1=9]="COL2ROW1",n[n.COL2ROW2=10]="COL2ROW2",n[n.COL2ROW3=11]="COL2ROW3",n[n.COL3ROW0=12]="COL3ROW0",n[n.COL3ROW1=13]="COL3ROW1",n[n.COL3ROW2=14]="COL3ROW2",n[n.COL3ROW3=15]="COL3ROW3"})(Dt||(Dt={}));var qr=45*Math.PI/180,Br=1,Vt=.1,Ut=500,Cr=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),B=class extends Tt{static get IDENTITY(){return Ur()}static get ZERO(){return Vr()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return Dt}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,e,r,s,i,c,o,a,f,h,l,p,m,x,M,d){return this[0]=t,this[1]=e,this[2]=r,this[3]=s,this[4]=i,this[5]=c,this[6]=o,this[7]=a,this[8]=f,this[9]=h,this[10]=l,this[11]=p,this[12]=m,this[13]=x,this[14]=M,this[15]=d,this.check()}setRowMajor(t,e,r,s,i,c,o,a,f,h,l,p,m,x,M,d){return this[0]=t,this[1]=i,this[2]=f,this[3]=m,this[4]=e,this[5]=c,this[6]=h,this[7]=x,this[8]=r,this[9]=o,this[10]=l,this[11]=M,this[12]=s,this[13]=a,this[14]=p,this[15]=d,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(Cr)}fromObject(t){return this.check()}fromQuaternion(t){return Vn(this,t),this.check()}frustum(t){let{left:e,right:r,bottom:s,top:i,near:c=Vt,far:o=Ut}=t;return o===1/0?Dr(this,e,r,s,i,c):Un(this,e,r,s,i,c,o),this.check()}lookAt(t){let{eye:e,center:r=[0,0,0],up:s=[0,1,0]}=t;return $n(this,e,r,s),this.check()}ortho(t){let{left:e,right:r,bottom:s,top:i,near:c=Vt,far:o=Ut}=t;return Yn(this,e,r,s,i,c,o),this.check()}orthographic(t){let{fovy:e=qr,aspect:r=Br,focalDistance:s=1,near:i=Vt,far:c=Ut}=t;te(e);let o=e/2,a=s*Math.tan(o),f=a*r;return this.ortho({left:-f,right:f,bottom:-a,top:a,near:i,far:c})}perspective(t){let{fovy:e=45*Math.PI/180,aspect:r=1,near:s=.1,far:i=500}=t;return te(e),Dn(this,e,r,s,i),this.check()}determinant(){return kn(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,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];let r=this.getScale(e),s=1/r[0],i=1/r[1],c=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*c,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*i,t[6]=this[6]*c,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*i,t[10]=this[10]*c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,e){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],e=e||[-0,-0,-0];let r=this.getScale(e),s=1/r[0],i=1/r[1],c=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*c,t[3]=this[4]*s,t[4]=this[5]*i,t[5]=this[6]*c,t[6]=this[8]*s,t[7]=this[9]*i,t[8]=this[10]*c,t}transpose(){return un(this,this),this.check()}invert(){return vn(this,this),this.check()}multiplyLeft(t){return Ct(this,t,this),this.check()}multiplyRight(t){return Ct(this,this,t),this.check()}rotateX(t){return qn(this,this,t),this.check()}rotateY(t){return Bn(this,this,t),this.check()}rotateZ(t){return Cn(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,e){return Fn(this,this,t,e),this.check()}scale(t){return bn(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return zn(this,this,t),this.check()}transform(t,e){return t.length===4?(e=Kn(e||[-0,-0,-0,-0],t,this),$(e,4),e):this.transformAsPoint(t,e)}transformAsPoint(t,e){let{length:r}=t,s;switch(r){case 2:s=En(e||[-0,-0],t,this);break;case 3:s=gt(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return $(s,t.length),s}transformAsVector(t,e){let r;switch(t.length){case 2:r=wn(e||[-0,-0],t,this);break;case 3:r=Sn(e||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return $(r,t.length),r}transformPoint(t,e){return this.transformAsPoint(t,e)}transformVector(t,e){return this.transformAsPoint(t,e)}transformDirection(t,e){return this.transformAsVector(t,e)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,e,r){return this.identity().translate([t,e,r])}},At,Et;function Vr(){return At||(At=new B([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(At)),At}function Ur(){return Et||(Et=new B,Object.freeze(Et)),Et}function te(n){if(n>Math.PI*2)throw Error("expected radians")}function Dr(n,t,e,r,s,i){let c=2*i/(e-t),o=2*i/(s-r),a=(e+t)/(e-t),f=(s+r)/(s-r),h=-1,l=-1,p=-2*i;return n[0]=c,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=o,n[6]=0,n[7]=0,n[8]=a,n[9]=f,n[10]=h,n[11]=l,n[12]=0,n[13]=0,n[14]=p,n[15]=0,n}function ne(){let n=new R(4);return R!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n[3]=1,n}function ee(n){return n[0]=0,n[1]=0,n[2]=0,n[3]=1,n}function Yt(n,t,e){e=e*.5;let r=Math.sin(e);return n[0]=r*t[0],n[1]=r*t[1],n[2]=r*t[2],n[3]=Math.cos(e),n}function $t(n,t,e){let r=t[0],s=t[1],i=t[2],c=t[3],o=e[0],a=e[1],f=e[2],h=e[3];return n[0]=r*h+c*o+s*f-i*a,n[1]=s*h+c*a+i*o-r*f,n[2]=i*h+c*f+r*a-s*o,n[3]=c*h-r*o-s*a-i*f,n}function re(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],c=t[3],o=Math.sin(e),a=Math.cos(e);return n[0]=r*a+c*o,n[1]=s*a+i*o,n[2]=i*a-s*o,n[3]=c*a-r*o,n}function se(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],c=t[3],o=Math.sin(e),a=Math.cos(e);return n[0]=r*a-i*o,n[1]=s*a+c*o,n[2]=i*a+r*o,n[3]=c*a-s*o,n}function ie(n,t,e){e*=.5;let r=t[0],s=t[1],i=t[2],c=t[3],o=Math.sin(e),a=Math.cos(e);return n[0]=r*a+s*o,n[1]=s*a-r*o,n[2]=i*a+c*o,n[3]=c*a-i*o,n}function ce(n,t){let e=t[0],r=t[1],s=t[2];return n[0]=e,n[1]=r,n[2]=s,n[3]=Math.sqrt(Math.abs(1-e*e-r*r-s*s)),n}function tt(n,t,e,r){let s=t[0],i=t[1],c=t[2],o=t[3],a=e[0],f=e[1],h=e[2],l=e[3],p,m,x,M,d;return p=s*a+i*f+c*h+o*l,p<0&&(p=-p,a=-a,f=-f,h=-h,l=-l),1-p>1e-6?(m=Math.acos(p),d=Math.sin(m),x=Math.sin((1-r)*m)/d,M=Math.sin(r*m)/d):(x=1-r,M=r),n[0]=x*s+M*a,n[1]=x*i+M*f,n[2]=x*c+M*h,n[3]=x*o+M*l,n}function oe(n,t){let e=t[0],r=t[1],s=t[2],i=t[3],c=e*e+r*r+s*s+i*i,o=c?1/c:0;return n[0]=-e*o,n[1]=-r*o,n[2]=-s*o,n[3]=i*o,n}function ae(n,t){return n[0]=-t[0],n[1]=-t[1],n[2]=-t[2],n[3]=t[3],n}function Gt(n,t){let e=t[0]+t[4]+t[8],r;if(e>0)r=Math.sqrt(e+1),n[3]=.5*r,r=.5/r,n[0]=(t[5]-t[7])*r,n[1]=(t[6]-t[2])*r,n[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,c=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[i*3+i]-t[c*3+c]+1),n[s]=.5*r,r=.5/r,n[3]=(t[i*3+c]-t[c*3+i])*r,n[i]=(t[i*3+s]+t[s*3+i])*r,n[c]=(t[c*3+s]+t[s*3+c])*r}return n}var fe=Gn;var he=Wn,le=Qn,pe=Zn,me=Xn;var xe=Hn;var Me=jn;var de=function(){let n=qt(),t=Bt(1,0,0),e=Bt(0,1,0);return function(r,s,i){let c=Nn(s,i);return c<-.999999?(dt(n,t,s),_n(n)<1e-6&&dt(n,e,s),Rn(n,n),Yt(r,n,Math.PI),r):c>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(dt(n,s,i),r[0]=n[0],r[1]=n[1],r[2]=n[2],r[3]=1+c,Me(r,r))}}(),ic=function(){let n=ne(),t=ne();return function(e,r,s,i,c,o){return tt(n,r,c,o),tt(t,s,i,o),tt(e,n,t,2*o*(1-o)),e}}(),cc=function(){let n=In();return function(t,e,r,s){return n[0]=r[0],n[3]=r[1],n[6]=r[2],n[1]=s[0],n[4]=s[1],n[7]=s[2],n[2]=-e[0],n[5]=-e[1],n[8]=-e[2],Me(t,Gt(t,n))}}();var Yr=[0,0,0,1],nt=class extends C{constructor(t=0,e=0,r=0,s=1){super(-0,-0,-0,-0),Array.isArray(t)&&arguments.length===1?this.copy(t):this.set(t,e,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,e,r,s){return this[0]=t,this[1]=e,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 Gt(this,t),this.check()}fromAxisRotation(t,e){return Yt(this,t,e),this.check()}identity(){return ee(this),this.check()}setAxisAngle(t,e){return this.fromAxisRotation(t,e)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=S(t)}get y(){return this[1]}set y(t){this[1]=S(t)}get z(){return this[2]}set z(t){this[2]=S(t)}get w(){return this[3]}set w(t){this[3]=S(t)}len(){return me(this)}lengthSquared(){return xe(this)}dot(t){return le(this,t)}rotationTo(t,e){return de(this,t,e),this.check()}add(t){return fe(this,this,t),this.check()}calculateW(){return ce(this,this),this.check()}conjugate(){return ae(this,this),this.check()}invert(){return oe(this,this),this.check()}lerp(t,e,r){return r===void 0?this.lerp(this,t,e):(pe(this,t,e,r),this.check())}multiplyRight(t){return $t(this,this,t),this.check()}multiplyLeft(t){return $t(this,t,this),this.check()}normalize(){let t=this.len(),e=t>0?1/t:0;return this[0]=this[0]*e,this[1]=this[1]*e,this[2]=this[2]*e,this[3]=this[3]*e,t===0&&(this[3]=1),this.check()}rotateX(t){return re(this,this,t),this.check()}rotateY(t){return se(this,this,t),this.check()}rotateZ(t){return ie(this,this,t),this.check()}scale(t){return he(this,this,t),this.check()}slerp(t,e,r){let s,i,c;switch(arguments.length){case 1:({start:s=Yr,target:i,ratio:c}=t);break;case 2:s=this,i=t,c=e;break;default:s=t,i=e,c=r}return tt(this,s,i,c),this.check()}transformVector4(t,e=new G){return Jn(e,t,this),$(e,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,e){return this.setAxisAngle(t,e)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};var U;(function(n){n[n.POINTS=0]="POINTS",n[n.LINES=1]="LINES",n[n.LINE_LOOP=2]="LINE_LOOP",n[n.LINE_STRIP=3]="LINE_STRIP",n[n.TRIANGLES=4]="TRIANGLES",n[n.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",n[n.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(U||(U={}));function ge(n){switch(n){case U.POINTS:return"point-list";case U.LINES:return"line-list";case U.LINE_STRIP:return"line-strip";case U.TRIANGLES:return"triangle-list";case U.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(n))}}var Ae=z(D(),1),Ee=z(Te(),1),wt=z(ot(),1),$r=`
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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=`
|
|
8
|
+
struct VertexInputs {
|
|
9
|
+
@location(0) positions: vec3f,
|
|
10
|
+
#ifdef HAS_NORMALS
|
|
11
|
+
@location(1) normals: vec3f,
|
|
12
|
+
#endif
|
|
13
|
+
#ifdef HAS_TANGENTS
|
|
14
|
+
@location(2) TANGENT: vec4f,
|
|
15
|
+
#endif
|
|
16
|
+
#ifdef HAS_UV
|
|
17
|
+
@location(3) texCoords: vec2f,
|
|
18
|
+
#endif
|
|
19
|
+
#ifdef HAS_SKIN
|
|
20
|
+
@location(4) JOINTS_0: vec4u,
|
|
21
|
+
@location(5) WEIGHTS_0: vec4f,
|
|
22
|
+
#endif
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
struct FragmentInputs {
|
|
26
|
+
@builtin(position) position: vec4f,
|
|
27
|
+
@location(0) pbrPosition: vec3f,
|
|
28
|
+
@location(1) pbrUV: vec2f,
|
|
29
|
+
@location(2) pbrNormal: vec3f,
|
|
30
|
+
#ifdef HAS_TANGENTS
|
|
31
|
+
@location(3) pbrTangent: vec4f,
|
|
32
|
+
#endif
|
|
33
|
+
};
|
|
22
34
|
|
|
23
35
|
@vertex
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
|
|
37
|
+
var outputs: FragmentInputs;
|
|
38
|
+
var position = vec4f(inputs.positions, 1.0);
|
|
39
|
+
var normal = vec3f(0.0, 0.0, 1.0);
|
|
40
|
+
var tangent = vec4f(1.0, 0.0, 0.0, 1.0);
|
|
41
|
+
var uv = vec2f(0.0, 0.0);
|
|
42
|
+
|
|
43
|
+
#ifdef HAS_NORMALS
|
|
44
|
+
normal = inputs.normals;
|
|
45
|
+
#endif
|
|
46
|
+
#ifdef HAS_UV
|
|
47
|
+
uv = inputs.texCoords;
|
|
48
|
+
#endif
|
|
49
|
+
#ifdef HAS_TANGENTS
|
|
50
|
+
tangent = inputs.TANGENT;
|
|
51
|
+
#endif
|
|
52
|
+
#ifdef HAS_SKIN
|
|
53
|
+
let skinMatrix = getSkinMatrix(inputs.WEIGHTS_0, inputs.JOINTS_0);
|
|
54
|
+
position = skinMatrix * position;
|
|
55
|
+
normal = normalize((skinMatrix * vec4f(normal, 0.0)).xyz);
|
|
56
|
+
#ifdef HAS_TANGENTS
|
|
57
|
+
tangent = vec4f(normalize((skinMatrix * vec4f(tangent.xyz, 0.0)).xyz), tangent.w);
|
|
58
|
+
#endif
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
let worldPosition = pbrProjection.modelMatrix * position;
|
|
62
|
+
|
|
63
|
+
#ifdef HAS_NORMALS
|
|
64
|
+
normal = normalize((pbrProjection.normalMatrix * vec4f(normal, 0.0)).xyz);
|
|
65
|
+
#endif
|
|
66
|
+
#ifdef HAS_TANGENTS
|
|
67
|
+
let worldTangent = normalize((pbrProjection.modelMatrix * vec4f(tangent.xyz, 0.0)).xyz);
|
|
68
|
+
outputs.pbrTangent = vec4f(worldTangent, tangent.w);
|
|
69
|
+
#endif
|
|
70
|
+
|
|
71
|
+
outputs.position = pbrProjection.modelViewProjectionMatrix * position;
|
|
72
|
+
outputs.pbrPosition = worldPosition.xyz / worldPosition.w;
|
|
73
|
+
outputs.pbrUV = uv;
|
|
74
|
+
outputs.pbrNormal = normal;
|
|
75
|
+
return outputs;
|
|
76
|
+
}
|
|
44
77
|
|
|
45
78
|
@fragment
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
79
|
+
fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4f {
|
|
80
|
+
fragmentInputs.pbr_vPosition = inputs.pbrPosition;
|
|
81
|
+
fragmentInputs.pbr_vUV = inputs.pbrUV;
|
|
82
|
+
fragmentInputs.pbr_vNormal = inputs.pbrNormal;
|
|
83
|
+
#ifdef HAS_TANGENTS
|
|
84
|
+
let tangent = normalize(inputs.pbrTangent.xyz);
|
|
85
|
+
let bitangent = normalize(cross(inputs.pbrNormal, tangent)) * inputs.pbrTangent.w;
|
|
86
|
+
fragmentInputs.pbr_vTBN = mat3x3f(tangent, bitangent, inputs.pbrNormal);
|
|
87
|
+
#endif
|
|
88
|
+
return pbr_filterColor(vec4f(1.0));
|
|
89
|
+
}
|
|
90
|
+
`,Rs=`#version 300 es
|
|
53
91
|
|
|
54
92
|
// in vec4 POSITION;
|
|
55
93
|
in vec4 positions;
|
|
@@ -68,6 +106,11 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
68
106
|
in vec2 texCoords;
|
|
69
107
|
#endif
|
|
70
108
|
|
|
109
|
+
#ifdef HAS_SKIN
|
|
110
|
+
in uvec4 JOINTS_0;
|
|
111
|
+
in vec4 WEIGHTS_0;
|
|
112
|
+
#endif
|
|
113
|
+
|
|
71
114
|
void main(void) {
|
|
72
115
|
vec4 _NORMAL = vec4(0.);
|
|
73
116
|
vec4 _TANGENT = vec4(0.);
|
|
@@ -85,16 +128,25 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
85
128
|
_TEXCOORD_0 = texCoords;
|
|
86
129
|
#endif
|
|
87
130
|
|
|
88
|
-
|
|
89
|
-
|
|
131
|
+
vec4 pos = positions;
|
|
132
|
+
|
|
133
|
+
#ifdef HAS_SKIN
|
|
134
|
+
mat4 skinMat = getSkinMatrix(WEIGHTS_0, JOINTS_0);
|
|
135
|
+
pos = skinMat * pos;
|
|
136
|
+
_NORMAL = skinMat * _NORMAL;
|
|
137
|
+
_TANGENT = vec4((skinMat * vec4(_TANGENT.xyz, 0.)).xyz, _TANGENT.w);
|
|
138
|
+
#endif
|
|
139
|
+
|
|
140
|
+
pbr_setPositionNormalTangentUV(pos, _NORMAL, _TANGENT, _TEXCOORD_0);
|
|
141
|
+
gl_Position = pbrProjection.modelViewProjectionMatrix * pos;
|
|
90
142
|
}
|
|
91
|
-
`,
|
|
143
|
+
`,Ss=`#version 300 es
|
|
92
144
|
out vec4 fragmentColor;
|
|
93
145
|
|
|
94
146
|
void main(void) {
|
|
95
147
|
vec3 pos = pbr_vPosition;
|
|
96
148
|
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
97
149
|
}
|
|
98
|
-
`;function we(n,t){let{id:e,geometry:r,parsedPPBRMaterial:s,vertexCount:i,modelOptions:c={}}=t;Ae.log.info(4,"createGLTFModel defines: ",s.defines)();let o=[],a={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},f={id:e,source:$r,vs:Gr,fs:Wr,geometry:r,topology:r.topology,vertexCount:i,modules:[Ee.pbrMaterial],...c,defines:{...s.defines,...c.defines},parameters:{...a,...s.parameters,...c.parameters}},h=new wt.Model(n,f),{camera:l,...p}={...s.uniforms,...c.uniforms,...s.bindings,...c.bindings};return h.shaderInputs.setProps({pbrMaterial:p,pbrProjection:{camera:l}}),new wt.ModelNode({managedResources:o,model:h})}var Xr={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:void 0,lights:!0,useTangents:!1};function Oe(n,t,e={}){let r={...Xr,...e};return t.scenes.map(i=>Hr(n,i,t.nodes,r))}function Hr(n,t,e,r){let i=(t.nodes||[]).map(o=>Le(n,o,e,r));return new W.GroupNode({id:t.name||t.id,children:i})}function Le(n,t,e,r){if(!t._node){let c=(t.children||[]).map(a=>Le(n,a,e,r));t.mesh&&c.push(jr(n,t.mesh,r));let o=new W.GroupNode({id:t.name||t.id,children:c});if(t.matrix)o.setMatrix(t.matrix);else{if(o.matrix.identity(),t.translation&&o.matrix.translate(t.translation),t.rotation){let a=new B().fromQuaternion(t.rotation);o.matrix.multiplyRight(a)}t.scale&&o.matrix.scale(t.scale)}t._node=o}let s=e.find(i=>i.id===t.id);return s._node=t._node,t._node}function jr(n,t,e){if(!t._mesh){let s=(t.primitives||[]).map((c,o)=>Qr(n,c,o,t,e)),i=new W.GroupNode({id:t.name||t.id,children:s});t._mesh=i}return t._mesh}function Qr(n,t,e,r,s){let i=t.name||`${r.name||r.id}-primitive-${e}`,c=ge(t.mode||4),o=t.indices?t.indices.count:Zr(t.attributes),a=Se(i,t,c),f=xt(n,t.material,a.attributes,s),h=we(n,{id:i,geometry:Se(i,t,c),parsedPPBRMaterial:f,modelOptions:s.modelOptions,vertexCount:o});return h.bounds=[t.attributes.POSITION.min,t.attributes.POSITION.max],h}function Zr(n){throw new Error("getVertexCount not implemented")}function Se(n,t,e){let r={};for(let[s,i]of Object.entries(t.attributes)){let{components:c,size:o,value:a}=i;r[s]={size:o??c,value:a}}return new W.Geometry({id:n,topology:e,indices:t.indices.value,attributes:r})}var Ne=z(D(),1);var Xt=z(D(),1);var Wt=new nt;function Re(n,{input:t,interpolation:e,output:r},s,i){let c=t[t.length-1],o=n%c,a=t.findIndex(p=>p>=o),f=Math.max(0,a-1);if(!Array.isArray(s[i]))switch(i){case"translation":s[i]=[0,0,0];break;case"rotation":s[i]=[0,0,0,1];break;case"scale":s[i]=[1,1,1];break;default:Xt.log.warn(`Bad animation path ${i}`)()}let h=t[f],l=t[a];switch(e){case"STEP":ts(s,i,r[f]);break;case"LINEAR":if(l>h){let p=(o-h)/(l-h);Kr(s,i,r[f],r[a],p)}break;case"CUBICSPLINE":if(l>h){let p=(o-h)/(l-h),m=l-h,x=r[3*f+1],M=r[3*f+2],d=r[3*a+0],E=r[3*a+1];Jr(s,i,{p0:x,outTangent0:M,inTangent1:d,p1:E,tDiff:m,ratio:p})}break;default:Xt.log.warn(`Interpolation ${e} not supported`)();break}}function Kr(n,t,e,r,s){if(!n[t])throw new Error;if(t==="rotation"){Wt.slerp({start:e,target:r,ratio:s});for(let i=0;i<Wt.length;i++)n[t][i]=Wt[i]}else for(let i=0;i<e.length;i++)n[t][i]=s*r[i]+(1-s)*e[i]}function Jr(n,t,{p0:e,outTangent0:r,inTangent1:s,p1:i,tDiff:c,ratio:o}){if(!n[t])throw new Error;for(let a=0;a<n[t].length;a++){let f=r[a]*c,h=s[a]*c;n[t][a]=(2*Math.pow(o,3)-3*Math.pow(o,2)+1)*e[a]+(Math.pow(o,3)-2*Math.pow(o,2)+o)*f+(-2*Math.pow(o,3)+3*Math.pow(o,2))*i[a]+(Math.pow(o,3)-Math.pow(o,2))*h}}function ts(n,t,e){if(!n[t])throw new Error;for(let r=0;r<e.length;r++)n[t][r]=e[r]}var Ht=class{animation;startTime=0;playing=!0;speed=1;constructor(t){this.animation=t.animation,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,target:i,path:c})=>{Re(r,s,i,c),es(i,i._node)})}},X=class{animations;constructor(t){this.animations=t.animations.map((e,r)=>{let s=e.name||`Animation-${r}`;return new Ht({animation:{name:s,channels:e.channels}})})}animate(t){Ne.log.warn("GLTFAnimator#animate is deprecated. Use GLTFAnimator#setTime instead")(),this.setTime(t)}setTime(t){this.animations.forEach(e=>e.setTime(t))}getAnimations(){return this.animations}},ns=new B;function es(n,t){if(t.matrix.identity(),n.translation&&t.matrix.translate(n.translation),n.rotation){let e=ns.fromQuaternion(n.rotation);t.matrix.multiplyRight(e)}n.scale&&t.matrix.scale(n.scale)}var rs={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ss={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function Pe(n){let t=ss[n.componentType],e=rs[n.type],r=e*n.count,{buffer:s,byteOffset:i=0}=n.bufferView?.data??{};return{typedArray:new t(s,i+(n.byteOffset||0),r),components:e}}function Ie(n){return(n.animations||[]).map((e,r)=>{let s=e.name||`Animation-${r}`,i=e.samplers.map(({input:o,interpolation:a="LINEAR",output:f})=>({input:_e(n.accessors[o]),interpolation:a,output:_e(n.accessors[f])})),c=e.channels.map(({sampler:o,target:a})=>({sampler:i[o],target:n.nodes[a.node??0],path:a.path}));return{name:s,channels:c}})}function _e(n){if(!n._animation){let{typedArray:t,components:e}=Pe(n);if(e===1)n._animation=Array.from(t);else{let r=[];for(let s=0;s<t.length;s+=e)r.push(Array.from(t.slice(s,s+e)));n._animation=r}}return n._animation}function St(n){if(ArrayBuffer.isView(n)||n instanceof ArrayBuffer||n instanceof ImageBitmap)return n;if(Array.isArray(n))return n.map(St);if(n&&typeof n=="object"){let t={};for(let e in n)t[e]=St(n[e]);return t}return n}function ue(n,t,e){t=St(t);let r=Oe(n,t,e),s=Ie(t),i=new X({animations:s});return{scenes:r,animator:i}}return Be(et);})();
|
|
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);})();
|
|
99
151
|
return __exports__;
|
|
100
152
|
});
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
/** Parsed glTF animation definition. */
|
|
2
2
|
export type GLTFAnimation = {
|
|
3
|
+
/** Application-visible animation name. */
|
|
3
4
|
name: string;
|
|
5
|
+
/** Channels that drive individual node properties. */
|
|
4
6
|
channels: GLTFAnimationChannel[];
|
|
5
7
|
};
|
|
8
|
+
/** Supported glTF animation target paths. */
|
|
9
|
+
export type GLTFAnimationPath = 'translation' | 'rotation' | 'scale' | 'weights';
|
|
10
|
+
/** Parsed glTF animation channel. */
|
|
6
11
|
export type GLTFAnimationChannel = {
|
|
7
|
-
|
|
12
|
+
/** Node property written by this channel. */
|
|
13
|
+
path: GLTFAnimationPath;
|
|
14
|
+
/** Time/value sampler used to evaluate the channel. */
|
|
8
15
|
sampler: GLTFAnimationSampler;
|
|
9
|
-
|
|
16
|
+
/** Target node identifier in the generated scenegraph. */
|
|
17
|
+
targetNodeId: string;
|
|
10
18
|
};
|
|
19
|
+
/** Parsed glTF animation sampler. */
|
|
11
20
|
export type GLTFAnimationSampler = {
|
|
21
|
+
/** Keyframe times in seconds. */
|
|
12
22
|
input: number[];
|
|
23
|
+
/** glTF interpolation mode. */
|
|
13
24
|
interpolation: string;
|
|
14
|
-
|
|
25
|
+
/** Keyframe values, already expanded into JS arrays. */
|
|
26
|
+
output: number[][];
|
|
15
27
|
};
|
|
16
28
|
//# sourceMappingURL=animations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/animations.ts"],"names":[],"mappings":"AAIA,
|
|
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,sDAAsD;IACtD,QAAQ,EAAE,oBAAoB,EAAE,CAAC;CAClC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjF,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG;IACjC,6CAA6C;IAC7C,IAAI,EAAE,iBAAiB,CAAC;IACxB,uDAAuD;IACvD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { GLTFAnimationPath, GLTFAnimationSampler } from "./animations.js";
|
|
2
|
+
import { GroupNode } from '@luma.gl/engine';
|
|
3
|
+
/** Evaluates a glTF animation sampler at the supplied time and applies the result to a node. */
|
|
4
|
+
export declare function interpolate(time: number, { input, interpolation, output }: GLTFAnimationSampler, target: GroupNode, path: GLTFAnimationPath): void;
|
|
4
5
|
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../../src/gltf/animations/interpolate.ts"],"names":[],"mappings":"
|
|
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,QAyCxB"}
|
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
import { log } from '@luma.gl/core';
|
|
2
2
|
import { Quaternion } from '@math.gl/core';
|
|
3
|
-
|
|
3
|
+
/** Applies an evaluated animation value to a scenegraph node. */
|
|
4
|
+
function updateTargetPath(target, path, newValue) {
|
|
5
|
+
switch (path) {
|
|
6
|
+
case 'translation':
|
|
7
|
+
return target.setPosition(newValue).updateMatrix();
|
|
8
|
+
case 'rotation':
|
|
9
|
+
return target.setRotation(newValue).updateMatrix();
|
|
10
|
+
case 'scale':
|
|
11
|
+
return target.setScale(newValue).updateMatrix();
|
|
12
|
+
default:
|
|
13
|
+
log.warn(`Bad animation path ${path}`)();
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Evaluates a glTF animation sampler at the supplied time and applies the result to a node. */
|
|
4
18
|
export function interpolate(time, { input, interpolation, output }, target, path) {
|
|
5
19
|
const maxTime = input[input.length - 1];
|
|
6
20
|
const animationTime = time % maxTime;
|
|
7
21
|
const nextIndex = input.findIndex(t => t >= animationTime);
|
|
8
22
|
const previousIndex = Math.max(0, nextIndex - 1);
|
|
9
|
-
if (!Array.isArray(target[path])) {
|
|
10
|
-
switch (path) {
|
|
11
|
-
case 'translation':
|
|
12
|
-
target[path] = [0, 0, 0];
|
|
13
|
-
break;
|
|
14
|
-
case 'rotation':
|
|
15
|
-
target[path] = [0, 0, 0, 1];
|
|
16
|
-
break;
|
|
17
|
-
case 'scale':
|
|
18
|
-
target[path] = [1, 1, 1];
|
|
19
|
-
break;
|
|
20
|
-
default:
|
|
21
|
-
log.warn(`Bad animation path ${path}`)();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// assert(target[path].length === output[previousIndex].length);
|
|
25
23
|
const previousTime = input[previousIndex];
|
|
26
24
|
const nextTime = input[nextIndex];
|
|
27
25
|
switch (interpolation) {
|
|
@@ -50,45 +48,38 @@ export function interpolate(time, { input, interpolation, output }, target, path
|
|
|
50
48
|
break;
|
|
51
49
|
}
|
|
52
50
|
}
|
|
51
|
+
/** Applies linear interpolation between two keyframes. */
|
|
53
52
|
function linearInterpolate(target, path, start, stop, ratio) {
|
|
54
|
-
if (!target[path]) {
|
|
55
|
-
throw new Error();
|
|
56
|
-
}
|
|
57
53
|
if (path === 'rotation') {
|
|
58
54
|
// SLERP when path is rotation
|
|
59
|
-
|
|
60
|
-
for (let i = 0; i < scratchQuaternion.length; i++) {
|
|
61
|
-
target[path][i] = scratchQuaternion[i];
|
|
62
|
-
}
|
|
55
|
+
updateTargetPath(target, path, new Quaternion().slerp({ start, target: stop, ratio }));
|
|
63
56
|
}
|
|
64
57
|
else {
|
|
65
58
|
// regular interpolation
|
|
59
|
+
const newVal = [];
|
|
66
60
|
for (let i = 0; i < start.length; i++) {
|
|
67
|
-
|
|
61
|
+
newVal[i] = ratio * stop[i] + (1 - ratio) * start[i];
|
|
68
62
|
}
|
|
63
|
+
updateTargetPath(target, path, newVal);
|
|
69
64
|
}
|
|
70
65
|
}
|
|
66
|
+
/** Applies glTF cubic spline interpolation between two keyframes. */
|
|
71
67
|
function cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio: t }) {
|
|
72
|
-
if (!target[path]) {
|
|
73
|
-
throw new Error();
|
|
74
|
-
}
|
|
75
68
|
// TODO: Quaternion might need normalization
|
|
76
|
-
|
|
69
|
+
const newVal = [];
|
|
70
|
+
for (let i = 0; i < p0.length; i++) {
|
|
77
71
|
const m0 = outTangent0[i] * tDiff;
|
|
78
72
|
const m1 = inTangent1[i] * tDiff;
|
|
79
|
-
|
|
73
|
+
newVal[i] =
|
|
80
74
|
(2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] +
|
|
81
75
|
(Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 +
|
|
82
76
|
(-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] +
|
|
83
77
|
(Math.pow(t, 3) - Math.pow(t, 2)) * m1;
|
|
84
78
|
}
|
|
79
|
+
updateTargetPath(target, path, newVal);
|
|
85
80
|
}
|
|
81
|
+
/** Applies step interpolation by copying the current keyframe value. */
|
|
86
82
|
function stepInterpolate(target, path, value) {
|
|
87
|
-
|
|
88
|
-
throw new Error();
|
|
89
|
-
}
|
|
90
|
-
for (let i = 0; i < value.length; i++) {
|
|
91
|
-
target[path][i] = value[i];
|
|
92
|
-
}
|
|
83
|
+
updateTargetPath(target, path, value);
|
|
93
84
|
}
|
|
94
85
|
//# sourceMappingURL=interpolate.js.map
|