@luma.gl/gltf 9.1.0-alpha.17 → 9.1.0-alpha.18
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
CHANGED
|
@@ -3763,7 +3763,7 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
3763
3763
|
}
|
|
3764
3764
|
instantiate(gltf) {
|
|
3765
3765
|
this.gltf = deepCopy(gltf);
|
|
3766
|
-
const scenes = (gltf.scenes || []).map((scene) => this.createScene(scene));
|
|
3766
|
+
const scenes = (this.gltf.scenes || []).map((scene) => this.createScene(scene));
|
|
3767
3767
|
return scenes;
|
|
3768
3768
|
}
|
|
3769
3769
|
createAnimator() {
|
|
@@ -3809,6 +3809,8 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
3809
3809
|
}
|
|
3810
3810
|
gltfNode._node = node;
|
|
3811
3811
|
}
|
|
3812
|
+
const topLevelNode = this.gltf.nodes.find((node) => node.id === gltfNode.id);
|
|
3813
|
+
topLevelNode._node = gltfNode._node;
|
|
3812
3814
|
return gltfNode._node;
|
|
3813
3815
|
}
|
|
3814
3816
|
createMesh(gltfMesh) {
|
package/dist/dist.min.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['luma'] = factory();
|
|
6
6
|
else root['luma'] = factory();})(globalThis, function () {
|
|
7
|
-
var __exports__=(()=>{var we=Object.create;var it=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var Ot=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),_e=(n,t)=>{for(var e in t)it(n,e,{get:t[e],enumerable:!0})},st=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Re(t))!Le.call(n,s)&&s!==e&&it(n,s,{get:()=>t[s],enumerable:!(r=Oe(t,s))||r.enumerable});return n},ct=(n,t,e)=>(st(n,t,"default"),e&&st(e,t,"default")),C=(n,t,e)=>(e=n!=null?we(Ne(n)):{},st(t||!n||!n.__esModule?it(e,"default",{value:n,enumerable:!0}):e,n)),Ie=n=>st(it({},"__esModule",{value:!0}),n);var j=Ot((Gr,Kt)=>{Kt.exports=globalThis.luma});var at=Ot((Xr,Zt)=>{Zt.exports=globalThis.luma});var ge=Ot((Zi,de)=>{de.exports=globalThis.luma});var rt={};_e(rt,{GLTFAnimator:()=>G,createScenegraphsFromGLTF:()=>Se,loadPBREnvironment:()=>Mn,parsePBRMaterial:()=>ot});ct(rt,C(j(),1));var Qt=C(j(),1),z;(function(n){n[n.FUNC_ADD=32774]="FUNC_ADD",n[n.ONE=1]="ONE",n[n.SRC_ALPHA=770]="SRC_ALPHA",n[n.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",n[n.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",n[n.LINEAR=9729]="LINEAR",n[n.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",n[n.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL"})(z||(z={}));function ot(n,t,e,r){let s={defines:{MANUAL_SRGB:1,SRGB_FAST_APPROXIMATION:1},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=1;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=1,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),e.NORMAL&&(s.defines.HAS_NORMALS=1),e.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=1),e.TEXCOORD_0&&(s.defines.HAS_UV=1),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=1),r?.lights&&(s.defines.USE_LIGHTS=1),t&&Pe(n,t,s),s}function Pe(n,t,e){if(e.uniforms.unlit=Boolean(t.unlit),t.pbrMetallicRoughness&&ve(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){case"MASK":let{alphaCutoff:r=.5}=t;e.defines.ALPHA_CUTOFF=1,e.uniforms.alphaCutoff=r;break;case"BLEND":Qt.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),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=z.FUNC_ADD,e.glParameters.blendFunc=[z.SRC_ALPHA,z.ONE_MINUS_SRC_ALPHA,z.ONE,z.ONE_MINUS_SRC_ALPHA];break}}function ve(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=null,s){let i=t?.texture?.sampler?.parameters||{},c=t.texture.source.image,o,a={};c.compressed?(o=c,a={[z.TEXTURE_MIN_FILTER]:c.data.length>1?z.LINEAR_MIPMAP_NEAREST:z.LINEAR}):o={data:c};let f=n.createTexture({id:t.uniformName||t.id,parameters:{...i,...a},pixelStore:{[z.UNPACK_FLIP_Y_WEBGL]:!1},...o});s.bindings[e]=f,r&&(s.defines[r]=1),s.generatedTextures.push(f)}var zt=C(at(),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},ue=b.self||b.window||b.global||{},ke=b.window||b.self||b.global||{},ze=b.global||b.self||b.window||{},be=b.document||{};var Rt=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Jt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),qe=Jt&&parseFloat(Jt[1])||0;var Fe="",tn={};function Nt(n){for(let t in tn)if(n.startsWith(t)){let e=tn[t];n=n.replace(t,e)}return!n.startsWith("http://")&&!n.startsWith("https://")&&(n=`${Fe}${n}`),n}var nn="4.2.1";var Be=globalThis.loaders?.parseImageNode,Lt=typeof Image<"u",_t=typeof ImageBitmap<"u",Ce=Boolean(Be),It=Rt?!0:Ce;function en(n){switch(n){case"auto":return _t||Lt||It;case"imagebitmap":return _t;case"image":return Lt;case"data":return It;default:throw new Error(`@loaders.gl/images: image ${n} not supported in this environment`)}}function rn(){if(_t)return"imagebitmap";if(Lt)return"image";if(It)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function sn(n){let t=Ue(n);if(!t)throw new Error("Not an image");return t}function Pt(n){return ft(n)}function ft(n){switch(sn(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 Ue(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 Ve=/^data:image\/svg\+xml/,De=/\.svg((\?|#).*)?$/;function ht(n){return n&&(Ve.test(n)||De.test(n))}function cn(n,t){if(ht(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 vt(n,t)}function vt(n,t){if(ht(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(n)])}async function lt(n,t,e){let r=cn(n,e),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await Ye(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function Ye(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 $e={},on=!0;async function an(n,t,e){let r;ht(e)?r=await lt(n,t,e):r=vt(n,e);let s=t&&t.imagebitmap;return await We(r,s)}async function We(n,t=null){if((Ge(t)||!on)&&(t=null),t)try{return await createImageBitmap(n,t)}catch(e){console.warn(e),on=!1}return await createImageBitmap(n)}function Ge(n){for(let t in n||$e)return!1;return!0}function fn(n){return!Ke(n,"ftyp",4)||!(n[8]&96)?null:He(n)}function He(n){switch(Xe(n,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Xe(n,t,e){return String.fromCharCode(...n.slice(t,e))}function je(n){return[...n].map(t=>t.charCodeAt(0))}function Ke(n,t,e=0){let r=je(t);for(let s=0;s<r.length;++s)if(r[s]!==n[s+e])return!1;return!0}var q=!1,Q=!0;function pt(n){let t=Z(n);return Ze(t)||nr(t)||Je(t)||tr(t)||Qe(t)}function Qe(n){let t=new Uint8Array(n instanceof DataView?n.buffer:n),e=fn(t);return e?{mimeType:e.mimeType,width:0,height:0}:null}function Ze(n){let t=Z(n);return t.byteLength>=24&&t.getUint32(0,q)===2303741511?{mimeType:"image/png",width:t.getUint32(16,q),height:t.getUint32(20,q)}:null}function Je(n){let t=Z(n);return t.byteLength>=10&&t.getUint32(0,q)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,Q),height:t.getUint16(8,Q)}:null}function tr(n){let t=Z(n);return t.byteLength>=14&&t.getUint16(0,q)===16973&&t.getUint32(2,Q)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,Q),height:t.getUint32(22,Q)}:null}function nr(n){let t=Z(n);if(!(t.byteLength>=3&&t.getUint16(0,q)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=er(),i=2;for(;i+9<t.byteLength;){let c=t.getUint16(i,q);if(s.has(c))return{mimeType:"image/jpeg",height:t.getUint16(i+5,q),width:t.getUint16(i+7,q)};if(!r.has(c))return null;i+=2,i+=t.getUint16(i,q)}return null}function er(){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 Z(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 hn(n,t){let{mimeType:e}=pt(n)||{},r=globalThis.loaders?.parseImageNode;return V(r),await r(n,e)}async function ln(n,t,e){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=e||{},c=rr(s),o;switch(c){case"imagebitmap":o=await an(n,t,i);break;case"image":o=await lt(n,t,i);break;case"data":o=await hn(n,t);break;default:V(!1)}return s==="data"&&(o=ft(o)),o}function rr(n){switch(n){case"auto":case"data":return rn();default:return en(n),n}}var sr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],ir=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],cr={image:{type:"auto",decode:!0}},xt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:nn,mimeTypes:ir,extensions:sr,parse:ln,tests:[n=>Boolean(pt(new DataView(n)))],options:cr};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}`),Nt(r)}var or=n=>n&&typeof n=="object";async function pn(n,t,e={}){return await ut(n,t,e)}async function ut(n,t,e){return Array.isArray(n)?await fr(n,t,e):or(n)?await ar(n,t,e):await t(n,e)}async function ar(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 fr(n,t,e={}){let r=n.map(s=>ut(s,t,e));return await Promise.all(r)}async function xn(n,t,e){return await pn(n,r=>kt(r,t,e))}async function kt(n,t,e){let s=await(await fetch(n,e.fetch)).arrayBuffer();return await t(s,e)}async function J(n,t={}){let e=await hr(n,t);return await xn(e,xt.parse,t)}async function hr(n,t,e={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await lr(n,r,t,e):mt(n,t,e)}async function lr(n,t,e,r){let s=[];if(t==="auto"){let i=mt(n,e,{...r,lod:0}),c=await kt(i,xt.parse,e),{width:o,height:a}=Pt(c);t=pr({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 pr(n){return 1+Math.floor(Math.log2(Math.max(n.width,n.height)))}function Mn(n,t){let e=new zt.AsyncTexture(n,{id:"brdfLUT",sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"},data:J(t.brdfLutUrl)}),r=mn(n,{id:"DiffuseEnvSampler",getTextureForFace:i=>J(t.getTexUrl("diffuse",i,0)),sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}}),s=mn(n,{id:"SpecularEnvSampler",getTextureForFace:i=>{let c=[];for(let o=0;o<=t.specularMipLevels-1;o++)c.push(J(t.getTexUrl("specular",i,o)));return c},sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}});return{brdfLutTexture:e,diffuseEnvSampler:r,specularEnvSampler:s}}var xr=[0,1,2,3,4,5];function mn(n,{id:t,getTextureForFace:e,sampler:r}){let s={};return xr.forEach(i=>{s[String(i)]=e(i)}),new zt.AsyncTexture(n,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var H=C(at(),1);var Ks=1/Math.PI*180,Qs=1/180*Math.PI,mr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...mr}};var R=globalThis.mathgl.config;function dn(n,{precision:t=R.precision}={}){return n=Mr(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=R.EPSILON;e&&(R.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)<=R.EPSILON*Math.max(1,Math.abs(n),Math.abs(t)):!1}finally{R.EPSILON=r}}function Mr(n){return Math.round(n/R.EPSILON)*R.EPSILON}var U=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(R)}formatString(t){let e="";for(let r=0;r<this.ELEMENTS;++r)e+=(r>0?", ":"")+dn(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(R.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 dr(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 w(n){if(!Number.isFinite(n))throw new Error(`Invalid number ${JSON.stringify(n)}`);return n}function $(n,t,e=""){if(R.debug&&!dr(n,t))throw new Error(`math.gl: ${e} some fields set to invalid numbers'`);return n}function qt(n,t){if(!n)throw new Error(`math.gl assertion ${t}`)}var Mt=class extends U{get x(){return this[0]}set x(t){this[0]=w(t)}get y(){return this[1]}set y(t){this[1]=w(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 w(e)}dot(t){let e=0;for(let r=0;r<this.ELEMENTS;++r)e+=this[r]*t[r];return w(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 qt(t>=0&&t<this.ELEMENTS,"index is out of range"),w(this[t])}setComponent(t,e){return qt(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 N=typeof Float32Array<"u"?Float32Array:Array;var ai=Math.PI/180;function gr(){let n=new N(2);return N!=Float32Array&&(n[0]=0,n[1]=0),n}function An(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 fi=function(){let n=gr();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 Tn(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 En(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 Sn(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 wn(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 Ft(){let n=new N(3);return N!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n}function yr(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 N(3);return r[0]=n,r[1]=t,r[2]=e,r}function On(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 Rn(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 Nn(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,p=i*o-r*f,l=r*a-s*o,x=s*l-i*p,m=i*h-r*l,M=r*p-s*h,d=c*2;return h*=d,p*=d,l*=d,x*=2,m*=2,M*=2,n[0]=o+h+x,n[1]=a+p+m,n[2]=f+l+M,n}var Ln=yr;var pi=function(){let n=Ft();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,W=class extends Mt{static get ZERO(){return yt||(yt=new W(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):(R.debug&&(w(t),w(e),w(r),w(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 R.debug&&(w(t.x),w(t.y),w(t.z),w(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]=w(t)}get w(){return this[3]}set w(t){this[3]=w(t)}transform(t){return gt(this,this,t),this.check()}transformByMatrix3(t){return wn(this,this,t),this.check()}transformByMatrix2(t){return Sn(this,this,t),this.check()}transformByQuaternion(t){return Nn(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var At=class extends U{toString(){let t="[";if(R.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]=w(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 _n(){let n=new N(9);return N!=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 Er(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 In(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 Pn(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],p=t[9],l=t[10],x=t[11],m=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,A=r*a-s*o,T=r*f-i*o,L=s*f-i*a,_=h*M-p*m,I=h*d-l*m,P=h*E-x*m,v=p*d-l*M,u=p*E-x*M,k=l*E-x*d,S=O*k-g*u+y*v+A*P-T*I+L*_;return S?(S=1/S,n[0]=(o*k-a*u+f*v)*S,n[1]=(s*u-r*k-i*v)*S,n[2]=(M*L-d*T+E*A)*S,n[3]=(l*T-p*L-x*A)*S,n[4]=(a*P-c*k-f*I)*S,n[5]=(e*k-s*P+i*I)*S,n[6]=(d*y-m*L-E*g)*S,n[7]=(h*L-l*y+x*g)*S,n[8]=(c*u-o*P+f*_)*S,n[9]=(r*P-e*u-i*_)*S,n[10]=(m*T-M*y+E*O)*S,n[11]=(p*y-h*T-x*O)*S,n[12]=(o*I-c*v-a*_)*S,n[13]=(e*v-r*I+s*_)*S,n[14]=(M*g-m*A-d*O)*S,n[15]=(h*A-p*g+l*O)*S,n):null}function vn(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],p=n[10],l=n[11],x=n[12],m=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*m-h*x,A=f*M-p*x,T=h*M-p*m,L=t*T-e*A+r*y,_=i*T-c*A+o*y,I=f*g-h*O+p*E,P=x*g-m*O+M*E;return a*L-s*_+d*I-l*P}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],p=t[8],l=t[9],x=t[10],m=t[11],M=t[12],d=t[13],E=t[14],O=t[15],g=e[0],y=e[1],A=e[2],T=e[3];return n[0]=g*r+y*o+A*p+T*M,n[1]=g*s+y*a+A*l+T*d,n[2]=g*i+y*f+A*x+T*E,n[3]=g*c+y*h+A*m+T*O,g=e[4],y=e[5],A=e[6],T=e[7],n[4]=g*r+y*o+A*p+T*M,n[5]=g*s+y*a+A*l+T*d,n[6]=g*i+y*f+A*x+T*E,n[7]=g*c+y*h+A*m+T*O,g=e[8],y=e[9],A=e[10],T=e[11],n[8]=g*r+y*o+A*p+T*M,n[9]=g*s+y*a+A*l+T*d,n[10]=g*i+y*f+A*x+T*E,n[11]=g*c+y*h+A*m+T*O,g=e[12],y=e[13],A=e[14],T=e[15],n[12]=g*r+y*o+A*p+T*M,n[13]=g*s+y*a+A*l+T*d,n[14]=g*i+y*f+A*x+T*E,n[15]=g*c+y*h+A*m+T*O,n}function un(n,t,e){let r=e[0],s=e[1],i=e[2],c,o,a,f,h,p,l,x,m,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],p=t[5],l=t[6],x=t[7],m=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]=p,n[6]=l,n[7]=x,n[8]=m,n[9]=M,n[10]=d,n[11]=E,n[12]=c*r+h*s+m*i+t[12],n[13]=o*r+p*s+M*i+t[13],n[14]=a*r+l*s+d*i+t[14],n[15]=f*r+x*s+E*i+t[15]),n}function kn(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 zn(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,p,l,x,m,M,d,E,O,g,y,A,T,L,_,I,P,v,u,k,S,X;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,p=t[0],l=t[1],x=t[2],m=t[3],M=t[4],d=t[5],E=t[6],O=t[7],g=t[8],y=t[9],A=t[10],T=t[11],L=s*s*h+a,_=i*s*h+c*f,I=c*s*h-i*f,P=s*i*h-c*f,v=i*i*h+a,u=c*i*h+s*f,k=s*c*h+i*f,S=i*c*h-s*f,X=c*c*h+a,n[0]=p*L+M*_+g*I,n[1]=l*L+d*_+y*I,n[2]=x*L+E*_+A*I,n[3]=m*L+O*_+T*I,n[4]=p*P+M*v+g*u,n[5]=l*P+d*v+y*u,n[6]=x*P+E*v+A*u,n[7]=m*P+O*v+T*u,n[8]=p*k+M*S+g*X,n[9]=l*k+d*S+y*X,n[10]=x*k+E*S+A*X,n[11]=m*k+O*S+T*X,t!==n&&(n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n)}function bn(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],p=t[10],l=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+p*r,n[7]=a*s+l*r,n[8]=f*s-i*r,n[9]=h*s-c*r,n[10]=p*s-o*r,n[11]=l*s-a*r,n}function qn(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],p=t[10],l=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-p*r,n[3]=a*s-l*r,n[8]=i*r+f*s,n[9]=c*r+h*s,n[10]=o*r+p*s,n[11]=a*r+l*s,n}function Fn(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],p=t[6],l=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+p*r,n[3]=a*s+l*r,n[4]=f*s-i*r,n[5]=h*s-c*r,n[6]=p*s-o*r,n[7]=l*s-a*r,n}function Bn(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,p=r*o,l=s*c,x=s*o,m=s*a,M=i*c,d=i*o,E=i*a;return n[0]=1-p-m,n[1]=h+E,n[2]=l-d,n[3]=0,n[4]=h-E,n[5]=1-f-m,n[6]=x+M,n[7]=0,n[8]=l+d,n[9]=x-M,n[10]=1-f-p,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function Cn(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 Sr(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 Un=Sr;function wr(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 Vn=wr;function Dn(n,t,e,r){let s,i,c,o,a,f,h,p,l,x,m=t[0],M=t[1],d=t[2],E=r[0],O=r[1],g=r[2],y=e[0],A=e[1],T=e[2];return Math.abs(m-y)<1e-6&&Math.abs(M-A)<1e-6&&Math.abs(d-T)<1e-6?Er(n):(p=m-y,l=M-A,x=d-T,s=1/Math.sqrt(p*p+l*l+x*x),p*=s,l*=s,x*=s,i=O*x-g*l,c=g*p-E*x,o=E*l-O*p,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=l*o-x*c,f=x*i-p*o,h=p*c-l*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]=p,n[3]=0,n[4]=c,n[5]=f,n[6]=l,n[7]=0,n[8]=o,n[9]=h,n[10]=x,n[11]=0,n[12]=-(i*m+c*M+o*d),n[13]=-(a*m+f*M+h*d),n[14]=-(p*m+l*M+x*d),n[15]=1,n)}function Or(){let n=new N(4);return N!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0,n[3]=0),n}function Yn(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 $n(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 Wn(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 Gn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return t*t+e*e+r*r+s*s}function Hn(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 Xn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function jn(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 Qn(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,p=f*s+a*r-c*i,l=f*i+c*s-o*r,x=-c*r-o*s-a*i;return n[0]=h*f+x*-c+p*-a-l*-o,n[1]=p*f+x*-o+l*-c-h*-a,n[2]=l*f+x*-a+h*-o-p*-c,n[3]=t[3],n}var Oi=function(){let n=Or();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 Nr=45*Math.PI/180,Lr=1,Ut=.1,Vt=500,_r=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),B=class extends At{static get IDENTITY(){return Pr()}static get ZERO(){return Ir()}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,p,l,x,m,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]=p,this[11]=l,this[12]=x,this[13]=m,this[14]=M,this[15]=d,this.check()}setRowMajor(t,e,r,s,i,c,o,a,f,h,p,l,x,m,M,d){return this[0]=t,this[1]=i,this[2]=f,this[3]=x,this[4]=e,this[5]=c,this[6]=h,this[7]=m,this[8]=r,this[9]=o,this[10]=p,this[11]=M,this[12]=s,this[13]=a,this[14]=l,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(_r)}fromObject(t){return this.check()}fromQuaternion(t){return Bn(this,t),this.check()}frustum(t){let{left:e,right:r,bottom:s,top:i,near:c=Ut,far:o=Vt}=t;return o===1/0?vr(this,e,r,s,i,c):Cn(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 Dn(this,e,r,s),this.check()}ortho(t){let{left:e,right:r,bottom:s,top:i,near:c=Ut,far:o=Vt}=t;return Vn(this,e,r,s,i,c,o),this.check()}orthographic(t){let{fovy:e=Nr,aspect:r=Lr,focalDistance:s=1,near:i=Ut,far:c=Vt}=t;Zn(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 Zn(e),Un(this,e,r,s,i),this.check()}determinant(){return vn(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 In(this,this),this.check()}invert(){return Pn(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 bn(this,this,t),this.check()}rotateY(t){return qn(this,this,t),this.check()}rotateZ(t){return Fn(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,e){return zn(this,this,t,e),this.check()}scale(t){return kn(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return un(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=An(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=Tn(e||[-0,-0],t,this);break;case 3:r=En(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])}},Tt,Et;function Ir(){return Tt||(Tt=new B([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(Tt)),Tt}function Pr(){return Et||(Et=new B,Object.freeze(Et)),Et}function Zn(n){if(n>Math.PI*2)throw Error("expected radians")}function vr(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,p=-1,l=-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]=p,n[12]=0,n[13]=0,n[14]=l,n[15]=0,n}function Jn(){let n=new N(4);return N!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n[3]=1,n}function te(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 ne(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 ee(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 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+s*o,n[1]=s*a-r*o,n[2]=i*a+c*o,n[3]=c*a-i*o,n}function se(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 nt(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],p=e[3],l,x,m,M,d;return l=s*a+i*f+c*h+o*p,l<0&&(l=-l,a=-a,f=-f,h=-h,p=-p),1-l>1e-6?(x=Math.acos(l),d=Math.sin(x),m=Math.sin((1-r)*x)/d,M=Math.sin(r*x)/d):(m=1-r,M=r),n[0]=m*s+M*a,n[1]=m*i+M*f,n[2]=m*c+M*h,n[3]=m*o+M*p,n}function ie(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 ce(n,t){return n[0]=-t[0],n[1]=-t[1],n[2]=-t[2],n[3]=t[3],n}function Wt(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 oe=Yn;var ae=$n,fe=Xn,he=jn,le=Wn;var pe=Gn;var xe=Hn;var me=function(){let n=Ft(),t=Bt(1,0,0),e=Bt(0,1,0);return function(r,s,i){let c=Rn(s,i);return c<-.999999?(dt(n,t,s),Ln(n)<1e-6&&dt(n,e,s),On(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,xe(r,r))}}(),Bi=function(){let n=Jn(),t=Jn();return function(e,r,s,i,c,o){return nt(n,r,c,o),nt(t,s,i,o),nt(e,n,t,2*o*(1-o)),e}}(),Ci=function(){let n=_n();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],xe(t,Wt(t,n))}}();var ur=[0,0,0,1],et=class extends U{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 Wt(this,t),this.check()}fromAxisRotation(t,e){return Yt(this,t,e),this.check()}identity(){return te(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]=w(t)}get y(){return this[1]}set y(t){this[1]=w(t)}get z(){return this[2]}set z(t){this[2]=w(t)}get w(){return this[3]}set w(t){this[3]=w(t)}len(){return le(this)}lengthSquared(){return pe(this)}dot(t){return fe(this,t)}rotationTo(t,e){return me(this,t,e),this.check()}add(t){return oe(this,this,t),this.check()}calculateW(){return se(this,this),this.check()}conjugate(){return ce(this,this),this.check()}invert(){return ie(this,this),this.check()}lerp(t,e,r){return r===void 0?this.lerp(this,t,e):(he(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 ne(this,this,t),this.check()}rotateY(t){return ee(this,this,t),this.check()}rotateZ(t){return re(this,this,t),this.check()}scale(t){return ae(this,this,t),this.check()}slerp(t,e,r){let s,i,c;switch(arguments.length){case 1:({start:s=ur,target:i,ratio:c}=t);break;case 2:s=this,i=t,c=e;break;default:s=t,i=e,c=r}return nt(this,s,i,c),this.check()}transformVector4(t,e=new W){return Qn(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 Ht=C(j(),1);var kr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},zr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Xt=class{name;startTime=0;playing=!0;speed=1;channels=[];constructor(t){Object.assign(this,t)}animate(t){if(!this.playing)return;let r=(t/1e3-this.startTime)*this.speed;this.channels.forEach(({sampler:s,target:i,path:c})=>{Ur(r,s,i,c),qr(i,i._node)})}},G=class{animations;constructor(t){this.animations=t.animations.map((e,r)=>{let s=e.name||`Animation-${r}`,i=e.samplers.map(({input:o,interpolation:a="LINEAR",output:f})=>({input:Me(t.accessors[o]),interpolation:a,output:Me(t.accessors[f])})),c=e.channels.map(({sampler:o,target:a})=>({sampler:i[o],target:t.nodes[a.node],path:a.path}));return new Xt({name:s,channels:c})})}animate(t){this.setTime(t)}setTime(t){this.animations.forEach(e=>e.animate(t))}getAnimations(){return this.animations}};function Me(n){if(!n._animation){let t=zr[n.componentType],e=kr[n.type],r=e*n.count,{buffer:s,byteOffset:i}=n.bufferView.data,c=new t(s,i+(n.byteOffset||0),r);if(e===1)n._animation=Array.from(c);else{let o=[];for(let a=0;a<c.length;a+=e)o.push(Array.from(c.slice(a,a+e)));n._animation=o}}return n._animation}var br=new B;function qr(n,t){if(t.matrix.identity(),n.translation&&t.matrix.translate(n.translation),n.rotation){let e=br.fromQuaternion(n.rotation);t.matrix.multiplyRight(e)}n.scale&&t.matrix.scale(n.scale)}var Gt=new et;function Fr(n,t,e,r,s){if(t==="rotation"){Gt.slerp({start:e,target:r,ratio:s});for(let i=0;i<Gt.length;i++)n[t][i]=Gt[i]}else for(let i=0;i<e.length;i++)n[t][i]=s*r[i]+(1-s)*e[i]}function Br(n,t,{p0:e,outTangent0:r,inTangent1:s,p1:i,tDiff:c,ratio:o}){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 Cr(n,t,e){for(let r=0;r<e.length;r++)n[t][r]=e[r]}function Ur(n,{input:t,interpolation:e,output:r},s,i){let c=t[t.length-1],o=n%c,a=t.findIndex(l=>l>=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:Ht.log.warn(`Bad animation path ${i}`)()}let h=t[f],p=t[a];switch(e){case"STEP":Cr(s,i,r[f]);break;case"LINEAR":if(p>h){let l=(o-h)/(p-h);Fr(s,i,r[f],r[a],l)}break;case"CUBICSPLINE":if(p>h){let l=(o-h)/(p-h),x=p-h,m=r[3*f+1],M=r[3*f+2],d=r[3*a+0],E=r[3*a+1];Br(s,i,{p0:m,outTangent0:M,inTangent1:d,p1:E,tDiff:x,ratio:l})}break;default:Ht.log.warn(`Interpolation ${e} not supported`)();break}}var ye=C(j(),1),Ae=C(ge(),1),St=C(at(),1);var Vr=`
|
|
7
|
+
var __exports__=(()=>{var we=Object.create;var it=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Ne=Object.prototype.hasOwnProperty;var Ot=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),_e=(n,t)=>{for(var e in t)it(n,e,{get:t[e],enumerable:!0})},st=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Re(t))!Ne.call(n,s)&&s!==e&&it(n,s,{get:()=>t[s],enumerable:!(r=Oe(t,s))||r.enumerable});return n},ct=(n,t,e)=>(st(n,t,"default"),e&&st(e,t,"default")),C=(n,t,e)=>(e=n!=null?we(Le(n)):{},st(t||!n||!n.__esModule?it(e,"default",{value:n,enumerable:!0}):e,n)),Ie=n=>st(it({},"__esModule",{value:!0}),n);var j=Ot((Gr,Kt)=>{Kt.exports=globalThis.luma});var at=Ot((Xr,Zt)=>{Zt.exports=globalThis.luma});var ge=Ot((Zi,de)=>{de.exports=globalThis.luma});var rt={};_e(rt,{GLTFAnimator:()=>G,createScenegraphsFromGLTF:()=>Se,loadPBREnvironment:()=>Mn,parsePBRMaterial:()=>ot});ct(rt,C(j(),1));var Qt=C(j(),1),z;(function(n){n[n.FUNC_ADD=32774]="FUNC_ADD",n[n.ONE=1]="ONE",n[n.SRC_ALPHA=770]="SRC_ALPHA",n[n.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",n[n.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",n[n.LINEAR=9729]="LINEAR",n[n.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",n[n.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL"})(z||(z={}));function ot(n,t,e,r){let s={defines:{MANUAL_SRGB:1,SRGB_FAST_APPROXIMATION:1},bindings:{},uniforms:{camera:[0,0,0],metallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=1;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=1,s.uniforms.scaleDiffBaseMR=[0,0,0,0],s.uniforms.scaleFGDSpec=[0,0,0,0]),e.NORMAL&&(s.defines.HAS_NORMALS=1),e.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=1),e.TEXCOORD_0&&(s.defines.HAS_UV=1),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=1),r?.lights&&(s.defines.USE_LIGHTS=1),t&&Pe(n,t,s),s}function Pe(n,t,e){if(e.uniforms.unlit=Boolean(t.unlit),t.pbrMetallicRoughness&&ve(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){case"MASK":let{alphaCutoff:r=.5}=t;e.defines.ALPHA_CUTOFF=1,e.uniforms.alphaCutoff=r;break;case"BLEND":Qt.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),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=z.FUNC_ADD,e.glParameters.blendFunc=[z.SRC_ALPHA,z.ONE_MINUS_SRC_ALPHA,z.ONE,z.ONE_MINUS_SRC_ALPHA];break}}function ve(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=null,s){let i=t?.texture?.sampler?.parameters||{},c=t.texture.source.image,o,a={};c.compressed?(o=c,a={[z.TEXTURE_MIN_FILTER]:c.data.length>1?z.LINEAR_MIPMAP_NEAREST:z.LINEAR}):o={data:c};let f=n.createTexture({id:t.uniformName||t.id,parameters:{...i,...a},pixelStore:{[z.UNPACK_FLIP_Y_WEBGL]:!1},...o});s.bindings[e]=f,r&&(s.defines[r]=1),s.generatedTextures.push(f)}var zt=C(at(),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},ue=b.self||b.window||b.global||{},ke=b.window||b.self||b.global||{},ze=b.global||b.self||b.window||{},be=b.document||{};var Rt=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Jt=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),qe=Jt&&parseFloat(Jt[1])||0;var Fe="",tn={};function Lt(n){for(let t in tn)if(n.startsWith(t)){let e=tn[t];n=n.replace(t,e)}return!n.startsWith("http://")&&!n.startsWith("https://")&&(n=`${Fe}${n}`),n}var nn="4.2.1";var Be=globalThis.loaders?.parseImageNode,Nt=typeof Image<"u",_t=typeof ImageBitmap<"u",Ce=Boolean(Be),It=Rt?!0:Ce;function en(n){switch(n){case"auto":return _t||Nt||It;case"imagebitmap":return _t;case"image":return Nt;case"data":return It;default:throw new Error(`@loaders.gl/images: image ${n} not supported in this environment`)}}function rn(){if(_t)return"imagebitmap";if(Nt)return"image";if(It)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function sn(n){let t=Ue(n);if(!t)throw new Error("Not an image");return t}function Pt(n){return ft(n)}function ft(n){switch(sn(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 Ue(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 Ve=/^data:image\/svg\+xml/,De=/\.svg((\?|#).*)?$/;function ht(n){return n&&(Ve.test(n)||De.test(n))}function cn(n,t){if(ht(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 vt(n,t)}function vt(n,t){if(ht(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(n)])}async function lt(n,t,e){let r=cn(n,e),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await Ye(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function Ye(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 $e={},on=!0;async function an(n,t,e){let r;ht(e)?r=await lt(n,t,e):r=vt(n,e);let s=t&&t.imagebitmap;return await We(r,s)}async function We(n,t=null){if((Ge(t)||!on)&&(t=null),t)try{return await createImageBitmap(n,t)}catch(e){console.warn(e),on=!1}return await createImageBitmap(n)}function Ge(n){for(let t in n||$e)return!1;return!0}function fn(n){return!Ke(n,"ftyp",4)||!(n[8]&96)?null:He(n)}function He(n){switch(Xe(n,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Xe(n,t,e){return String.fromCharCode(...n.slice(t,e))}function je(n){return[...n].map(t=>t.charCodeAt(0))}function Ke(n,t,e=0){let r=je(t);for(let s=0;s<r.length;++s)if(r[s]!==n[s+e])return!1;return!0}var q=!1,Q=!0;function pt(n){let t=Z(n);return Ze(t)||nr(t)||Je(t)||tr(t)||Qe(t)}function Qe(n){let t=new Uint8Array(n instanceof DataView?n.buffer:n),e=fn(t);return e?{mimeType:e.mimeType,width:0,height:0}:null}function Ze(n){let t=Z(n);return t.byteLength>=24&&t.getUint32(0,q)===2303741511?{mimeType:"image/png",width:t.getUint32(16,q),height:t.getUint32(20,q)}:null}function Je(n){let t=Z(n);return t.byteLength>=10&&t.getUint32(0,q)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,Q),height:t.getUint16(8,Q)}:null}function tr(n){let t=Z(n);return t.byteLength>=14&&t.getUint16(0,q)===16973&&t.getUint32(2,Q)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,Q),height:t.getUint32(22,Q)}:null}function nr(n){let t=Z(n);if(!(t.byteLength>=3&&t.getUint16(0,q)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=er(),i=2;for(;i+9<t.byteLength;){let c=t.getUint16(i,q);if(s.has(c))return{mimeType:"image/jpeg",height:t.getUint16(i+5,q),width:t.getUint16(i+7,q)};if(!r.has(c))return null;i+=2,i+=t.getUint16(i,q)}return null}function er(){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 Z(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 hn(n,t){let{mimeType:e}=pt(n)||{},r=globalThis.loaders?.parseImageNode;return V(r),await r(n,e)}async function ln(n,t,e){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=e||{},c=rr(s),o;switch(c){case"imagebitmap":o=await an(n,t,i);break;case"image":o=await lt(n,t,i);break;case"data":o=await hn(n,t);break;default:V(!1)}return s==="data"&&(o=ft(o)),o}function rr(n){switch(n){case"auto":case"data":return rn();default:return en(n),n}}var sr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],ir=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],cr={image:{type:"auto",decode:!0}},xt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:nn,mimeTypes:ir,extensions:sr,parse:ln,tests:[n=>Boolean(pt(new DataView(n)))],options:cr};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 or=n=>n&&typeof n=="object";async function pn(n,t,e={}){return await ut(n,t,e)}async function ut(n,t,e){return Array.isArray(n)?await fr(n,t,e):or(n)?await ar(n,t,e):await t(n,e)}async function ar(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 fr(n,t,e={}){let r=n.map(s=>ut(s,t,e));return await Promise.all(r)}async function xn(n,t,e){return await pn(n,r=>kt(r,t,e))}async function kt(n,t,e){let s=await(await fetch(n,e.fetch)).arrayBuffer();return await t(s,e)}async function J(n,t={}){let e=await hr(n,t);return await xn(e,xt.parse,t)}async function hr(n,t,e={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await lr(n,r,t,e):mt(n,t,e)}async function lr(n,t,e,r){let s=[];if(t==="auto"){let i=mt(n,e,{...r,lod:0}),c=await kt(i,xt.parse,e),{width:o,height:a}=Pt(c);t=pr({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 pr(n){return 1+Math.floor(Math.log2(Math.max(n.width,n.height)))}function Mn(n,t){let e=new zt.AsyncTexture(n,{id:"brdfLUT",sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"},data:J(t.brdfLutUrl)}),r=mn(n,{id:"DiffuseEnvSampler",getTextureForFace:i=>J(t.getTexUrl("diffuse",i,0)),sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}}),s=mn(n,{id:"SpecularEnvSampler",getTextureForFace:i=>{let c=[];for(let o=0;o<=t.specularMipLevels-1;o++)c.push(J(t.getTexUrl("specular",i,o)));return c},sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}});return{brdfLutTexture:e,diffuseEnvSampler:r,specularEnvSampler:s}}var xr=[0,1,2,3,4,5];function mn(n,{id:t,getTextureForFace:e,sampler:r}){let s={};return xr.forEach(i=>{s[String(i)]=e(i)}),new zt.AsyncTexture(n,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var H=C(at(),1);var Ks=1/Math.PI*180,Qs=1/180*Math.PI,mr={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...mr}};var R=globalThis.mathgl.config;function dn(n,{precision:t=R.precision}={}){return n=Mr(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=R.EPSILON;e&&(R.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)<=R.EPSILON*Math.max(1,Math.abs(n),Math.abs(t)):!1}finally{R.EPSILON=r}}function Mr(n){return Math.round(n/R.EPSILON)*R.EPSILON}var U=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(R)}formatString(t){let e="";for(let r=0;r<this.ELEMENTS;++r)e+=(r>0?", ":"")+dn(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(R.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 dr(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 w(n){if(!Number.isFinite(n))throw new Error(`Invalid number ${JSON.stringify(n)}`);return n}function $(n,t,e=""){if(R.debug&&!dr(n,t))throw new Error(`math.gl: ${e} some fields set to invalid numbers'`);return n}function qt(n,t){if(!n)throw new Error(`math.gl assertion ${t}`)}var Mt=class extends U{get x(){return this[0]}set x(t){this[0]=w(t)}get y(){return this[1]}set y(t){this[1]=w(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 w(e)}dot(t){let e=0;for(let r=0;r<this.ELEMENTS;++r)e+=this[r]*t[r];return w(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 qt(t>=0&&t<this.ELEMENTS,"index is out of range"),w(this[t])}setComponent(t,e){return qt(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 L=typeof Float32Array<"u"?Float32Array:Array;var ai=Math.PI/180;function gr(){let n=new L(2);return L!=Float32Array&&(n[0]=0,n[1]=0),n}function An(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 fi=function(){let n=gr();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 Tn(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 En(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 Sn(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 wn(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 Ft(){let n=new L(3);return L!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n}function yr(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 L(3);return r[0]=n,r[1]=t,r[2]=e,r}function On(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 Rn(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 Ln(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,p=i*o-r*f,l=r*a-s*o,x=s*l-i*p,m=i*h-r*l,M=r*p-s*h,d=c*2;return h*=d,p*=d,l*=d,x*=2,m*=2,M*=2,n[0]=o+h+x,n[1]=a+p+m,n[2]=f+l+M,n}var Nn=yr;var pi=function(){let n=Ft();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,W=class extends Mt{static get ZERO(){return yt||(yt=new W(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):(R.debug&&(w(t),w(e),w(r),w(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 R.debug&&(w(t.x),w(t.y),w(t.z),w(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]=w(t)}get w(){return this[3]}set w(t){this[3]=w(t)}transform(t){return gt(this,this,t),this.check()}transformByMatrix3(t){return wn(this,this,t),this.check()}transformByMatrix2(t){return Sn(this,this,t),this.check()}transformByQuaternion(t){return Ln(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var At=class extends U{toString(){let t="[";if(R.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]=w(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 _n(){let n=new L(9);return L!=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 Er(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 In(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 Pn(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],p=t[9],l=t[10],x=t[11],m=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,A=r*a-s*o,T=r*f-i*o,N=s*f-i*a,_=h*M-p*m,I=h*d-l*m,P=h*E-x*m,v=p*d-l*M,u=p*E-x*M,k=l*E-x*d,S=O*k-g*u+y*v+A*P-T*I+N*_;return S?(S=1/S,n[0]=(o*k-a*u+f*v)*S,n[1]=(s*u-r*k-i*v)*S,n[2]=(M*N-d*T+E*A)*S,n[3]=(l*T-p*N-x*A)*S,n[4]=(a*P-c*k-f*I)*S,n[5]=(e*k-s*P+i*I)*S,n[6]=(d*y-m*N-E*g)*S,n[7]=(h*N-l*y+x*g)*S,n[8]=(c*u-o*P+f*_)*S,n[9]=(r*P-e*u-i*_)*S,n[10]=(m*T-M*y+E*O)*S,n[11]=(p*y-h*T-x*O)*S,n[12]=(o*I-c*v-a*_)*S,n[13]=(e*v-r*I+s*_)*S,n[14]=(M*g-m*A-d*O)*S,n[15]=(h*A-p*g+l*O)*S,n):null}function vn(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],p=n[10],l=n[11],x=n[12],m=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*m-h*x,A=f*M-p*x,T=h*M-p*m,N=t*T-e*A+r*y,_=i*T-c*A+o*y,I=f*g-h*O+p*E,P=x*g-m*O+M*E;return a*N-s*_+d*I-l*P}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],p=t[8],l=t[9],x=t[10],m=t[11],M=t[12],d=t[13],E=t[14],O=t[15],g=e[0],y=e[1],A=e[2],T=e[3];return n[0]=g*r+y*o+A*p+T*M,n[1]=g*s+y*a+A*l+T*d,n[2]=g*i+y*f+A*x+T*E,n[3]=g*c+y*h+A*m+T*O,g=e[4],y=e[5],A=e[6],T=e[7],n[4]=g*r+y*o+A*p+T*M,n[5]=g*s+y*a+A*l+T*d,n[6]=g*i+y*f+A*x+T*E,n[7]=g*c+y*h+A*m+T*O,g=e[8],y=e[9],A=e[10],T=e[11],n[8]=g*r+y*o+A*p+T*M,n[9]=g*s+y*a+A*l+T*d,n[10]=g*i+y*f+A*x+T*E,n[11]=g*c+y*h+A*m+T*O,g=e[12],y=e[13],A=e[14],T=e[15],n[12]=g*r+y*o+A*p+T*M,n[13]=g*s+y*a+A*l+T*d,n[14]=g*i+y*f+A*x+T*E,n[15]=g*c+y*h+A*m+T*O,n}function un(n,t,e){let r=e[0],s=e[1],i=e[2],c,o,a,f,h,p,l,x,m,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],p=t[5],l=t[6],x=t[7],m=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]=p,n[6]=l,n[7]=x,n[8]=m,n[9]=M,n[10]=d,n[11]=E,n[12]=c*r+h*s+m*i+t[12],n[13]=o*r+p*s+M*i+t[13],n[14]=a*r+l*s+d*i+t[14],n[15]=f*r+x*s+E*i+t[15]),n}function kn(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 zn(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,p,l,x,m,M,d,E,O,g,y,A,T,N,_,I,P,v,u,k,S,X;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,p=t[0],l=t[1],x=t[2],m=t[3],M=t[4],d=t[5],E=t[6],O=t[7],g=t[8],y=t[9],A=t[10],T=t[11],N=s*s*h+a,_=i*s*h+c*f,I=c*s*h-i*f,P=s*i*h-c*f,v=i*i*h+a,u=c*i*h+s*f,k=s*c*h+i*f,S=i*c*h-s*f,X=c*c*h+a,n[0]=p*N+M*_+g*I,n[1]=l*N+d*_+y*I,n[2]=x*N+E*_+A*I,n[3]=m*N+O*_+T*I,n[4]=p*P+M*v+g*u,n[5]=l*P+d*v+y*u,n[6]=x*P+E*v+A*u,n[7]=m*P+O*v+T*u,n[8]=p*k+M*S+g*X,n[9]=l*k+d*S+y*X,n[10]=x*k+E*S+A*X,n[11]=m*k+O*S+T*X,t!==n&&(n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15]),n)}function bn(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],p=t[10],l=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+p*r,n[7]=a*s+l*r,n[8]=f*s-i*r,n[9]=h*s-c*r,n[10]=p*s-o*r,n[11]=l*s-a*r,n}function qn(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],p=t[10],l=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-p*r,n[3]=a*s-l*r,n[8]=i*r+f*s,n[9]=c*r+h*s,n[10]=o*r+p*s,n[11]=a*r+l*s,n}function Fn(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],p=t[6],l=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+p*r,n[3]=a*s+l*r,n[4]=f*s-i*r,n[5]=h*s-c*r,n[6]=p*s-o*r,n[7]=l*s-a*r,n}function Bn(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,p=r*o,l=s*c,x=s*o,m=s*a,M=i*c,d=i*o,E=i*a;return n[0]=1-p-m,n[1]=h+E,n[2]=l-d,n[3]=0,n[4]=h-E,n[5]=1-f-m,n[6]=x+M,n[7]=0,n[8]=l+d,n[9]=x-M,n[10]=1-f-p,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}function Cn(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 Sr(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 Un=Sr;function wr(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 Vn=wr;function Dn(n,t,e,r){let s,i,c,o,a,f,h,p,l,x,m=t[0],M=t[1],d=t[2],E=r[0],O=r[1],g=r[2],y=e[0],A=e[1],T=e[2];return Math.abs(m-y)<1e-6&&Math.abs(M-A)<1e-6&&Math.abs(d-T)<1e-6?Er(n):(p=m-y,l=M-A,x=d-T,s=1/Math.sqrt(p*p+l*l+x*x),p*=s,l*=s,x*=s,i=O*x-g*l,c=g*p-E*x,o=E*l-O*p,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=l*o-x*c,f=x*i-p*o,h=p*c-l*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]=p,n[3]=0,n[4]=c,n[5]=f,n[6]=l,n[7]=0,n[8]=o,n[9]=h,n[10]=x,n[11]=0,n[12]=-(i*m+c*M+o*d),n[13]=-(a*m+f*M+h*d),n[14]=-(p*m+l*M+x*d),n[15]=1,n)}function Or(){let n=new L(4);return L!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0,n[3]=0),n}function Yn(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 $n(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 Wn(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 Gn(n){let t=n[0],e=n[1],r=n[2],s=n[3];return t*t+e*e+r*r+s*s}function Hn(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 Xn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function jn(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 Qn(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,p=f*s+a*r-c*i,l=f*i+c*s-o*r,x=-c*r-o*s-a*i;return n[0]=h*f+x*-c+p*-a-l*-o,n[1]=p*f+x*-o+l*-c-h*-a,n[2]=l*f+x*-a+h*-o-p*-c,n[3]=t[3],n}var Oi=function(){let n=Or();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 Lr=45*Math.PI/180,Nr=1,Ut=.1,Vt=500,_r=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),B=class extends At{static get IDENTITY(){return Pr()}static get ZERO(){return Ir()}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,p,l,x,m,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]=p,this[11]=l,this[12]=x,this[13]=m,this[14]=M,this[15]=d,this.check()}setRowMajor(t,e,r,s,i,c,o,a,f,h,p,l,x,m,M,d){return this[0]=t,this[1]=i,this[2]=f,this[3]=x,this[4]=e,this[5]=c,this[6]=h,this[7]=m,this[8]=r,this[9]=o,this[10]=p,this[11]=M,this[12]=s,this[13]=a,this[14]=l,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(_r)}fromObject(t){return this.check()}fromQuaternion(t){return Bn(this,t),this.check()}frustum(t){let{left:e,right:r,bottom:s,top:i,near:c=Ut,far:o=Vt}=t;return o===1/0?vr(this,e,r,s,i,c):Cn(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 Dn(this,e,r,s),this.check()}ortho(t){let{left:e,right:r,bottom:s,top:i,near:c=Ut,far:o=Vt}=t;return Vn(this,e,r,s,i,c,o),this.check()}orthographic(t){let{fovy:e=Lr,aspect:r=Nr,focalDistance:s=1,near:i=Ut,far:c=Vt}=t;Zn(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 Zn(e),Un(this,e,r,s,i),this.check()}determinant(){return vn(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 In(this,this),this.check()}invert(){return Pn(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 bn(this,this,t),this.check()}rotateY(t){return qn(this,this,t),this.check()}rotateZ(t){return Fn(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,e){return zn(this,this,t,e),this.check()}scale(t){return kn(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return un(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=An(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=Tn(e||[-0,-0],t,this);break;case 3:r=En(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])}},Tt,Et;function Ir(){return Tt||(Tt=new B([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(Tt)),Tt}function Pr(){return Et||(Et=new B,Object.freeze(Et)),Et}function Zn(n){if(n>Math.PI*2)throw Error("expected radians")}function vr(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,p=-1,l=-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]=p,n[12]=0,n[13]=0,n[14]=l,n[15]=0,n}function Jn(){let n=new L(4);return L!=Float32Array&&(n[0]=0,n[1]=0,n[2]=0),n[3]=1,n}function te(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 ne(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 ee(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 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+s*o,n[1]=s*a-r*o,n[2]=i*a+c*o,n[3]=c*a-i*o,n}function se(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 nt(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],p=e[3],l,x,m,M,d;return l=s*a+i*f+c*h+o*p,l<0&&(l=-l,a=-a,f=-f,h=-h,p=-p),1-l>1e-6?(x=Math.acos(l),d=Math.sin(x),m=Math.sin((1-r)*x)/d,M=Math.sin(r*x)/d):(m=1-r,M=r),n[0]=m*s+M*a,n[1]=m*i+M*f,n[2]=m*c+M*h,n[3]=m*o+M*p,n}function ie(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 ce(n,t){return n[0]=-t[0],n[1]=-t[1],n[2]=-t[2],n[3]=t[3],n}function Wt(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 oe=Yn;var ae=$n,fe=Xn,he=jn,le=Wn;var pe=Gn;var xe=Hn;var me=function(){let n=Ft(),t=Bt(1,0,0),e=Bt(0,1,0);return function(r,s,i){let c=Rn(s,i);return c<-.999999?(dt(n,t,s),Nn(n)<1e-6&&dt(n,e,s),On(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,xe(r,r))}}(),Bi=function(){let n=Jn(),t=Jn();return function(e,r,s,i,c,o){return nt(n,r,c,o),nt(t,s,i,o),nt(e,n,t,2*o*(1-o)),e}}(),Ci=function(){let n=_n();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],xe(t,Wt(t,n))}}();var ur=[0,0,0,1],et=class extends U{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 Wt(this,t),this.check()}fromAxisRotation(t,e){return Yt(this,t,e),this.check()}identity(){return te(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]=w(t)}get y(){return this[1]}set y(t){this[1]=w(t)}get z(){return this[2]}set z(t){this[2]=w(t)}get w(){return this[3]}set w(t){this[3]=w(t)}len(){return le(this)}lengthSquared(){return pe(this)}dot(t){return fe(this,t)}rotationTo(t,e){return me(this,t,e),this.check()}add(t){return oe(this,this,t),this.check()}calculateW(){return se(this,this),this.check()}conjugate(){return ce(this,this),this.check()}invert(){return ie(this,this),this.check()}lerp(t,e,r){return r===void 0?this.lerp(this,t,e):(he(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 ne(this,this,t),this.check()}rotateY(t){return ee(this,this,t),this.check()}rotateZ(t){return re(this,this,t),this.check()}scale(t){return ae(this,this,t),this.check()}slerp(t,e,r){let s,i,c;switch(arguments.length){case 1:({start:s=ur,target:i,ratio:c}=t);break;case 2:s=this,i=t,c=e;break;default:s=t,i=e,c=r}return nt(this,s,i,c),this.check()}transformVector4(t,e=new W){return Qn(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 Ht=C(j(),1);var kr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},zr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Xt=class{name;startTime=0;playing=!0;speed=1;channels=[];constructor(t){Object.assign(this,t)}animate(t){if(!this.playing)return;let r=(t/1e3-this.startTime)*this.speed;this.channels.forEach(({sampler:s,target:i,path:c})=>{Ur(r,s,i,c),qr(i,i._node)})}},G=class{animations;constructor(t){this.animations=t.animations.map((e,r)=>{let s=e.name||`Animation-${r}`,i=e.samplers.map(({input:o,interpolation:a="LINEAR",output:f})=>({input:Me(t.accessors[o]),interpolation:a,output:Me(t.accessors[f])})),c=e.channels.map(({sampler:o,target:a})=>({sampler:i[o],target:t.nodes[a.node],path:a.path}));return new Xt({name:s,channels:c})})}animate(t){this.setTime(t)}setTime(t){this.animations.forEach(e=>e.animate(t))}getAnimations(){return this.animations}};function Me(n){if(!n._animation){let t=zr[n.componentType],e=kr[n.type],r=e*n.count,{buffer:s,byteOffset:i}=n.bufferView.data,c=new t(s,i+(n.byteOffset||0),r);if(e===1)n._animation=Array.from(c);else{let o=[];for(let a=0;a<c.length;a+=e)o.push(Array.from(c.slice(a,a+e)));n._animation=o}}return n._animation}var br=new B;function qr(n,t){if(t.matrix.identity(),n.translation&&t.matrix.translate(n.translation),n.rotation){let e=br.fromQuaternion(n.rotation);t.matrix.multiplyRight(e)}n.scale&&t.matrix.scale(n.scale)}var Gt=new et;function Fr(n,t,e,r,s){if(t==="rotation"){Gt.slerp({start:e,target:r,ratio:s});for(let i=0;i<Gt.length;i++)n[t][i]=Gt[i]}else for(let i=0;i<e.length;i++)n[t][i]=s*r[i]+(1-s)*e[i]}function Br(n,t,{p0:e,outTangent0:r,inTangent1:s,p1:i,tDiff:c,ratio:o}){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 Cr(n,t,e){for(let r=0;r<e.length;r++)n[t][r]=e[r]}function Ur(n,{input:t,interpolation:e,output:r},s,i){let c=t[t.length-1],o=n%c,a=t.findIndex(l=>l>=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:Ht.log.warn(`Bad animation path ${i}`)()}let h=t[f],p=t[a];switch(e){case"STEP":Cr(s,i,r[f]);break;case"LINEAR":if(p>h){let l=(o-h)/(p-h);Fr(s,i,r[f],r[a],l)}break;case"CUBICSPLINE":if(p>h){let l=(o-h)/(p-h),x=p-h,m=r[3*f+1],M=r[3*f+2],d=r[3*a+0],E=r[3*a+1];Br(s,i,{p0:m,outTangent0:M,inTangent1:d,p1:E,tDiff:x,ratio:l})}break;default:Ht.log.warn(`Interpolation ${e} not supported`)();break}}var ye=C(j(),1),Ae=C(ge(),1),St=C(at(),1);var Vr=`
|
|
8
8
|
layout(0) positions: vec4; // in vec4 POSITION;
|
|
9
9
|
|
|
10
10
|
#ifdef HAS_NORMALS
|
|
@@ -95,6 +95,6 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
95
95
|
vec3 pos = pbr_vPosition;
|
|
96
96
|
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
97
97
|
}
|
|
98
|
-
`;function Te(n,t){let{id:e,geometry:r,material:s,vertexCount:i,materialOptions:c,modelOptions:o}=t,a=ot(n,s,r.attributes,c);ye.log.info(4,"createGLTFModel defines: ",a.defines)();let f=[],h={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},p={id:e,source:Vr,vs:Dr,fs:Yr,geometry:r,topology:r.topology,vertexCount:i,modules:[Ae.pbrMaterial],...o,defines:{...a.defines,...o.defines},parameters:{...h,...a.parameters,...o.parameters}},l=new St.Model(n,p),{camera:x,...m}={...a.uniforms,...o.uniforms,...a.bindings,...o.bindings};return l.shaderInputs.setProps({pbrMaterial:m,pbrProjection:{camera:x}}),new St.ModelNode({managedResources:f,model:l})}var D;(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"})(D||(D={}));function Ee(n){switch(n){case D.POINTS:return"point-list";case D.LINES:return"line-list";case D.LINE_STRIP:return"line-strip";case D.TRIANGLES:return"triangle-list";case D.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(n))}}var $r={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:null,lights:!0,useTangents:!1},wt=class{device;options;gltf;constructor(t,e={}){this.device=t,this.options={...$r,...e}}instantiate(t){return this.gltf=jt(t),(
|
|
98
|
+
`;function Te(n,t){let{id:e,geometry:r,material:s,vertexCount:i,materialOptions:c,modelOptions:o}=t,a=ot(n,s,r.attributes,c);ye.log.info(4,"createGLTFModel defines: ",a.defines)();let f=[],h={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},p={id:e,source:Vr,vs:Dr,fs:Yr,geometry:r,topology:r.topology,vertexCount:i,modules:[Ae.pbrMaterial],...o,defines:{...a.defines,...o.defines},parameters:{...h,...a.parameters,...o.parameters}},l=new St.Model(n,p),{camera:x,...m}={...a.uniforms,...o.uniforms,...a.bindings,...o.bindings};return l.shaderInputs.setProps({pbrMaterial:m,pbrProjection:{camera:x}}),new St.ModelNode({managedResources:f,model:l})}var D;(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"})(D||(D={}));function Ee(n){switch(n){case D.POINTS:return"point-list";case D.LINES:return"line-list";case D.LINE_STRIP:return"line-strip";case D.TRIANGLES:return"triangle-list";case D.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(n))}}var $r={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:null,lights:!0,useTangents:!1},wt=class{device;options;gltf;constructor(t,e={}){this.device=t,this.options={...$r,...e}}instantiate(t){return this.gltf=jt(t),(this.gltf.scenes||[]).map(r=>this.createScene(r))}createAnimator(){return Array.isArray(this.gltf.animations)?new G(this.gltf):null}createScene(t){let r=(t.nodes||[]).map(i=>this.createNode(i));return new H.GroupNode({id:t.name||t.id,children:r})}createNode(t){if(!t._node){let s=(t.children||[]).map(c=>this.createNode(c));t.mesh&&s.push(this.createMesh(t.mesh));let i=new H.GroupNode({id:t.name||t.id,children:s});if(t.matrix)i.setMatrix(t.matrix);else{if(i.matrix.identity(),t.translation&&i.matrix.translate(t.translation),t.rotation){let c=new B().fromQuaternion(t.rotation);i.matrix.multiplyRight(c)}t.scale&&i.matrix.scale(t.scale)}t._node=i}let e=this.gltf.nodes.find(r=>r.id===t.id);return e._node=t._node,t._node}createMesh(t){if(!t._mesh){let r=(t.primitives||[]).map((i,c)=>this.createPrimitive(i,c,t)),s=new H.GroupNode({id:t.name||t.id,children:r});t._mesh=s}return t._mesh}createPrimitive(t,e,r){let s=t.name||`${r.name||r.id}-primitive-${e}`,i=Ee(t.mode||4),c=t.indices?t.indices.count:this.getVertexCount(t.attributes),o=Te(this.device,{id:s,geometry:this.createGeometry(s,t,i),material:t.material,materialOptions:this.options,modelOptions:this.options.modelOptions,vertexCount:c});return o.bounds=[t.attributes.POSITION.min,t.attributes.POSITION.max],o}getVertexCount(t){throw new Error("getVertexCount not implemented")}createGeometry(t,e,r){let s={};for(let[i,c]of Object.entries(e.attributes)){let{components:o,size:a,value:f}=c;s[i]={size:a??o,value:f}}return new H.Geometry({id:t,topology:r,indices:e.indices.value,attributes:s})}createBuffer(t,e){t.bufferView||(t.bufferView={});let{bufferView:r}=t;return r.lumaBuffers||(r.lumaBuffers={}),r.lumaBuffers[e]||(r.lumaBuffers[e]=this.device.createBuffer({id:`from-${r.id}`,data:r.data||t.value})),r.lumaBuffers[e]}createSampler(t){return t}needsPOT(){return!1}};function jt(n){if(ArrayBuffer.isView(n)||n instanceof ArrayBuffer)return n;if(Array.isArray(n))return n.map(jt);if(n&&typeof n=="object"){let t={};for(let e in n)t[e]=jt(n[e]);return t}return n}function Se(n,t,e){let r=new wt(n,e),s=r.instantiate(t),i=r.createAnimator();return{scenes:s,animator:i}}return Ie(rt);})();
|
|
99
99
|
return __exports__;
|
|
100
100
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf-instantiator.d.ts","sourceRoot":"","sources":["../../src/gltf/gltf-instantiator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAC,QAAQ,EAAqB,SAAS,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG9F,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,OAAO,KAAK,EAAC,cAAc,EAAC,kCAA+B;AAG3D,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B,CAAC,EAAE,cAAc,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAUF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,GAAG,CAAC;gBAEE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B;IAKjE,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,SAAS,EAAE;IAMnC,cAAc,IAAI,YAAY;IAQ9B,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS;IAUtC,UAAU,CAAC,QAAQ,KAAA;
|
|
1
|
+
{"version":3,"file":"gltf-instantiator.d.ts","sourceRoot":"","sources":["../../src/gltf/gltf-instantiator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAC,QAAQ,EAAqB,SAAS,EAAE,SAAS,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG9F,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,OAAO,KAAK,EAAC,cAAc,EAAC,kCAA+B;AAG3D,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B,CAAC,EAAE,cAAc,CAAC;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAUF;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,GAAG,CAAC;gBAEE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B;IAKjE,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,SAAS,EAAE;IAMnC,cAAc,IAAI,YAAY;IAQ9B,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS;IAUtC,UAAU,CAAC,QAAQ,KAAA;IA2CnB,UAAU,CAAC,QAAQ,KAAA,GAAG,SAAS;IAiB/B,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,KAAA,GAAG,SAAS;IA0BnE,cAAc,CAAC,UAAU,EAAE,GAAG;IAI9B,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,GAAG,QAAQ;IAgBrF,YAAY,CAAC,SAAS,KAAA,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAuB9C,aAAa,CAAC,WAAW,KAAA;IAMzB,QAAQ,IAAI,OAAO;CAOpB"}
|
|
@@ -27,7 +27,7 @@ export class GLTFInstantiator {
|
|
|
27
27
|
}
|
|
28
28
|
instantiate(gltf) {
|
|
29
29
|
this.gltf = deepCopy(gltf);
|
|
30
|
-
const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));
|
|
30
|
+
const scenes = (this.gltf.scenes || []).map(scene => this.createScene(scene));
|
|
31
31
|
return scenes;
|
|
32
32
|
}
|
|
33
33
|
createAnimator() {
|
|
@@ -75,6 +75,9 @@ export class GLTFInstantiator {
|
|
|
75
75
|
}
|
|
76
76
|
gltfNode._node = node;
|
|
77
77
|
}
|
|
78
|
+
// Copy _node so that gltf-animator can access
|
|
79
|
+
const topLevelNode = this.gltf.nodes.find(node => node.id === gltfNode.id);
|
|
80
|
+
topLevelNode._node = gltfNode._node;
|
|
78
81
|
return gltfNode._node;
|
|
79
82
|
}
|
|
80
83
|
createMesh(gltfMesh) {
|
package/dist/index.cjs
CHANGED
|
@@ -605,7 +605,7 @@ var GLTFInstantiator = class {
|
|
|
605
605
|
}
|
|
606
606
|
instantiate(gltf) {
|
|
607
607
|
this.gltf = deepCopy(gltf);
|
|
608
|
-
const scenes = (gltf.scenes || []).map((scene) => this.createScene(scene));
|
|
608
|
+
const scenes = (this.gltf.scenes || []).map((scene) => this.createScene(scene));
|
|
609
609
|
return scenes;
|
|
610
610
|
}
|
|
611
611
|
createAnimator() {
|
|
@@ -651,6 +651,8 @@ var GLTFInstantiator = class {
|
|
|
651
651
|
}
|
|
652
652
|
gltfNode._node = node;
|
|
653
653
|
}
|
|
654
|
+
const topLevelNode = this.gltf.nodes.find((node) => node.id === gltfNode.id);
|
|
655
|
+
topLevelNode._node = gltfNode._node;
|
|
654
656
|
return gltfNode._node;
|
|
655
657
|
}
|
|
656
658
|
createMesh(gltfMesh) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["index.js", "pbr/parse-pbr-material.js", "pbr/pbr-environment.js", "gltf/gltf-instantiator.js", "gltf/gltf-animator.js", "gltf/create-gltf-model.js", "gltf/gl-utils.js", "gltf/create-gltf-objects.js"],
|
|
4
|
-
"sourcesContent": ["// luma.gl, MIT license\nexport { parsePBRMaterial } from \"./pbr/parse-pbr-material.js\";\nexport { loadPBREnvironment } from \"./pbr/pbr-environment.js\";\n// glTF Scenegraph Instantiator\nexport { createScenegraphsFromGLTF } from \"./gltf/create-gltf-objects.js\";\nexport { GLTFAnimator } from \"./gltf/gltf-animator.js\";\n", "import { log } from '@luma.gl/core';\n// NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from\n// `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid\n// conflicts with the `babel-plugin-inline-webgl-constants` plugin.\n// eslint-disable-next-line no-shadow\nvar GLEnum;\n(function (GLEnum) {\n GLEnum[GLEnum[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n GLEnum[GLEnum[\"ONE\"] = 1] = \"ONE\";\n GLEnum[GLEnum[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n GLEnum[GLEnum[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n GLEnum[GLEnum[\"LINEAR\"] = 9729] = \"LINEAR\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n})(GLEnum || (GLEnum = {}));\n/**\n * Parses a GLTF material definition into uniforms and parameters for the PBR shader module\n */\nexport function parsePBRMaterial(device, material, attributes, options) {\n const parsedMaterial = {\n defines: {\n // TODO: Use EXT_sRGB if available (Standard in WebGL 2.0)\n MANUAL_SRGB: 1,\n SRGB_FAST_APPROXIMATION: 1\n },\n bindings: {},\n uniforms: {\n // TODO: find better values?\n camera: [0, 0, 0], // Model should override\n metallicRoughnessValues: [1, 1] // Default is 1 and 1\n },\n parameters: {},\n glParameters: {},\n generatedTextures: []\n };\n // TODO - always available\n parsedMaterial.defines.USE_TEX_LOD = 1;\n const { imageBasedLightingEnvironment } = options;\n if (imageBasedLightingEnvironment) {\n parsedMaterial.bindings.pbr_diffuseEnvSampler =\n imageBasedLightingEnvironment.diffuseEnvSampler.texture;\n parsedMaterial.bindings.pbr_specularEnvSampler =\n imageBasedLightingEnvironment.specularEnvSampler.texture;\n parsedMaterial.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;\n parsedMaterial.uniforms.scaleIBLAmbient = [1, 1];\n }\n if (options?.pbrDebug) {\n parsedMaterial.defines.PBR_DEBUG = 1;\n // Override final color for reference app visualization of various parameters in the lighting equation.\n parsedMaterial.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];\n parsedMaterial.uniforms.scaleFGDSpec = [0, 0, 0, 0];\n }\n if (attributes.NORMAL)\n parsedMaterial.defines.HAS_NORMALS = 1;\n if (attributes.TANGENT && options?.useTangents)\n parsedMaterial.defines.HAS_TANGENTS = 1;\n if (attributes.TEXCOORD_0)\n parsedMaterial.defines.HAS_UV = 1;\n if (options?.imageBasedLightingEnvironment)\n parsedMaterial.defines.USE_IBL = 1;\n if (options?.lights)\n parsedMaterial.defines.USE_LIGHTS = 1;\n if (material) {\n parseMaterial(device, material, parsedMaterial);\n }\n return parsedMaterial;\n}\n/** Parse GLTF material record */\nfunction parseMaterial(device, material, parsedMaterial) {\n parsedMaterial.uniforms.unlit = Boolean(material.unlit);\n if (material.pbrMetallicRoughness) {\n parsePbrMetallicRoughness(device, material.pbrMetallicRoughness, parsedMaterial);\n }\n if (material.normalTexture) {\n addTexture(device, material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP', parsedMaterial);\n const { scale = 1 } = material.normalTexture;\n parsedMaterial.uniforms.normalScale = scale;\n }\n if (material.occlusionTexture) {\n addTexture(device, material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP', parsedMaterial);\n const { strength = 1 } = material.occlusionTexture;\n parsedMaterial.uniforms.occlusionStrength = strength;\n }\n if (material.emissiveTexture) {\n addTexture(device, material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP', parsedMaterial);\n parsedMaterial.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n switch (material.alphaMode) {\n case 'MASK':\n const { alphaCutoff = 0.5 } = material;\n parsedMaterial.defines.ALPHA_CUTOFF = 1;\n parsedMaterial.uniforms.alphaCutoff = alphaCutoff;\n break;\n case 'BLEND':\n log.warn('glTF BLEND alphaMode might not work well because it requires mesh sorting')();\n // WebGPU style parameters\n parsedMaterial.parameters.blendColorOperation = 'add';\n parsedMaterial.parameters.blendColorSrcFactor = 'src-alpha';\n parsedMaterial.parameters.blendColorDstFactor = 'one-minus-src-alpha';\n parsedMaterial.parameters.blendAlphaOperation = 'add';\n parsedMaterial.parameters.blendAlphaSrcFactor = 'one';\n parsedMaterial.parameters.blendAlphaDstFactor = 'one-minus-src-alpha';\n // GL parameters\n parsedMaterial.glParameters.blend = true;\n parsedMaterial.glParameters.blendEquation = GLEnum.FUNC_ADD;\n parsedMaterial.glParameters.blendFunc = [\n GLEnum.SRC_ALPHA,\n GLEnum.ONE_MINUS_SRC_ALPHA,\n GLEnum.ONE,\n GLEnum.ONE_MINUS_SRC_ALPHA\n ];\n break;\n }\n}\n/** Parse GLTF material sub record */\nfunction parsePbrMetallicRoughness(device, pbrMetallicRoughness, parsedMaterial) {\n if (pbrMetallicRoughness.baseColorTexture) {\n addTexture(device, pbrMetallicRoughness.baseColorTexture, 'pbr_baseColorSampler', 'HAS_BASECOLORMAP', parsedMaterial);\n }\n parsedMaterial.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n addTexture(device, pbrMetallicRoughness.metallicRoughnessTexture, 'pbr_metallicRoughnessSampler', 'HAS_METALROUGHNESSMAP', parsedMaterial);\n }\n const { metallicFactor = 1, roughnessFactor = 1 } = pbrMetallicRoughness;\n parsedMaterial.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];\n}\n/** Create a texture from a glTF texture/sampler/image combo and add it to bindings */\nfunction addTexture(device, gltfTexture, uniformName, define = null, parsedMaterial) {\n const parameters = gltfTexture?.texture?.sampler?.parameters || {};\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [GLEnum.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GLEnum.LINEAR_MIPMAP_NEAREST : GLEnum.LINEAR\n };\n }\n else {\n // Texture2D accepts a promise that returns an image as data (Async Textures)\n textureOptions = { data: image };\n }\n const texture = device.createTexture({\n id: gltfTexture.uniformName || gltfTexture.id,\n parameters: {\n ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [GLEnum.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n parsedMaterial.bindings[uniformName] = texture;\n if (define)\n parsedMaterial.defines[define] = 1;\n parsedMaterial.generatedTextures.push(texture);\n}\n/*\n/**\n * Parses a GLTF material definition into uniforms and parameters for the PBR shader module\n *\nexport class PBRMaterialParser {\n readonly device: Device;\n\n readonly defines: Record<string, number | boolean>;\n readonly bindings: Record<string, Binding>;\n readonly uniforms: Record<string, any>;\n readonly parameters: Record<string, any>;\n\n /** Hold on to generated textures, we destroy them in the destroy method *\n readonly generatedTextures: Texture[];\n\n constructor(device: Device, props: PBRMaterialParserProps) {\n const {attributes, material, pbrDebug, imageBasedLightingEnvironment, lights, useTangents} =\n props;\n this.device = device;\n\n this.defines = {\n // TODO: Use EXT_sRGB if available (Standard in WebGL 2.0)\n MANUAL_SRGB: 1,\n SRGB_FAST_APPROXIMATION: 1\n };\n\n if (this.device.features.has('glsl-texture-lod')) {\n this.defines.USE_TEX_LOD = 1;\n }\n\n this.uniforms = {\n // TODO: find better values?\n camera: [0, 0, 0], // Model should override\n\n metallicRoughnessValues: [1, 1] // Default is 1 and 1\n };\n\n this.bindings = {};\n\n this.parameters = {};\n this.generatedTextures = [];\n\n if (imageBasedLightingEnvironment) {\n this.bindings.pbr_diffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();\n this.bindings.pbr_specularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();\n this.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.getBrdfTexture();\n this.uniforms.scaleIBLAmbient = [1, 1];\n }\n\n if (pbrDebug) {\n // Override final color for reference app visualization\n // of various parameters in the lighting equation.\n this.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];\n this.uniforms.scaleFGDSpec = [0, 0, 0, 0];\n }\n\n this.defineIfPresent(attributes.NORMAL, 'HAS_NORMALS');\n this.defineIfPresent(attributes.TANGENT && useTangents, 'HAS_TANGENTS');\n this.defineIfPresent(attributes.TEXCOORD_0, 'HAS_UV');\n\n this.defineIfPresent(imageBasedLightingEnvironment, 'USE_IBL');\n this.defineIfPresent(lights, 'USE_LIGHTS');\n this.defineIfPresent(pbrDebug, 'PBR_DEBUG');\n\n if (material) {\n this.parseMaterial(material);\n }\n }\n\n /**\n * Destroy all generated resources to release memory.\n *\n destroy(): void {\n this.generatedTextures.forEach(texture => texture.destroy());\n }\n\n /** Add a define if the the value is non-nullish *\n defineIfPresent(value: unknown, name: string): void {\n if (value) {\n this.defines[name] = 1;\n }\n }\n\n /** Parse GLTF material record *\n parseMaterial(material) {\n this.uniforms.unlit = Boolean(material.unlit);\n\n if (material.pbrMetallicRoughness) {\n this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);\n }\n if (material.normalTexture) {\n this.addTexture(material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP');\n\n const {scale = 1} = material.normalTexture;\n this.uniforms.normalScale = scale;\n }\n if (material.occlusionTexture) {\n this.addTexture(material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP');\n\n const {strength = 1} = material.occlusionTexture;\n this.uniforms.occlusionStrength = strength;\n }\n if (material.emissiveTexture) {\n this.addTexture(material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP');\n this.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n if (material.alphaMode === 'MASK') {\n const {alphaCutoff = 0.5} = material;\n this.defines.ALPHA_CUTOFF = 1;\n this.uniforms.alphaCutoff = alphaCutoff;\n } else if (material.alphaMode === 'BLEND') {\n log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();\n Object.assign(this.parameters, {\n blend: true,\n blendEquation: GL.FUNC_ADD,\n blendFunc: [GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.ONE, GL.ONE_MINUS_SRC_ALPHA]\n });\n }\n }\n\n /** Parse GLTF material sub record *\n parsePbrMetallicRoughness(pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorTexture) {\n this.addTexture(\n pbrMetallicRoughness.baseColorTexture,\n 'pbr_baseColorSampler',\n 'HAS_BASECOLORMAP'\n );\n }\n this.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n this.addTexture(\n pbrMetallicRoughness.metallicRoughnessTexture,\n 'pbr_metallicRoughnessSampler',\n 'HAS_METALROUGHNESSMAP'\n );\n }\n const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;\n this.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];\n }\n\n /** Create a texture from a glTF texture/sampler/image combo and add it to bindings *\n addTexture(gltfTexture, name, define = null) {\n const parameters = gltfTexture?.texture?.sampler?.parameters || {};\n\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [GL.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR\n };\n } else {\n // Texture2D accepts a promise that returns an image as data (Async Textures)\n textureOptions = {data: image};\n }\n\n const texture: Texture = this.device.createTexture({\n id: gltfTexture.name || gltfTexture.id,\n parameters: {\n ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [GL.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n this.bindings[name] = texture;\n this.defineIfPresent(define, define);\n this.generatedTextures.push(texture);\n }\n}\n*/\n", "// luma.gl, MIT license\nimport { AsyncTexture } from '@luma.gl/engine';\nimport { loadImageTexture } from '@loaders.gl/textures';\n/** Loads textures for PBR environment */\nexport function loadPBREnvironment(device, props) {\n const brdfLutTexture = new AsyncTexture(device, {\n id: 'brdfLUT',\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear',\n maxFilter: 'linear'\n },\n // Texture accepts a promise that returns an image as data (Async Textures)\n data: loadImageTexture(props.brdfLutUrl)\n });\n const diffuseEnvSampler = makeCube(device, {\n id: 'DiffuseEnvSampler',\n getTextureForFace: dir => loadImageTexture(props.getTexUrl('diffuse', dir, 0)),\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear',\n maxFilter: 'linear'\n }\n });\n const specularEnvSampler = makeCube(device, {\n id: 'SpecularEnvSampler',\n getTextureForFace: (dir) => {\n const imageArray = [];\n for (let lod = 0; lod <= props.specularMipLevels - 1; lod++) {\n imageArray.push(loadImageTexture(props.getTexUrl('specular', dir, lod)));\n }\n return imageArray;\n },\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear', // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n maxFilter: 'linear'\n }\n });\n return {\n brdfLutTexture,\n diffuseEnvSampler,\n specularEnvSampler\n };\n}\n// TODO put somewhere common\nconst FACES = [0, 1, 2, 3, 4, 5];\nfunction makeCube(device, { id, getTextureForFace, sampler }) {\n const data = {};\n FACES.forEach(face => {\n data[String(face)] = getTextureForFace(face);\n });\n return new AsyncTexture(device, {\n id,\n dimension: 'cube',\n mipmaps: false,\n sampler,\n // @ts-expect-error\n data\n });\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Geometry, GroupNode } from '@luma.gl/engine';\nimport { Matrix4 } from '@math.gl/core';\nimport { GLTFAnimator } from \"./gltf-animator.js\";\nimport { createGLTFModel } from \"./create-gltf-model.js\";\nimport { convertGLDrawModeToTopology } from \"./gl-utils.js\";\nconst DEFAULT_OPTIONS = {\n modelOptions: {},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n};\n/**\n * GLTF instantiator for luma.gl\n * Walks the parsed and resolved glTF structure and builds a luma.gl scenegraph\n */\nexport class GLTFInstantiator {\n device;\n options;\n gltf;\n constructor(device, options = {}) {\n this.device = device;\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n instantiate(gltf) {\n this.gltf = deepCopy(gltf);\n const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));\n return scenes;\n }\n createAnimator() {\n if (Array.isArray(this.gltf.animations)) {\n return new GLTFAnimator(this.gltf);\n }\n return null;\n }\n createScene(gltfScene) {\n const gltfNodes = gltfScene.nodes || [];\n const nodes = gltfNodes.map(node => this.createNode(node));\n const scene = new GroupNode({\n id: gltfScene.name || gltfScene.id,\n children: nodes\n });\n return scene;\n }\n createNode(gltfNode) {\n if (!gltfNode._node) {\n const gltfChildren = gltfNode.children || [];\n const children = gltfChildren.map(child => this.createNode(child));\n // Node can have children nodes and meshes at the same time\n if (gltfNode.mesh) {\n children.push(this.createMesh(gltfNode.mesh));\n }\n const node = new GroupNode({\n id: gltfNode.name || gltfNode.id,\n children\n });\n if (gltfNode.matrix) {\n node.setMatrix(gltfNode.matrix);\n }\n else {\n node.matrix.identity();\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n if (gltfNode.rotation) {\n const rotationMatrix = new Matrix4().fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n }\n gltfNode._node = node;\n }\n return gltfNode._node;\n }\n createMesh(gltfMesh) {\n // TODO: avoid changing the gltf\n if (!gltfMesh._mesh) {\n const gltfPrimitives = gltfMesh.primitives || [];\n const primitives = gltfPrimitives.map((gltfPrimitive, i) => this.createPrimitive(gltfPrimitive, i, gltfMesh));\n const mesh = new GroupNode({\n id: gltfMesh.name || gltfMesh.id,\n children: primitives\n });\n gltfMesh._mesh = mesh;\n }\n return gltfMesh._mesh;\n }\n createPrimitive(gltfPrimitive, i, gltfMesh) {\n const id = gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${i}`;\n const topology = convertGLDrawModeToTopology(gltfPrimitive.mode || 4);\n const vertexCount = gltfPrimitive.indices\n ? gltfPrimitive.indices.count\n : this.getVertexCount(gltfPrimitive.attributes);\n const modelNode = createGLTFModel(this.device, {\n id,\n geometry: this.createGeometry(id, gltfPrimitive, topology),\n material: gltfPrimitive.material,\n materialOptions: this.options,\n modelOptions: this.options.modelOptions,\n vertexCount\n });\n modelNode.bounds = [\n gltfPrimitive.attributes.POSITION.min,\n gltfPrimitive.attributes.POSITION.max\n ];\n // TODO this holds on to all the CPU side texture and attribute data\n // modelNode.material = gltfPrimitive.material;\n return modelNode;\n }\n getVertexCount(attributes) {\n throw new Error('getVertexCount not implemented');\n }\n createGeometry(id, gltfPrimitive, topology) {\n const attributes = {};\n for (const [attributeName, attribute] of Object.entries(gltfPrimitive.attributes)) {\n const { components, size, value } = attribute;\n attributes[attributeName] = { size: size ?? components, value };\n }\n return new Geometry({\n id,\n topology,\n indices: gltfPrimitive.indices.value,\n attributes\n });\n }\n createBuffer(attribute, usage) {\n if (!attribute.bufferView) {\n // Draco decoded files do not have a bufferView\n attribute.bufferView = {};\n }\n const { bufferView } = attribute;\n if (!bufferView.lumaBuffers) {\n bufferView.lumaBuffers = {};\n }\n if (!bufferView.lumaBuffers[usage]) {\n bufferView.lumaBuffers[usage] = this.device.createBuffer({\n id: `from-${bufferView.id}`,\n // Draco decoded files have attribute.value\n data: bufferView.data || attribute.value\n });\n }\n return bufferView.lumaBuffers[usage];\n }\n // TODO - create sampler in WebGL2\n createSampler(gltfSampler) {\n return gltfSampler;\n }\n // Helper methods (move to GLTFLoader.resolve...?)\n needsPOT() {\n // Has a wrapping mode (either wrapS or wrapT) equal to REPEAT or MIRRORED_REPEAT, or\n // Has a minification filter (minFilter) that uses mipmapping\n // (NEAREST_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR,\n // LINEAR_MIPMAP_NEAREST, or LINEAR_MIPMAP_LINEAR).\n return false;\n }\n}\n/** Deeply copies a JS data structure */\nfunction deepCopy(object) {\n // don't copy binary data\n if (ArrayBuffer.isView(object) || object instanceof ArrayBuffer) {\n return object;\n }\n if (Array.isArray(object)) {\n return object.map(deepCopy);\n }\n if (object && typeof object === 'object') {\n const result = {};\n for (const key in object) {\n result[key] = deepCopy(object[key]);\n }\n return result;\n }\n return object;\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { Matrix4, Quaternion } from '@math.gl/core';\n// TODO: import from loaders.gl?\nexport const ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nexport const ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\nclass GLTFAnimation {\n name;\n startTime = 0;\n playing = true;\n speed = 1;\n channels = [];\n constructor(props) {\n Object.assign(this, props);\n }\n animate(timeMs) {\n if (!this.playing) {\n return;\n }\n const absTime = timeMs / 1000;\n const time = (absTime - this.startTime) * this.speed;\n this.channels.forEach(({ sampler, target, path }) => {\n interpolate(time, sampler, target, path);\n applyTranslationRotationScale(target, target._node);\n });\n }\n}\nexport class GLTFAnimator {\n animations;\n constructor(gltf) {\n this.animations = gltf.animations.map((animation, index) => {\n const name = animation.name || `Animation-${index}`;\n const samplers = animation.samplers.map(({ input, interpolation = 'LINEAR', output }) => ({\n input: accessorToJsArray(gltf.accessors[input]),\n interpolation,\n output: accessorToJsArray(gltf.accessors[output])\n }));\n const channels = animation.channels.map(({ sampler, target }) => ({\n sampler: samplers[sampler],\n target: gltf.nodes[target.node],\n path: target.path\n }));\n return new GLTFAnimation({ name, channels });\n });\n }\n /** @deprecated Use .setTime(). Will be removed (deck.gl is using this) */\n animate(time) {\n this.setTime(time);\n }\n setTime(time) {\n this.animations.forEach(animation => animation.animate(time));\n }\n getAnimations() {\n return this.animations;\n }\n}\n//\nfunction accessorToJsArray(accessor) {\n if (!accessor._animation) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const length = components * accessor.count;\n const { buffer, byteOffset } = accessor.bufferView.data;\n const array = new ArrayType(buffer, byteOffset + (accessor.byteOffset || 0), length);\n if (components === 1) {\n accessor._animation = Array.from(array);\n }\n else {\n // Slice array\n const slicedArray = [];\n for (let i = 0; i < array.length; i += components) {\n slicedArray.push(Array.from(array.slice(i, i + components)));\n }\n accessor._animation = slicedArray;\n }\n }\n return accessor._animation;\n}\n// TODO: share with GLTFInstantiator\nconst helperMatrix = new Matrix4();\nfunction applyTranslationRotationScale(gltfNode, node) {\n node.matrix.identity();\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n if (gltfNode.rotation) {\n const rotationMatrix = helperMatrix.fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n}\nconst quaternion = new Quaternion();\nfunction linearInterpolate(target, path, start, stop, ratio) {\n if (path === 'rotation') {\n // SLERP when path is rotation\n quaternion.slerp({ start, target: stop, ratio });\n for (let i = 0; i < quaternion.length; i++) {\n target[path][i] = quaternion[i];\n }\n }\n else {\n // regular interpolation\n for (let i = 0; i < start.length; i++) {\n target[path][i] = ratio * stop[i] + (1 - ratio) * start[i];\n }\n }\n}\nfunction cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio: t }) {\n // TODO: Quaternion might need normalization\n for (let i = 0; i < target[path].length; i++) {\n const m0 = outTangent0[i] * tDiff;\n const m1 = inTangent1[i] * tDiff;\n target[path][i] =\n (2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] +\n (Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 +\n (-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] +\n (Math.pow(t, 3) - Math.pow(t, 2)) * m1;\n }\n}\nfunction stepInterpolate(target, path, value) {\n for (let i = 0; i < value.length; i++) {\n target[path][i] = value[i];\n }\n}\nfunction interpolate(time, { input, interpolation, output }, target, path) {\n const maxTime = input[input.length - 1];\n const animationTime = time % maxTime;\n const nextIndex = input.findIndex(t => t >= animationTime);\n const previousIndex = Math.max(0, nextIndex - 1);\n if (!Array.isArray(target[path])) {\n switch (path) {\n case 'translation':\n target[path] = [0, 0, 0];\n break;\n case 'rotation':\n target[path] = [0, 0, 0, 1];\n break;\n case 'scale':\n target[path] = [1, 1, 1];\n break;\n default:\n log.warn(`Bad animation path ${path}`)();\n }\n }\n // assert(target[path].length === output[previousIndex].length);\n const previousTime = input[previousIndex];\n const nextTime = input[nextIndex];\n switch (interpolation) {\n case 'STEP':\n stepInterpolate(target, path, output[previousIndex]);\n break;\n case 'LINEAR':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n linearInterpolate(target, path, output[previousIndex], output[nextIndex], ratio);\n }\n break;\n case 'CUBICSPLINE':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n const tDiff = nextTime - previousTime;\n const p0 = output[3 * previousIndex + 1];\n const outTangent0 = output[3 * previousIndex + 2];\n const inTangent1 = output[3 * nextIndex + 0];\n const p1 = output[3 * nextIndex + 1];\n cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio });\n }\n break;\n default:\n log.warn(`Interpolation ${interpolation} not supported`)();\n break;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { pbrMaterial } from '@luma.gl/shadertools';\nimport { Model, ModelNode } from '@luma.gl/engine';\nimport { parsePBRMaterial } from \"../pbr/parse-pbr-material.js\";\nconst SHADER = /* WGSL */ `\nlayout(0) positions: vec4; // in vec4 POSITION;\n\n #ifdef HAS_NORMALS\n in vec4 normals; // in vec4 NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n in vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n // in vec2 TEXCOORD_0;\n in vec2 texCoords;\n #endif\n\n@vertex\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = normals;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = texCoords;\n #endif\n\n pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = u_MVPMatrix * positions;\n }\n\n@fragment\n out vec4 fragmentColor;\n\n void main(void) {\n vec3 pos = pbr_vPosition;\n fragmentColor = pbr_filterColor(vec4(1.0));\n }\n`;\n// TODO rename attributes to POSITION/NORMAL etc\n// See gpu-geometry.ts: getAttributeBuffersFromGeometry()\nconst vs = /* glsl */ `\\\n#version 300 es\n\n // in vec4 POSITION;\n in vec4 positions;\n\n #ifdef HAS_NORMALS\n // in vec4 NORMAL;\n in vec4 normals;\n #endif\n\n #ifdef HAS_TANGENTS\n in vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n // in vec2 TEXCOORD_0;\n in vec2 texCoords;\n #endif\n\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = normals;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = texCoords;\n #endif\n\n pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = pbrProjection.modelViewProjectionMatrix * positions;\n }\n`;\nconst fs = /* glsl */ `\\\n#version 300 es\n out vec4 fragmentColor;\n\n void main(void) {\n vec3 pos = pbr_vPosition;\n fragmentColor = pbr_filterColor(vec4(1.0));\n }\n`;\nexport function createGLTFModel(device, options) {\n const { id, geometry, material, vertexCount, materialOptions, modelOptions } = options;\n const parsedMaterial = parsePBRMaterial(device, material, geometry.attributes, materialOptions);\n log.info(4, 'createGLTFModel defines: ', parsedMaterial.defines)();\n // Calculate managedResources\n // TODO: Implement resource management logic that will\n // not deallocate resources/textures/buffers that are shared\n const managedResources = [];\n // managedResources.push(...parsedMaterial.generatedTextures);\n // managedResources.push(...Object.values(attributes).map((attribute) => attribute.buffer));\n const parameters = {\n depthWriteEnabled: true,\n depthCompare: 'less',\n depthFormat: 'depth24plus',\n cullMode: 'back'\n };\n const modelProps = {\n id,\n source: SHADER,\n vs,\n fs,\n geometry,\n topology: geometry.topology,\n vertexCount,\n modules: [pbrMaterial],\n ...modelOptions,\n defines: { ...parsedMaterial.defines, ...modelOptions.defines },\n parameters: { ...parameters, ...parsedMaterial.parameters, ...modelOptions.parameters }\n };\n const model = new Model(device, modelProps);\n const { camera, ...pbrMaterialProps } = {\n ...parsedMaterial.uniforms,\n ...modelOptions.uniforms,\n ...parsedMaterial.bindings,\n ...modelOptions.bindings\n };\n model.shaderInputs.setProps({ pbrMaterial: pbrMaterialProps, pbrProjection: { camera } });\n return new ModelNode({ managedResources, model });\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from\n// `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid\n// conflicts with the `babel-plugin-inline-webgl-constants` plugin.\n// eslint-disable-next-line no-shadow\nexport var GLEnum;\n(function (GLEnum) {\n GLEnum[GLEnum[\"POINTS\"] = 0] = \"POINTS\";\n GLEnum[GLEnum[\"LINES\"] = 1] = \"LINES\";\n GLEnum[GLEnum[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n GLEnum[GLEnum[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n GLEnum[GLEnum[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n GLEnum[GLEnum[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n GLEnum[GLEnum[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n})(GLEnum || (GLEnum = {}));\nexport function convertGLDrawModeToTopology(drawMode) {\n // prettier-ignore\n switch (drawMode) {\n case GLEnum.POINTS: return 'point-list';\n case GLEnum.LINES: return 'line-list';\n case GLEnum.LINE_STRIP: return 'line-strip';\n case GLEnum.TRIANGLES: return 'triangle-list';\n case GLEnum.TRIANGLE_STRIP: return 'triangle-strip';\n default: throw new Error(String(drawMode));\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GLTFInstantiator } from \"./gltf-instantiator.js\";\nexport function createScenegraphsFromGLTF(device, gltf, options) {\n const instantiator = new GLTFInstantiator(device, options);\n const scenes = instantiator.instantiate(gltf);\n const animator = instantiator.createAnimator();\n return { scenes, animator };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["// luma.gl, MIT license\nexport { parsePBRMaterial } from \"./pbr/parse-pbr-material.js\";\nexport { loadPBREnvironment } from \"./pbr/pbr-environment.js\";\n// glTF Scenegraph Instantiator\nexport { createScenegraphsFromGLTF } from \"./gltf/create-gltf-objects.js\";\nexport { GLTFAnimator } from \"./gltf/gltf-animator.js\";\n", "import { log } from '@luma.gl/core';\n// NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from\n// `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid\n// conflicts with the `babel-plugin-inline-webgl-constants` plugin.\n// eslint-disable-next-line no-shadow\nvar GLEnum;\n(function (GLEnum) {\n GLEnum[GLEnum[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n GLEnum[GLEnum[\"ONE\"] = 1] = \"ONE\";\n GLEnum[GLEnum[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n GLEnum[GLEnum[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n GLEnum[GLEnum[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n GLEnum[GLEnum[\"LINEAR\"] = 9729] = \"LINEAR\";\n GLEnum[GLEnum[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n GLEnum[GLEnum[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n})(GLEnum || (GLEnum = {}));\n/**\n * Parses a GLTF material definition into uniforms and parameters for the PBR shader module\n */\nexport function parsePBRMaterial(device, material, attributes, options) {\n const parsedMaterial = {\n defines: {\n // TODO: Use EXT_sRGB if available (Standard in WebGL 2.0)\n MANUAL_SRGB: 1,\n SRGB_FAST_APPROXIMATION: 1\n },\n bindings: {},\n uniforms: {\n // TODO: find better values?\n camera: [0, 0, 0], // Model should override\n metallicRoughnessValues: [1, 1] // Default is 1 and 1\n },\n parameters: {},\n glParameters: {},\n generatedTextures: []\n };\n // TODO - always available\n parsedMaterial.defines.USE_TEX_LOD = 1;\n const { imageBasedLightingEnvironment } = options;\n if (imageBasedLightingEnvironment) {\n parsedMaterial.bindings.pbr_diffuseEnvSampler =\n imageBasedLightingEnvironment.diffuseEnvSampler.texture;\n parsedMaterial.bindings.pbr_specularEnvSampler =\n imageBasedLightingEnvironment.specularEnvSampler.texture;\n parsedMaterial.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.brdfLutTexture.texture;\n parsedMaterial.uniforms.scaleIBLAmbient = [1, 1];\n }\n if (options?.pbrDebug) {\n parsedMaterial.defines.PBR_DEBUG = 1;\n // Override final color for reference app visualization of various parameters in the lighting equation.\n parsedMaterial.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];\n parsedMaterial.uniforms.scaleFGDSpec = [0, 0, 0, 0];\n }\n if (attributes.NORMAL)\n parsedMaterial.defines.HAS_NORMALS = 1;\n if (attributes.TANGENT && options?.useTangents)\n parsedMaterial.defines.HAS_TANGENTS = 1;\n if (attributes.TEXCOORD_0)\n parsedMaterial.defines.HAS_UV = 1;\n if (options?.imageBasedLightingEnvironment)\n parsedMaterial.defines.USE_IBL = 1;\n if (options?.lights)\n parsedMaterial.defines.USE_LIGHTS = 1;\n if (material) {\n parseMaterial(device, material, parsedMaterial);\n }\n return parsedMaterial;\n}\n/** Parse GLTF material record */\nfunction parseMaterial(device, material, parsedMaterial) {\n parsedMaterial.uniforms.unlit = Boolean(material.unlit);\n if (material.pbrMetallicRoughness) {\n parsePbrMetallicRoughness(device, material.pbrMetallicRoughness, parsedMaterial);\n }\n if (material.normalTexture) {\n addTexture(device, material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP', parsedMaterial);\n const { scale = 1 } = material.normalTexture;\n parsedMaterial.uniforms.normalScale = scale;\n }\n if (material.occlusionTexture) {\n addTexture(device, material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP', parsedMaterial);\n const { strength = 1 } = material.occlusionTexture;\n parsedMaterial.uniforms.occlusionStrength = strength;\n }\n if (material.emissiveTexture) {\n addTexture(device, material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP', parsedMaterial);\n parsedMaterial.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n switch (material.alphaMode) {\n case 'MASK':\n const { alphaCutoff = 0.5 } = material;\n parsedMaterial.defines.ALPHA_CUTOFF = 1;\n parsedMaterial.uniforms.alphaCutoff = alphaCutoff;\n break;\n case 'BLEND':\n log.warn('glTF BLEND alphaMode might not work well because it requires mesh sorting')();\n // WebGPU style parameters\n parsedMaterial.parameters.blendColorOperation = 'add';\n parsedMaterial.parameters.blendColorSrcFactor = 'src-alpha';\n parsedMaterial.parameters.blendColorDstFactor = 'one-minus-src-alpha';\n parsedMaterial.parameters.blendAlphaOperation = 'add';\n parsedMaterial.parameters.blendAlphaSrcFactor = 'one';\n parsedMaterial.parameters.blendAlphaDstFactor = 'one-minus-src-alpha';\n // GL parameters\n parsedMaterial.glParameters.blend = true;\n parsedMaterial.glParameters.blendEquation = GLEnum.FUNC_ADD;\n parsedMaterial.glParameters.blendFunc = [\n GLEnum.SRC_ALPHA,\n GLEnum.ONE_MINUS_SRC_ALPHA,\n GLEnum.ONE,\n GLEnum.ONE_MINUS_SRC_ALPHA\n ];\n break;\n }\n}\n/** Parse GLTF material sub record */\nfunction parsePbrMetallicRoughness(device, pbrMetallicRoughness, parsedMaterial) {\n if (pbrMetallicRoughness.baseColorTexture) {\n addTexture(device, pbrMetallicRoughness.baseColorTexture, 'pbr_baseColorSampler', 'HAS_BASECOLORMAP', parsedMaterial);\n }\n parsedMaterial.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n addTexture(device, pbrMetallicRoughness.metallicRoughnessTexture, 'pbr_metallicRoughnessSampler', 'HAS_METALROUGHNESSMAP', parsedMaterial);\n }\n const { metallicFactor = 1, roughnessFactor = 1 } = pbrMetallicRoughness;\n parsedMaterial.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];\n}\n/** Create a texture from a glTF texture/sampler/image combo and add it to bindings */\nfunction addTexture(device, gltfTexture, uniformName, define = null, parsedMaterial) {\n const parameters = gltfTexture?.texture?.sampler?.parameters || {};\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [GLEnum.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GLEnum.LINEAR_MIPMAP_NEAREST : GLEnum.LINEAR\n };\n }\n else {\n // Texture2D accepts a promise that returns an image as data (Async Textures)\n textureOptions = { data: image };\n }\n const texture = device.createTexture({\n id: gltfTexture.uniformName || gltfTexture.id,\n parameters: {\n ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [GLEnum.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n parsedMaterial.bindings[uniformName] = texture;\n if (define)\n parsedMaterial.defines[define] = 1;\n parsedMaterial.generatedTextures.push(texture);\n}\n/*\n/**\n * Parses a GLTF material definition into uniforms and parameters for the PBR shader module\n *\nexport class PBRMaterialParser {\n readonly device: Device;\n\n readonly defines: Record<string, number | boolean>;\n readonly bindings: Record<string, Binding>;\n readonly uniforms: Record<string, any>;\n readonly parameters: Record<string, any>;\n\n /** Hold on to generated textures, we destroy them in the destroy method *\n readonly generatedTextures: Texture[];\n\n constructor(device: Device, props: PBRMaterialParserProps) {\n const {attributes, material, pbrDebug, imageBasedLightingEnvironment, lights, useTangents} =\n props;\n this.device = device;\n\n this.defines = {\n // TODO: Use EXT_sRGB if available (Standard in WebGL 2.0)\n MANUAL_SRGB: 1,\n SRGB_FAST_APPROXIMATION: 1\n };\n\n if (this.device.features.has('glsl-texture-lod')) {\n this.defines.USE_TEX_LOD = 1;\n }\n\n this.uniforms = {\n // TODO: find better values?\n camera: [0, 0, 0], // Model should override\n\n metallicRoughnessValues: [1, 1] // Default is 1 and 1\n };\n\n this.bindings = {};\n\n this.parameters = {};\n this.generatedTextures = [];\n\n if (imageBasedLightingEnvironment) {\n this.bindings.pbr_diffuseEnvSampler = imageBasedLightingEnvironment.getDiffuseEnvSampler();\n this.bindings.pbr_specularEnvSampler = imageBasedLightingEnvironment.getSpecularEnvSampler();\n this.bindings.pbr_BrdfLUT = imageBasedLightingEnvironment.getBrdfTexture();\n this.uniforms.scaleIBLAmbient = [1, 1];\n }\n\n if (pbrDebug) {\n // Override final color for reference app visualization\n // of various parameters in the lighting equation.\n this.uniforms.scaleDiffBaseMR = [0, 0, 0, 0];\n this.uniforms.scaleFGDSpec = [0, 0, 0, 0];\n }\n\n this.defineIfPresent(attributes.NORMAL, 'HAS_NORMALS');\n this.defineIfPresent(attributes.TANGENT && useTangents, 'HAS_TANGENTS');\n this.defineIfPresent(attributes.TEXCOORD_0, 'HAS_UV');\n\n this.defineIfPresent(imageBasedLightingEnvironment, 'USE_IBL');\n this.defineIfPresent(lights, 'USE_LIGHTS');\n this.defineIfPresent(pbrDebug, 'PBR_DEBUG');\n\n if (material) {\n this.parseMaterial(material);\n }\n }\n\n /**\n * Destroy all generated resources to release memory.\n *\n destroy(): void {\n this.generatedTextures.forEach(texture => texture.destroy());\n }\n\n /** Add a define if the the value is non-nullish *\n defineIfPresent(value: unknown, name: string): void {\n if (value) {\n this.defines[name] = 1;\n }\n }\n\n /** Parse GLTF material record *\n parseMaterial(material) {\n this.uniforms.unlit = Boolean(material.unlit);\n\n if (material.pbrMetallicRoughness) {\n this.parsePbrMetallicRoughness(material.pbrMetallicRoughness);\n }\n if (material.normalTexture) {\n this.addTexture(material.normalTexture, 'pbr_normalSampler', 'HAS_NORMALMAP');\n\n const {scale = 1} = material.normalTexture;\n this.uniforms.normalScale = scale;\n }\n if (material.occlusionTexture) {\n this.addTexture(material.occlusionTexture, 'pbr_occlusionSampler', 'HAS_OCCLUSIONMAP');\n\n const {strength = 1} = material.occlusionTexture;\n this.uniforms.occlusionStrength = strength;\n }\n if (material.emissiveTexture) {\n this.addTexture(material.emissiveTexture, 'pbr_emissiveSampler', 'HAS_EMISSIVEMAP');\n this.uniforms.emissiveFactor = material.emissiveFactor || [0, 0, 0];\n }\n if (material.alphaMode === 'MASK') {\n const {alphaCutoff = 0.5} = material;\n this.defines.ALPHA_CUTOFF = 1;\n this.uniforms.alphaCutoff = alphaCutoff;\n } else if (material.alphaMode === 'BLEND') {\n log.warn('BLEND alphaMode might not work well because it requires mesh sorting')();\n Object.assign(this.parameters, {\n blend: true,\n blendEquation: GL.FUNC_ADD,\n blendFunc: [GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.ONE, GL.ONE_MINUS_SRC_ALPHA]\n });\n }\n }\n\n /** Parse GLTF material sub record *\n parsePbrMetallicRoughness(pbrMetallicRoughness) {\n if (pbrMetallicRoughness.baseColorTexture) {\n this.addTexture(\n pbrMetallicRoughness.baseColorTexture,\n 'pbr_baseColorSampler',\n 'HAS_BASECOLORMAP'\n );\n }\n this.uniforms.baseColorFactor = pbrMetallicRoughness.baseColorFactor || [1, 1, 1, 1];\n\n if (pbrMetallicRoughness.metallicRoughnessTexture) {\n this.addTexture(\n pbrMetallicRoughness.metallicRoughnessTexture,\n 'pbr_metallicRoughnessSampler',\n 'HAS_METALROUGHNESSMAP'\n );\n }\n const {metallicFactor = 1, roughnessFactor = 1} = pbrMetallicRoughness;\n this.uniforms.metallicRoughnessValues = [metallicFactor, roughnessFactor];\n }\n\n /** Create a texture from a glTF texture/sampler/image combo and add it to bindings *\n addTexture(gltfTexture, name, define = null) {\n const parameters = gltfTexture?.texture?.sampler?.parameters || {};\n\n const image = gltfTexture.texture.source.image;\n let textureOptions;\n let specialTextureParameters = {};\n if (image.compressed) {\n textureOptions = image;\n specialTextureParameters = {\n [GL.TEXTURE_MIN_FILTER]: image.data.length > 1 ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR\n };\n } else {\n // Texture2D accepts a promise that returns an image as data (Async Textures)\n textureOptions = {data: image};\n }\n\n const texture: Texture = this.device.createTexture({\n id: gltfTexture.name || gltfTexture.id,\n parameters: {\n ...parameters,\n ...specialTextureParameters\n },\n pixelStore: {\n [GL.UNPACK_FLIP_Y_WEBGL]: false\n },\n ...textureOptions\n });\n this.bindings[name] = texture;\n this.defineIfPresent(define, define);\n this.generatedTextures.push(texture);\n }\n}\n*/\n", "// luma.gl, MIT license\nimport { AsyncTexture } from '@luma.gl/engine';\nimport { loadImageTexture } from '@loaders.gl/textures';\n/** Loads textures for PBR environment */\nexport function loadPBREnvironment(device, props) {\n const brdfLutTexture = new AsyncTexture(device, {\n id: 'brdfLUT',\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear',\n maxFilter: 'linear'\n },\n // Texture accepts a promise that returns an image as data (Async Textures)\n data: loadImageTexture(props.brdfLutUrl)\n });\n const diffuseEnvSampler = makeCube(device, {\n id: 'DiffuseEnvSampler',\n getTextureForFace: dir => loadImageTexture(props.getTexUrl('diffuse', dir, 0)),\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear',\n maxFilter: 'linear'\n }\n });\n const specularEnvSampler = makeCube(device, {\n id: 'SpecularEnvSampler',\n getTextureForFace: (dir) => {\n const imageArray = [];\n for (let lod = 0; lod <= props.specularMipLevels - 1; lod++) {\n imageArray.push(loadImageTexture(props.getTexUrl('specular', dir, lod)));\n }\n return imageArray;\n },\n sampler: {\n wrapS: 'clamp-to-edge',\n wrapT: 'clamp-to-edge',\n minFilter: 'linear', // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR_MIPMAP_LINEAR,\n maxFilter: 'linear'\n }\n });\n return {\n brdfLutTexture,\n diffuseEnvSampler,\n specularEnvSampler\n };\n}\n// TODO put somewhere common\nconst FACES = [0, 1, 2, 3, 4, 5];\nfunction makeCube(device, { id, getTextureForFace, sampler }) {\n const data = {};\n FACES.forEach(face => {\n data[String(face)] = getTextureForFace(face);\n });\n return new AsyncTexture(device, {\n id,\n dimension: 'cube',\n mipmaps: false,\n sampler,\n // @ts-expect-error\n data\n });\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Geometry, GroupNode } from '@luma.gl/engine';\nimport { Matrix4 } from '@math.gl/core';\nimport { GLTFAnimator } from \"./gltf-animator.js\";\nimport { createGLTFModel } from \"./create-gltf-model.js\";\nimport { convertGLDrawModeToTopology } from \"./gl-utils.js\";\nconst DEFAULT_OPTIONS = {\n modelOptions: {},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n};\n/**\n * GLTF instantiator for luma.gl\n * Walks the parsed and resolved glTF structure and builds a luma.gl scenegraph\n */\nexport class GLTFInstantiator {\n device;\n options;\n gltf;\n constructor(device, options = {}) {\n this.device = device;\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n instantiate(gltf) {\n this.gltf = deepCopy(gltf);\n const scenes = (this.gltf.scenes || []).map(scene => this.createScene(scene));\n return scenes;\n }\n createAnimator() {\n if (Array.isArray(this.gltf.animations)) {\n return new GLTFAnimator(this.gltf);\n }\n return null;\n }\n createScene(gltfScene) {\n const gltfNodes = gltfScene.nodes || [];\n const nodes = gltfNodes.map(node => this.createNode(node));\n const scene = new GroupNode({\n id: gltfScene.name || gltfScene.id,\n children: nodes\n });\n return scene;\n }\n createNode(gltfNode) {\n if (!gltfNode._node) {\n const gltfChildren = gltfNode.children || [];\n const children = gltfChildren.map(child => this.createNode(child));\n // Node can have children nodes and meshes at the same time\n if (gltfNode.mesh) {\n children.push(this.createMesh(gltfNode.mesh));\n }\n const node = new GroupNode({\n id: gltfNode.name || gltfNode.id,\n children\n });\n if (gltfNode.matrix) {\n node.setMatrix(gltfNode.matrix);\n }\n else {\n node.matrix.identity();\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n if (gltfNode.rotation) {\n const rotationMatrix = new Matrix4().fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n }\n gltfNode._node = node;\n }\n // Copy _node so that gltf-animator can access\n const topLevelNode = this.gltf.nodes.find(node => node.id === gltfNode.id);\n topLevelNode._node = gltfNode._node;\n return gltfNode._node;\n }\n createMesh(gltfMesh) {\n // TODO: avoid changing the gltf\n if (!gltfMesh._mesh) {\n const gltfPrimitives = gltfMesh.primitives || [];\n const primitives = gltfPrimitives.map((gltfPrimitive, i) => this.createPrimitive(gltfPrimitive, i, gltfMesh));\n const mesh = new GroupNode({\n id: gltfMesh.name || gltfMesh.id,\n children: primitives\n });\n gltfMesh._mesh = mesh;\n }\n return gltfMesh._mesh;\n }\n createPrimitive(gltfPrimitive, i, gltfMesh) {\n const id = gltfPrimitive.name || `${gltfMesh.name || gltfMesh.id}-primitive-${i}`;\n const topology = convertGLDrawModeToTopology(gltfPrimitive.mode || 4);\n const vertexCount = gltfPrimitive.indices\n ? gltfPrimitive.indices.count\n : this.getVertexCount(gltfPrimitive.attributes);\n const modelNode = createGLTFModel(this.device, {\n id,\n geometry: this.createGeometry(id, gltfPrimitive, topology),\n material: gltfPrimitive.material,\n materialOptions: this.options,\n modelOptions: this.options.modelOptions,\n vertexCount\n });\n modelNode.bounds = [\n gltfPrimitive.attributes.POSITION.min,\n gltfPrimitive.attributes.POSITION.max\n ];\n // TODO this holds on to all the CPU side texture and attribute data\n // modelNode.material = gltfPrimitive.material;\n return modelNode;\n }\n getVertexCount(attributes) {\n throw new Error('getVertexCount not implemented');\n }\n createGeometry(id, gltfPrimitive, topology) {\n const attributes = {};\n for (const [attributeName, attribute] of Object.entries(gltfPrimitive.attributes)) {\n const { components, size, value } = attribute;\n attributes[attributeName] = { size: size ?? components, value };\n }\n return new Geometry({\n id,\n topology,\n indices: gltfPrimitive.indices.value,\n attributes\n });\n }\n createBuffer(attribute, usage) {\n if (!attribute.bufferView) {\n // Draco decoded files do not have a bufferView\n attribute.bufferView = {};\n }\n const { bufferView } = attribute;\n if (!bufferView.lumaBuffers) {\n bufferView.lumaBuffers = {};\n }\n if (!bufferView.lumaBuffers[usage]) {\n bufferView.lumaBuffers[usage] = this.device.createBuffer({\n id: `from-${bufferView.id}`,\n // Draco decoded files have attribute.value\n data: bufferView.data || attribute.value\n });\n }\n return bufferView.lumaBuffers[usage];\n }\n // TODO - create sampler in WebGL2\n createSampler(gltfSampler) {\n return gltfSampler;\n }\n // Helper methods (move to GLTFLoader.resolve...?)\n needsPOT() {\n // Has a wrapping mode (either wrapS or wrapT) equal to REPEAT or MIRRORED_REPEAT, or\n // Has a minification filter (minFilter) that uses mipmapping\n // (NEAREST_MIPMAP_NEAREST, NEAREST_MIPMAP_LINEAR,\n // LINEAR_MIPMAP_NEAREST, or LINEAR_MIPMAP_LINEAR).\n return false;\n }\n}\n/** Deeply copies a JS data structure */\nfunction deepCopy(object) {\n // don't copy binary data\n if (ArrayBuffer.isView(object) || object instanceof ArrayBuffer) {\n return object;\n }\n if (Array.isArray(object)) {\n return object.map(deepCopy);\n }\n if (object && typeof object === 'object') {\n const result = {};\n for (const key in object) {\n result[key] = deepCopy(object[key]);\n }\n return result;\n }\n return object;\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { Matrix4, Quaternion } from '@math.gl/core';\n// TODO: import from loaders.gl?\nexport const ATTRIBUTE_TYPE_TO_COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nexport const ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\nclass GLTFAnimation {\n name;\n startTime = 0;\n playing = true;\n speed = 1;\n channels = [];\n constructor(props) {\n Object.assign(this, props);\n }\n animate(timeMs) {\n if (!this.playing) {\n return;\n }\n const absTime = timeMs / 1000;\n const time = (absTime - this.startTime) * this.speed;\n this.channels.forEach(({ sampler, target, path }) => {\n interpolate(time, sampler, target, path);\n applyTranslationRotationScale(target, target._node);\n });\n }\n}\nexport class GLTFAnimator {\n animations;\n constructor(gltf) {\n this.animations = gltf.animations.map((animation, index) => {\n const name = animation.name || `Animation-${index}`;\n const samplers = animation.samplers.map(({ input, interpolation = 'LINEAR', output }) => ({\n input: accessorToJsArray(gltf.accessors[input]),\n interpolation,\n output: accessorToJsArray(gltf.accessors[output])\n }));\n const channels = animation.channels.map(({ sampler, target }) => ({\n sampler: samplers[sampler],\n target: gltf.nodes[target.node],\n path: target.path\n }));\n return new GLTFAnimation({ name, channels });\n });\n }\n /** @deprecated Use .setTime(). Will be removed (deck.gl is using this) */\n animate(time) {\n this.setTime(time);\n }\n setTime(time) {\n this.animations.forEach(animation => animation.animate(time));\n }\n getAnimations() {\n return this.animations;\n }\n}\n//\nfunction accessorToJsArray(accessor) {\n if (!accessor._animation) {\n const ArrayType = ATTRIBUTE_COMPONENT_TYPE_TO_ARRAY[accessor.componentType];\n const components = ATTRIBUTE_TYPE_TO_COMPONENTS[accessor.type];\n const length = components * accessor.count;\n const { buffer, byteOffset } = accessor.bufferView.data;\n const array = new ArrayType(buffer, byteOffset + (accessor.byteOffset || 0), length);\n if (components === 1) {\n accessor._animation = Array.from(array);\n }\n else {\n // Slice array\n const slicedArray = [];\n for (let i = 0; i < array.length; i += components) {\n slicedArray.push(Array.from(array.slice(i, i + components)));\n }\n accessor._animation = slicedArray;\n }\n }\n return accessor._animation;\n}\n// TODO: share with GLTFInstantiator\nconst helperMatrix = new Matrix4();\nfunction applyTranslationRotationScale(gltfNode, node) {\n node.matrix.identity();\n if (gltfNode.translation) {\n node.matrix.translate(gltfNode.translation);\n }\n if (gltfNode.rotation) {\n const rotationMatrix = helperMatrix.fromQuaternion(gltfNode.rotation);\n node.matrix.multiplyRight(rotationMatrix);\n }\n if (gltfNode.scale) {\n node.matrix.scale(gltfNode.scale);\n }\n}\nconst quaternion = new Quaternion();\nfunction linearInterpolate(target, path, start, stop, ratio) {\n if (path === 'rotation') {\n // SLERP when path is rotation\n quaternion.slerp({ start, target: stop, ratio });\n for (let i = 0; i < quaternion.length; i++) {\n target[path][i] = quaternion[i];\n }\n }\n else {\n // regular interpolation\n for (let i = 0; i < start.length; i++) {\n target[path][i] = ratio * stop[i] + (1 - ratio) * start[i];\n }\n }\n}\nfunction cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio: t }) {\n // TODO: Quaternion might need normalization\n for (let i = 0; i < target[path].length; i++) {\n const m0 = outTangent0[i] * tDiff;\n const m1 = inTangent1[i] * tDiff;\n target[path][i] =\n (2 * Math.pow(t, 3) - 3 * Math.pow(t, 2) + 1) * p0[i] +\n (Math.pow(t, 3) - 2 * Math.pow(t, 2) + t) * m0 +\n (-2 * Math.pow(t, 3) + 3 * Math.pow(t, 2)) * p1[i] +\n (Math.pow(t, 3) - Math.pow(t, 2)) * m1;\n }\n}\nfunction stepInterpolate(target, path, value) {\n for (let i = 0; i < value.length; i++) {\n target[path][i] = value[i];\n }\n}\nfunction interpolate(time, { input, interpolation, output }, target, path) {\n const maxTime = input[input.length - 1];\n const animationTime = time % maxTime;\n const nextIndex = input.findIndex(t => t >= animationTime);\n const previousIndex = Math.max(0, nextIndex - 1);\n if (!Array.isArray(target[path])) {\n switch (path) {\n case 'translation':\n target[path] = [0, 0, 0];\n break;\n case 'rotation':\n target[path] = [0, 0, 0, 1];\n break;\n case 'scale':\n target[path] = [1, 1, 1];\n break;\n default:\n log.warn(`Bad animation path ${path}`)();\n }\n }\n // assert(target[path].length === output[previousIndex].length);\n const previousTime = input[previousIndex];\n const nextTime = input[nextIndex];\n switch (interpolation) {\n case 'STEP':\n stepInterpolate(target, path, output[previousIndex]);\n break;\n case 'LINEAR':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n linearInterpolate(target, path, output[previousIndex], output[nextIndex], ratio);\n }\n break;\n case 'CUBICSPLINE':\n if (nextTime > previousTime) {\n const ratio = (animationTime - previousTime) / (nextTime - previousTime);\n const tDiff = nextTime - previousTime;\n const p0 = output[3 * previousIndex + 1];\n const outTangent0 = output[3 * previousIndex + 2];\n const inTangent1 = output[3 * nextIndex + 0];\n const p1 = output[3 * nextIndex + 1];\n cubicsplineInterpolate(target, path, { p0, outTangent0, inTangent1, p1, tDiff, ratio });\n }\n break;\n default:\n log.warn(`Interpolation ${interpolation} not supported`)();\n break;\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { log } from '@luma.gl/core';\nimport { pbrMaterial } from '@luma.gl/shadertools';\nimport { Model, ModelNode } from '@luma.gl/engine';\nimport { parsePBRMaterial } from \"../pbr/parse-pbr-material.js\";\nconst SHADER = /* WGSL */ `\nlayout(0) positions: vec4; // in vec4 POSITION;\n\n #ifdef HAS_NORMALS\n in vec4 normals; // in vec4 NORMAL;\n #endif\n\n #ifdef HAS_TANGENTS\n in vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n // in vec2 TEXCOORD_0;\n in vec2 texCoords;\n #endif\n\n@vertex\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = normals;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = texCoords;\n #endif\n\n pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = u_MVPMatrix * positions;\n }\n\n@fragment\n out vec4 fragmentColor;\n\n void main(void) {\n vec3 pos = pbr_vPosition;\n fragmentColor = pbr_filterColor(vec4(1.0));\n }\n`;\n// TODO rename attributes to POSITION/NORMAL etc\n// See gpu-geometry.ts: getAttributeBuffersFromGeometry()\nconst vs = /* glsl */ `\\\n#version 300 es\n\n // in vec4 POSITION;\n in vec4 positions;\n\n #ifdef HAS_NORMALS\n // in vec4 NORMAL;\n in vec4 normals;\n #endif\n\n #ifdef HAS_TANGENTS\n in vec4 TANGENT;\n #endif\n\n #ifdef HAS_UV\n // in vec2 TEXCOORD_0;\n in vec2 texCoords;\n #endif\n\n void main(void) {\n vec4 _NORMAL = vec4(0.);\n vec4 _TANGENT = vec4(0.);\n vec2 _TEXCOORD_0 = vec2(0.);\n\n #ifdef HAS_NORMALS\n _NORMAL = normals;\n #endif\n\n #ifdef HAS_TANGENTS\n _TANGENT = TANGENT;\n #endif\n\n #ifdef HAS_UV\n _TEXCOORD_0 = texCoords;\n #endif\n\n pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);\n gl_Position = pbrProjection.modelViewProjectionMatrix * positions;\n }\n`;\nconst fs = /* glsl */ `\\\n#version 300 es\n out vec4 fragmentColor;\n\n void main(void) {\n vec3 pos = pbr_vPosition;\n fragmentColor = pbr_filterColor(vec4(1.0));\n }\n`;\nexport function createGLTFModel(device, options) {\n const { id, geometry, material, vertexCount, materialOptions, modelOptions } = options;\n const parsedMaterial = parsePBRMaterial(device, material, geometry.attributes, materialOptions);\n log.info(4, 'createGLTFModel defines: ', parsedMaterial.defines)();\n // Calculate managedResources\n // TODO: Implement resource management logic that will\n // not deallocate resources/textures/buffers that are shared\n const managedResources = [];\n // managedResources.push(...parsedMaterial.generatedTextures);\n // managedResources.push(...Object.values(attributes).map((attribute) => attribute.buffer));\n const parameters = {\n depthWriteEnabled: true,\n depthCompare: 'less',\n depthFormat: 'depth24plus',\n cullMode: 'back'\n };\n const modelProps = {\n id,\n source: SHADER,\n vs,\n fs,\n geometry,\n topology: geometry.topology,\n vertexCount,\n modules: [pbrMaterial],\n ...modelOptions,\n defines: { ...parsedMaterial.defines, ...modelOptions.defines },\n parameters: { ...parameters, ...parsedMaterial.parameters, ...modelOptions.parameters }\n };\n const model = new Model(device, modelProps);\n const { camera, ...pbrMaterialProps } = {\n ...parsedMaterial.uniforms,\n ...modelOptions.uniforms,\n ...parsedMaterial.bindings,\n ...modelOptions.bindings\n };\n model.shaderInputs.setProps({ pbrMaterial: pbrMaterialProps, pbrProjection: { camera } });\n return new ModelNode({ managedResources, model });\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// NOTE: Modules other than `@luma.gl/webgl` should not import `GL` from\n// `@luma.gl/constants`. Locally we use `GLEnum` instead of `GL` to avoid\n// conflicts with the `babel-plugin-inline-webgl-constants` plugin.\n// eslint-disable-next-line no-shadow\nexport var GLEnum;\n(function (GLEnum) {\n GLEnum[GLEnum[\"POINTS\"] = 0] = \"POINTS\";\n GLEnum[GLEnum[\"LINES\"] = 1] = \"LINES\";\n GLEnum[GLEnum[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n GLEnum[GLEnum[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n GLEnum[GLEnum[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n GLEnum[GLEnum[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n GLEnum[GLEnum[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n})(GLEnum || (GLEnum = {}));\nexport function convertGLDrawModeToTopology(drawMode) {\n // prettier-ignore\n switch (drawMode) {\n case GLEnum.POINTS: return 'point-list';\n case GLEnum.LINES: return 'line-list';\n case GLEnum.LINE_STRIP: return 'line-strip';\n case GLEnum.TRIANGLES: return 'triangle-list';\n case GLEnum.TRIANGLE_STRIP: return 'triangle-strip';\n default: throw new Error(String(drawMode));\n }\n}\n", "// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GLTFInstantiator } from \"./gltf-instantiator.js\";\nexport function createScenegraphsFromGLTF(device, gltf, options) {\n const instantiator = new GLTFInstantiator(device, options);\n const scenes = instantiator.instantiate(gltf);\n const animator = instantiator.createAnimator();\n return { scenes, animator };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["GLEnum", "import_engine", "import_core", "import_core", "import_core", "import_engine", "GLEnum"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/gltf",
|
|
3
|
-
"version": "9.1.0-alpha.
|
|
3
|
+
"version": "9.1.0-alpha.18",
|
|
4
4
|
"description": "glTF support for luma.gl",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,14 +40,14 @@
|
|
|
40
40
|
"prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@luma.gl/core": "9.1.0-alpha.
|
|
44
|
-
"@luma.gl/engine": "9.1.0-alpha.
|
|
45
|
-
"@luma.gl/shadertools": "9.1.0-alpha.
|
|
43
|
+
"@luma.gl/core": "9.1.0-alpha.17",
|
|
44
|
+
"@luma.gl/engine": "9.1.0-alpha.17",
|
|
45
|
+
"@luma.gl/shadertools": "9.1.0-alpha.17"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@loaders.gl/core": "^4.2.0",
|
|
49
49
|
"@loaders.gl/textures": "^4.2.0",
|
|
50
50
|
"@math.gl/core": "4.1.0-alpha.3"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "61c927cfdc3b96eb71aa014cbeac2bfe9375c0f6"
|
|
53
53
|
}
|
|
@@ -43,7 +43,7 @@ export class GLTFInstantiator {
|
|
|
43
43
|
|
|
44
44
|
instantiate(gltf: any): GroupNode[] {
|
|
45
45
|
this.gltf = deepCopy(gltf);
|
|
46
|
-
const scenes = (gltf.scenes || []).map(scene => this.createScene(scene));
|
|
46
|
+
const scenes = (this.gltf.scenes || []).map(scene => this.createScene(scene));
|
|
47
47
|
return scenes;
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -101,6 +101,10 @@ export class GLTFInstantiator {
|
|
|
101
101
|
gltfNode._node = node;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
// Copy _node so that gltf-animator can access
|
|
105
|
+
const topLevelNode = this.gltf.nodes.find(node => node.id === gltfNode.id);
|
|
106
|
+
topLevelNode._node = gltfNode._node;
|
|
107
|
+
|
|
104
108
|
return gltfNode._node;
|
|
105
109
|
}
|
|
106
110
|
|