@luma.gl/gltf 9.1.0-alpha.1 → 9.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +307 -95
- package/dist/dist.min.js +351 -212
- package/dist/gltf/create-gltf-model.d.ts.map +1 -1
- package/dist/gltf/create-gltf-model.js +47 -34
- package/dist/index.cjs +54 -35
- package/dist/index.cjs.map +2 -2
- package/package.json +4 -3
- package/src/gltf/create-gltf-model.ts +3 -3
package/dist/dist.min.js
CHANGED
|
@@ -4,36 +4,47 @@
|
|
|
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 Rn=Object.create;var ot=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var In=Object.getOwnPropertyNames;var Nn=Object.getPrototypeOf,bn=Object.prototype.hasOwnProperty;var Qt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),On=(e,t)=>{for(var n in t)ot(e,n,{get:t[n],enumerable:!0})},st=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of In(t))!bn.call(e,s)&&s!==n&&ot(e,s,{get:()=>t[s],enumerable:!(r=vn(t,s))||r.enumerable});return e},it=(e,t,n)=>(st(e,t,"default"),n&&st(n,t,"default")),V=(e,t,n)=>(n=e!=null?Rn(Nn(e)):{},st(t||!e||!e.__esModule?ot(n,"default",{value:e,enumerable:!0}):n,e)),wn=e=>st(ot({},"__esModule",{value:!0}),e);var $=Qt((Zr,Zt)=>{Zt.exports=globalThis.luma});var at=Qt((ts,te)=>{te.exports=globalThis.luma});var rt={};On(rt,{GLTFAnimator:()=>W,createScenegraphsFromGLTF:()=>Ln,loadPBREnvironment:()=>de,parsePBRMaterial:()=>ct});it(rt,V($(),1));var Jt=V($(),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 ct(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:o}=r;return o&&(s.bindings.u_DiffuseEnvSampler=o.diffuseEnvSampler.texture,s.bindings.u_SpecularEnvSampler=o.specularEnvSampler.texture,s.bindings.u_brdfLUT=o.brdfLutTexture.texture,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 o=t?.texture?.sampler?.parameters||{},i=t.texture.source.image,c,a={};i.compressed?(c=i,a={[C.TEXTURE_MIN_FILTER]:i.data.length>1?C.LINEAR_MIPMAP_NEAREST:C.LINEAR}):c={data:i};let f=e.createTexture({id:t.uniformName||t.id,parameters:{...o,...a},pixelStore:{[C.UNPACK_FLIP_Y_WEBGL]:!1},...c});s.bindings[n]=f,r&&(s.defines[r]=1),s.generatedTextures.push(f)}var Pt=V(at(),1);function D(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 ee=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Un=ee&&parseFloat(ee[1])||0;var Vn="",ne={};function Lt(e){for(let t in ne)if(e.startsWith(t)){let n=ne[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Vn}${e}`),e}var re="4.2.0-beta.2";var Dn=globalThis.loaders?.parseImageNode,Rt=typeof Image<"u",vt=typeof ImageBitmap<"u",qn=Boolean(Dn),It=Tt?!0:qn;function se(e){switch(e){case"auto":return vt||Rt||It;case"imagebitmap":return vt;case"image":return Rt;case"data":return It;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function oe(){if(vt)return"imagebitmap";if(Rt)return"image";if(It)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function ie(e){let t=Hn(e);if(!t)throw new Error("Not an image");return t}function Nt(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 Hn(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 Gn=/^data:image\/svg\+xml/,Yn=/\.svg((\?|#).*)?$/;function lt(e){return e&&(Gn.test(e)||Yn.test(e))}function ce(e,t){if(lt(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(o){throw new Error(o.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return bt(e,t)}function bt(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=ce(e,n),s=self.URL||self.webkitURL,o=typeof r!="string"&&s.createObjectURL(r);try{return await Wn(o||r,t)}finally{o&&s.revokeObjectURL(o)}}async function Wn(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=o=>{let i=o instanceof Error?o.message:"error";s(new Error(i))}}catch(o){s(o)}})}var Xn={},ae=!0;async function fe(e,t,n){let r;lt(n)?r=await ht(e,t,n):r=bt(e,n);let s=t&&t.imagebitmap;return await jn(r,s)}async function jn(e,t=null){if(($n(t)||!ae)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),ae=!1}return await createImageBitmap(e)}function $n(e){for(let t in e||Xn)return!1;return!0}function le(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,n=0){let 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=le(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}=or(),o=2;for(;o+9<t.byteLength;){let i=t.getUint16(o,z);if(s.has(i))return{mimeType:"image/jpeg",height:t.getUint16(o+5,z),width:t.getUint16(o+7,z)};if(!r.has(i))return null;o+=2,o+=t.getUint16(o,z)}return null}function or(){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 he(e,t){let{mimeType:n}=pt(e)||{},r=globalThis.loaders?.parseImageNode;return D(r),await r(e,n)}async function pe(e,t,n){t=t||{};let s=(t.image||{}).type||"auto",{url:o}=n||{},i=ir(s),c;switch(i){case"imagebitmap":c=await fe(e,t,o);break;case"image":c=await ht(e,t,o);break;case"data":c=await he(e,t);break;default:D(!1)}return s==="data"&&(c=ft(c)),c}function ir(e){switch(e){case"auto":case"data":return oe();default:return se(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={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:re,mimeTypes:ar,extensions:cr,parse:pe,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 me(e,t,n={}){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 o in e){let i=e[o],c=Ot(i,t,n).then(a=>{s[o]=a});r.push(c)}return await Promise.all(r),s}async function pr(e,t,n={}){let r=e.map(s=>Ot(s,t,n));return await Promise.all(r)}async function xe(e,t,n){return await me(e,r=>wt(r,t,n))}async function wt(e,t,n){let s=await(await fetch(e,n.fetch)).arrayBuffer();return await t(s,n)}async function J(e,t={}){let n=await mr(e,t);return await xe(n,mt.parse,t)}async function mr(e,t,n={}){let 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 o=xt(e,n,{...r,lod:0}),i=await wt(o,mt.parse,n),{width:c,height:a}=Nt(i);t=gr({width:c,height:a}),s.push(o)}D(t>0);for(let o=s.length;o<t;++o){let i=xt(e,n,{...r,lod:o});s.push(i)}return s}function gr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}function de(e,t){let n=new Pt.AsyncTexture(e,{id:"brdfLUT",sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"},data:J(t.brdfLutUrl)}),r=ge(e,{id:"DiffuseEnvSampler",getTextureForFace:o=>J(t.getTexUrl("diffuse",o,0)),sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}}),s=ge(e,{id:"SpecularEnvSampler",getTextureForFace:o=>{let i=[];for(let c=0;c<=t.specularMipLevels-1;c++)i.push(J(t.getTexUrl("specular",o,c)));return i},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 ge(e,{id:t,getTextureForFace:n,sampler:r}){let s={};return dr.forEach(o=>{s[String(o)]=n(o)}),new Pt.AsyncTexture(e,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var X=V(at(),1);var no=1/Math.PI*180,ro=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),"".concat(parseFloat(e.toPrecision(t)))}function H(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ct(e,t,n){let r=L.EPSILON;n&&(L.EPSILON=n);try{if(e===t)return!0;if(H(e)&&H(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;++s)if(!Ct(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}function Ar(e){function t(){var n=Reflect.construct(e,Array.from(arguments));return Object.setPrototypeOf(n,Object.getPrototypeOf(this)),n}return t.prototype=Object.create(e.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e,t}var U=class extends Ar(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:H(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"".concat(t.printTypes?this.constructor.name:"","[").concat(n,"]")}equals(t){if(!t||this.length!==t.length)return!1;for(let n=0;n<this.ELEMENTS;++n)if(!Ct(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 o=t[s],i=typeof n=="number"?n:n[s];this[s]=o+r*(i-o)}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: ".concat(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 ".concat(JSON.stringify(e)));return e}function G(e,t,n=""){if(L.debug&&!_r(e,t))throw new Error("math.gl: ".concat(n," some fields set to invalid numbers'"));return e}function Bt(e,t){if(!e)throw new Error("math.gl assertion ".concat(t))}var gt=class extends U{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 Bt(t>=0&&t<this.ELEMENTS,"index is out of range"),y(this[t])}setComponent(t,n){return Bt(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 xo=Math.PI/180;function Sr(){let e=new R(2);return R!=Float32Array&&(e[0]=0,e[1]=0),e}function _e(e,t,n){let r=t[0],s=t[1];return e[0]=n[0]*r+n[4]*s+n[12],e[1]=n[1]*r+n[5]*s+n[13],e}var go=function(){let e=Sr();return function(t,n,r,s,o,i){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],o(e,e,i),t[c]=e[0],t[c+1]=e[1];return t}}();function Se(e,t,n){let r=t[0],s=t[1],o=n[3]*r+n[7]*s||1;return e[0]=(n[0]*r+n[4]*s)/o,e[1]=(n[1]*r+n[5]*s)/o,e}function Ee(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[3]*r+n[7]*s+n[11]*o||1;return e[0]=(n[0]*r+n[4]*s+n[8]*o)/i,e[1]=(n[1]*r+n[5]*s+n[9]*o)/i,e[2]=(n[2]*r+n[6]*s+n[10]*o)/i,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],o=t[2];return e[0]=n[0]*r+n[3]*s+n[6]*o,e[1]=n[1]*r+n[4]*s+n[7]*o,e[2]=n[2]*r+n[5]*s+n[8]*o,e[3]=t[3],e}function zt(){let e=new R(3);return R!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Er(e){let t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function kt(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],o=n*n+r*r+s*s;return o>0&&(o=1/Math.sqrt(o)),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,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],o=t[2],i=n[0],c=n[1],a=n[2];return e[0]=s*a-o*c,e[1]=o*i-r*a,e[2]=r*c-s*i,e}function Mt(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[3]*r+n[7]*s+n[11]*o+n[15];return i=i||1,e[0]=(n[0]*r+n[4]*s+n[8]*o+n[12])/i,e[1]=(n[1]*r+n[5]*s+n[9]*o+n[13])/i,e[2]=(n[2]*r+n[6]*s+n[10]*o+n[14])/i,e}function ve(e,t,n){let r=n[0],s=n[1],o=n[2],i=n[3],c=t[0],a=t[1],f=t[2],l=s*f-o*a,h=o*c-r*f,p=r*a-s*c,m=s*p-o*h,x=o*l-r*p,g=r*h-s*l,d=i*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 Ie=Er;var Ao=function(){let e=zt();return function(t,n,r,s,o,i){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],o(e,e,i),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2];return t}}();var ut,Y=class extends gt{static get ZERO(){return ut||(ut=new Y(0,0,0,0),Object.freeze(ut)),ut}constructor(t=0,n=0,r=0,s=0){super(-0,-0,-0,-0),H(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 ve(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var At=class extends U{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+=" ".concat(this[r*this.RANK+n])}else{t+="column-major:";for(let n=0;n<this.ELEMENTS;++n)t+=" ".concat(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 Lr(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],o=t[6],i=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]=o,e[11]=t[14],e[12]=s,e[13]=i,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 Oe(e,t){let n=t[0],r=t[1],s=t[2],o=t[3],i=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*i,M=n*a-s*i,u=n*f-o*i,A=r*a-s*c,_=r*f-o*c,v=s*f-o*a,I=l*g-h*x,N=l*d-p*x,b=l*S-m*x,O=h*d-p*g,w=h*S-m*g,P=p*S-m*d,E=T*P-M*w+u*O+A*b-_*N+v*I;return E?(E=1/E,e[0]=(c*P-a*w+f*O)*E,e[1]=(s*w-r*P-o*O)*E,e[2]=(g*v-d*_+S*A)*E,e[3]=(p*_-h*v-m*A)*E,e[4]=(a*b-i*P-f*N)*E,e[5]=(n*P-s*b+o*N)*E,e[6]=(d*u-x*v-S*M)*E,e[7]=(l*v-p*u+m*M)*E,e[8]=(i*w-c*b+f*I)*E,e[9]=(r*b-n*w-o*I)*E,e[10]=(x*_-g*u+S*T)*E,e[11]=(h*u-l*_-m*T)*E,e[12]=(c*N-i*O-a*I)*E,e[13]=(n*O-r*N+s*I)*E,e[14]=(g*M-x*A-d*T)*E,e[15]=(l*A-h*M+p*T)*E,e):null}function we(e){let t=e[0],n=e[1],r=e[2],s=e[3],o=e[4],i=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*i-n*o,T=t*c-r*o,M=n*c-r*i,u=f*x-l*m,A=f*g-h*m,_=l*g-h*x,v=t*_-n*A+r*u,I=o*_-i*A+c*u,N=f*M-l*T+h*S,b=m*M-x*T+g*S;return a*v-s*I+d*N-p*b}function Ft(e,t,n){let r=t[0],s=t[1],o=t[2],i=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],A=n[2],_=n[3];return e[0]=M*r+u*c+A*h+_*g,e[1]=M*s+u*a+A*p+_*d,e[2]=M*o+u*f+A*m+_*S,e[3]=M*i+u*l+A*x+_*T,M=n[4],u=n[5],A=n[6],_=n[7],e[4]=M*r+u*c+A*h+_*g,e[5]=M*s+u*a+A*p+_*d,e[6]=M*o+u*f+A*m+_*S,e[7]=M*i+u*l+A*x+_*T,M=n[8],u=n[9],A=n[10],_=n[11],e[8]=M*r+u*c+A*h+_*g,e[9]=M*s+u*a+A*p+_*d,e[10]=M*o+u*f+A*m+_*S,e[11]=M*i+u*l+A*x+_*T,M=n[12],u=n[13],A=n[14],_=n[15],e[12]=M*r+u*c+A*h+_*g,e[13]=M*s+u*a+A*p+_*d,e[14]=M*o+u*f+A*m+_*S,e[15]=M*i+u*l+A*x+_*T,e}function Pe(e,t,n){let r=n[0],s=n[1],o=n[2],i,c,a,f,l,h,p,m,x,g,d,S;return t===e?(e[12]=t[0]*r+t[4]*s+t[8]*o+t[12],e[13]=t[1]*r+t[5]*s+t[9]*o+t[13],e[14]=t[2]*r+t[6]*s+t[10]*o+t[14],e[15]=t[3]*r+t[7]*s+t[11]*o+t[15]):(i=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]=i,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]=i*r+l*s+x*o+t[12],e[13]=c*r+h*s+g*o+t[13],e[14]=a*r+p*s+d*o+t[14],e[15]=f*r+m*s+S*o+t[15]),e}function Ce(e,t,n){let r=n[0],s=n[1],o=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]*o,e[9]=t[9]*o,e[10]=t[10]*o,e[11]=t[11]*o,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],o=r[1],i=r[2],c=Math.sqrt(s*s+o*o+i*i),a,f,l,h,p,m,x,g,d,S,T,M,u,A,_,v,I,N,b,O,w,P,E,j;return c<1e-6?null:(c=1/c,s*=c,o*=c,i*=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],A=t[10],_=t[11],v=s*s*l+a,I=o*s*l+i*f,N=i*s*l-o*f,b=s*o*l-i*f,O=o*o*l+a,w=i*o*l+s*f,P=s*i*l+o*f,E=o*i*l-s*f,j=i*i*l+a,e[0]=h*v+g*I+M*N,e[1]=p*v+d*I+u*N,e[2]=m*v+S*I+A*N,e[3]=x*v+T*I+_*N,e[4]=h*b+g*O+M*w,e[5]=p*b+d*O+u*w,e[6]=m*b+S*O+A*w,e[7]=x*b+T*O+_*w,e[8]=h*P+g*E+M*j,e[9]=p*P+d*E+u*j,e[10]=m*P+S*E+A*j,e[11]=x*P+T*E+_*j,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),o=t[4],i=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]=o*s+f*r,e[5]=i*s+l*r,e[6]=c*s+h*r,e[7]=a*s+p*r,e[8]=f*s-o*r,e[9]=l*s-i*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),o=t[0],i=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]=o*s-f*r,e[1]=i*s-l*r,e[2]=c*s-h*r,e[3]=a*s-p*r,e[8]=o*r+f*s,e[9]=i*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),o=t[0],i=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]=o*s+f*r,e[1]=i*s+l*r,e[2]=c*s+h*r,e[3]=a*s+p*r,e[4]=f*s-o*r,e[5]=l*s-i*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],o=t[3],i=n+n,c=r+r,a=s+s,f=n*i,l=r*i,h=r*c,p=s*i,m=s*c,x=s*a,g=o*i,d=o*c,S=o*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,o,i){let c=1/(n-t),a=1/(s-r),f=1/(o-i);return e[0]=o*2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o*2*a,e[6]=0,e[7]=0,e[8]=(n+t)*c,e[9]=(s+r)*a,e[10]=(i+o)*f,e[11]=-1,e[12]=0,e[13]=0,e[14]=i*o*2*f,e[15]=0,e}function Rr(e,t,n,r,s){let o=1/Math.tan(t/2);if(e[0]=o/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,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 i=1/(r-s);e[10]=(s+r)*i,e[14]=2*s*r*i}else e[10]=-1,e[14]=-2*r;return e}var De=Rr;function vr(e,t,n,r,s,o,i){let c=1/(t-n),a=1/(r-s),f=1/(o-i);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]=(i+o)*f,e[15]=1,e}var qe=vr;function He(e,t,n,r){let s,o,i,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],A=n[1],_=n[2];return Math.abs(x-u)<1e-6&&Math.abs(g-A)<1e-6&&Math.abs(d-_)<1e-6?Lr(e):(h=x-u,p=g-A,m=d-_,s=1/Math.sqrt(h*h+p*p+m*m),h*=s,p*=s,m*=s,o=T*m-M*p,i=M*h-S*m,c=S*p-T*h,s=Math.sqrt(o*o+i*i+c*c),s?(s=1/s,o*=s,i*=s,c*=s):(o=0,i=0,c=0),a=p*c-m*i,f=m*o-h*c,l=h*i-p*o,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]=o,e[1]=a,e[2]=h,e[3]=0,e[4]=i,e[5]=f,e[6]=p,e[7]=0,e[8]=c,e[9]=l,e[10]=m,e[11]=0,e[12]=-(o*x+i*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 Ge(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 Ye(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 We(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 Xe(e){let t=e[0],n=e[1],r=e[2],s=e[3];return t*t+n*n+r*r+s*s}function je(e,t){let n=t[0],r=t[1],s=t[2],o=t[3],i=n*n+r*r+s*s+o*o;return i>0&&(i=1/Math.sqrt(i)),e[0]=n*i,e[1]=r*i,e[2]=s*i,e[3]=o*i,e}function $e(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],o=t[1],i=t[2],c=t[3];return e[0]=s+r*(n[0]-s),e[1]=o+r*(n[1]-o),e[2]=i+r*(n[2]-i),e[3]=c+r*(n[3]-c),e}function Qe(e,t,n){let r=t[0],s=t[1],o=t[2],i=t[3];return e[0]=n[0]*r+n[4]*s+n[8]*o+n[12]*i,e[1]=n[1]*r+n[5]*s+n[9]*o+n[13]*i,e[2]=n[2]*r+n[6]*s+n[10]*o+n[14]*i,e[3]=n[3]*r+n[7]*s+n[11]*o+n[15]*i,e}function Ze(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[0],c=n[1],a=n[2],f=n[3],l=f*r+c*o-a*s,h=f*s+a*r-i*o,p=f*o+i*s-c*r,m=-i*r-c*s-a*o;return e[0]=l*f+m*-i+h*-a-p*-c,e[1]=h*f+m*-c+p*-i-l*-a,e[2]=p*f+m*-a+l*-c-h*-i,e[3]=t[3],e}var Oo=function(){let e=Ir();return function(t,n,r,s,o,i){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],o(e,e,i),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 br=45*Math.PI/180,Or=1,Ut=.1,Vt=500,wr=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),F=class extends At{static get IDENTITY(){return Cr()}static get ZERO(){return Pr()}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,o,i,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]=o,this[5]=i,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,o,i,c,a,f,l,h,p,m,x,g,d){return this[0]=t,this[1]=o,this[2]=f,this[3]=m,this[4]=n,this[5]=i,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:o,near:i=Ut,far:c=Vt}=t;return c===1/0?Br(this,n,r,s,o,i):Ve(this,n,r,s,o,i,c),this.check()}lookAt(t){let{eye:n,center:r=[0,0,0],up:s=[0,1,0]}=t;return He(this,n,r,s),this.check()}ortho(t){let{left:n,right:r,bottom:s,top:o,near:i=Ut,far:c=Vt}=t;return qe(this,n,r,s,o,i,c),this.check()}orthographic(t){let{fovy:n=br,aspect:r=Or,focalDistance:s=1,near:o=Ut,far:i=Vt}=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:o,far:i})}perspective(t){let{fovy:n=45*Math.PI/180,aspect:r=1,near:s=.1,far:o=500}=t;return Je(n),De(this,n,r,s,o),this.check()}determinant(){return we(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],o=1/r[1],i=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*o,t[2]=this[2]*i,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*o,t[6]=this[6]*i,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*o,t[10]=this[10]*i,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],o=1/r[1],i=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*o,t[2]=this[2]*i,t[3]=this[4]*s,t[4]=this[5]*o,t[5]=this[6]*i,t[6]=this[8]*s,t[7]=this[9]*o,t[8]=this[10]*i,t}transpose(){return be(this,this),this.check()}invert(){return Oe(this,this),this.check()}multiplyLeft(t){return Ft(this,t,this),this.check()}multiplyRight(t){return Ft(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),G(n,4),n):this.transformAsPoint(t,n)}transformAsPoint(t,n){let{length:r}=t,s;switch(r){case 2:s=_e(n||[-0,-0],t,this);break;case 3:s=Mt(n||[-0,-0,-0],t,this);break;default:throw new Error("Illegal vector")}return G(s,t.length),s}transformAsVector(t,n){let r;switch(t.length){case 2:r=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 G(r,t.length),r}transformPoint(t,n){return this.transformAsPoint(t,n)}transformVector(t,n){return this.transformAsPoint(t,n)}transformDirection(t,n){return this.transformAsVector(t,n)}makeRotationX(t){return this.identity().rotateX(t)}makeTranslation(t,n,r){return this.identity().translate([t,n,r])}},_t,St;function Pr(){return _t||(_t=new F([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(_t)),_t}function Cr(){return St||(St=new F,Object.freeze(St)),St}function Je(e){if(e>Math.PI*2)throw Error("expected radians")}function Br(e,t,n,r,s,o){let i=2*o/(n-t),c=2*o/(s-r),a=(n+t)/(n-t),f=(s+r)/(s-r),l=-1,h=-1,p=-2*o;return e[0]=i,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 qt(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],o=t[2],i=t[3],c=n[0],a=n[1],f=n[2],l=n[3];return e[0]=r*l+i*c+s*f-o*a,e[1]=s*l+i*a+o*c-r*f,e[2]=o*l+i*f+r*a-s*c,e[3]=i*l-r*c-s*a-o*f,e}function nn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a-s*c,e[3]=i*a-r*c,e}function rn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a+r*c,e[3]=i*a-s*c,e}function sn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a+i*c,e[3]=i*a-o*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],o=t[1],i=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+o*f+i*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*o+g*f,e[2]=x*i+g*l,e[3]=x*c+g*h,e}function cn(e,t){let n=t[0],r=t[1],s=t[2],o=t[3],i=n*n+r*r+s*s+o*o,c=i?1/i:0;return e[0]=-n*c,e[1]=-r*c,e[2]=-s*c,e[3]=o*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 o=(s+1)%3,i=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[o*3+o]-t[i*3+i]+1),e[s]=.5*r,r=.5/r,e[3]=(t[o*3+i]-t[i*3+o])*r,e[o]=(t[o*3+s]+t[s*3+o])*r,e[i]=(t[i*3+s]+t[s*3+i])*r}return e}var fn=Ge;var ln=Ye,hn=$e,pn=Ke,mn=We;var xn=Xe;var gn=je;var dn=function(){let e=zt(),t=kt(1,0,0),n=kt(0,1,0);return function(r,s,o){let i=Re(s,o);return i<-.999999?(dt(e,t,s),Ie(e)<1e-6&&dt(e,n,s),Le(e,e),qt(r,e,Math.PI),r):i>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(dt(e,s,o),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+i,gn(r,r))}}(),Yo=function(){let e=tn(),t=tn();return function(n,r,s,o,i,c){return et(e,r,i,c),et(t,s,o,c),et(n,e,t,2*c*(1-c)),n}}(),Wo=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 zr=[0,0,0,1],nt=class extends U{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 qt(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,o,i;switch(arguments.length){case 1:({start:s=zr,target:o,ratio:i}=t);break;case 2:s=this,o=t,i=n;break;default:s=t,o=n,i=r}return et(this,s,o,i),this.check()}transformVector4(t,n=new Y){return Ze(n,t,this),G(n,4)}lengthSq(){return this.lengthSquared()}setFromAxisAngle(t,n){return this.setAxisAngle(t,n)}premultiply(t){return this.multiplyLeft(t)}multiply(t){return this.multiplyRight(t)}};var Wt=V($(),1);var kr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Fr={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:o,path:i})=>{Gr(r,s,o,i),Vr(o,o._node)})}},W=class{animations;constructor(t){this.animations=t.animations.map((n,r)=>{let s=n.name||`Animation-${r}`,o=n.samplers.map(({input:c,interpolation:a="LINEAR",output:f})=>({input:Mn(t.accessors[c]),interpolation:a,output:Mn(t.accessors[f])})),i=n.channels.map(({sampler:c,target:a})=>({sampler:o[c],target:t.nodes[a.node],path:a.path}));return new Xt({name:s,channels:i})})}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=Fr[e.componentType],n=kr[e.type],r=n*e.count,{buffer:s,byteOffset:o}=e.bufferView.data,i=new t(s,o+(e.byteOffset||0),r);if(n===1)e._animation=Array.from(i);else{let c=[];for(let a=0;a<i.length;a+=n)c.push(Array.from(i.slice(a,a+n)));e._animation=c}}return e._animation}var Ur=new F;function Vr(e,t){if(t.matrix.identity(),e.translation&&t.matrix.translate(e.translation),e.rotation){let n=Ur.fromQuaternion(e.rotation);t.matrix.multiplyRight(n)}e.scale&&t.matrix.scale(e.scale)}var Yt=new nt;function Dr(e,t,n,r,s){if(t==="rotation"){Yt.slerp({start:n,target:r,ratio:s});for(let o=0;o<Yt.length;o++)e[t][o]=Yt[o]}else for(let o=0;o<n.length;o++)e[t][o]=s*r[o]+(1-s)*n[o]}function qr(e,t,{p0:n,outTangent0:r,inTangent1:s,p1:o,tDiff:i,ratio:c}){for(let a=0;a<e[t].length;a++){let f=r[a]*i,l=s[a]*i;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))*o[a]+(Math.pow(c,3)-Math.pow(c,2))*l}}function Hr(e,t,n){for(let r=0;r<n.length;r++)e[t][r]=n[r]}function Gr(e,{input:t,interpolation:n,output:r},s,o){let i=t[t.length-1],c=e%i,a=t.findIndex(p=>p>=c),f=Math.max(0,a-1);if(!Array.isArray(s[o]))switch(o){case"translation":s[o]=[0,0,0];break;case"rotation":s[o]=[0,0,0,1];break;case"scale":s[o]=[1,1,1];break;default:Wt.log.warn(`Bad animation path ${o}`)()}let l=t[f],h=t[a];switch(n){case"STEP":Hr(s,o,r[f]);break;case"LINEAR":if(h>l){let p=(c-l)/(h-l);Dr(s,o,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,o,{p0:x,outTangent0:g,inTangent1:d,p1:S,tDiff:m,ratio:p})}break;default:Wt.log.warn(`Interpolation ${n} not supported`)();break}}var En=V($(),1);var jt=`#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))
|
|
7
|
+
var __exports__=(()=>{var Rn=Object.create;var ot=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var In=Object.getOwnPropertyNames;var bn=Object.getPrototypeOf,Nn=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})},st=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of In(t))!Nn.call(e,s)&&s!==n&&ot(e,s,{get:()=>t[s],enumerable:!(r=vn(t,s))||r.enumerable});return e},it=(e,t,n)=>(st(e,t,"default"),n&&st(n,t,"default")),U=(e,t,n)=>(n=e!=null?Rn(bn(e)):{},st(t||!e||!e.__esModule?ot(n,"default",{value:e,enumerable:!0}):n,e)),On=e=>st(ot({},"__esModule",{value:!0}),e);var j=Qt((Qr,Zt)=>{Zt.exports=globalThis.luma});var at=Qt((Jr,te)=>{te.exports=globalThis.luma});var rt={};wn(rt,{GLTFAnimator:()=>W,createScenegraphsFromGLTF:()=>Ln,loadPBREnvironment:()=>de,parsePBRMaterial:()=>ct});it(rt,U(j(),1));var Jt=U(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 ct(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:o}=r;return o&&(s.bindings.u_DiffuseEnvSampler=o.diffuseEnvSampler.texture,s.bindings.u_SpecularEnvSampler=o.specularEnvSampler.texture,s.bindings.u_brdfLUT=o.brdfLutTexture.texture,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 o=t?.texture?.sampler?.parameters||{},i=t.texture.source.image,c,a={};i.compressed?(c=i,a={[C.TEXTURE_MIN_FILTER]:i.data.length>1?C.LINEAR_MIPMAP_NEAREST:C.LINEAR}):c={data:i};let l=e.createTexture({id:t.uniformName||t.id,parameters:{...o,...a},pixelStore:{[C.UNPACK_FLIP_Y_WEBGL]:!1},...c});s.bindings[n]=l,r&&(s.defines[r]=1),s.generatedTextures.push(l)}var Pt=U(at(),1);function V(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||{},Fn=B.global||B.self||B.window||{},kn=B.document||{};var Tt=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var ee=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Dn=ee&&parseFloat(ee[1])||0;var Un="",ne={};function Lt(e){for(let t in ne)if(e.startsWith(t)){let n=ne[t];e=e.replace(t,n)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Un}${e}`),e}var re="4.2.1";var Vn=globalThis.loaders?.parseImageNode,Rt=typeof Image<"u",vt=typeof ImageBitmap<"u",qn=Boolean(Vn),It=Tt?!0:qn;function se(e){switch(e){case"auto":return vt||Rt||It;case"imagebitmap":return vt;case"image":return Rt;case"data":return It;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function oe(){if(vt)return"imagebitmap";if(Rt)return"image";if(It)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function ie(e){let t=Gn(e);if(!t)throw new Error("Not an image");return t}function bt(e){return lt(e)}function lt(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 Gn(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/,Yn=/\.svg((\?|#).*)?$/;function ft(e){return e&&(Hn.test(e)||Yn.test(e))}function ce(e,t){if(ft(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(o){throw new Error(o.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return Nt(e,t)}function Nt(e,t){if(ft(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=ce(e,n),s=self.URL||self.webkitURL,o=typeof r!="string"&&s.createObjectURL(r);try{return await Wn(o||r,t)}finally{o&&s.revokeObjectURL(o)}}async function Wn(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=o=>{let i=o instanceof Error?o.message:"error";s(new Error(i))}}catch(o){s(o)}})}var $n={},ae=!0;async function le(e,t,n){let r;ft(n)?r=await ht(e,t,n):r=Nt(e,n);let s=t&&t.imagebitmap;return await Xn(r,s)}async function Xn(e,t=null){if((jn(t)||!ae)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(n){console.warn(n),ae=!1}return await createImageBitmap(e)}function jn(e){for(let t in e||$n)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,n=0){let 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}=or(),o=2;for(;o+9<t.byteLength;){let i=t.getUint16(o,z);if(s.has(i))return{mimeType:"image/jpeg",height:t.getUint16(o+5,z),width:t.getUint16(o+7,z)};if(!r.has(i))return null;o+=2,o+=t.getUint16(o,z)}return null}function or(){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 he(e,t){let{mimeType:n}=pt(e)||{},r=globalThis.loaders?.parseImageNode;return V(r),await r(e,n)}async function pe(e,t,n){t=t||{};let s=(t.image||{}).type||"auto",{url:o}=n||{},i=ir(s),c;switch(i){case"imagebitmap":c=await le(e,t,o);break;case"image":c=await ht(e,t,o);break;case"data":c=await he(e,t);break;default:V(!1)}return s==="data"&&(c=lt(c)),c}function ir(e){switch(e){case"auto":case"data":return oe();default:return se(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"],lr={image:{type:"auto",decode:!0}},mt={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:re,mimeTypes:ar,extensions:cr,parse:pe,tests:[e=>Boolean(pt(new DataView(e)))],options:lr};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 fr=e=>e&&typeof e=="object";async function me(e,t,n={}){return await wt(e,t,n)}async function wt(e,t,n){return Array.isArray(e)?await pr(e,t,n):fr(e)?await hr(e,t,n):await t(e,n)}async function hr(e,t,n){let r=[],s={};for(let o in e){let i=e[o],c=wt(i,t,n).then(a=>{s[o]=a});r.push(c)}return await Promise.all(r),s}async function pr(e,t,n={}){let r=e.map(s=>wt(s,t,n));return await Promise.all(r)}async function xe(e,t,n){return await me(e,r=>Ot(r,t,n))}async function Ot(e,t,n){let s=await(await fetch(e,n.fetch)).arrayBuffer();return await t(s,n)}async function J(e,t={}){let n=await mr(e,t);return await xe(n,mt.parse,t)}async function mr(e,t,n={}){let 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 o=xt(e,n,{...r,lod:0}),i=await Ot(o,mt.parse,n),{width:c,height:a}=bt(i);t=gr({width:c,height:a}),s.push(o)}V(t>0);for(let o=s.length;o<t;++o){let i=xt(e,n,{...r,lod:o});s.push(i)}return s}function gr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}function de(e,t){let n=new Pt.AsyncTexture(e,{id:"brdfLUT",sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"},data:J(t.brdfLutUrl)}),r=ge(e,{id:"DiffuseEnvSampler",getTextureForFace:o=>J(t.getTexUrl("diffuse",o,0)),sampler:{wrapS:"clamp-to-edge",wrapT:"clamp-to-edge",minFilter:"linear",maxFilter:"linear"}}),s=ge(e,{id:"SpecularEnvSampler",getTextureForFace:o=>{let i=[];for(let c=0;c<=t.specularMipLevels-1;c++)i.push(J(t.getTexUrl("specular",o,c)));return i},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 ge(e,{id:t,getTextureForFace:n,sampler:r}){let s={};return dr.forEach(o=>{s[String(o)]=n(o)}),new Pt.AsyncTexture(e,{id:t,dimension:"cube",mipmaps:!1,sampler:r,data:s})}var $=U(at(),1);var eo=1/Math.PI*180,no=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 G(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ct(e,t,n){let r=L.EPSILON;n&&(L.EPSILON=n);try{if(e===t)return!0;if(G(e)&&G(t)){if(e.length!==t.length)return!1;for(let s=0;s<e.length;++s)if(!Ct(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 D=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:G(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(!Ct(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 o=t[s],i=typeof n=="number"?n:n[s];this[s]=o+r*(i-o)}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 Ar(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 E(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function H(e,t,n=""){if(L.debug&&!Ar(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function Bt(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var gt=class extends D{get x(){return this[0]}set x(t){this[0]=E(t)}get y(){return this[1]}set y(t){this[1]=E(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 E(n)}dot(t){let n=0;for(let r=0;r<this.ELEMENTS;++r)n+=this[r]*t[r];return E(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 Bt(t>=0&&t<this.ELEMENTS,"index is out of range"),E(this[t])}setComponent(t,n){return Bt(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 mo=Math.PI/180;function Sr(){let e=new R(2);return R!=Float32Array&&(e[0]=0,e[1]=0),e}function Se(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 xo=function(){let e=Sr();return function(t,n,r,s,o,i){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],o(e,e,i),t[c]=e[0],t[c+1]=e[1];return t}}();function _e(e,t,n){let r=t[0],s=t[1],o=n[3]*r+n[7]*s||1;return e[0]=(n[0]*r+n[4]*s)/o,e[1]=(n[1]*r+n[5]*s)/o,e}function ye(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[3]*r+n[7]*s+n[11]*o||1;return e[0]=(n[0]*r+n[4]*s+n[8]*o)/i,e[1]=(n[1]*r+n[5]*s+n[9]*o)/i,e[2]=(n[2]*r+n[6]*s+n[10]*o)/i,e}function Ee(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],o=t[2];return e[0]=n[0]*r+n[3]*s+n[6]*o,e[1]=n[1]*r+n[4]*s+n[7]*o,e[2]=n[2]*r+n[5]*s+n[8]*o,e[3]=t[3],e}function zt(){let e=new R(3);return R!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function _r(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],o=n*n+r*r+s*s;return o>0&&(o=1/Math.sqrt(o)),e[0]=t[0]*o,e[1]=t[1]*o,e[2]=t[2]*o,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],o=t[2],i=n[0],c=n[1],a=n[2];return e[0]=s*a-o*c,e[1]=o*i-r*a,e[2]=r*c-s*i,e}function Mt(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[3]*r+n[7]*s+n[11]*o+n[15];return i=i||1,e[0]=(n[0]*r+n[4]*s+n[8]*o+n[12])/i,e[1]=(n[1]*r+n[5]*s+n[9]*o+n[13])/i,e[2]=(n[2]*r+n[6]*s+n[10]*o+n[14])/i,e}function ve(e,t,n){let r=n[0],s=n[1],o=n[2],i=n[3],c=t[0],a=t[1],l=t[2],f=s*l-o*a,h=o*c-r*l,p=r*a-s*c,m=s*p-o*h,x=o*f-r*p,g=r*h-s*f,d=i*2;return f*=d,h*=d,p*=d,m*=2,x*=2,g*=2,e[0]=c+f+m,e[1]=a+h+x,e[2]=l+p+g,e}var Ie=_r;var uo=function(){let e=zt();return function(t,n,r,s,o,i){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],o(e,e,i),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2];return t}}();var ut,Y=class extends gt{static get ZERO(){return ut||(ut=new Y(0,0,0,0),Object.freeze(ut)),ut}constructor(t=0,n=0,r=0,s=0){super(-0,-0,-0,-0),G(t)&&arguments.length===1?this.copy(t):(L.debug&&(E(t),E(n),E(r),E(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&&(E(t.x),E(t.y),E(t.z),E(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]=E(t)}get w(){return this[3]}set w(t){this[3]=E(t)}transform(t){return Mt(this,this,t),this.check()}transformByMatrix3(t){return Te(this,this,t),this.check()}transformByMatrix2(t){return Ee(this,this,t),this.check()}transformByQuaternion(t){return ve(this,this,t),this.check()}applyMatrix4(t){return t.transform(this,this),this}};var At=class extends D{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]=E(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 be(){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 Ne(e,t){if(e===t){let n=t[1],r=t[2],s=t[3],o=t[6],i=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]=o,e[11]=t[14],e[12]=s,e[13]=i,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],o=t[3],i=t[4],c=t[5],a=t[6],l=t[7],f=t[8],h=t[9],p=t[10],m=t[11],x=t[12],g=t[13],d=t[14],_=t[15],T=n*c-r*i,M=n*a-s*i,u=n*l-o*i,A=r*a-s*c,S=r*l-o*c,v=s*l-o*a,I=f*g-h*x,b=f*d-p*x,N=f*_-m*x,w=h*d-p*g,O=h*_-m*g,P=p*_-m*d,y=T*P-M*O+u*w+A*N-S*b+v*I;return y?(y=1/y,e[0]=(c*P-a*O+l*w)*y,e[1]=(s*O-r*P-o*w)*y,e[2]=(g*v-d*S+_*A)*y,e[3]=(p*S-h*v-m*A)*y,e[4]=(a*N-i*P-l*b)*y,e[5]=(n*P-s*N+o*b)*y,e[6]=(d*u-x*v-_*M)*y,e[7]=(f*v-p*u+m*M)*y,e[8]=(i*O-c*N+l*I)*y,e[9]=(r*N-n*O-o*I)*y,e[10]=(x*S-g*u+_*T)*y,e[11]=(h*u-f*S-m*T)*y,e[12]=(c*b-i*w-a*I)*y,e[13]=(n*w-r*b+s*I)*y,e[14]=(g*M-x*A-d*T)*y,e[15]=(f*A-h*M+p*T)*y,e):null}function Oe(e){let t=e[0],n=e[1],r=e[2],s=e[3],o=e[4],i=e[5],c=e[6],a=e[7],l=e[8],f=e[9],h=e[10],p=e[11],m=e[12],x=e[13],g=e[14],d=e[15],_=t*i-n*o,T=t*c-r*o,M=n*c-r*i,u=l*x-f*m,A=l*g-h*m,S=f*g-h*x,v=t*S-n*A+r*u,I=o*S-i*A+c*u,b=l*M-f*T+h*_,N=m*M-x*T+g*_;return a*v-s*I+d*b-p*N}function kt(e,t,n){let r=t[0],s=t[1],o=t[2],i=t[3],c=t[4],a=t[5],l=t[6],f=t[7],h=t[8],p=t[9],m=t[10],x=t[11],g=t[12],d=t[13],_=t[14],T=t[15],M=n[0],u=n[1],A=n[2],S=n[3];return e[0]=M*r+u*c+A*h+S*g,e[1]=M*s+u*a+A*p+S*d,e[2]=M*o+u*l+A*m+S*_,e[3]=M*i+u*f+A*x+S*T,M=n[4],u=n[5],A=n[6],S=n[7],e[4]=M*r+u*c+A*h+S*g,e[5]=M*s+u*a+A*p+S*d,e[6]=M*o+u*l+A*m+S*_,e[7]=M*i+u*f+A*x+S*T,M=n[8],u=n[9],A=n[10],S=n[11],e[8]=M*r+u*c+A*h+S*g,e[9]=M*s+u*a+A*p+S*d,e[10]=M*o+u*l+A*m+S*_,e[11]=M*i+u*f+A*x+S*T,M=n[12],u=n[13],A=n[14],S=n[15],e[12]=M*r+u*c+A*h+S*g,e[13]=M*s+u*a+A*p+S*d,e[14]=M*o+u*l+A*m+S*_,e[15]=M*i+u*f+A*x+S*T,e}function Pe(e,t,n){let r=n[0],s=n[1],o=n[2],i,c,a,l,f,h,p,m,x,g,d,_;return t===e?(e[12]=t[0]*r+t[4]*s+t[8]*o+t[12],e[13]=t[1]*r+t[5]*s+t[9]*o+t[13],e[14]=t[2]*r+t[6]*s+t[10]*o+t[14],e[15]=t[3]*r+t[7]*s+t[11]*o+t[15]):(i=t[0],c=t[1],a=t[2],l=t[3],f=t[4],h=t[5],p=t[6],m=t[7],x=t[8],g=t[9],d=t[10],_=t[11],e[0]=i,e[1]=c,e[2]=a,e[3]=l,e[4]=f,e[5]=h,e[6]=p,e[7]=m,e[8]=x,e[9]=g,e[10]=d,e[11]=_,e[12]=i*r+f*s+x*o+t[12],e[13]=c*r+h*s+g*o+t[13],e[14]=a*r+p*s+d*o+t[14],e[15]=l*r+m*s+_*o+t[15]),e}function Ce(e,t,n){let r=n[0],s=n[1],o=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]*o,e[9]=t[9]*o,e[10]=t[10]*o,e[11]=t[11]*o,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],o=r[1],i=r[2],c=Math.sqrt(s*s+o*o+i*i),a,l,f,h,p,m,x,g,d,_,T,M,u,A,S,v,I,b,N,w,O,P,y,X;return c<1e-6?null:(c=1/c,s*=c,o*=c,i*=c,l=Math.sin(n),a=Math.cos(n),f=1-a,h=t[0],p=t[1],m=t[2],x=t[3],g=t[4],d=t[5],_=t[6],T=t[7],M=t[8],u=t[9],A=t[10],S=t[11],v=s*s*f+a,I=o*s*f+i*l,b=i*s*f-o*l,N=s*o*f-i*l,w=o*o*f+a,O=i*o*f+s*l,P=s*i*f+o*l,y=o*i*f-s*l,X=i*i*f+a,e[0]=h*v+g*I+M*b,e[1]=p*v+d*I+u*b,e[2]=m*v+_*I+A*b,e[3]=x*v+T*I+S*b,e[4]=h*N+g*w+M*O,e[5]=p*N+d*w+u*O,e[6]=m*N+_*w+A*O,e[7]=x*N+T*w+S*O,e[8]=h*P+g*y+M*X,e[9]=p*P+d*y+u*X,e[10]=m*P+_*y+A*X,e[11]=x*P+T*y+S*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),o=t[4],i=t[5],c=t[6],a=t[7],l=t[8],f=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]=o*s+l*r,e[5]=i*s+f*r,e[6]=c*s+h*r,e[7]=a*s+p*r,e[8]=l*s-o*r,e[9]=f*s-i*r,e[10]=h*s-c*r,e[11]=p*s-a*r,e}function Fe(e,t,n){let r=Math.sin(n),s=Math.cos(n),o=t[0],i=t[1],c=t[2],a=t[3],l=t[8],f=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]=o*s-l*r,e[1]=i*s-f*r,e[2]=c*s-h*r,e[3]=a*s-p*r,e[8]=o*r+l*s,e[9]=i*r+f*s,e[10]=c*r+h*s,e[11]=a*r+p*s,e}function ke(e,t,n){let r=Math.sin(n),s=Math.cos(n),o=t[0],i=t[1],c=t[2],a=t[3],l=t[4],f=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]=o*s+l*r,e[1]=i*s+f*r,e[2]=c*s+h*r,e[3]=a*s+p*r,e[4]=l*s-o*r,e[5]=f*s-i*r,e[6]=h*s-c*r,e[7]=p*s-a*r,e}function De(e,t){let n=t[0],r=t[1],s=t[2],o=t[3],i=n+n,c=r+r,a=s+s,l=n*i,f=r*i,h=r*c,p=s*i,m=s*c,x=s*a,g=o*i,d=o*c,_=o*a;return e[0]=1-h-x,e[1]=f+_,e[2]=p-d,e[3]=0,e[4]=f-_,e[5]=1-l-x,e[6]=m+g,e[7]=0,e[8]=p+d,e[9]=m-g,e[10]=1-l-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function Ue(e,t,n,r,s,o,i){let c=1/(n-t),a=1/(s-r),l=1/(o-i);return e[0]=o*2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o*2*a,e[6]=0,e[7]=0,e[8]=(n+t)*c,e[9]=(s+r)*a,e[10]=(i+o)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=i*o*2*l,e[15]=0,e}function Lr(e,t,n,r,s){let o=1/Math.tan(t/2);if(e[0]=o/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,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 i=1/(r-s);e[10]=(s+r)*i,e[14]=2*s*r*i}else e[10]=-1,e[14]=-2*r;return e}var Ve=Lr;function Rr(e,t,n,r,s,o,i){let c=1/(t-n),a=1/(r-s),l=1/(o-i);return e[0]=-2*c,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*c,e[13]=(s+r)*a,e[14]=(i+o)*l,e[15]=1,e}var qe=Rr;function Ge(e,t,n,r){let s,o,i,c,a,l,f,h,p,m,x=t[0],g=t[1],d=t[2],_=r[0],T=r[1],M=r[2],u=n[0],A=n[1],S=n[2];return Math.abs(x-u)<1e-6&&Math.abs(g-A)<1e-6&&Math.abs(d-S)<1e-6?Tr(e):(h=x-u,p=g-A,m=d-S,s=1/Math.sqrt(h*h+p*p+m*m),h*=s,p*=s,m*=s,o=T*m-M*p,i=M*h-_*m,c=_*p-T*h,s=Math.sqrt(o*o+i*i+c*c),s?(s=1/s,o*=s,i*=s,c*=s):(o=0,i=0,c=0),a=p*c-m*i,l=m*o-h*c,f=h*i-p*o,s=Math.sqrt(a*a+l*l+f*f),s?(s=1/s,a*=s,l*=s,f*=s):(a=0,l=0,f=0),e[0]=o,e[1]=a,e[2]=h,e[3]=0,e[4]=i,e[5]=l,e[6]=p,e[7]=0,e[8]=c,e[9]=f,e[10]=m,e[11]=0,e[12]=-(o*x+i*g+c*d),e[13]=-(a*x+l*g+f*d),e[14]=-(h*x+p*g+m*d),e[15]=1,e)}function vr(){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 Ye(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 We(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 $e(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],o=t[3],i=n*n+r*r+s*s+o*o;return i>0&&(i=1/Math.sqrt(i)),e[0]=n*i,e[1]=r*i,e[2]=s*i,e[3]=o*i,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],o=t[1],i=t[2],c=t[3];return e[0]=s+r*(n[0]-s),e[1]=o+r*(n[1]-o),e[2]=i+r*(n[2]-i),e[3]=c+r*(n[3]-c),e}function Qe(e,t,n){let r=t[0],s=t[1],o=t[2],i=t[3];return e[0]=n[0]*r+n[4]*s+n[8]*o+n[12]*i,e[1]=n[1]*r+n[5]*s+n[9]*o+n[13]*i,e[2]=n[2]*r+n[6]*s+n[10]*o+n[14]*i,e[3]=n[3]*r+n[7]*s+n[11]*o+n[15]*i,e}function Ze(e,t,n){let r=t[0],s=t[1],o=t[2],i=n[0],c=n[1],a=n[2],l=n[3],f=l*r+c*o-a*s,h=l*s+a*r-i*o,p=l*o+i*s-c*r,m=-i*r-c*s-a*o;return e[0]=f*l+m*-i+h*-a-p*-c,e[1]=h*l+m*-c+p*-i-f*-a,e[2]=p*l+m*-a+f*-c-h*-i,e[3]=t[3],e}var No=function(){let e=vr();return function(t,n,r,s,o,i){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],o(e,e,i),t[c]=e[0],t[c+1]=e[1],t[c+2]=e[2],t[c+3]=e[3];return t}}();var Vt;(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"})(Vt||(Vt={}));var br=45*Math.PI/180,Nr=1,Dt=.1,Ut=500,wr=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),k=class extends At{static get IDENTITY(){return Pr()}static get ZERO(){return Or()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return Vt}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,o,i,c,a,l,f,h,p,m,x,g,d){return this[0]=t,this[1]=n,this[2]=r,this[3]=s,this[4]=o,this[5]=i,this[6]=c,this[7]=a,this[8]=l,this[9]=f,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,o,i,c,a,l,f,h,p,m,x,g,d){return this[0]=t,this[1]=o,this[2]=l,this[3]=m,this[4]=n,this[5]=i,this[6]=f,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 De(this,t),this.check()}frustum(t){let{left:n,right:r,bottom:s,top:o,near:i=Dt,far:c=Ut}=t;return c===1/0?Cr(this,n,r,s,o,i):Ue(this,n,r,s,o,i,c),this.check()}lookAt(t){let{eye:n,center:r=[0,0,0],up:s=[0,1,0]}=t;return Ge(this,n,r,s),this.check()}ortho(t){let{left:n,right:r,bottom:s,top:o,near:i=Dt,far:c=Ut}=t;return qe(this,n,r,s,o,i,c),this.check()}orthographic(t){let{fovy:n=br,aspect:r=Nr,focalDistance:s=1,near:o=Dt,far:i=Ut}=t;Je(n);let c=n/2,a=s*Math.tan(c),l=a*r;return this.ortho({left:-l,right:l,bottom:-a,top:a,near:o,far:i})}perspective(t){let{fovy:n=45*Math.PI/180,aspect:r=1,near:s=.1,far:o=500}=t;return Je(n),Ve(this,n,r,s,o),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],o=1/r[1],i=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*o,t[2]=this[2]*i,t[3]=0,t[4]=this[4]*s,t[5]=this[5]*o,t[6]=this[6]*i,t[7]=0,t[8]=this[8]*s,t[9]=this[9]*o,t[10]=this[10]*i,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],o=1/r[1],i=1/r[2];return t[0]=this[0]*s,t[1]=this[1]*o,t[2]=this[2]*i,t[3]=this[4]*s,t[4]=this[5]*o,t[5]=this[6]*i,t[6]=this[8]*s,t[7]=this[9]*o,t[8]=this[10]*i,t}transpose(){return Ne(this,this),this.check()}invert(){return we(this,this),this.check()}multiplyLeft(t){return kt(this,t,this),this.check()}multiplyRight(t){return kt(this,this,t),this.check()}rotateX(t){return ze(this,this,t),this.check()}rotateY(t){return Fe(this,this,t),this.check()}rotateZ(t){return ke(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=Se(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=_e(n||[-0,-0],t,this);break;case 3:r=ye(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])}},St,_t;function Or(){return St||(St=new k([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(St)),St}function Pr(){return _t||(_t=new k,Object.freeze(_t)),_t}function Je(e){if(e>Math.PI*2)throw Error("expected radians")}function Cr(e,t,n,r,s,o){let i=2*o/(n-t),c=2*o/(s-r),a=(n+t)/(n-t),l=(s+r)/(s-r),f=-1,h=-1,p=-2*o;return e[0]=i,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=a,e[9]=l,e[10]=f,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 qt(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 Gt(e,t,n){let r=t[0],s=t[1],o=t[2],i=t[3],c=n[0],a=n[1],l=n[2],f=n[3];return e[0]=r*f+i*c+s*l-o*a,e[1]=s*f+i*a+o*c-r*l,e[2]=o*f+i*l+r*a-s*c,e[3]=i*f-r*c-s*a-o*l,e}function nn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a-s*c,e[3]=i*a-r*c,e}function rn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a+r*c,e[3]=i*a-s*c,e}function sn(e,t,n){n*=.5;let r=t[0],s=t[1],o=t[2],i=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]=o*a+i*c,e[3]=i*a-o*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],o=t[1],i=t[2],c=t[3],a=n[0],l=n[1],f=n[2],h=n[3],p,m,x,g,d;return p=s*a+o*l+i*f+c*h,p<0&&(p=-p,a=-a,l=-l,f=-f,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*o+g*l,e[2]=x*i+g*f,e[3]=x*c+g*h,e}function cn(e,t){let n=t[0],r=t[1],s=t[2],o=t[3],i=n*n+r*r+s*s+o*o,c=i?1/i:0;return e[0]=-n*c,e[1]=-r*c,e[2]=-s*c,e[3]=o*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 Ht(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 o=(s+1)%3,i=(s+2)%3;r=Math.sqrt(t[s*3+s]-t[o*3+o]-t[i*3+i]+1),e[s]=.5*r,r=.5/r,e[3]=(t[o*3+i]-t[i*3+o])*r,e[o]=(t[o*3+s]+t[s*3+o])*r,e[i]=(t[i*3+s]+t[s*3+i])*r}return e}var ln=He;var fn=Ye,hn=je,pn=Ke,mn=We;var xn=$e;var gn=Xe;var dn=function(){let e=zt(),t=Ft(1,0,0),n=Ft(0,1,0);return function(r,s,o){let i=Re(s,o);return i<-.999999?(dt(e,t,s),Ie(e)<1e-6&&dt(e,n,s),Le(e,e),qt(r,e,Math.PI),r):i>.999999?(r[0]=0,r[1]=0,r[2]=0,r[3]=1,r):(dt(e,s,o),r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=1+i,gn(r,r))}}(),Ho=function(){let e=tn(),t=tn();return function(n,r,s,o,i,c){return et(e,r,i,c),et(t,s,o,c),et(n,e,t,2*c*(1-c)),n}}(),Yo=function(){let e=be();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,Ht(t,e))}}();var Br=[0,0,0,1],nt=class extends D{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 Ht(this,t),this.check()}fromAxisRotation(t,n){return qt(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]=E(t)}get y(){return this[1]}set y(t){this[1]=E(t)}get z(){return this[2]}set z(t){this[2]=E(t)}get w(){return this[3]}set w(t){this[3]=E(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 ln(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 Gt(this,this,t),this.check()}multiplyLeft(t){return Gt(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 fn(this,this,t),this.check()}slerp(t,n,r){let s,o,i;switch(arguments.length){case 1:({start:s=Br,target:o,ratio:i}=t);break;case 2:s=this,o=t,i=n;break;default:s=t,o=n,i=r}return et(this,s,o,i),this.check()}transformVector4(t,n=new Y){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 Wt=U(j(),1);var zr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Fr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},$t=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:o,path:i})=>{Gr(r,s,o,i),Dr(o,o._node)})}},W=class{animations;constructor(t){this.animations=t.animations.map((n,r)=>{let s=n.name||`Animation-${r}`,o=n.samplers.map(({input:c,interpolation:a="LINEAR",output:l})=>({input:Mn(t.accessors[c]),interpolation:a,output:Mn(t.accessors[l])})),i=n.channels.map(({sampler:c,target:a})=>({sampler:o[c],target:t.nodes[a.node],path:a.path}));return new $t({name:s,channels:i})})}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=Fr[e.componentType],n=zr[e.type],r=n*e.count,{buffer:s,byteOffset:o}=e.bufferView.data,i=new t(s,o+(e.byteOffset||0),r);if(n===1)e._animation=Array.from(i);else{let c=[];for(let a=0;a<i.length;a+=n)c.push(Array.from(i.slice(a,a+n)));e._animation=c}}return e._animation}var kr=new k;function Dr(e,t){if(t.matrix.identity(),e.translation&&t.matrix.translate(e.translation),e.rotation){let n=kr.fromQuaternion(e.rotation);t.matrix.multiplyRight(n)}e.scale&&t.matrix.scale(e.scale)}var Yt=new nt;function Ur(e,t,n,r,s){if(t==="rotation"){Yt.slerp({start:n,target:r,ratio:s});for(let o=0;o<Yt.length;o++)e[t][o]=Yt[o]}else for(let o=0;o<n.length;o++)e[t][o]=s*r[o]+(1-s)*n[o]}function Vr(e,t,{p0:n,outTangent0:r,inTangent1:s,p1:o,tDiff:i,ratio:c}){for(let a=0;a<e[t].length;a++){let l=r[a]*i,f=s[a]*i;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)*l+(-2*Math.pow(c,3)+3*Math.pow(c,2))*o[a]+(Math.pow(c,3)-Math.pow(c,2))*f}}function qr(e,t,n){for(let r=0;r<n.length;r++)e[t][r]=n[r]}function Gr(e,{input:t,interpolation:n,output:r},s,o){let i=t[t.length-1],c=e%i,a=t.findIndex(p=>p>=c),l=Math.max(0,a-1);if(!Array.isArray(s[o]))switch(o){case"translation":s[o]=[0,0,0];break;case"rotation":s[o]=[0,0,0,1];break;case"scale":s[o]=[1,1,1];break;default:Wt.log.warn(`Bad animation path ${o}`)()}let f=t[l],h=t[a];switch(n){case"STEP":qr(s,o,r[l]);break;case"LINEAR":if(h>f){let p=(c-f)/(h-f);Ur(s,o,r[l],r[a],p)}break;case"CUBICSPLINE":if(h>f){let p=(c-f)/(h-f),m=h-f,x=r[3*l+1],g=r[3*l+2],d=r[3*a+0],_=r[3*a+1];Vr(s,o,{p0:x,outTangent0:g,inTangent1:d,p1:_,tDiff:m,ratio:p})}break;default:Wt.log.warn(`Interpolation ${n} not supported`)();break}}var yn=U(j(),1);var Xt=`#if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX))
|
|
8
|
+
|
|
8
9
|
struct AmbientLight {
|
|
9
|
-
vec3 color;
|
|
10
|
+
vec3 color;
|
|
10
11
|
};
|
|
12
|
+
|
|
11
13
|
struct PointLight {
|
|
12
|
-
vec3 color;
|
|
13
|
-
vec3 position;
|
|
14
|
-
|
|
14
|
+
vec3 color;
|
|
15
|
+
vec3 position;
|
|
16
|
+
|
|
17
|
+
// Constant-Linear-Exponential
|
|
18
|
+
vec3 attenuation;
|
|
15
19
|
};
|
|
20
|
+
|
|
16
21
|
struct DirectionalLight {
|
|
17
|
-
vec3 color;
|
|
18
|
-
vec3 direction;
|
|
22
|
+
vec3 color;
|
|
23
|
+
vec3 direction;
|
|
19
24
|
};
|
|
25
|
+
|
|
20
26
|
uniform AmbientLight lighting_uAmbientLight;
|
|
21
27
|
uniform PointLight lighting_uPointLight[MAX_LIGHTS];
|
|
22
28
|
uniform DirectionalLight lighting_uDirectionalLight[MAX_LIGHTS];
|
|
23
29
|
uniform int lighting_uPointLightCount;
|
|
24
30
|
uniform int lighting_uDirectionalLightCount;
|
|
31
|
+
|
|
25
32
|
uniform bool lighting_uEnabled;
|
|
33
|
+
|
|
26
34
|
float getPointLightAttenuation(PointLight pointLight, float distance) {
|
|
27
|
-
return pointLight.attenuation.x
|
|
28
|
-
+ pointLight.attenuation.y * distance
|
|
29
|
-
+ pointLight.attenuation.z * distance * distance;
|
|
35
|
+
return pointLight.attenuation.x
|
|
36
|
+
+ pointLight.attenuation.y * distance
|
|
37
|
+
+ pointLight.attenuation.z * distance * distance;
|
|
30
38
|
}
|
|
39
|
+
|
|
31
40
|
#endif
|
|
32
|
-
`;var
|
|
41
|
+
`;var Hr={lightSources:{}};function jt(e={}){let{color:t=[0,0,0],intensity:n=1}=e;return t.map(r=>r*n/255)}function Yr({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,o)=>{r[`lighting_uPointLight[${o}].color`]=jt(s),r[`lighting_uPointLight[${o}].position`]=s.position,r[`lighting_uPointLight[${o}].attenuation`]=s.attenuation||[1,0,0]}),r.lighting_uPointLightCount=t.length,n.forEach((s,o)=>{r[`lighting_uDirectionalLight[${o}].color`]=jt(s),r[`lighting_uDirectionalLight[${o}].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({},Yr({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 An={name:"lights",vs:Xt,fs:Xt,getUniforms:un,defines:{MAX_LIGHTS:3}};var Sn=`uniform mat4 u_MVPMatrix;
|
|
33
42
|
uniform mat4 u_ModelMatrix;
|
|
34
43
|
uniform mat4 u_NormalMatrix;
|
|
44
|
+
|
|
35
45
|
out vec3 pbr_vPosition;
|
|
36
46
|
out vec2 pbr_vUV;
|
|
47
|
+
|
|
37
48
|
#ifdef HAS_NORMALS
|
|
38
49
|
# ifdef HAS_TANGENTS
|
|
39
50
|
out mat3 pbr_vTBN;
|
|
@@ -41,34 +52,40 @@ out mat3 pbr_vTBN;
|
|
|
41
52
|
out vec3 pbr_vNormal;
|
|
42
53
|
# endif
|
|
43
54
|
#endif
|
|
55
|
+
|
|
44
56
|
void pbr_setPositionNormalTangentUV(vec4 position, vec4 normal, vec4 tangent, vec2 uv)
|
|
45
57
|
{
|
|
46
|
-
vec4 pos = u_ModelMatrix * position;
|
|
47
|
-
pbr_vPosition = vec3(pos.xyz) / pos.w;
|
|
58
|
+
vec4 pos = u_ModelMatrix * position;
|
|
59
|
+
pbr_vPosition = vec3(pos.xyz) / pos.w;
|
|
60
|
+
|
|
48
61
|
#ifdef HAS_NORMALS
|
|
49
62
|
#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)));
|
|
63
|
+
vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(normal.xyz, 0.0)));
|
|
64
|
+
vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent.xyz, 0.0)));
|
|
65
|
+
vec3 bitangentW = cross(normalW, tangentW) * tangent.w;
|
|
66
|
+
pbr_vTBN = mat3(tangentW, bitangentW, normalW);
|
|
67
|
+
#else // HAS_TANGENTS != 1
|
|
68
|
+
pbr_vNormal = normalize(vec3(u_ModelMatrix * vec4(normal.xyz, 0.0)));
|
|
56
69
|
#endif
|
|
57
70
|
#endif
|
|
71
|
+
|
|
58
72
|
#ifdef HAS_UV
|
|
59
|
-
pbr_vUV = uv;
|
|
73
|
+
pbr_vUV = uv;
|
|
60
74
|
#else
|
|
61
|
-
pbr_vUV = vec2(0.,0.);
|
|
75
|
+
pbr_vUV = vec2(0.,0.);
|
|
62
76
|
#endif
|
|
63
77
|
}
|
|
64
|
-
`;var
|
|
78
|
+
`;var _n=`precision highp float;
|
|
79
|
+
|
|
65
80
|
uniform bool pbr_uUnlit;
|
|
81
|
+
|
|
66
82
|
#ifdef USE_IBL
|
|
67
83
|
uniform samplerCube u_DiffuseEnvSampler;
|
|
68
84
|
uniform samplerCube u_SpecularEnvSampler;
|
|
69
85
|
uniform sampler2D u_brdfLUT;
|
|
70
86
|
uniform vec2 u_ScaleIBLAmbient;
|
|
71
87
|
#endif
|
|
88
|
+
|
|
72
89
|
#ifdef HAS_BASECOLORMAP
|
|
73
90
|
uniform sampler2D u_BaseColorSampler;
|
|
74
91
|
#endif
|
|
@@ -87,18 +104,26 @@ uniform sampler2D u_MetallicRoughnessSampler;
|
|
|
87
104
|
uniform sampler2D u_OcclusionSampler;
|
|
88
105
|
uniform float u_OcclusionStrength;
|
|
89
106
|
#endif
|
|
107
|
+
|
|
90
108
|
#ifdef ALPHA_CUTOFF
|
|
91
109
|
uniform float u_AlphaCutoff;
|
|
92
110
|
#endif
|
|
111
|
+
|
|
93
112
|
uniform vec2 u_MetallicRoughnessValues;
|
|
94
113
|
uniform vec4 u_BaseColorFactor;
|
|
114
|
+
|
|
95
115
|
uniform vec3 u_Camera;
|
|
116
|
+
|
|
117
|
+
// debugging flags used for shader output of intermediate PBR variables
|
|
96
118
|
#ifdef PBR_DEBUG
|
|
97
119
|
uniform vec4 u_ScaleDiffBaseMR;
|
|
98
120
|
uniform vec4 u_ScaleFGDSpec;
|
|
99
121
|
#endif
|
|
122
|
+
|
|
100
123
|
in vec3 pbr_vPosition;
|
|
124
|
+
|
|
101
125
|
in vec2 pbr_vUV;
|
|
126
|
+
|
|
102
127
|
#ifdef HAS_NORMALS
|
|
103
128
|
#ifdef HAS_TANGENTS
|
|
104
129
|
in mat3 pbr_vTBN;
|
|
@@ -106,231 +131,332 @@ in mat3 pbr_vTBN;
|
|
|
106
131
|
in vec3 pbr_vNormal;
|
|
107
132
|
#endif
|
|
108
133
|
#endif
|
|
134
|
+
|
|
135
|
+
// Encapsulate the various inputs used by the various functions in the shading equation
|
|
136
|
+
// We store values in this struct to simplify the integration of alternative implementations
|
|
137
|
+
// of the shading terms, outlined in the Readme.MD Appendix.
|
|
109
138
|
struct PBRInfo
|
|
110
139
|
{
|
|
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;
|
|
140
|
+
float NdotL; // cos angle between normal and light direction
|
|
141
|
+
float NdotV; // cos angle between normal and view direction
|
|
142
|
+
float NdotH; // cos angle between normal and half vector
|
|
143
|
+
float LdotH; // cos angle between light direction and half vector
|
|
144
|
+
float VdotH; // cos angle between view direction and half vector
|
|
145
|
+
float perceptualRoughness; // roughness value, as authored by the model creator (input to shader)
|
|
146
|
+
float metalness; // metallic value at the surface
|
|
147
|
+
vec3 reflectance0; // full reflectance color (normal incidence angle)
|
|
148
|
+
vec3 reflectance90; // reflectance color at grazing angle
|
|
149
|
+
float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2])
|
|
150
|
+
vec3 diffuseColor; // color contribution from diffuse lighting
|
|
151
|
+
vec3 specularColor; // color contribution from specular lighting
|
|
152
|
+
vec3 n; // normal at surface point
|
|
153
|
+
vec3 v; // vector from surface point to camera
|
|
125
154
|
};
|
|
155
|
+
|
|
126
156
|
const float M_PI = 3.141592653589793;
|
|
127
157
|
const float c_MinRoughness = 0.04;
|
|
158
|
+
|
|
128
159
|
vec4 SRGBtoLINEAR(vec4 srgbIn)
|
|
129
160
|
{
|
|
130
161
|
#ifdef MANUAL_SRGB
|
|
131
162
|
#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
|
|
163
|
+
vec3 linOut = pow(srgbIn.xyz,vec3(2.2));
|
|
164
|
+
#else //SRGB_FAST_APPROXIMATION
|
|
165
|
+
vec3 bLess = step(vec3(0.04045),srgbIn.xyz);
|
|
166
|
+
vec3 linOut = mix( srgbIn.xyz/vec3(12.92), pow((srgbIn.xyz+vec3(0.055))/vec3(1.055),vec3(2.4)), bLess );
|
|
167
|
+
#endif //SRGB_FAST_APPROXIMATION
|
|
168
|
+
return vec4(linOut,srgbIn.w);;
|
|
169
|
+
#else //MANUAL_SRGB
|
|
170
|
+
return srgbIn;
|
|
171
|
+
#endif //MANUAL_SRGB
|
|
141
172
|
}
|
|
173
|
+
|
|
174
|
+
// Find the normal for this fragment, pulling either from a predefined normal map
|
|
175
|
+
// or from the interpolated mesh normal and tangent attributes.
|
|
142
176
|
vec3 getNormal()
|
|
143
177
|
{
|
|
178
|
+
// Retrieve the tangent space matrix
|
|
144
179
|
#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);
|
|
180
|
+
vec3 pos_dx = dFdx(pbr_vPosition);
|
|
181
|
+
vec3 pos_dy = dFdy(pbr_vPosition);
|
|
182
|
+
vec3 tex_dx = dFdx(vec3(pbr_vUV, 0.0));
|
|
183
|
+
vec3 tex_dy = dFdy(vec3(pbr_vUV, 0.0));
|
|
184
|
+
vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);
|
|
185
|
+
|
|
150
186
|
#ifdef HAS_NORMALS
|
|
151
|
-
vec3 ng = normalize(pbr_vNormal);
|
|
187
|
+
vec3 ng = normalize(pbr_vNormal);
|
|
152
188
|
#else
|
|
153
|
-
vec3 ng = cross(pos_dx, pos_dy);
|
|
189
|
+
vec3 ng = cross(pos_dx, pos_dy);
|
|
154
190
|
#endif
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
191
|
+
|
|
192
|
+
t = normalize(t - ng * dot(ng, t));
|
|
193
|
+
vec3 b = normalize(cross(ng, t));
|
|
194
|
+
mat3 tbn = mat3(t, b, ng);
|
|
195
|
+
#else // HAS_TANGENTS
|
|
196
|
+
mat3 tbn = pbr_vTBN;
|
|
160
197
|
#endif
|
|
198
|
+
|
|
161
199
|
#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)));
|
|
200
|
+
vec3 n = texture(u_NormalSampler, pbr_vUV).rgb;
|
|
201
|
+
n = normalize(tbn * ((2.0 * n - 1.0) * vec3(u_NormalScale, u_NormalScale, 1.0)));
|
|
164
202
|
#else
|
|
165
|
-
|
|
203
|
+
// The tbn matrix is linearly interpolated, so we need to re-normalize
|
|
204
|
+
vec3 n = normalize(tbn[2].xyz);
|
|
166
205
|
#endif
|
|
167
|
-
|
|
206
|
+
|
|
207
|
+
return n;
|
|
168
208
|
}
|
|
209
|
+
|
|
210
|
+
// Calculation of the lighting contribution from an optional Image Based Light source.
|
|
211
|
+
// Precomputed Environment Maps are required uniform inputs and are computed as outlined in [1].
|
|
212
|
+
// See our README.md on Environment Maps [3] for additional discussion.
|
|
169
213
|
#ifdef USE_IBL
|
|
170
214
|
vec3 getIBLContribution(PBRInfo pbrInputs, vec3 n, vec3 reflection)
|
|
171
215
|
{
|
|
172
|
-
float mipCount = 9.0;
|
|
173
|
-
float lod = (pbrInputs.perceptualRoughness * mipCount);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
216
|
+
float mipCount = 9.0; // resolution of 512x512
|
|
217
|
+
float lod = (pbrInputs.perceptualRoughness * mipCount);
|
|
218
|
+
// retrieve a scale and bias to F0. See [1], Figure 3
|
|
219
|
+
vec3 brdf = SRGBtoLINEAR(texture(u_brdfLUT,
|
|
220
|
+
vec2(pbrInputs.NdotV, 1.0 - pbrInputs.perceptualRoughness))).rgb;
|
|
221
|
+
vec3 diffuseLight = SRGBtoLINEAR(textureCube(u_DiffuseEnvSampler, n)).rgb;
|
|
222
|
+
|
|
177
223
|
#ifdef USE_TEX_LOD
|
|
178
|
-
vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;
|
|
224
|
+
vec3 specularLight = SRGBtoLINEAR(textureCubeLod(u_SpecularEnvSampler, reflection, lod)).rgb;
|
|
179
225
|
#else
|
|
180
|
-
vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;
|
|
226
|
+
vec3 specularLight = SRGBtoLINEAR(textureCube(u_SpecularEnvSampler, reflection)).rgb;
|
|
181
227
|
#endif
|
|
182
|
-
|
|
183
|
-
vec3
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
228
|
+
|
|
229
|
+
vec3 diffuse = diffuseLight * pbrInputs.diffuseColor;
|
|
230
|
+
vec3 specular = specularLight * (pbrInputs.specularColor * brdf.x + brdf.y);
|
|
231
|
+
|
|
232
|
+
// For presentation, this allows us to disable IBL terms
|
|
233
|
+
diffuse *= u_ScaleIBLAmbient.x;
|
|
234
|
+
specular *= u_ScaleIBLAmbient.y;
|
|
235
|
+
|
|
236
|
+
return diffuse + specular;
|
|
187
237
|
}
|
|
188
238
|
#endif
|
|
239
|
+
|
|
240
|
+
// Basic Lambertian diffuse
|
|
241
|
+
// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog
|
|
242
|
+
// See also [1], Equation 1
|
|
189
243
|
vec3 diffuse(PBRInfo pbrInputs)
|
|
190
244
|
{
|
|
191
|
-
return pbrInputs.diffuseColor / M_PI;
|
|
245
|
+
return pbrInputs.diffuseColor / M_PI;
|
|
192
246
|
}
|
|
247
|
+
|
|
248
|
+
// The following equation models the Fresnel reflectance term of the spec equation (aka F())
|
|
249
|
+
// Implementation of fresnel from [4], Equation 15
|
|
193
250
|
vec3 specularReflection(PBRInfo pbrInputs)
|
|
194
251
|
{
|
|
195
|
-
return pbrInputs.reflectance0 +
|
|
196
|
-
(pbrInputs.reflectance90 - pbrInputs.reflectance0) *
|
|
197
|
-
pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);
|
|
252
|
+
return pbrInputs.reflectance0 +
|
|
253
|
+
(pbrInputs.reflectance90 - pbrInputs.reflectance0) *
|
|
254
|
+
pow(clamp(1.0 - pbrInputs.VdotH, 0.0, 1.0), 5.0);
|
|
198
255
|
}
|
|
256
|
+
|
|
257
|
+
// This calculates the specular geometric attenuation (aka G()),
|
|
258
|
+
// where rougher material will reflect less light back to the viewer.
|
|
259
|
+
// This implementation is based on [1] Equation 4, and we adopt their modifications to
|
|
260
|
+
// alphaRoughness as input as originally proposed in [2].
|
|
199
261
|
float geometricOcclusion(PBRInfo pbrInputs)
|
|
200
262
|
{
|
|
201
|
-
float NdotL = pbrInputs.NdotL;
|
|
202
|
-
float NdotV = pbrInputs.NdotV;
|
|
203
|
-
float r = pbrInputs.alphaRoughness;
|
|
204
|
-
|
|
205
|
-
float
|
|
206
|
-
|
|
263
|
+
float NdotL = pbrInputs.NdotL;
|
|
264
|
+
float NdotV = pbrInputs.NdotV;
|
|
265
|
+
float r = pbrInputs.alphaRoughness;
|
|
266
|
+
|
|
267
|
+
float attenuationL = 2.0 * NdotL / (NdotL + sqrt(r * r + (1.0 - r * r) * (NdotL * NdotL)));
|
|
268
|
+
float attenuationV = 2.0 * NdotV / (NdotV + sqrt(r * r + (1.0 - r * r) * (NdotV * NdotV)));
|
|
269
|
+
return attenuationL * attenuationV;
|
|
207
270
|
}
|
|
271
|
+
|
|
272
|
+
// The following equation(s) model the distribution of microfacet normals across
|
|
273
|
+
// the area being drawn (aka D())
|
|
274
|
+
// Implementation from "Average Irregularity Representation of a Roughened Surface
|
|
275
|
+
// for Ray Reflection" by T. S. Trowbridge, and K. P. Reitz
|
|
276
|
+
// Follows the distribution function recommended in the SIGGRAPH 2013 course notes
|
|
277
|
+
// from EPIC Games [1], Equation 3.
|
|
208
278
|
float microfacetDistribution(PBRInfo pbrInputs)
|
|
209
279
|
{
|
|
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);
|
|
280
|
+
float roughnessSq = pbrInputs.alphaRoughness * pbrInputs.alphaRoughness;
|
|
281
|
+
float f = (pbrInputs.NdotH * roughnessSq - pbrInputs.NdotH) * pbrInputs.NdotH + 1.0;
|
|
282
|
+
return roughnessSq / (M_PI * f * f);
|
|
213
283
|
}
|
|
284
|
+
|
|
214
285
|
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;
|
|
286
|
+
pbrInputs.NdotL = 1.0;
|
|
287
|
+
pbrInputs.NdotH = 0.0;
|
|
288
|
+
pbrInputs.LdotH = 0.0;
|
|
289
|
+
pbrInputs.VdotH = 1.0;
|
|
219
290
|
}
|
|
291
|
+
|
|
220
292
|
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
|
-
|
|
226
|
-
pbrInputs.
|
|
227
|
-
pbrInputs.
|
|
228
|
-
pbrInputs.
|
|
293
|
+
vec3 n = pbrInputs.n;
|
|
294
|
+
vec3 v = pbrInputs.v;
|
|
295
|
+
vec3 l = normalize(lightDirection); // Vector from surface point to light
|
|
296
|
+
vec3 h = normalize(l+v); // Half vector between both l and v
|
|
297
|
+
|
|
298
|
+
pbrInputs.NdotL = clamp(dot(n, l), 0.001, 1.0);
|
|
299
|
+
pbrInputs.NdotH = clamp(dot(n, h), 0.0, 1.0);
|
|
300
|
+
pbrInputs.LdotH = clamp(dot(l, h), 0.0, 1.0);
|
|
301
|
+
pbrInputs.VdotH = clamp(dot(v, h), 0.0, 1.0);
|
|
229
302
|
}
|
|
303
|
+
|
|
230
304
|
void PBRInfo_setPointLight(inout PBRInfo pbrInputs, PointLight pointLight) {
|
|
231
|
-
vec3 light_direction = normalize(pointLight.position - pbr_vPosition);
|
|
232
|
-
PBRInfo_setDirectionalLight(pbrInputs, light_direction);
|
|
305
|
+
vec3 light_direction = normalize(pointLight.position - pbr_vPosition);
|
|
306
|
+
PBRInfo_setDirectionalLight(pbrInputs, light_direction);
|
|
233
307
|
}
|
|
308
|
+
|
|
234
309
|
vec3 calculateFinalColor(PBRInfo pbrInputs, vec3 lightColor) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
float
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
310
|
+
// Calculate the shading terms for the microfacet specular shading model
|
|
311
|
+
vec3 F = specularReflection(pbrInputs);
|
|
312
|
+
float G = geometricOcclusion(pbrInputs);
|
|
313
|
+
float D = microfacetDistribution(pbrInputs);
|
|
314
|
+
|
|
315
|
+
// Calculation of analytical lighting contribution
|
|
316
|
+
vec3 diffuseContrib = (1.0 - F) * diffuse(pbrInputs);
|
|
317
|
+
vec3 specContrib = F * G * D / (4.0 * pbrInputs.NdotL * pbrInputs.NdotV);
|
|
318
|
+
// Obtain final intensity as reflectance (BRDF) scaled by the energy of the light (cosine law)
|
|
319
|
+
return pbrInputs.NdotL * lightColor * (diffuseContrib + specContrib);
|
|
241
320
|
}
|
|
321
|
+
|
|
242
322
|
vec4 pbr_filterColor(vec4 colorUnused)
|
|
243
323
|
{
|
|
324
|
+
// The albedo may be defined from a base texture or a flat color
|
|
244
325
|
#ifdef HAS_BASECOLORMAP
|
|
245
|
-
vec4 baseColor = SRGBtoLINEAR(texture(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;
|
|
326
|
+
vec4 baseColor = SRGBtoLINEAR(texture(u_BaseColorSampler, pbr_vUV)) * u_BaseColorFactor;
|
|
246
327
|
#else
|
|
247
|
-
vec4 baseColor = u_BaseColorFactor;
|
|
328
|
+
vec4 baseColor = u_BaseColorFactor;
|
|
248
329
|
#endif
|
|
330
|
+
|
|
249
331
|
#ifdef ALPHA_CUTOFF
|
|
250
|
-
if (baseColor.a < u_AlphaCutoff) {
|
|
251
|
-
discard;
|
|
252
|
-
}
|
|
332
|
+
if (baseColor.a < u_AlphaCutoff) {
|
|
333
|
+
discard;
|
|
334
|
+
}
|
|
253
335
|
#endif
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
336
|
+
|
|
337
|
+
vec3 color = vec3(0, 0, 0);
|
|
338
|
+
|
|
339
|
+
if(pbr_uUnlit){
|
|
340
|
+
color.rgb = baseColor.rgb;
|
|
341
|
+
}
|
|
342
|
+
else{
|
|
343
|
+
// Metallic and Roughness material properties are packed together
|
|
344
|
+
// In glTF, these factors can be specified by fixed scalar values
|
|
345
|
+
// or from a metallic-roughness map
|
|
346
|
+
float perceptualRoughness = u_MetallicRoughnessValues.y;
|
|
347
|
+
float metallic = u_MetallicRoughnessValues.x;
|
|
261
348
|
#ifdef HAS_METALROUGHNESSMAP
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
vec3
|
|
276
|
-
|
|
277
|
-
vec3
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
0
|
|
286
|
-
0.0,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
n
|
|
295
|
-
|
|
296
|
-
|
|
349
|
+
// Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel.
|
|
350
|
+
// This layout intentionally reserves the 'r' channel for (optional) occlusion map data
|
|
351
|
+
vec4 mrSample = texture(u_MetallicRoughnessSampler, pbr_vUV);
|
|
352
|
+
perceptualRoughness = mrSample.g * perceptualRoughness;
|
|
353
|
+
metallic = mrSample.b * metallic;
|
|
354
|
+
#endif
|
|
355
|
+
perceptualRoughness = clamp(perceptualRoughness, c_MinRoughness, 1.0);
|
|
356
|
+
metallic = clamp(metallic, 0.0, 1.0);
|
|
357
|
+
// Roughness is authored as perceptual roughness; as is convention,
|
|
358
|
+
// convert to material roughness by squaring the perceptual roughness [2].
|
|
359
|
+
float alphaRoughness = perceptualRoughness * perceptualRoughness;
|
|
360
|
+
|
|
361
|
+
vec3 f0 = vec3(0.04);
|
|
362
|
+
vec3 diffuseColor = baseColor.rgb * (vec3(1.0) - f0);
|
|
363
|
+
diffuseColor *= 1.0 - metallic;
|
|
364
|
+
vec3 specularColor = mix(f0, baseColor.rgb, metallic);
|
|
365
|
+
|
|
366
|
+
// Compute reflectance.
|
|
367
|
+
float reflectance = max(max(specularColor.r, specularColor.g), specularColor.b);
|
|
368
|
+
|
|
369
|
+
// For typical incident reflectance range (between 4% to 100%) set the grazing
|
|
370
|
+
// reflectance to 100% for typical fresnel effect.
|
|
371
|
+
// For very low reflectance range on highly diffuse objects (below 4%),
|
|
372
|
+
// incrementally reduce grazing reflecance to 0%.
|
|
373
|
+
float reflectance90 = clamp(reflectance * 25.0, 0.0, 1.0);
|
|
374
|
+
vec3 specularEnvironmentR0 = specularColor.rgb;
|
|
375
|
+
vec3 specularEnvironmentR90 = vec3(1.0, 1.0, 1.0) * reflectance90;
|
|
376
|
+
|
|
377
|
+
vec3 n = getNormal(); // normal at surface point
|
|
378
|
+
vec3 v = normalize(u_Camera - pbr_vPosition); // Vector from surface point to camera
|
|
379
|
+
|
|
380
|
+
float NdotV = clamp(abs(dot(n, v)), 0.001, 1.0);
|
|
381
|
+
vec3 reflection = -normalize(reflect(v, n));
|
|
382
|
+
|
|
383
|
+
PBRInfo pbrInputs = PBRInfo(
|
|
384
|
+
0.0, // NdotL
|
|
385
|
+
NdotV,
|
|
386
|
+
0.0, // NdotH
|
|
387
|
+
0.0, // LdotH
|
|
388
|
+
0.0, // VdotH
|
|
389
|
+
perceptualRoughness,
|
|
390
|
+
metallic,
|
|
391
|
+
specularEnvironmentR0,
|
|
392
|
+
specularEnvironmentR90,
|
|
393
|
+
alphaRoughness,
|
|
394
|
+
diffuseColor,
|
|
395
|
+
specularColor,
|
|
396
|
+
n,
|
|
397
|
+
v
|
|
398
|
+
);
|
|
399
|
+
|
|
297
400
|
#ifdef USE_LIGHTS
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
401
|
+
// Apply ambient light
|
|
402
|
+
PBRInfo_setAmbientLight(pbrInputs);
|
|
403
|
+
color += calculateFinalColor(pbrInputs, lighting_uAmbientLight.color);
|
|
404
|
+
|
|
405
|
+
// Apply directional light
|
|
406
|
+
for(int i = 0; i < lighting_uDirectionalLightCount; i++) {
|
|
407
|
+
if (i < lighting_uDirectionalLightCount) {
|
|
408
|
+
PBRInfo_setDirectionalLight(pbrInputs, lighting_uDirectionalLight[i].direction);
|
|
409
|
+
color += calculateFinalColor(pbrInputs, lighting_uDirectionalLight[i].color);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Apply point light
|
|
414
|
+
for(int i = 0; i < lighting_uPointLightCount; i++) {
|
|
415
|
+
if (i < lighting_uPointLightCount) {
|
|
416
|
+
PBRInfo_setPointLight(pbrInputs, lighting_uPointLight[i]);
|
|
417
|
+
float attenuation = getPointLightAttenuation(lighting_uPointLight[i], distance(lighting_uPointLight[i].position, pbr_vPosition));
|
|
418
|
+
color += calculateFinalColor(pbrInputs, lighting_uPointLight[i].color / attenuation);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
313
421
|
#endif
|
|
422
|
+
|
|
423
|
+
// Calculate lighting contribution from image based lighting source (IBL)
|
|
314
424
|
#ifdef USE_IBL
|
|
315
|
-
color += getIBLContribution(pbrInputs, n, reflection);
|
|
425
|
+
color += getIBLContribution(pbrInputs, n, reflection);
|
|
316
426
|
#endif
|
|
427
|
+
|
|
428
|
+
// Apply optional PBR terms for additional (optional) shading
|
|
317
429
|
#ifdef HAS_OCCLUSIONMAP
|
|
318
|
-
float ao = texture(u_OcclusionSampler, pbr_vUV).r;
|
|
319
|
-
color = mix(color, color * ao, u_OcclusionStrength);
|
|
430
|
+
float ao = texture(u_OcclusionSampler, pbr_vUV).r;
|
|
431
|
+
color = mix(color, color * ao, u_OcclusionStrength);
|
|
320
432
|
#endif
|
|
433
|
+
|
|
321
434
|
#ifdef HAS_EMISSIVEMAP
|
|
322
|
-
vec3 emissive = SRGBtoLINEAR(texture(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;
|
|
323
|
-
color += emissive;
|
|
435
|
+
vec3 emissive = SRGBtoLINEAR(texture(u_EmissiveSampler, pbr_vUV)).rgb * u_EmissiveFactor;
|
|
436
|
+
color += emissive;
|
|
324
437
|
#endif
|
|
438
|
+
|
|
439
|
+
// This section uses mix to override final color for reference app visualization
|
|
440
|
+
// of various parameters in the lighting equation.
|
|
325
441
|
#ifdef PBR_DEBUG
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
color = mix(color,
|
|
442
|
+
// TODO: Figure out how to debug multiple lights
|
|
443
|
+
|
|
444
|
+
// color = mix(color, F, u_ScaleFGDSpec.x);
|
|
445
|
+
// color = mix(color, vec3(G), u_ScaleFGDSpec.y);
|
|
446
|
+
// color = mix(color, vec3(D), u_ScaleFGDSpec.z);
|
|
447
|
+
// color = mix(color, specContrib, u_ScaleFGDSpec.w);
|
|
448
|
+
|
|
449
|
+
// color = mix(color, diffuseContrib, u_ScaleDiffBaseMR.x);
|
|
450
|
+
color = mix(color, baseColor.rgb, u_ScaleDiffBaseMR.y);
|
|
451
|
+
color = mix(color, vec3(metallic), u_ScaleDiffBaseMR.z);
|
|
452
|
+
color = mix(color, vec3(perceptualRoughness), u_ScaleDiffBaseMR.w);
|
|
329
453
|
#endif
|
|
454
|
+
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
return vec4(pow(color,vec3(1.0/2.2)), baseColor.a);
|
|
330
458
|
}
|
|
331
|
-
|
|
332
|
-
}
|
|
333
|
-
`;var Kt={name:"pbr",vs:_n,fs:Sn,defines:{LIGHTING_FRAGMENT:1},dependencies:[An],getUniforms:e=>e};var Et=V(at(),1);var Xr=`
|
|
459
|
+
`;var Kt={name:"pbr",vs:Sn,fs:_n,defines:{LIGHTING_FRAGMENT:1},dependencies:[An],getUniforms:e=>e};var yt=U(at(),1);var Wr=`
|
|
334
460
|
layout(0) positions: vec4; // in vec4 POSITION;
|
|
335
461
|
|
|
336
462
|
#ifdef HAS_NORMALS
|
|
@@ -375,39 +501,52 @@ layout(0) positions: vec4; // in vec4 POSITION;
|
|
|
375
501
|
vec3 pos = pbr_vPosition;
|
|
376
502
|
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
377
503
|
}
|
|
378
|
-
`,jr=`#version 300 es
|
|
379
|
-
in vec4 positions;
|
|
380
|
-
#ifdef HAS_NORMALS
|
|
381
|
-
in vec4 normals;
|
|
382
|
-
#endif
|
|
383
|
-
#ifdef HAS_TANGENTS
|
|
384
|
-
in vec4 TANGENT;
|
|
385
|
-
#endif
|
|
386
|
-
#ifdef HAS_UV
|
|
387
|
-
in vec2 texCoords;
|
|
388
|
-
#endif
|
|
389
|
-
void main(void) {
|
|
390
|
-
vec4 _NORMAL = vec4(0.);
|
|
391
|
-
vec4 _TANGENT = vec4(0.);
|
|
392
|
-
vec2 _TEXCOORD_0 = vec2(0.);
|
|
393
|
-
#ifdef HAS_NORMALS
|
|
394
|
-
_NORMAL = normals;
|
|
395
|
-
#endif
|
|
396
|
-
#ifdef HAS_TANGENTS
|
|
397
|
-
_TANGENT = TANGENT;
|
|
398
|
-
#endif
|
|
399
|
-
#ifdef HAS_UV
|
|
400
|
-
_TEXCOORD_0 = texCoords;
|
|
401
|
-
#endif
|
|
402
|
-
pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);
|
|
403
|
-
gl_Position = u_MVPMatrix * positions;
|
|
404
|
-
}
|
|
405
504
|
`,$r=`#version 300 es
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
505
|
+
|
|
506
|
+
// in vec4 POSITION;
|
|
507
|
+
in vec4 positions;
|
|
508
|
+
|
|
509
|
+
#ifdef HAS_NORMALS
|
|
510
|
+
// in vec4 NORMAL;
|
|
511
|
+
in vec4 normals;
|
|
512
|
+
#endif
|
|
513
|
+
|
|
514
|
+
#ifdef HAS_TANGENTS
|
|
515
|
+
in vec4 TANGENT;
|
|
516
|
+
#endif
|
|
517
|
+
|
|
518
|
+
#ifdef HAS_UV
|
|
519
|
+
// in vec2 TEXCOORD_0;
|
|
520
|
+
in vec2 texCoords;
|
|
521
|
+
#endif
|
|
522
|
+
|
|
523
|
+
void main(void) {
|
|
524
|
+
vec4 _NORMAL = vec4(0.);
|
|
525
|
+
vec4 _TANGENT = vec4(0.);
|
|
526
|
+
vec2 _TEXCOORD_0 = vec2(0.);
|
|
527
|
+
|
|
528
|
+
#ifdef HAS_NORMALS
|
|
529
|
+
_NORMAL = normals;
|
|
530
|
+
#endif
|
|
531
|
+
|
|
532
|
+
#ifdef HAS_TANGENTS
|
|
533
|
+
_TANGENT = TANGENT;
|
|
534
|
+
#endif
|
|
535
|
+
|
|
536
|
+
#ifdef HAS_UV
|
|
537
|
+
_TEXCOORD_0 = texCoords;
|
|
538
|
+
#endif
|
|
539
|
+
|
|
540
|
+
pbr_setPositionNormalTangentUV(positions, _NORMAL, _TANGENT, _TEXCOORD_0);
|
|
541
|
+
gl_Position = u_MVPMatrix * positions;
|
|
542
|
+
}
|
|
543
|
+
`,Xr=`#version 300 es
|
|
544
|
+
out vec4 fragmentColor;
|
|
545
|
+
|
|
546
|
+
void main(void) {
|
|
547
|
+
vec3 pos = pbr_vPosition;
|
|
548
|
+
fragmentColor = pbr_filterColor(vec4(1.0));
|
|
549
|
+
}
|
|
550
|
+
`;function En(e,t){let{id:n,geometry:r,material:s,vertexCount:o,materialOptions:i,modelOptions:c}=t,a=ct(e,s,r.attributes,i);yn.log.info(4,"createGLTFModel defines: ",a.defines)();let l=[],f={depthWriteEnabled:!0,depthCompare:"less",depthFormat:"depth24plus",cullMode:"back"},h={id:n,source:Wr,vs:$r,fs:Xr,geometry:r,topology:r.topology,vertexCount:o,modules:[Kt],...c,bindings:{...a.bindings,...c.bindings},defines:{...a.defines,...c.defines},parameters:{...f,...a.parameters,...c.parameters},uniforms:{...a.uniforms,...c.uniforms}},p=new yt.Model(e,h);return new yt.ModelNode({managedResources:l,model:p})}var q;(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"})(q||(q={}));function Tn(e){switch(e){case q.POINTS:return"point-list";case q.LINES:return"line-list";case q.LINE_STRIP:return"line-strip";case q.TRIANGLES:return"triangle-list";case q.TRIANGLE_STRIP:return"triangle-strip";default:throw new Error(String(e))}}var jr={modelOptions:{},pbrDebug:!1,imageBasedLightingEnvironment:null,lights:!0,useTangents:!1},Et=class{device;options;gltf;constructor(t,n={}){this.device=t,this.options={...jr,...n}}instantiate(t){return this.gltf=t,(t.scenes||[]).map(r=>this.createScene(r))}createAnimator(){return Array.isArray(this.gltf.animations)?new W(this.gltf):null}createScene(t){let r=(t.nodes||[]).map(o=>this.createNode(o));return new $.GroupNode({id:t.name||t.id,children:r})}createNode(t){if(!t._node){let r=(t.children||[]).map(o=>this.createNode(o));t.mesh&&r.push(this.createMesh(t.mesh));let s=new $.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 o=new k().fromQuaternion(t.rotation);s.matrix.multiplyRight(o)}t.scale&&s.matrix.scale(t.scale)}t._node=s}return t._node}createMesh(t){if(!t._mesh){let r=(t.primitives||[]).map((o,i)=>this.createPrimitive(o,i,t)),s=new $.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}`,o=Tn(t.mode||4),i=t.indices?t.indices.count:this.getVertexCount(t.attributes),c=En(this.device,{id:s,geometry:this.createGeometry(s,t,o),material:t.material,materialOptions:this.options,modelOptions:this.options.modelOptions,vertexCount:i});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[o,i]of Object.entries(n.attributes)){let{components:c,size:a,value:l}=i;s[o]={size:a??c,value:l}}return new $.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}};function Ln(e,t,n){let r=new Et(e,n),s=r.instantiate(t),o=r.createAnimator();return{scenes:s,animator:o}}return On(rt);})();
|
|
412
551
|
return __exports__;
|
|
413
552
|
});
|