@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
3 lines (2 loc) • 5.2 kB
JavaScript
import{T as e,c as s,F as t}from"./index-DFZFpUG-.esm.min.js";let n=null;function o(e){const s=e.provider.getLocalBounds(e.source),t=s?.[0]??e.source.boundMin,n=s?.[1]??e.source.boundMax,o=e._bounds;let r=!1;for(let e=0;e<3;e++)r=!Object.is(o[e],t?.[e])||!Object.is(o[e+3],n?.[e])||r,o[e]=t?.[e],o[e+3]=n?.[e];return e.shadow.boundMin=t,e.shadow.boundMax=n,r}function r(e,s){if(e.sourceMeshes===s)return e.shadowMeshes;const t=[],n=s.map(s=>{const n=e.providers.find(e=>e?.applies(s));if(!n)return s;const r=function(e,s){const t=Object.create(e),n={source:e,shadow:t,provider:s,_bounds:[],_version:0};return Object.defineProperty(t,"worldMatrixVersion",{configurable:!0,get:()=>e.worldMatrixVersion+n._version}),o(n),n}(s,n);return t.push(r),r.shadow});return e.sourceMeshes=s,e.shadowMeshes=n,e.entries=t,n}function i(e,s){e._casterMeshes=s}function u(s,t){const u="morph"===t.kind?1:0;let c=n?.get(s);if(c)return void(c.providers[u]||(c.providers[u]=t,c.sourceMeshes=void 0));const a=s._preloadShadowTask,l=s._ensureShadowTaskState,h=s._renderShadowMap;a&&l&&h||e(328),c={providers:[],preload:a,ensure:l,render:h},c.providers[u]=t,(n??=new WeakMap).set(s,c),s._preloadShadowTask=e=>a(r(c,e)),s._ensureShadowTaskState=(e,t,n)=>{!function(e,s){const t=e._shadowTaskState;t&&t._casterMeshes===s.sourceMeshes&&s.shadowMeshes&&(t._casterMeshes=s.shadowMeshes)}(s,c);const o=r(c,n),u=l(e,t,o);return i(u,n),u},s._renderShadowMap=(e,s)=>{const t=c.shadowMeshes,n=c.sourceMeshes;if(!t||!n)return h(e,s);for(const e of c.entries??[])o(e)&&e._version++;s._casterMeshes=t;try{return h(e,s)}finally{i(s,n)}}}let c=null;function a(e,t){const n=(c??=new WeakMap).get(e);if(n&&n.positions===e._cpuPositions&&n.morphTargets===t&&n.targets===t.targets)return n;const o=function(e,t){const n=e._cpuPositions;return{positions:n,base:n?.length?s(n):e.boundMin&&e.boundMax?[e.boundMin,e.boundMax]:null,morphTargets:t,targets:t.targets,targetRanges:t.targets.map(e=>s(e.positions)),result:[[0,0,0],[0,0,0]]}}(e,t);return c.set(e,o),o}const l={kind:"morph",applies:e=>!!e.morphTargets,getLocalBounds(e){const s=e.morphTargets;if(!s)return null;const t=a(e,s);if(!t.base)return null;const n=t.result[0],o=t.result[1];for(let e=0;e<3;e++)n[e]=t.base[0][e],o[e]=t.base[1][e];for(let e=0;e<s.count;e++){const r=t.targetRanges[e],i=s.weights[e]??0;if(!r||!i)continue;const u=i<0?r[1]:r[0],c=i<0?r[0]:r[1];for(let e=0;e<3;e++)n[e]=n[e]+u[e]*i,o[e]=o[e]+c[e]*i}return t.result}};function h(e){u(e,l)}function d(e,s,t){for(let n=0;n<8;n++)e[3*n]=1&n?t[0]:s[0],e[3*n+1]=2&n?t[1]:s[1],e[3*n+2]=4&n?t[2]:s[2]}function f(e,s){const n=new t(24);return d(n,e,s),n}function p(e,s,t,n,o=0){const r=s[o],i=s[o+1],u=s[o+2],c=s[o+4],a=s[o+5],l=s[o+6],h=s[o+8],d=s[o+9],f=s[o+10],p=s[o+12],g=s[o+13],w=s[o+14];for(let s=0;s<8;s++){const o=e[3*s],M=e[3*s+1],b=e[3*s+2],_=r*o+c*M+h*b+p,m=i*o+a*M+d*b+g,k=u*o+l*M+f*b+w;_<t[0]&&(t[0]=_),m<t[1]&&(t[1]=m),k<t[2]&&(t[2]=k),_>n[0]&&(n[0]=_),m>n[1]&&(n[1]=m),k>n[2]&&(n[2]=k)}}let g=null;function w(e){const s=e.skeleton;if(!s?.weights||!s.boneMatrices)return null;const n=(g??=new WeakMap).get(e);if(n&&n.positions===e._cpuPositions&&n.skeleton===s&&n.joints===s.joints&&n.weights===s.weights&&n.joints1===s.joints1&&n.weights1===s.weights1)return n;const o=function(e){const s=e._cpuPositions,n=e.skeleton;if(!s||0===s.length||!n||!n.weights)return null;const o=s.length/3|0,r=n.boneCount,i=new t(3*r).fill(Number.POSITIVE_INFINITY),u=new t(3*r).fill(Number.NEGATIVE_INFINITY),c=new Uint8Array(r),a=(e,t,n)=>{const o=4*n;for(let a=0;a<4;a++)if(t[o+a]>0){const t=e[o+a];if(t<r){const e=3*t,o=3*n;s[o]<i[e]&&(i[e]=s[o]),s[o+1]<i[e+1]&&(i[e+1]=s[o+1]),s[o+2]<i[e+2]&&(i[e+2]=s[o+2]),s[o]>u[e]&&(u[e]=s[o]),s[o+1]>u[e+1]&&(u[e+1]=s[o+1]),s[o+2]>u[e+2]&&(u[e+2]=s[o+2]),c[t]=1}}},l=n.joints,h=n.weights,d=n.joints1,p=n.weights1;for(let e=0;e<o;e++)a(l,h,e),d&&p&&a(d,p,e);const g=[];for(let e=0;e<r;e++)if(c[e]){const s=3*e;g.push({boneIndex:e,corners:f([i[s],i[s+1],i[s+2]],[u[s],u[s+1],u[s+2]])})}return g}(e),r=o?[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]]:null;for(const e of o??[])for(let s=0;s<3;s++)r[0][s]=Math.min(r[0][s],e.corners[s]),r[1][s]=Math.max(r[1][s],e.corners[21+s]);const i={positions:e._cpuPositions,skeleton:s,joints:s.joints,weights:s.weights,joints1:s.joints1,weights1:s.weights1,boxes:o,base:r,composedCorners:new Float32Array(24),result:[[0,0,0],[0,0,0]]};return g.set(e,i),i}function M(e){return{kind:"skeleton",applies:e=>!!e.skeleton?.weights&&!!e.skeleton.boneMatrices,getLocalBounds(s){const t=function(e,s){const t=n?.get(e)?.providers;let o=null;for(let e=t?.length??0,n=0;--e>n;){const n=t[e];n?.applies(s)&&(o=n.getLocalBounds(s,o))}return o}(e,s),o=w(s),r=s.skeleton?.boneMatrices;if(!o?.boxes||!r)return t;const i=o.result[0],u=o.result[1];if(t&&o.base){for(let e=0;e<3;e++)i[e]=Math.min(t[0][e],o.base[0][e]),u[e]=Math.max(t[1][e],o.base[1][e]);d(o.composedCorners,i,u)}i[0]=i[1]=i[2]=1/0,u[0]=u[1]=u[2]=-1/0;for(const e of o.boxes)p(t?o.composedCorners:e.corners,r,i,u,16*e.boneIndex);return Number.isFinite(i[0])?o.result:t}}}function b(e){u(e,M(e))}export{h as enableMorphTargetShadows,b as enableSkeletonShadows};
//# sourceMappingURL=viewerShadows-5nQ4bzbA.esm.min.js.map