@luma.gl/gltf 9.0.0-alpha.54 → 9.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/dist.dev.js +3643 -15000
  2. package/dist/dist.min.js +393 -0
  3. package/dist/gltf/create-gltf-model.d.ts +1 -1
  4. package/dist/gltf/create-gltf-model.d.ts.map +1 -1
  5. package/dist/gltf/create-gltf-model.js +34 -51
  6. package/dist/gltf/create-gltf-objects.d.ts +2 -2
  7. package/dist/gltf/create-gltf-objects.d.ts.map +1 -1
  8. package/dist/gltf/create-gltf-objects.js +4 -8
  9. package/dist/gltf/gltf-animator.d.ts.map +1 -1
  10. package/dist/gltf/gltf-animator.js +167 -202
  11. package/dist/gltf/gltf-instantiator.d.ts +3 -4
  12. package/dist/gltf/gltf-instantiator.d.ts.map +1 -1
  13. package/dist/gltf/gltf-instantiator.js +170 -161
  14. package/dist/index.cjs +62 -63
  15. package/dist/index.cjs.map +7 -0
  16. package/dist/index.d.ts +6 -6
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -1
  19. package/dist/pbr/parse-pbr-material.d.ts +1 -1
  20. package/dist/pbr/parse-pbr-material.d.ts.map +1 -1
  21. package/dist/pbr/parse-pbr-material.js +320 -135
  22. package/dist/pbr/pbr-environment.d.ts.map +1 -1
  23. package/dist/pbr/pbr-environment.js +56 -59
  24. package/dist.min.js +4 -1215
  25. package/package.json +14 -15
  26. package/src/gltf/create-gltf-model.ts +4 -4
  27. package/src/gltf/gltf-animator.ts +3 -3
  28. package/src/gltf/gltf-instantiator.ts +45 -30
  29. package/src/index.ts +0 -1
  30. package/src/pbr/parse-pbr-material.ts +15 -12
  31. package/src/pbr/pbr-environment.ts +18 -11
  32. package/dist/gltf/create-gltf-model.js.map +0 -1
  33. package/dist/gltf/create-gltf-objects.js.map +0 -1
  34. package/dist/gltf/gltf-animator.js.map +0 -1
  35. package/dist/gltf/gltf-instantiator.js.map +0 -1
  36. package/dist/index.js.map +0 -1
  37. package/dist/pbr/parse-pbr-material.js.map +0 -1
  38. package/dist/pbr/pbr-environment.js.map +0 -1
@@ -0,0 +1,393 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if (typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if (typeof define === 'function' && define.amd) define([], factory);
5
+ else if (typeof exports === 'object') exports['luma'] = factory();
6
+ else root['luma'] = factory();})(globalThis, function () {
7
+ var __exports__=(()=>{var Rn=Object.create;var ot=Object.defineProperty;var In=Object.getOwnPropertyDescriptor;var vn=Object.getOwnPropertyNames;var Nn=Object.getPrototypeOf,bn=Object.prototype.hasOwnProperty;var Qt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),wn=(e,t)=>{for(var n in t)ot(e,n,{get:t[n],enumerable:!0})},it=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of vn(t))!bn.call(e,s)&&s!==n&&ot(e,s,{get:()=>t[s],enumerable:!(r=In(t,s))||r.enumerable});return e},ct=(e,t,n)=>(it(e,t,"default"),n&&it(n,t,"default")),D=(e,t,n)=>(n=e!=null?Rn(Nn(e)):{},it(t||!e||!e.__esModule?ot(n,"default",{value:e,enumerable:!0}):n,e)),On=e=>it(ot({},"__esModule",{value:!0}),e);var j=Qt((Qr,Zt)=>{Zt.exports=globalThis.luma});var Ct=Qt((ti,de)=>{de.exports=globalThis.luma});var st={};wn(st,{GLTFAnimator:()=>$,createScenegraphsFromGLTF:()=>Ln,loadPBREnvironment:()=>ge,parsePBRMaterial:()=>at});ct(st,D(j(),1));var Jt=D(j(),1),C;(function(e){e[e.FUNC_ADD=32774]="FUNC_ADD",e[e.ONE=1]="ONE",e[e.SRC_ALPHA=770]="SRC_ALPHA",e[e.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",e[e.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",e[e.LINEAR=9729]="LINEAR",e[e.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",e[e.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL"})(C||(C={}));function at(e,t,n,r){let s={defines:{MANUAL_SRGB:1,SRGB_FAST_APPROXIMATION:1},bindings:{},uniforms:{u_Camera:[0,0,0],u_MetallicRoughnessValues:[1,1]},parameters:{},glParameters:{},generatedTextures:[]};s.defines.USE_TEX_LOD=1;let{imageBasedLightingEnvironment:i}=r;return i&&(s.bindings.u_DiffuseEnvSampler=i.diffuseEnvSampler,s.bindings.u_SpecularEnvSampler=i.specularEnvSampler,s.bindings.u_brdfLUT=i.brdfLutTexture,s.uniforms.u_ScaleIBLAmbient=[1,1]),r?.pbrDebug&&(s.defines.PBR_DEBUG=1,s.uniforms.u_ScaleDiffBaseMR=[0,0,0,0],s.uniforms.u_ScaleFGDSpec=[0,0,0,0]),n.NORMAL&&(s.defines.HAS_NORMALS=1),n.TANGENT&&r?.useTangents&&(s.defines.HAS_TANGENTS=1),n.TEXCOORD_0&&(s.defines.HAS_UV=1),r?.imageBasedLightingEnvironment&&(s.defines.USE_IBL=1),r?.lights&&(s.defines.USE_LIGHTS=1),t&&Pn(e,t,s),s}function Pn(e,t,n){if(n.uniforms.pbr_uUnlit=Boolean(t.unlit),t.pbrMetallicRoughness&&Cn(e,t.pbrMetallicRoughness,n),t.normalTexture){K(e,t.normalTexture,"u_NormalSampler","HAS_NORMALMAP",n);let{scale:r=1}=t.normalTexture;n.uniforms.u_NormalScale=r}if(t.occlusionTexture){K(e,t.occlusionTexture,"u_OcclusionSampler","HAS_OCCLUSIONMAP",n);let{strength:r=1}=t.occlusionTexture;n.uniforms.u_OcclusionStrength=r}switch(t.emissiveTexture&&(K(e,t.emissiveTexture,"u_EmissiveSampler","HAS_EMISSIVEMAP",n),n.uniforms.u_EmissiveFactor=t.emissiveFactor||[0,0,0]),t.alphaMode){case"MASK":let{alphaCutoff:r=.5}=t;n.defines.ALPHA_CUTOFF=1,n.uniforms.u_AlphaCutoff=r;break;case"BLEND":Jt.log.warn("glTF BLEND alphaMode might not work well because it requires mesh sorting")(),n.parameters.blendColorOperation="add",n.parameters.blendColorSrcFactor="src-alpha",n.parameters.blendColorDstFactor="one-minus-src-alpha",n.parameters.blendAlphaOperation="add",n.parameters.blendAlphaSrcFactor="one",n.parameters.blendAlphaDstFactor="one-minus-src-alpha",n.glParameters.blend=!0,n.glParameters.blendEquation=C.FUNC_ADD,n.glParameters.blendFunc=[C.SRC_ALPHA,C.ONE_MINUS_SRC_ALPHA,C.ONE,C.ONE_MINUS_SRC_ALPHA];break}}function Cn(e,t,n){t.baseColorTexture&&K(e,t.baseColorTexture,"u_BaseColorSampler","HAS_BASECOLORMAP",n),n.uniforms.u_BaseColorFactor=t.baseColorFactor||[1,1,1,1],t.metallicRoughnessTexture&&K(e,t.metallicRoughnessTexture,"u_MetallicRoughnessSampler","HAS_METALROUGHNESSMAP",n);let{metallicFactor:r=1,roughnessFactor:s=1}=t;n.uniforms.u_MetallicRoughnessValues=[r,s]}function K(e,t,n,r=null,s){let i=t?.texture?.sampler?.parameters||{},o=t.texture.source.image,c,a={};o.compressed?(c=o,a={[C.TEXTURE_MIN_FILTER]:o.data.length>1?C.LINEAR_MIPMAP_NEAREST:C.LINEAR}):c={data:o};let f=e.createTexture({id:t.uniformName||t.id,parameters:{...i,...a},pixelStore:{[C.UNPACK_FLIP_Y_WEBGL]:!1},...c});s.bindings[n]=f,r&&(s.defines[r]=1),s.generatedTextures.push(f)}function q(e,t){if(!e)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},Bn=B.self||B.window||B.global||{},zn=B.window||B.self||B.global||{},kn=B.global||B.self||B.window||{},Fn=B.document||{};var Tt=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var te=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Un=te&&parseFloat(te[1])||0;var Vn="",ee={};function Lt(e){for(let t in ee)if(e.startsWith(t)){let n=ee[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Vn}${e}`),e}var ne="4.1.3";var Rt,qn=(Rt=globalThis.loaders)===null||Rt===void 0?void 0:Rt.parseImageNode,It=typeof Image<"u",vt=typeof ImageBitmap<"u",Dn=Boolean(qn),Nt=Tt?!0:Dn;function re(e){switch(e){case"auto":return vt||It||Nt;case"imagebitmap":return vt;case"image":return It;case"data":return Nt;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function se(){if(vt)return"imagebitmap";if(It)return"image";if(Nt)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function ie(e){let t=Yn(e);if(!t)throw new Error("Not an image");return t}function bt(e){return ft(e)}function ft(e){switch(ie(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),n=t.getContext("2d");if(!n)throw new Error("getImageData");return t.width=e.width,t.height=e.height,n.drawImage(e,0,0),n.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function Yn(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var Hn=/^data:image\/svg\+xml/,Gn=/\.svg((\?|#).*)?$/;function lt(e){return e&&(Hn.test(e)||Gn.test(e))}function oe(e,t){if(lt(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(i){throw new Error(i.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return wt(e,t)}function wt(e,t){if(lt(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function ht(e,t,n){let r=oe(e,n),s=self.URL||self.webkitURL,i=typeof r!="string"&&s.createObjectURL(r);try{return await $n(i||r,t)}finally{i&&s.revokeObjectURL(i)}}async function $n(e,t){let n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((r,s)=>{try{n.onload=()=>r(n),n.onerror=i=>{let o=i instanceof Error?i.message:"error";s(new Error(o))}}catch(i){s(i)}})}var Wn={},ce=!0;async function ae(e,t,n){let r;lt(n)?r=await ht(e,t,n):r=wt(e,n);let s=t&&t.imagebitmap;return await Xn(r,s)}async function Xn(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if((jn(t)||!ce)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),ce=!1}return await createImageBitmap(e)}function jn(e){for(let t in e||Wn)return!1;return!0}function fe(e){return!Jn(e,"ftyp",4)||!(e[8]&96)?null:Kn(e)}function Kn(e){switch(Qn(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function Qn(e,t,n){return String.fromCharCode(...e.slice(t,n))}function Zn(e){return[...e].map(t=>t.charCodeAt(0))}function Jn(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=Zn(t);for(let s=0;s<r.length;++s)if(r[s]!==e[s+n])return!1;return!0}var z=!1,Q=!0;function pt(e){let t=Z(e);return er(t)||sr(t)||nr(t)||rr(t)||tr(t)}function tr(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),n=fe(t);return n?{mimeType:n.mimeType,width:0,height:0}:null}function er(e){let t=Z(e);return t.byteLength>=24&&t.getUint32(0,z)===2303741511?{mimeType:"image/png",width:t.getUint32(16,z),height:t.getUint32(20,z)}:null}function nr(e){let t=Z(e);return t.byteLength>=10&&t.getUint32(0,z)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,Q),height:t.getUint16(8,Q)}:null}function rr(e){let t=Z(e);return t.byteLength>=14&&t.getUint16(0,z)===16973&&t.getUint32(2,Q)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,Q),height:t.getUint32(22,Q)}:null}function sr(e){let t=Z(e);if(!(t.byteLength>=3&&t.getUint16(0,z)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=ir(),i=2;for(;i+9<t.byteLength;){let o=t.getUint16(i,z);if(s.has(o))return{mimeType:"image/jpeg",height:t.getUint16(i+5,z),width:t.getUint16(i+7,z)};if(!r.has(o))return null;i+=2,i+=t.getUint16(i,z)}return null}function ir(){let e=new Set([65499,65476,65484,65501,65534]);for(let n=65504;n<65520;++n)e.add(n);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function Z(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function le(e,t){var n;let{mimeType:r}=pt(e)||{},s=(n=globalThis.loaders)===null||n===void 0?void 0:n.parseImageNode;return q(s),await s(e,r)}async function he(e,t,n){t=t||{};let s=(t.image||{}).type||"auto",{url:i}=n||{},o=or(s),c;switch(o){case"imagebitmap":c=await ae(e,t,i);break;case"image":c=await ht(e,t,i);break;case"data":c=await le(e,t);break;default:q(!1)}return s==="data"&&(c=ft(c)),c}function or(e){switch(e){case"auto":case"data":return se();default:return re(e),e}}var cr=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],ar=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],fr={image:{type:"auto",decode:!0}},mt={id:"image",module:"images",name:"Images",version:ne,mimeTypes:ar,extensions:cr,parse:he,tests:[e=>Boolean(pt(new DataView(e)))],options:fr};function xt(e,t,n){let r=typeof e=="function"?e({...t,...n}):e,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Lt(r)}var lr=e=>e&&typeof e=="object";async function pe(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return await Ot(e,t,n)}async function Ot(e,t,n){return Array.isArray(e)?await pr(e,t,n):lr(e)?await hr(e,t,n):await t(e,n)}async function hr(e,t,n){let r=[],s={};for(let i in e){let o=e[i],c=Ot(o,t,n).then(a=>{s[i]=a});r.push(c)}return await Promise.all(r),s}async function pr(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=e.map(s=>Ot(s,t,n));return await Promise.all(r)}async function me(e,t,n){return await pe(e,r=>Pt(r,t,n))}async function Pt(e,t,n){let s=await(await fetch(e,n.fetch)).arrayBuffer();return await t(s,n)}async function J(e){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=await mr(e,t);return await me(n,mt.parse,t)}async function mr(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=t&&t.image&&t.image.mipLevels||0;return r!==0?await xr(e,r,t,n):xt(e,t,n)}async function xr(e,t,n,r){let s=[];if(t==="auto"){let i=xt(e,n,{...r,lod:0}),o=await Pt(i,mt.parse,n),{width:c,height:a}=bt(o);t=gr({width:c,height:a}),s.push(i)}q(t>0);for(let i=s.length;i<t;++i){let o=xt(e,n,{...r,lod:i});s.push(o)}return s}function gr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}function ge(e,t){let n=e.createTexture({id:"brdfLUT",sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"},data:J(t.brdfLutUrl)}),r=xe(e,{id:"DiffuseEnvSampler",getTextureForFace:i=>J(t.getTexUrl("diffuse",i,0)),sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}}),s=xe(e,{id:"SpecularEnvSampler",getTextureForFace:i=>{let o=[];for(let c=0;c<=t.specularMipLevels-1;c++)o.push(J(t.getTexUrl("specular",i,c)));return o},sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}});return{brdfLutTexture:n,diffuseEnvSampler:r,specularEnvSampler:s}}var dr=[0,1,2,3,4,5];function xe(e,{id:t,getTextureForFace:n,sampler:r}){let s={};return dr.forEach(i=>{s[String(i)]=n(i)}),e.createTexture({id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var W=D(Ct(),1);var ei=1/Math.PI*180,ni=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 L=globalThis.mathgl.config;function Me(e,{precision:t=L.precision}={}){return e=ur(e),`${parseFloat(e.toPrecision(t))}`}function Y(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Bt(e,t,n){let r=L.EPSILON;n&&(L.EPSILON=n);try{if(e===t)return!0;if(Y(e)&&Y(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;++s)if(!Bt(e[s],t[s]))return!1;return!0}return e&&e.equals?e.equals(t):t&&t.equals?t.equals(e):typeof e=="number"&&typeof t=="number"?Math.abs(e-t)<=L.EPSILON*Math.max(1,Math.abs(e),Math.abs(t)):!1}finally{L.EPSILON=r}}function ur(e){return Math.round(e/L.EPSILON)*L.EPSILON}var V=class extends Array{clone(){return new this.constructor().copy(this)}fromArray(t,n=0){for(let r=0;r<this.ELEMENTS;++r)this[r]=t[r+n];return this.check()}toArray(t=[],n=0){for(let r=0;r<this.ELEMENTS;++r)t[n+r]=this[r];return t}toObject(t){return t}from(t){return Array.isArray(t)?this.copy(t):this.fromObject(t)}to(t){return t===this?this:Y(t)?this.toArray(t):this.toObject(t)}toTarget(t){return t?this.to(t):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(L)}formatString(t){let n="";for(let r=0;r<this.ELEMENTS;++r)n+=(r>0?", ":"")+Me(this[r],t);return`${t.printTypes?this.constructor.name:""}[${n}]`}equals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(!Bt(this[n],t[n]))return!1;return!0}exactEquals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(this[n]!==t[n])return!1;return!0}negate(){for(let t=0;t<this.ELEMENTS;++t)this[t]=-this[t];return this.check()}lerp(t,n,r){if(r===void 0)return this.lerp(this,t,n);for(let s=0;s<this.ELEMENTS;++s){let i=t[s],o=typeof n=="number"?n:n[s];this[s]=i+r*(o-i)}return this.check()}min(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(t[n],this[n]);return this.check()}max(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.max(t[n],this[n]);return this.check()}clamp(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t[r]),n[r]);return this.check()}add(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]+=n[r];return this.check()}subtract(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]-=n[r];return this.check()}scale(t){if(typeof t=="number")for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;else for(let n=0;n<this.ELEMENTS&&n<t.length;++n)this[n]*=t[n];return this.check()}multiplyByScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}check(){if(L.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let t=this.length===this.ELEMENTS;for(let n=0;n<this.ELEMENTS;++n)t=t&&Number.isFinite(this[n]);return t}sub(t){return this.subtract(t)}setScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]=t;return this.check()}addScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]+=t;return this.check()}subScalar(t){return this.addScalar(-t)}multiplyScalar(t){for(let n=0;n<this.ELEMENTS;++n)this[n]*=t;return this.check()}divideScalar(t){return this.multiplyByScalar(1/t)}clampScalar(t,n){for(let r=0;r<this.ELEMENTS;++r)this[r]=Math.min(Math.max(this[r],t),n);return this.check()}get elements(){return this}};function _r(e,t){if(e.length!==t)return!1;for(let n=0;n<e.length;++n)if(!Number.isFinite(e[n]))return!1;return!0}function y(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function H(e,t,n=""){if(L.debug&&!_r(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function zt(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var gt=class extends V{get x(){return this[0]}set x(t){this[0]=y(t)}get y(){return this[1]}set y(t){this[1]=y(t)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let t=0;for(let n=0;n<this.ELEMENTS;++n)t+=this[n]*this[n];return t}magnitudeSquared(){return this.lengthSquared()}distance(t){return Math.sqrt(this.distanceSquared(t))}distanceSquared(t){let n=0;for(let r=0;r<this.ELEMENTS;++r){let s=this[r]-t[r];n+=s*s}return y(n)}dot(t){let n=0;for(let r=0;r<this.ELEMENTS;++r)n+=this[r]*t[r];return y(n)}normalize(){let t=this.magnitude();if(t!==0)for(let n=0;n<this.ELEMENTS;++n)this[n]/=t;return this.check()}multiply(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]*=n[r];return this.check()}divide(...t){for(let n of t)for(let r=0;r<this.ELEMENTS;++r)this[r]/=n[r];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(t){return this.distance(t)}distanceToSquared(t){return this.distanceSquared(t)}getComponent(t){return zt(t>=0&&t<this.ELEMENTS,"index is out of range"),y(this[t])}setComponent(t,n){return zt(t>=0&&t<this.ELEMENTS,"index is out of range"),this[t]=n,this.check()}addVectors(t,n){return this.copy(t).add(n)}subVectors(t,n){return this.copy(t).subtract(n)}multiplyVectors(t,n){return this.copy(t).multiply(n)}addScaledVector(t,n){return this.add(new this.constructor(t).multiplyScalar(n))}};var R=typeof Float32Array<"u"?Float32Array:Array;var mi=Math.PI/180;function Ar(){let e=new R(2);return R!=Float32Array&&(e[0]=0,e[1]=0),e}function Ae(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[4]*s+n[12],e[1]=n[1]*r+n[5]*s+n[13],e}var xi=function(){let e=Ar();return function(t,n,r,s,i,o){let c,a;for(n||(n=2),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],i(e,e,o),t[c]=e[0],t[c+1]=e[1];return t}}();function Se(e,t,n){let r=t[0],s=t[1],i=n[3]*r+n[7]*s||1;return e[0]=(n[0]*r+n[4]*s)/i,e[1]=(n[1]*r+n[5]*s)/i,e}function Ee(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i||1;return e[0]=(n[0]*r+n[4]*s+n[8]*i)/o,e[1]=(n[1]*r+n[5]*s+n[9]*i)/o,e[2]=(n[2]*r+n[6]*s+n[10]*i)/o,e}function ye(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[2]*s,e[1]=n[1]*r+n[3]*s,e[2]=t[2],e[3]=t[3],e}function Te(e,t,n){let r=t[0],s=t[1],i=t[2];return e[0]=n[0]*r+n[3]*s+n[6]*i,e[1]=n[1]*r+n[4]*s+n[7]*i,e[2]=n[2]*r+n[5]*s+n[8]*i,e[3]=t[3],e}function kt(){let e=new R(3);return R!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Sr(e){let t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Ft(e,t,n){let r=new R(3);return r[0]=e,r[1]=t,r[2]=n,r}function Le(e,t){let n=t[0],r=t[1],s=t[2],i=n*n+r*r+s*s;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function Re(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function dt(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2];return e[0]=s*a-i*c,e[1]=i*o-r*a,e[2]=r*c-s*o,e}function Mt(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[3]*r+n[7]*s+n[11]*i+n[15];return o=o||1,e[0]=(n[0]*r+n[4]*s+n[8]*i+n[12])/o,e[1]=(n[1]*r+n[5]*s+n[9]*i+n[13])/o,e[2]=(n[2]*r+n[6]*s+n[10]*i+n[14])/o,e}function Ie(e,t,n){let r=n[0],s=n[1],i=n[2],o=n[3],c=t[0],a=t[1],f=t[2],l=s*f-i*a,h=i*c-r*f,p=r*a-s*c,m=s*p-i*h,x=i*l-r*p,g=r*h-s*l,d=o*2;return l*=d,h*=d,p*=d,m*=2,x*=2,g*=2,e[0]=c+l+m,e[1]=a+h+x,e[2]=f+p+g,e}var ve=Sr;var Mi=function(){let e=kt();return function(t,n,r,s,i,o){let c,a;for(n||(n=3),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2];return t}}();var ut,G=class extends gt{static get ZERO(){return ut||(ut=new G(0,0,0,0),Object.freeze(ut)),ut}constructor(t=0,n=0,r=0,s=0){super(-0,-0,-0,-0),Y(t)&&arguments.length===1?this.copy(t):(L.debug&&(y(t),y(n),y(r),y(s)),this[0]=t,this[1]=n,this[2]=r,this[3]=s)}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}fromObject(t){return L.debug&&(y(t.x),y(t.y),y(t.z),y(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]=y(t)}get w(){return this[3]}set w(t){this[3]=y(t)}transform(t){return Mt(this,this,t),this.check()}transformByMatrix3(t){return Te(this,this,t),this.check()}transformByMatrix2(t){return ye(this,this,t),this.check()}transformByQuaternion(t){return Ie(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var _t=class extends V{toString(){let t="[";if(L.printRowMajor){t+="row-major:";for(let n=0;n<this.RANK;++n)for(let r=0;r<this.RANK;++r)t+=` ${this[r*this.RANK+n]}`}else{t+="column-major:";for(let n=0;n<this.ELEMENTS;++n)t+=` ${this[n]}`}return t+="]",t}getElementIndex(t,n){return n*this.RANK+t}getElement(t,n){return this[n*this.RANK+t]}setElement(t,n,r){return this[n*this.RANK+t]=y(r),this}getColumn(t,n=new Array(this.RANK).fill(-0)){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)n[s]=this[r+s];return n}setColumn(t,n){let r=t*this.RANK;for(let s=0;s<this.RANK;++s)this[r+s]=n[s];return this}};function Ne(){let e=new R(9);return R!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function Tr(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function be(e,t){if(e===t){let n=t[1],r=t[2],s=t[3],i=t[6],o=t[7],c=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=s,e[13]=o,e[14]=c}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function we(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=t[4],c=t[5],a=t[6],f=t[7],l=t[8],h=t[9],p=t[10],m=t[11],x=t[12],g=t[13],d=t[14],S=t[15],T=n*c-r*o,M=n*a-s*o,u=n*f-i*o,_=r*a-s*c,A=r*f-i*c,I=s*f-i*a,v=l*g-h*x,N=l*d-p*x,b=l*S-m*x,w=h*d-p*g,O=h*S-m*g,P=p*S-m*d,E=T*P-M*O+u*w+_*b-A*N+I*v;return E?(E=1/E,e[0]=(c*P-a*O+f*w)*E,e[1]=(s*O-r*P-i*w)*E,e[2]=(g*I-d*A+S*_)*E,e[3]=(p*A-h*I-m*_)*E,e[4]=(a*b-o*P-f*N)*E,e[5]=(n*P-s*b+i*N)*E,e[6]=(d*u-x*I-S*M)*E,e[7]=(l*I-p*u+m*M)*E,e[8]=(o*O-c*b+f*v)*E,e[9]=(r*b-n*O-i*v)*E,e[10]=(x*A-g*u+S*T)*E,e[11]=(h*u-l*A-m*T)*E,e[12]=(c*N-o*w-a*v)*E,e[13]=(n*w-r*N+s*v)*E,e[14]=(g*M-x*_-d*T)*E,e[15]=(l*_-h*M+p*T)*E,e):null}function Oe(e){let t=e[0],n=e[1],r=e[2],s=e[3],i=e[4],o=e[5],c=e[6],a=e[7],f=e[8],l=e[9],h=e[10],p=e[11],m=e[12],x=e[13],g=e[14],d=e[15],S=t*o-n*i,T=t*c-r*i,M=n*c-r*o,u=f*x-l*m,_=f*g-h*m,A=l*g-h*x,I=t*A-n*_+r*u,v=i*A-o*_+c*u,N=f*M-l*T+h*S,b=m*M-x*T+g*S;return a*I-s*v+d*N-p*b}function Ut(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=t[4],a=t[5],f=t[6],l=t[7],h=t[8],p=t[9],m=t[10],x=t[11],g=t[12],d=t[13],S=t[14],T=t[15],M=n[0],u=n[1],_=n[2],A=n[3];return e[0]=M*r+u*c+_*h+A*g,e[1]=M*s+u*a+_*p+A*d,e[2]=M*i+u*f+_*m+A*S,e[3]=M*o+u*l+_*x+A*T,M=n[4],u=n[5],_=n[6],A=n[7],e[4]=M*r+u*c+_*h+A*g,e[5]=M*s+u*a+_*p+A*d,e[6]=M*i+u*f+_*m+A*S,e[7]=M*o+u*l+_*x+A*T,M=n[8],u=n[9],_=n[10],A=n[11],e[8]=M*r+u*c+_*h+A*g,e[9]=M*s+u*a+_*p+A*d,e[10]=M*i+u*f+_*m+A*S,e[11]=M*o+u*l+_*x+A*T,M=n[12],u=n[13],_=n[14],A=n[15],e[12]=M*r+u*c+_*h+A*g,e[13]=M*s+u*a+_*p+A*d,e[14]=M*i+u*f+_*m+A*S,e[15]=M*o+u*l+_*x+A*T,e}function Pe(e,t,n){let r=n[0],s=n[1],i=n[2],o,c,a,f,l,h,p,m,x,g,d,S;return t===e?(e[12]=t[0]*r+t[4]*s+t[8]*i+t[12],e[13]=t[1]*r+t[5]*s+t[9]*i+t[13],e[14]=t[2]*r+t[6]*s+t[10]*i+t[14],e[15]=t[3]*r+t[7]*s+t[11]*i+t[15]):(o=t[0],c=t[1],a=t[2],f=t[3],l=t[4],h=t[5],p=t[6],m=t[7],x=t[8],g=t[9],d=t[10],S=t[11],e[0]=o,e[1]=c,e[2]=a,e[3]=f,e[4]=l,e[5]=h,e[6]=p,e[7]=m,e[8]=x,e[9]=g,e[10]=d,e[11]=S,e[12]=o*r+l*s+x*i+t[12],e[13]=c*r+h*s+g*i+t[13],e[14]=a*r+p*s+d*i+t[14],e[15]=f*r+m*s+S*i+t[15]),e}function Ce(e,t,n){let r=n[0],s=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*s,e[5]=t[5]*s,e[6]=t[6]*s,e[7]=t[7]*s,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Be(e,t,n,r){let s=r[0],i=r[1],o=r[2],c=Math.sqrt(s*s+i*i+o*o),a,f,l,h,p,m,x,g,d,S,T,M,u,_,A,I,v,N,b,w,O,P,E,X;return c<1e-6?null:(c=1/c,s*=c,i*=c,o*=c,f=Math.sin(n),a=Math.cos(n),l=1-a,h=t[0],p=t[1],m=t[2],x=t[3],g=t[4],d=t[5],S=t[6],T=t[7],M=t[8],u=t[9],_=t[10],A=t[11],I=s*s*l+a,v=i*s*l+o*f,N=o*s*l-i*f,b=s*i*l-o*f,w=i*i*l+a,O=o*i*l+s*f,P=s*o*l+i*f,E=i*o*l-s*f,X=o*o*l+a,e[0]=h*I+g*v+M*N,e[1]=p*I+d*v+u*N,e[2]=m*I+S*v+_*N,e[3]=x*I+T*v+A*N,e[4]=h*b+g*w+M*O,e[5]=p*b+d*w+u*O,e[6]=m*b+S*w+_*O,e[7]=x*b+T*w+A*O,e[8]=h*P+g*E+M*X,e[9]=p*P+d*E+u*X,e[10]=m*P+S*E+_*X,e[11]=x*P+T*E+A*X,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}function ze(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[4],o=t[5],c=t[6],a=t[7],f=t[8],l=t[9],h=t[10],p=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=i*s+f*r,e[5]=o*s+l*r,e[6]=c*s+h*r,e[7]=a*s+p*r,e[8]=f*s-i*r,e[9]=l*s-o*r,e[10]=h*s-c*r,e[11]=p*s-a*r,e}function ke(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],f=t[8],l=t[9],h=t[10],p=t[11];return t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*s-f*r,e[1]=o*s-l*r,e[2]=c*s-h*r,e[3]=a*s-p*r,e[8]=i*r+f*s,e[9]=o*r+l*s,e[10]=c*r+h*s,e[11]=a*r+p*s,e}function Fe(e,t,n){let r=Math.sin(n),s=Math.cos(n),i=t[0],o=t[1],c=t[2],a=t[3],f=t[4],l=t[5],h=t[6],p=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*s+f*r,e[1]=o*s+l*r,e[2]=c*s+h*r,e[3]=a*s+p*r,e[4]=f*s-i*r,e[5]=l*s-o*r,e[6]=h*s-c*r,e[7]=p*s-a*r,e}function Ue(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n+n,c=r+r,a=s+s,f=n*o,l=r*o,h=r*c,p=s*o,m=s*c,x=s*a,g=i*o,d=i*c,S=i*a;return e[0]=1-h-x,e[1]=l+S,e[2]=p-d,e[3]=0,e[4]=l-S,e[5]=1-f-x,e[6]=m+g,e[7]=0,e[8]=p+d,e[9]=m-g,e[10]=1-f-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ve(e,t,n,r,s,i,o){let c=1/(n-t),a=1/(s-r),f=1/(i-o);return e[0]=i*2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i*2*a,e[6]=0,e[7]=0,e[8]=(n+t)*c,e[9]=(s+r)*a,e[10]=(o+i)*f,e[11]=-1,e[12]=0,e[13]=0,e[14]=o*i*2*f,e[15]=0,e}function Lr(e,t,n,r,s){let i=1/Math.tan(t/2);if(e[0]=i/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,s!=null&&s!==1/0){let o=1/(r-s);e[10]=(s+r)*o,e[14]=2*s*r*o}else e[10]=-1,e[14]=-2*r;return e}var qe=Lr;function Rr(e,t,n,r,s,i,o){let c=1/(t-n),a=1/(r-s),f=1/(i-o);return e[0]=-2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*f,e[11]=0,e[12]=(t+n)*c,e[13]=(s+r)*a,e[14]=(o+i)*f,e[15]=1,e}var De=Rr;function Ye(e,t,n,r){let s,i,o,c,a,f,l,h,p,m,x=t[0],g=t[1],d=t[2],S=r[0],T=r[1],M=r[2],u=n[0],_=n[1],A=n[2];return Math.abs(x-u)<1e-6&&Math.abs(g-_)<1e-6&&Math.abs(d-A)<1e-6?Tr(e):(h=x-u,p=g-_,m=d-A,s=1/Math.sqrt(h*h+p*p+m*m),h*=s,p*=s,m*=s,i=T*m-M*p,o=M*h-S*m,c=S*p-T*h,s=Math.sqrt(i*i+o*o+c*c),s?(s=1/s,i*=s,o*=s,c*=s):(i=0,o=0,c=0),a=p*c-m*o,f=m*i-h*c,l=h*o-p*i,s=Math.sqrt(a*a+f*f+l*l),s?(s=1/s,a*=s,f*=s,l*=s):(a=0,f=0,l=0),e[0]=i,e[1]=a,e[2]=h,e[3]=0,e[4]=o,e[5]=f,e[6]=p,e[7]=0,e[8]=c,e[9]=l,e[10]=m,e[11]=0,e[12]=-(i*x+o*g+c*d),e[13]=-(a*x+f*g+l*d),e[14]=-(h*x+p*g+m*d),e[15]=1,e)}function Ir(){let e=new R(4);return R!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}function He(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function Ge(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function $e(e){let t=e[0],n=e[1],r=e[2],s=e[3];return Math.sqrt(t*t+n*n+r*r+s*s)}function We(e){let t=e[0],n=e[1],r=e[2],s=e[3];return t*t+n*n+r*r+s*s}function Xe(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i;return o>0&&(o=1/Math.sqrt(o)),e[0]=n*o,e[1]=r*o,e[2]=s*o,e[3]=i*o,e}function je(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function Ke(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3];return e[0]=s+r*(n[0]-s),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e[3]=c+r*(n[3]-c),e}function Qe(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3];return e[0]=n[0]*r+n[4]*s+n[8]*i+n[12]*o,e[1]=n[1]*r+n[5]*s+n[9]*i+n[13]*o,e[2]=n[2]*r+n[6]*s+n[10]*i+n[14]*o,e[3]=n[3]*r+n[7]*s+n[11]*i+n[15]*o,e}function Ze(e,t,n){let r=t[0],s=t[1],i=t[2],o=n[0],c=n[1],a=n[2],f=n[3],l=f*r+c*i-a*s,h=f*s+a*r-o*i,p=f*i+o*s-c*r,m=-o*r-c*s-a*i;return e[0]=l*f+m*-o+h*-a-p*-c,e[1]=h*f+m*-c+p*-o-l*-a,e[2]=p*f+m*-a+l*-c-h*-o,e[3]=t[3],e}var Ni=function(){let e=Ir();return function(t,n,r,s,i,o){let c,a;for(n||(n=4),r||(r=0),s?a=Math.min(s*n+r,t.length):a=t.length,c=r;c<a;c+=n)e[0]=t[c],e[1]=t[c+1],e[2]=t[c+2],e[3]=t[c+3],i(e,e,o),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2],t[c+3]=e[3];return t}}();var Dt;(function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL0ROW3=3]="COL0ROW3",e[e.COL1ROW0=4]="COL1ROW0",e[e.COL1ROW1=5]="COL1ROW1",e[e.COL1ROW2=6]="COL1ROW2",e[e.COL1ROW3=7]="COL1ROW3",e[e.COL2ROW0=8]="COL2ROW0",e[e.COL2ROW1=9]="COL2ROW1",e[e.COL2ROW2=10]="COL2ROW2",e[e.COL2ROW3=11]="COL2ROW3",e[e.COL3ROW0=12]="COL3ROW0",e[e.COL3ROW1=13]="COL3ROW1",e[e.COL3ROW2=14]="COL3ROW2",e[e.COL3ROW3=15]="COL3ROW3"})(Dt||(Dt={}));var Nr=45*Math.PI/180,br=1,Vt=.1,qt=500,wr=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),F=class extends _t{static get IDENTITY(){return Pr()}static get ZERO(){return Or()}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,n,r,s,i,o,c,a,f,l,h,p,m,x,g,d){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this[4]=i,this[5]=o,this[6]=c,this[7]=a,this[8]=f,this[9]=l,this[10]=h,this[11]=p,this[12]=m,this[13]=x,this[14]=g,this[15]=d,this.check()}setRowMajor(t,n,r,s,i,o,c,a,f,l,h,p,m,x,g,d){return this[0]=t,this[1]=i,this[2]=f,this[3]=m,this[4]=n,this[5]=o,this[6]=l,this[7]=x,this[8]=r,this[9]=c,this[10]=h,this[11]=g,this[12]=s,this[13]=a,this[14]=p,this[15]=d,this.check()}toRowMajor(t){return t[0]=this[0],t[1]=this[4],t[2]=this[8],t[3]=this[12],t[4]=this[1],t[5]=this[5],t[6]=this[9],t[7]=this[13],t[8]=this[2],t[9]=this[6],t[10]=this[10],t[11]=this[14],t[12]=this[3],t[13]=this[7],t[14]=this[11],t[15]=this[15],t}identity(){return this.copy(wr)}fromObject(t){return this.check()}fromQuaternion(t){return Ue(this,t),this.check()}frustum(t){let{left:n,right:r,bottom:s,top:i,near:o=Vt,far:c=qt}=t;return c===1/0?Cr(this,n,r,s,i,o):Ve(this,n,r,s,i,o,c),this.check()}lookAt(t){let{eye:n,center:r=[0,0,0],up:s=[0,1,0]}=t;return Ye(this,n,r,s),this.check()}ortho(t){let{left:n,right:r,bottom:s,top:i,near:o=Vt,far:c=qt}=t;return De(this,n,r,s,i,o,c),this.check()}orthographic(t){let{fovy:n=Nr,aspect:r=br,focalDistance:s=1,near:i=Vt,far:o=qt}=t;Je(n);let c=n/2,a=s*Math.tan(c),f=a*r;return this.ortho({left:-f,right:f,bottom:-a,top:a,near:i,far:o})}perspective(t){let{fovy:n=45*Math.PI/180,aspect:r=1,near:s=.1,far:i=500}=t;return Je(n),qe(this,n,r,s,i),this.check()}determinant(){return Oe(this)}getScale(t=[-0,-0,-0]){return t[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),t[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),t[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),t}getTranslation(t=[-0,-0,-0]){return t[0]=this[12],t[1]=this[13],t[2]=this[14],t}getRotation(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*i,t[6]=this[6]*o,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*i,t[10]=this[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}getRotationMatrix3(t,n){t=t||[-0,-0,-0,-0,-0,-0,-0,-0,-0],n=n||[-0,-0,-0];let r=this.getScale(n),s=1/r[0],i=1/r[1],o=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*i,t[2]=this[2]*o,t[3]=this[4]*s,t[4]=this[5]*i,t[5]=this[6]*o,t[6]=this[8]*s,t[7]=this[9]*i,t[8]=this[10]*o,t}transpose(){return be(this,this),this.check()}invert(){return we(this,this),this.check()}multiplyLeft(t){return Ut(this,t,this),this.check()}multiplyRight(t){return Ut(this,this,t),this.check()}rotateX(t){return ze(this,this,t),this.check()}rotateY(t){return ke(this,this,t),this.check()}rotateZ(t){return Fe(this,this,t),this.check()}rotateXYZ(t){return this.rotateX(t[0]).rotateY(t[1]).rotateZ(t[2])}rotateAxis(t,n){return Be(this,this,t,n),this.check()}scale(t){return Ce(this,this,Array.isArray(t)?t:[t,t,t]),this.check()}translate(t){return Pe(this,this,t),this.check()}transform(t,n){return t.length===4?(n=Qe(n||[-0,-0,-0,-0],t,this),H(n,4),n):this.transformAsPoint(t,n)}transformAsPoint(t,n){let{length:r}=t,s;switch(r){case 2:s=Ae(n||[-0,-0],t,this);break;case 3:s=Mt(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return H(s,t.length),s}transformAsVector(t,n){let r;switch(t.length){case 2:r=Se(n||[-0,-0],t,this);break;case 3:r=Ee(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return H(r,t.length),r}transformPoint(t,n){return this.transformAsPoint(t,n)}transformVector(t,n){return this.transformAsPoint(t,n)}transformDirection(t,n){return this.transformAsVector(t,n)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,n,r){return this.identity().translate([t,n,r])}},At,St;function Or(){return At||(At=new F([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(At)),At}function Pr(){return St||(St=new F,Object.freeze(St)),St}function Je(e){if(e>Math.PI*2)throw Error("expected radians")}function Cr(e,t,n,r,s,i){let o=2*i/(n-t),c=2*i/(s-r),a=(n+t)/(n-t),f=(s+r)/(s-r),l=-1,h=-1,p=-2*i;return e[0]=o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=a,e[9]=f,e[10]=l,e[11]=h,e[12]=0,e[13]=0,e[14]=p,e[15]=0,e}function tn(){let e=new R(4);return R!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function en(e){return e[0]=0,e[1]=0,e[2]=0,e[3]=1,e}function Yt(e,t,n){n=n*.5;let r=Math.sin(n);return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=Math.cos(n),e}function Ht(e,t,n){let r=t[0],s=t[1],i=t[2],o=t[3],c=n[0],a=n[1],f=n[2],l=n[3];return e[0]=r*l+o*c+s*f-i*a,e[1]=s*l+o*a+i*c-r*f,e[2]=i*l+o*f+r*a-s*c,e[3]=o*l-r*c-s*a-i*f,e}function nn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+o*c,e[1]=s*a+i*c,e[2]=i*a-s*c,e[3]=o*a-r*c,e}function rn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a-i*c,e[1]=s*a+o*c,e[2]=i*a+r*c,e[3]=o*a-s*c,e}function sn(e,t,n){n*=.5;let r=t[0],s=t[1],i=t[2],o=t[3],c=Math.sin(n),a=Math.cos(n);return e[0]=r*a+s*c,e[1]=s*a-r*c,e[2]=i*a+o*c,e[3]=o*a-i*c,e}function on(e,t){let n=t[0],r=t[1],s=t[2];return e[0]=n,e[1]=r,e[2]=s,e[3]=Math.sqrt(Math.abs(1-n*n-r*r-s*s)),e}function et(e,t,n,r){let s=t[0],i=t[1],o=t[2],c=t[3],a=n[0],f=n[1],l=n[2],h=n[3],p,m,x,g,d;return p=s*a+i*f+o*l+c*h,p<0&&(p=-p,a=-a,f=-f,l=-l,h=-h),1-p>1e-6?(m=Math.acos(p),d=Math.sin(m),x=Math.sin((1-r)*m)/d,g=Math.sin(r*m)/d):(x=1-r,g=r),e[0]=x*s+g*a,e[1]=x*i+g*f,e[2]=x*o+g*l,e[3]=x*c+g*h,e}function cn(e,t){let n=t[0],r=t[1],s=t[2],i=t[3],o=n*n+r*r+s*s+i*i,c=o?1/o:0;return e[0]=-n*c,e[1]=-r*c,e[2]=-s*c,e[3]=i*c,e}function an(e,t){return e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e[3]=t[3],e}function Gt(e,t){let n=t[0]+t[4]+t[8],r;if(n>0)r=Math.sqrt(n+1),e[3]=.5*r,r=.5/r,e[0]=(t[5]-t[7])*r,e[1]=(t[6]-t[2])*r,e[2]=(t[1]-t[3])*r;else{let s=0;t[4]>t[0]&&(s=1),t[8]>t[s*3+s]&&(s=2);let i=(s+1)%3,o=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[i*3+i]-t[o*3+o]+1),e[s]=.5*r,r=.5/r,e[3]=(t[i*3+o]-t[o*3+i])*r,e[i]=(t[i*3+s]+t[s*3+i])*r,e[o]=(t[o*3+s]+t[s*3+o])*r}return e}var fn=He;var ln=Ge,hn=je,pn=Ke,mn=$e;var xn=We;var gn=Xe;var dn=function(){let e=kt(),t=Ft(1,0,0),n=Ft(0,1,0);return function(r,s,i){let o=Re(s,i);return o<-.999999?(dt(e,t,s),ve(e)<1e-6&&dt(e,n,s),Le(e,e),Yt(r,e,Math.PI),r):o>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(dt(e,s,i),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+o,gn(r,r))}}(),Yi=function(){let e=tn(),t=tn();return function(n,r,s,i,o,c){return et(e,r,o,c),et(t,s,i,c),et(n,e,t,2*c*(1-c)),n}}(),Hi=function(){let e=Ne();return function(t,n,r,s){return e[0]=r[0],e[3]=r[1],e[6]=r[2],e[1]=s[0],e[4]=s[1],e[7]=s[2],e[2]=-n[0],e[5]=-n[1],e[8]=-n[2],gn(t,Gt(t,e))}}();var Br=[0,0,0,1],nt=class extends V{constructor(t=0,n=0,r=0,s=1){super(-0,-0,-0,-0),Array.isArray(t)&&arguments.length===1?this.copy(t):this.set(t,n,r,s)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this[3]=t[3],this.check()}set(t,n,r,s){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this.check()}fromObject(t){return this[0]=t.x,this[1]=t.y,this[2]=t.z,this[3]=t.w,this.check()}fromMatrix3(t){return Gt(this,t),this.check()}fromAxisRotation(t,n){return Yt(this,t,n),this.check()}identity(){return en(this),this.check()}setAxisAngle(t,n){return this.fromAxisRotation(t,n)}get ELEMENTS(){return 4}get x(){return this[0]}set x(t){this[0]=y(t)}get y(){return this[1]}set y(t){this[1]=y(t)}get z(){return this[2]}set z(t){this[2]=y(t)}get w(){return this[3]}set w(t){this[3]=y(t)}len(){return mn(this)}lengthSquared(){return xn(this)}dot(t){return hn(this,t)}rotationTo(t,n){return dn(this,t,n),this.check()}add(t){return fn(this,this,t),this.check()}calculateW(){return on(this,this),this.check()}conjugate(){return an(this,this),this.check()}invert(){return cn(this,this),this.check()}lerp(t,n,r){return r===void 0?this.lerp(this,t,n):(pn(this,t,n,r),this.check())}multiplyRight(t){return Ht(this,this,t),this.check()}multiplyLeft(t){return Ht(this,t,this),this.check()}normalize(){let t=this.len(),n=t>0?1/t:0;return this[0]=this[0]*n,this[1]=this[1]*n,this[2]=this[2]*n,this[3]=this[3]*n,t===0&&(this[3]=1),this.check()}rotateX(t){return nn(this,this,t),this.check()}rotateY(t){return rn(this,this,t),this.check()}rotateZ(t){return sn(this,this,t),this.check()}scale(t){return ln(this,this,t),this.check()}slerp(t,n,r){let s,i,o;switch(arguments.length){case 1:({start:s=Br,target:i,ratio:o}=t);break;case 2:s=this,i=t,o=n;break;default:s=t,i=n,o=r}return et(this,s,i,o),this.check()}transformVector4(t,n=new G){return Ze(n,t,this),H(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,n){return this.setAxisAngle(t,n)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};var rt=D(j(),1);var zr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},kr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Wt=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:o})=>{Yr(r,s,i,o),Ur(i,i._node)})}},$=class{animations;constructor(t){this.animations=t.animations.map((n,r)=>{let s=n.name||`Animation-${r}`,i=n.samplers.map(({input:c,interpolation:a="LINEAR",output:f})=>({input:Mn(t.accessors[c]),interpolation:a,output:Mn(t.accessors[f])})),o=n.channels.map(({sampler:c,target:a})=>({sampler:i[c],target:t.nodes[a.node],path:a.path}));return new Wt({name:s,channels:o})})}animate(t){this.setTime(t)}setTime(t){this.animations.forEach(n=>n.animate(t))}getAnimations(){return this.animations}};function Mn(e){if(!e._animation){let t=kr[e.componentType],n=zr[e.type],r=n*e.count,{buffer:s,byteOffset:i}=e.bufferView.data,o=new t(s,i+(e.byteOffset||0),r);if(n===1)e._animation=Array.from(o);else{let c=[];for(let a=0;a<o.length;a+=n)c.push(Array.from(o.slice(a,a+n)));e._animation=c}}return e._animation}var Fr=new F;function Ur(e,t){if(t.matrix.identity(),e.translation&&t.matrix.translate(e.translation),e.rotation){let n=Fr.fromQuaternion(e.rotation);t.matrix.multiplyRight(n)}e.scale&&t.matrix.scale(e.scale)}var $t=new nt;function Vr(e,t,n,r,s){if(t==="rotation"){$t.slerp({start:n,target:r,ratio:s});for(let i=0;i<$t.length;i++)e[t][i]=$t[i]}else for(let i=0;i<n.length;i++)e[t][i]=s*r[i]+(1-s)*n[i]}function qr(e,t,{p0:n,outTangent0:r,inTangent1:s,p1:i,tDiff:o,ratio:c}){for(let a=0;a<e[t].length;a++){let f=r[a]*o,l=s[a]*o;e[t][a]=(2*Math.pow(c,3)-3*Math.pow(c,2)+1)*n[a]+(Math.pow(c,3)-2*Math.pow(c,2)+c)*f+(-2*Math.pow(c,3)+3*Math.pow(c,2))*i[a]+(Math.pow(c,3)-Math.pow(c,2))*l}}function Dr(e,t,n){for(let r=0;r<n.length;r++)e[t][r]=n[r]}function Yr(e,{input:t,interpolation:n,output:r},s,i){let o=t[t.length-1],c=e%o,a=t.findIndex(p=>p>=c),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:rt.log.warn(`Bad animation path ${i}`)()}(0,rt.assert)(s[i].length===r[f].length);let l=t[f],h=t[a];switch(n){case"STEP":Dr(s,i,r[f]);break;case"LINEAR":if(h>l){let p=(c-l)/(h-l);Vr(s,i,r[f],r[a],p)}break;case"CUBICSPLINE":if(h>l){let p=(c-l)/(h-l),m=h-l,x=r[3*f+1],g=r[3*f+2],d=r[3*a+0],S=r[3*a+1];qr(s,i,{p0:x,outTangent0:g,inTangent1:d,p1:S,tDiff:m,ratio:p})}break;default:rt.log.warn(`Interpolation ${n} not supported`)();break}}var yn=D(j(),1);var Xt=`#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))
8
+ struct AmbientLight {
9
+ vec3 color;
10
+ };
11
+ struct PointLight {
12
+ vec3 color;
13
+ vec3 position;
14
+ vec3 attenuation;
15
+ };
16
+ struct DirectionalLight {
17
+ vec3 color;
18
+ vec3 direction;
19
+ };
20
+ uniform AmbientLight lighting_uAmbientLight;
21
+ uniform PointLight lighting_uPointLight[MAX_LIGHTS];
22
+ uniform DirectionalLight lighting_uDirectionalLight[MAX_LIGHTS];
23
+ uniform int lighting_uPointLightCount;
24
+ uniform int lighting_uDirectionalLightCount;
25
+ uniform bool lighting_uEnabled;
26
+ float getPointLightAttenuation(PointLight pointLight, float distance) {
27
+ return pointLight.attenuation.x
28
+ + pointLight.attenuation.y * distance
29
+ + pointLight.attenuation.z * distance * distance;
30
+ }
31
+ #endif
32
+ `;var Hr={lightSources:{}};function jt(e={}){let{color:t=[0,0,0],intensity:n=1}=e;return t.map(r=>r*n/255)}function Gr({ambientLight:e,pointLights:t=[],directionalLights:n=[]}){let r={};return e?r["lighting_uAmbientLight.color"]=jt(e):r["lighting_uAmbientLight.color"]=[0,0,0],t.forEach((s,i)=>{r[`lighting_uPointLight[${i}].color`]=jt(s),r[`lighting_uPointLight[${i}].position`]=s.position,r[`lighting_uPointLight[${i}].attenuation`]=s.attenuation||[1,0,0]}),r.lighting_uPointLightCount=t.length,n.forEach((s,i)=>{r[`lighting_uDirectionalLight[${i}].color`]=jt(s),r[`lighting_uDirectionalLight[${i}].direction`]=s.direction}),r.lighting_uDirectionalLightCount=n.length,r}function un(e=Hr){if("lightSources"in e){let{ambientLight:t,pointLights:n,directionalLights:r}=e.lightSources||{};return t||n&&n.length>0||r&&r.length>0?Object.assign({},Gr({ambientLight:t,pointLights:n,directionalLights:r}),{lighting_uEnabled:!0}):{lighting_uEnabled:!1}}if("lights"in e){let t={pointLights:[],directionalLights:[]};for(let n of e.lights||[])switch(n.type){case"ambient":t.ambientLight=n;break;case"directional":t.directionalLights?.push(n);break;case"point":t.pointLights?.push(n);break;default:}return un({lightSources:t})}return{}}var _n={name:"lights",vs:Xt,fs:Xt,getUniforms:un,defines:{MAX_LIGHTS:3}};var An=`uniform mat4 u_MVPMatrix;
33
+ uniform mat4 u_ModelMatrix;
34
+ uniform mat4 u_NormalMatrix;
35
+ out vec3 pbr_vPosition;
36
+ out vec2 pbr_vUV;
37
+ #ifdef HAS_NORMALS
38
+ # ifdef HAS_TANGENTS
39
+ out mat3 pbr_vTBN;
40
+ # else
41
+ out vec3 pbr_vNormal;
42
+ # endif
43
+ #endif
44
+ void pbr_setPositionNormalTangentUV(vec4 position, vec4 normal, vec4 tangent, vec2 uv)
45
+ {
46
+ vec4 pos = u_ModelMatrix * position;
47
+ pbr_vPosition = vec3(pos.xyz) / pos.w;
48
+ #ifdef HAS_NORMALS
49
+ #ifdef HAS_TANGENTS
50
+ vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(normal.xyz, 0.0)));
51
+ vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent.xyz, 0.0)));
52
+ vec3 bitangentW = cross(normalW, tangentW) * tangent.w;
53
+ pbr_vTBN = mat3(tangentW, bitangentW, normalW);
54
+ #else
55
+ pbr_vNormal = normalize(vec3(u_ModelMatrix * vec4(normal.xyz, 0.0)));
56
+ #endif
57
+ #endif
58
+ #ifdef HAS_UV
59
+ pbr_vUV = uv;
60
+ #else
61
+ pbr_vUV = vec2(0.,0.);
62
+ #endif
63
+ }
64
+ `;var Sn=`precision highp float;
65
+ uniform bool pbr_uUnlit;
66
+ #ifdef USE_IBL
67
+ uniform samplerCube u_DiffuseEnvSampler;
68
+ uniform samplerCube u_SpecularEnvSampler;
69
+ uniform sampler2D u_brdfLUT;
70
+ uniform vec2 u_ScaleIBLAmbient;
71
+ #endif
72
+ #ifdef HAS_BASECOLORMAP
73
+ uniform sampler2D u_BaseColorSampler;
74
+ #endif
75
+ #ifdef HAS_NORMALMAP
76
+ uniform sampler2D u_NormalSampler;
77
+ uniform float u_NormalScale;
78
+ #endif
79
+ #ifdef HAS_EMISSIVEMAP
80
+ uniform sampler2D u_EmissiveSampler;
81
+ uniform vec3 u_EmissiveFactor;
82
+ #endif
83
+ #ifdef HAS_METALROUGHNESSMAP
84
+ uniform sampler2D u_MetallicRoughnessSampler;
85
+ #endif
86
+ #ifdef HAS_OCCLUSIONMAP
87
+ uniform sampler2D u_OcclusionSampler;
88
+ uniform float u_OcclusionStrength;
89
+ #endif
90
+ #ifdef ALPHA_CUTOFF
91
+ uniform float u_AlphaCutoff;
92
+ #endif
93
+ uniform vec2 u_MetallicRoughnessValues;
94
+ uniform vec4 u_BaseColorFactor;
95
+ uniform vec3 u_Camera;
96
+ #ifdef PBR_DEBUG
97
+ uniform vec4 u_ScaleDiffBaseMR;
98
+ uniform vec4 u_ScaleFGDSpec;
99
+ #endif
100
+ in vec3 pbr_vPosition;
101
+ in vec2 pbr_vUV;
102
+ #ifdef HAS_NORMALS
103
+ #ifdef HAS_TANGENTS
104
+ in mat3 pbr_vTBN;
105
+ #else
106
+ in vec3 pbr_vNormal;
107
+ #endif
108
+ #endif
109
+ struct PBRInfo
110
+ {
111
+ float NdotL;
112
+ float NdotV;
113
+ float NdotH;
114
+ float LdotH;
115
+ float VdotH;
116
+ float perceptualRoughness;
117
+ float metalness;
118
+ vec3 reflectance0;
119
+ vec3 reflectance90;
120
+ float alphaRoughness;
121
+ vec3 diffuseColor;
122
+ vec3 specularColor;
123
+ vec3 n;
124
+ vec3 v;
125
+ };
126
+ const float M_PI = 3.141592653589793;
127
+ const float c_MinRoughness = 0.04;
128
+ vec4 SRGBtoLINEAR(vec4 srgbIn)
129
+ {
130
+ #ifdef MANUAL_SRGB
131
+ #ifdef SRGB_FAST_APPROXIMATION
132
+ vec3 linOut = pow(srgbIn.xyz,vec3(2.2));
133
+ #else
134
+ vec3 bLess = step(vec3(0.04045),srgbIn.xyz);
135
+ vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );
136
+ #endif
137
+ return vec4(linOut,srgbIn.w);;
138
+ #else
139
+ return srgbIn;
140
+ #endif
141
+ }
142
+ vec3 getNormal()
143
+ {
144
+ #ifndef HAS_TANGENTS
145
+ vec3 pos_dx = dFdx(pbr_vPosition);
146
+ vec3 pos_dy = dFdy(pbr_vPosition);
147
+ vec3 tex_dx = dFdx(vec3(pbr_vUV, 0.0));
148
+ vec3 tex_dy = dFdy(vec3(pbr_vUV, 0.0));
149
+ vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);
150
+ #ifdef HAS_NORMALS
151
+ vec3 ng = normalize(pbr_vNormal);
152
+ #else
153
+ vec3 ng = cross(pos_dx, pos_dy);
154
+ #endif
155
+ t = normalize(t - ng * dot(ng, t));
156
+ vec3 b = normalize(cross(ng, t));
157
+ mat3 tbn = mat3(t, b, ng);
158
+ #else
159
+ mat3 tbn = pbr_vTBN;
160
+ #endif
161
+ #ifdef HAS_NORMALMAP
162
+ vec3 n = texture(u_NormalSampler, pbr_vUV).rgb;
163
+ n = normalize(tbn * ((2.0 * n - 1.0) * vec3(u_NormalScale, u_NormalScale, 1.0)));
164
+ #else
165
+ vec3 n = normalize(tbn[2].xyz);
166
+ #endif
167
+ return n;
168
+ }
169
+ #ifdef USE_IBL
170
+ vec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)
171
+ {
172
+ float mipCount = 9.0;
173
+ float lod = (pbrInputs.perceptualRoughness * mipCount);
174
+ vec3 brdf = SRGBtoLINEAR(texture(u_brdfLUT,
175
+ vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;
176
+ vec3 diffuseLight = SRGBtoLINEAR(textureCube(u_DiffuseEnvSampler, n)).rgb;
177
+ #ifdef USE_TEX_LOD
178
+ vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;
179
+ #else
180
+ vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;
181
+ #endif
182
+ vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;
183
+ vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);
184
+ diffuse *= u_ScaleIBLAmbient.x;
185
+ specular *= u_ScaleIBLAmbient.y;
186
+ return diffuse + specular;
187
+ }
188
+ #endif
189
+ vec3 diffuse(PBRInfo pbrInputs)
190
+ {
191
+ return pbrInputs.diffuseColor / M_PI;
192
+ }
193
+ vec3 specularReflection(PBRInfo pbrInputs)
194
+ {
195
+ return pbrInputs.reflectance0 +
196
+ (pbrInputs.reflectance90 - pbrInputs.reflectance0) *
197
+ pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);
198
+ }
199
+ float geometricOcclusion(PBRInfo pbrInputs)
200
+ {
201
+ float NdotL = pbrInputs.NdotL;
202
+ float NdotV = pbrInputs.NdotV;
203
+ float r = pbrInputs.alphaRoughness;
204
+ float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));
205
+ float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));
206
+ return attenuationL * attenuationV;
207
+ }
208
+ float microfacetDistribution(PBRInfo pbrInputs)
209
+ {
210
+ float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;
211
+ float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;
212
+ return roughnessSq / (M_PI * f * f);
213
+ }
214
+ void PBRInfo_setAmbientLight(inout PBRInfo pbrInputs) {
215
+ pbrInputs.NdotL = 1.0;
216
+ pbrInputs.NdotH = 0.0;
217
+ pbrInputs.LdotH = 0.0;
218
+ pbrInputs.VdotH = 1.0;
219
+ }
220
+ void PBRInfo_setDirectionalLight(inout PBRInfo pbrInputs, vec3 lightDirection) {
221
+ vec3 n = pbrInputs.n;
222
+ vec3 v = pbrInputs.v;
223
+ vec3 l = normalize(lightDirection);
224
+ vec3 h = normalize(l+v);
225
+ pbrInputs.NdotL = clamp(dot(n, l), 0.001, 1.0);
226
+ pbrInputs.NdotH = clamp(dot(n, h), 0.0, 1.0);
227
+ pbrInputs.LdotH = clamp(dot(l, h), 0.0, 1.0);
228
+ pbrInputs.VdotH = clamp(dot(v, h), 0.0, 1.0);
229
+ }
230
+ void PBRInfo_setPointLight(inout PBRInfo pbrInputs, PointLight pointLight) {
231
+ vec3 light_direction = normalize(pointLight.position - pbr_vPosition);
232
+ PBRInfo_setDirectionalLight(pbrInputs, light_direction);
233
+ }
234
+ vec3 calculateFinalColor(PBRInfo pbrInputs, vec3 lightColor) {
235
+ vec3 F = specularReflection(pbrInputs);
236
+ float G = geometricOcclusion(pbrInputs);
237
+ float D = microfacetDistribution(pbrInputs);
238
+ vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);
239
+ vec3 specContrib = F * G * D / (4.0 * pbrInputs.NdotL * pbrInputs.NdotV);
240
+ return pbrInputs.NdotL * lightColor * (diffuseContrib + specContrib);
241
+ }
242
+ vec4 pbr_filterColor(vec4 colorUnused)
243
+ {
244
+ #ifdef HAS_BASECOLORMAP
245
+ vec4 baseColor = SRGBtoLINEAR(texture(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;
246
+ #else
247
+ vec4 baseColor = u_BaseColorFactor;
248
+ #endif
249
+ #ifdef ALPHA_CUTOFF
250
+ if (baseColor.a < u_AlphaCutoff) {
251
+ discard;
252
+ }
253
+ #endif
254
+ vec3 color = vec3(0, 0, 0);
255
+ if(pbr_uUnlit){
256
+ color.rgb = baseColor.rgb;
257
+ }
258
+ else{
259
+ float perceptualRoughness = u_MetallicRoughnessValues.y;
260
+ float metallic = u_MetallicRoughnessValues.x;
261
+ #ifdef HAS_METALROUGHNESSMAP
262
+ vec4 mrSample = texture(u_MetallicRoughnessSampler, pbr_vUV);
263
+ perceptualRoughness = mrSample.g * perceptualRoughness;
264
+ metallic = mrSample.b * metallic;
265
+ #endif
266
+ perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);
267
+ metallic = clamp(metallic, 0.0, 1.0);
268
+ float alphaRoughness = perceptualRoughness * perceptualRoughness;
269
+ vec3 f0 = vec3(0.04);
270
+ vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);
271
+ diffuseColor *= 1.0 - metallic;
272
+ vec3 specularColor = mix(f0, baseColor.rgb, metallic);
273
+ float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);
274
+ float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);
275
+ vec3 specularEnvironmentR0 = specularColor.rgb;
276
+ vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;
277
+ vec3 n = getNormal();
278
+ vec3 v = normalize(u_Camera - pbr_vPosition);
279
+ float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);
280
+ vec3 reflection = -normalize(reflect(v, n));
281
+ PBRInfo pbrInputs = PBRInfo(
282
+ 0.0,
283
+ NdotV,
284
+ 0.0,
285
+ 0.0,
286
+ 0.0,
287
+ perceptualRoughness,
288
+ metallic,
289
+ specularEnvironmentR0,
290
+ specularEnvironmentR90,
291
+ alphaRoughness,
292
+ diffuseColor,
293
+ specularColor,
294
+ n,
295
+ v
296
+ );
297
+ #ifdef USE_LIGHTS
298
+ PBRInfo_setAmbientLight(pbrInputs);
299
+ color += calculateFinalColor(pbrInputs, lighting_uAmbientLight.color);
300
+ for(int i = 0; i < lighting_uDirectionalLightCount; i++) {
301
+ if (i < lighting_uDirectionalLightCount) {
302
+ PBRInfo_setDirectionalLight(pbrInputs, lighting_uDirectionalLight[i].direction);
303
+ color += calculateFinalColor(pbrInputs, lighting_uDirectionalLight[i].color);
304
+ }
305
+ }
306
+ for(int i = 0; i < lighting_uPointLightCount; i++) {
307
+ if (i < lighting_uPointLightCount) {
308
+ PBRInfo_setPointLight(pbrInputs, lighting_uPointLight[i]);
309
+ float attenuation = getPointLightAttenuation(lighting_uPointLight[i], distance(lighting_uPointLight[i].position, pbr_vPosition));
310
+ color += calculateFinalColor(pbrInputs, lighting_uPointLight[i].color / attenuation);
311
+ }
312
+ }
313
+ #endif
314
+ #ifdef USE_IBL
315
+ color += getIBLContribution(pbrInputs, n, reflection);
316
+ #endif
317
+ #ifdef HAS_OCCLUSIONMAP
318
+ float ao = texture(u_OcclusionSampler, pbr_vUV).r;
319
+ color = mix(color, color * ao, u_OcclusionStrength);
320
+ #endif
321
+ #ifdef HAS_EMISSIVEMAP
322
+ vec3 emissive = SRGBtoLINEAR(texture(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;
323
+ color += emissive;
324
+ #endif
325
+ #ifdef PBR_DEBUG
326
+ color = mix(color, baseColor.rgb, u_ScaleDiffBaseMR.y);
327
+ color = mix(color, vec3(metallic), u_ScaleDiffBaseMR.z);
328
+ color = mix(color, vec3(perceptualRoughness), u_ScaleDiffBaseMR.w);
329
+ #endif
330
+ }
331
+ return vec4(pow(color,vec3(1.0/2.2)), baseColor.a);
332
+ }
333
+ `;var Kt={name:"pbr",vs:An,fs:Sn,defines:{LIGHTING_FRAGMENT:1},dependencies:[_n]};var Et=D(Ct(),1);var $r=`
334
+ #pragma vscode_glsllint_stage: vert
335
+ #if (__VERSION__ < 300)
336
+ #define _attr attribute
337
+ #else
338
+ #define _attr in
339
+ #endif
340
+
341
+ // _attr vec4 POSITION;
342
+ _attr vec4 positions;
343
+
344
+ #ifdef HAS_NORMALS
345
+ // _attr vec4 NORMAL;
346
+ _attr vec4 normals;
347
+ #endif
348
+
349
+ #ifdef HAS_TANGENTS
350
+ _attr vec4 TANGENT;
351
+ #endif
352
+
353
+ #ifdef HAS_UV
354
+ // _attr vec2 TEXCOORD_0;
355
+ _attr vec2 texCoords;
356
+ #endif
357
+
358
+ void main(void) {
359
+ vec4 _NORMAL = vec4(0.);
360
+ vec4 _TANGENT = vec4(0.);
361
+ vec2 _TEXCOORD_0 = vec2(0.);
362
+
363
+ #ifdef HAS_NORMALS
364
+ _NORMAL = normals;
365
+ #endif
366
+
367
+ #ifdef HAS_TANGENTS
368
+ _TANGENT = TANGENT;
369
+ #endif
370
+
371
+ #ifdef HAS_UV
372
+ _TEXCOORD_0 = texCoords;
373
+ #endif
374
+
375
+ pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);
376
+ gl_Position = u_MVPMatrix * positions;
377
+ }
378
+ `,Wr=`
379
+ #pragma vscode_glsllint_stage: frag
380
+ #if (__VERSION__ < 300)
381
+ #define fragmentColor gl_FragColor
382
+ #else
383
+ out vec4 fragmentColor;
384
+ #endif
385
+
386
+ void main(void) {
387
+ vec3 pos = pbr_vPosition;
388
+ fragmentColor = pbr_filterColor(vec4(1.0));
389
+ }
390
+ `;function Tn(e,t){let{id:n,geometry:r,material:s,vertexCount:i,materialOptions:o,modelOptions:c}=t,a=at(e,s,r.attributes,o);yn.log.info(4,"createGLTFModel defines: ",a.defines)();let f=[],l={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},h={id:n,geometry:r,topology:r.topology,vertexCount:i,modules:[Kt],vs:En(e,$r),fs:En(e,Wr),...c,bindings:{...a.bindings,...c.bindings},defines:{...a.defines,...c.defines},parameters:{...l,...a.parameters,...c.parameters},uniforms:{...a.uniforms,...c.uniforms}},p=new Et.Model(e,h);return new Et.ModelNode({managedResources:f,model:p})}function En(e,t){return`#version 300 es
391
+ ${t}`}var Xr={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:null,lights:!0,useTangents:!1},yt=class{device;options;gltf;constructor(t,n={}){this.device=t,this.options={...Xr,...n}}instantiate(t){return this.gltf=t,(t.scenes||[]).map(r=>this.createScene(r))}createAnimator(){return Array.isArray(this.gltf.animations)?new $(this.gltf):null}createScene(t){let r=(t.nodes||[]).map(i=>this.createNode(i));return new W.GroupNode({id:t.name||t.id,children:r})}createNode(t){if(!t._node){let r=(t.children||[]).map(i=>this.createNode(i));t.mesh&&r.push(this.createMesh(t.mesh));let s=new W.GroupNode({id:t.name||t.id,children:r});if(t.matrix)s.setMatrix(t.matrix);else{if(s.matrix.identity(),t.translation&&s.matrix.translate(t.translation),t.rotation){let i=new F().fromQuaternion(t.rotation);s.matrix.multiplyRight(i)}t.scale&&s.matrix.scale(t.scale)}t._node=s}return t._node}createMesh(t){if(!t._mesh){let r=(t.primitives||[]).map((i,o)=>this.createPrimitive(i,o,t)),s=new W.GroupNode({id:t.name||t.id,children:r});t._mesh=s}return t._mesh}createPrimitive(t,n,r){let s=t.name||`${r.name||r.id}-primitive-${n}`,i=jr(t.mode||4),o=t.indices?t.indices.count:this.getVertexCount(t.attributes),c=Tn(this.device,{id:s,geometry:this.createGeometry(s,t,i),material:t.material,materialOptions:this.options,modelOptions:this.options.modelOptions,vertexCount:o});return c.bounds=[t.attributes.POSITION.min,t.attributes.POSITION.max],c}getVertexCount(t){throw new Error("getVertexCount not implemented")}createGeometry(t,n,r){let s={};for(let[i,o]of Object.entries(n.attributes)){let{components:c,size:a,value:f}=o;s[i]={size:a??c,value:f}}return new W.Geometry({id:t,topology:r,indices:n.indices.value,attributes:s})}createBuffer(t,n){t.bufferView||(t.bufferView={});let{bufferView:r}=t;return r.lumaBuffers||(r.lumaBuffers={}),r.lumaBuffers[n]||(r.lumaBuffers[n]=this.device.createBuffer({id:`from-${r.id}`,data:r.data||t.value})),r.lumaBuffers[n]}createSampler(t){return t}needsPOT(){return!1}},U;(function(e){e[e.POINTS=0]="POINTS",e[e.LINES=1]="LINES",e[e.LINE_LOOP=2]="LINE_LOOP",e[e.LINE_STRIP=3]="LINE_STRIP",e[e.TRIANGLES=4]="TRIANGLES",e[e.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",e[e.TRIANGLE_FAN=6]="TRIANGLE_FAN"})(U||(U={}));function jr(e){switch(e){case U.POINTS:return"point-list";case U.LINES:return"line-list";case U.LINE_STRIP:return"line-strip";case U.LINE_LOOP:return"line-loop-webgl";case U.TRIANGLES:return"triangle-list";case U.TRIANGLE_STRIP:return"triangle-strip";case U.TRIANGLE_FAN:return"triangle-fan-webgl";default:throw new Error(e)}}function Ln(e,t,n){let r=new yt(e,n),s=r.instantiate(t),i=r.createAnimator();return{scenes:s,animator:i}}return On(st);})();
392
+ return __exports__;
393
+ });
@@ -1,6 +1,6 @@
1
1
  import { Device } from '@luma.gl/core';
2
2
  import { Geometry, ModelNode, ModelProps } from '@luma.gl/engine';
3
- import { ParsePBRMaterialOptions } from '../pbr/parse-pbr-material';
3
+ import { ParsePBRMaterialOptions } from "../pbr/parse-pbr-material.js";
4
4
  export type CreateGLTFModelOptions = {
5
5
  id?: string;
6
6
  vertexCount?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"create-gltf-model.d.ts","sourceRoot":"","sources":["../../src/gltf/create-gltf-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAgC,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAC,QAAQ,EAAS,SAAS,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAC,uBAAuB,EAAmB,MAAM,2BAA2B,CAAC;AAiEpF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC;IACd,eAAe,EAAE,uBAAuB,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAsC1F"}
1
+ {"version":3,"file":"create-gltf-model.d.ts","sourceRoot":"","sources":["../../src/gltf/create-gltf-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAgC,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAC,QAAQ,EAAS,SAAS,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAC,uBAAuB,EAAmB,qCAAkC;AAiEpF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC;IACd,eAAe,EAAE,uBAAuB,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CACpC,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAsC1F"}
@@ -2,6 +2,8 @@ import { log } from '@luma.gl/core';
2
2
  import { pbr } from '@luma.gl/shadertools';
3
3
  import { Model, ModelNode } from '@luma.gl/engine';
4
4
  import { parsePBRMaterial } from "../pbr/parse-pbr-material.js";
5
+ // TODO rename attributes to POSITION/NORMAL etc
6
+ // See gpu-geometry.ts: getAttributeBuffersFromGeometry()
5
7
  const vs = `
6
8
  #pragma vscode_glsllint_stage: vert
7
9
  #if (__VERSION__ < 300)
@@ -62,57 +64,38 @@ const fs = `
62
64
  }
63
65
  `;
64
66
  export function createGLTFModel(device, options) {
65
- const {
66
- id,
67
- geometry,
68
- material,
69
- vertexCount,
70
- materialOptions,
71
- modelOptions
72
- } = options;
73
- const parsedMaterial = parsePBRMaterial(device, material, geometry.attributes, materialOptions);
74
- log.info(4, 'createGLTFModel defines: ', parsedMaterial.defines)();
75
- const managedResources = [];
76
- const parameters = {
77
- depthWriteEnabled: true,
78
- depthCompare: 'less',
79
- depthFormat: 'depth24plus',
80
- cullMode: 'back'
81
- };
82
- const modelProps = {
83
- id,
84
- geometry,
85
- topology: geometry.topology,
86
- vertexCount,
87
- modules: [pbr],
88
- vs: addVersionToShader(device, vs),
89
- fs: addVersionToShader(device, fs),
90
- ...modelOptions,
91
- bindings: {
92
- ...parsedMaterial.bindings,
93
- ...modelOptions.bindings
94
- },
95
- defines: {
96
- ...parsedMaterial.defines,
97
- ...modelOptions.defines
98
- },
99
- parameters: {
100
- ...parameters,
101
- ...parsedMaterial.parameters,
102
- ...modelOptions.parameters
103
- },
104
- uniforms: {
105
- ...parsedMaterial.uniforms,
106
- ...modelOptions.uniforms
107
- }
108
- };
109
- const model = new Model(device, modelProps);
110
- return new ModelNode({
111
- managedResources,
112
- model
113
- });
67
+ const { id, geometry, material, vertexCount, materialOptions, modelOptions } = options;
68
+ const parsedMaterial = parsePBRMaterial(device, material, geometry.attributes, materialOptions);
69
+ log.info(4, 'createGLTFModel defines: ', parsedMaterial.defines)();
70
+ // Calculate managedResources
71
+ // TODO: Implement resource management logic that will
72
+ // not deallocate resources/textures/buffers that are shared
73
+ const managedResources = [];
74
+ // managedResources.push(...parsedMaterial.generatedTextures);
75
+ // managedResources.push(...Object.values(attributes).map((attribute) => attribute.buffer));
76
+ const parameters = {
77
+ depthWriteEnabled: true,
78
+ depthCompare: 'less',
79
+ depthFormat: 'depth24plus',
80
+ cullMode: 'back'
81
+ };
82
+ const modelProps = {
83
+ id,
84
+ geometry,
85
+ topology: geometry.topology,
86
+ vertexCount,
87
+ modules: [pbr],
88
+ vs: addVersionToShader(device, vs),
89
+ fs: addVersionToShader(device, fs),
90
+ ...modelOptions,
91
+ bindings: { ...parsedMaterial.bindings, ...modelOptions.bindings },
92
+ defines: { ...parsedMaterial.defines, ...modelOptions.defines },
93
+ parameters: { ...parameters, ...parsedMaterial.parameters, ...modelOptions.parameters },
94
+ uniforms: { ...parsedMaterial.uniforms, ...modelOptions.uniforms }
95
+ };
96
+ const model = new Model(device, modelProps);
97
+ return new ModelNode({ managedResources, model });
114
98
  }
115
99
  function addVersionToShader(device, source) {
116
- return device.info.type === 'webgl2' ? `#version 300 es\n${source}` : source;
100
+ return `#version 300 es\n${source}`;
117
101
  }
118
- //# sourceMappingURL=create-gltf-model.js.map
@@ -1,7 +1,7 @@
1
1
  import { Device } from '@luma.gl/core';
2
2
  import { GroupNode } from '@luma.gl/engine';
3
- import { GLTFInstantiatorOptions } from './gltf-instantiator';
4
- import { GLTFAnimator } from './gltf-animator';
3
+ import { GLTFInstantiatorOptions } from "./gltf-instantiator.js";
4
+ import { GLTFAnimator } from "./gltf-animator.js";
5
5
  export declare function createScenegraphsFromGLTF(device: Device, gltf: any, options?: GLTFInstantiatorOptions): {
6
6
  scenes: GroupNode[];
7
7
  animator: GLTFAnimator;
@@ -1 +1 @@
1
- {"version":3,"file":"create-gltf-objects.d.ts","sourceRoot":"","sources":["../../src/gltf/create-gltf-objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAmB,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,uBAAuB,GAChC;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAKA"}
1
+ {"version":3,"file":"create-gltf-objects.d.ts","sourceRoot":"","sources":["../../src/gltf/create-gltf-objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAmB,uBAAuB,EAAC,+BAA4B;AAC9E,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAE7C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,uBAAuB,GAChC;IACD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAKA"}
@@ -1,11 +1,7 @@
1
1
  import { GLTFInstantiator } from "./gltf-instantiator.js";
2
2
  export function createScenegraphsFromGLTF(device, gltf, options) {
3
- const instantiator = new GLTFInstantiator(device, options);
4
- const scenes = instantiator.instantiate(gltf);
5
- const animator = instantiator.createAnimator();
6
- return {
7
- scenes,
8
- animator
9
- };
3
+ const instantiator = new GLTFInstantiator(device, options);
4
+ const scenes = instantiator.instantiate(gltf);
5
+ const animator = instantiator.createAnimator();
6
+ return { scenes, animator };
10
7
  }
11
- //# sourceMappingURL=create-gltf-objects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gltf-animator.d.ts","sourceRoot":"","sources":["../../src/gltf/gltf-animator.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B;;;;;;;;CAQxC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;;;CAO7C,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAA;AAED,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,OAAO,CAAQ;IACxB,KAAK,EAAE,MAAM,CAAK;IAClB,QAAQ,EAAE,GAAG,CAAM;gBAEP,KAAK,EAAE,kBAAkB;IAIrC,OAAO,CAAC,MAAM,EAAE,MAAM;CAavB;AAED,qBAAa,YAAY;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;gBAEhB,IAAI,EAAE,GAAG;IAiBrB,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,aAAa;CAGd"}
1
+ {"version":3,"file":"gltf-animator.d.ts","sourceRoot":"","sources":["../../src/gltf/gltf-animator.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,4BAA4B;;;;;;;;CAQxC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;;;;;CAO7C,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,cAAM,aAAa;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,OAAO,CAAQ;IACxB,KAAK,EAAE,MAAM,CAAK;IAClB,QAAQ,EAAE,GAAG,CAAM;gBAEP,KAAK,EAAE,kBAAkB;IAIrC,OAAO,CAAC,MAAM,EAAE,MAAM;CAavB;AAED,qBAAa,YAAY;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;gBAEhB,IAAI,EAAE,GAAG;IAiBrB,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,aAAa;CAGd"}