@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) • 3.96 kB
JavaScript
import{C as e,i as t,j as a,k as o,V as r}from"./index-BPURObVq.esm.min.js";import{S as s,a as n}from"./sphericalPolynomial.pure-CsRKkAN3.esm.min.js";class i{constructor(e,t,a,o){this.name=e,this.worldAxisForNormal=t,this.worldAxisForFileX=a,this.worldAxisForFileY=o}}class l{static _NearestPow2Floor(e){return e<=1?1:1<<Math.floor(Math.log2(e))}static ConvertCubeMapTextureToSphericalPolynomial(t){if(!t.isCube)return null;t.getScene()?.getEngine().flushFramebuffer();const a=t.getSize().width,o=t._sphericalPolynomialTargetSize,r=o>0?this._NearestPow2Floor(o):0,s=!t.noMipmap&&!0===t._texture?.generateMipMaps,n=r>0&&r<a&&s,i=n?Math.max(0,Math.round(Math.log2(a/r))):0,l=n?Math.max(1,Math.floor(a/Math.pow(2,i))):a,c=t.readPixels(0,i,void 0,!1),w=t.readPixels(1,i,void 0,!1);let h,m;t.isRenderTarget?(h=t.readPixels(3,i,void 0,!1),m=t.readPixels(2,i,void 0,!1)):(h=t.readPixels(2,i,void 0,!1),m=t.readPixels(3,i,void 0,!1));const f=t.readPixels(4,i,void 0,!1),d=t.readPixels(5,i,void 0,!1),p=t.gammaSpace,F=e.TEXTUREFORMAT_RGBA,_=r>0&&r<a&&!n;return new Promise(t=>{Promise.all([w,c,h,m,f,d]).then(([o,s,n,i,c,w])=>{let h=l;if(_){const e=4;o=this._DownsampleFace(o,a,r,e),s=this._DownsampleFace(s,a,r,e),n=this._DownsampleFace(n,a,r,e),i=this._DownsampleFace(i,a,r,e),c=this._DownsampleFace(c,a,r,e),w=this._DownsampleFace(w,a,r,e),h=r}const m={size:h,right:s,left:o,up:n,down:i,front:c,back:w,format:F,type:o instanceof Float32Array?e.TEXTURETYPE_FLOAT:e.TEXTURETYPE_UNSIGNED_BYTE,gammaSpace:p};t(this.ConvertCubeMapToSphericalPolynomial(m))})})}static _AreaElement(e,t){return Math.atan2(e*t,Math.sqrt(e*e+t*t+1))}static _DownsampleFace(e,t,a,o){const r=e instanceof Float32Array?e:Float32Array.from(e),s=a*a*o,n=new Float32Array(s),i=t/a,l=1/(i*i);for(let e=0;e<a;e++){const s=Math.floor(e*i),c=Math.floor((e+1)*i);for(let w=0;w<a;w++){const h=Math.floor(w*i),m=Math.floor((w+1)*i),f=(e*a+w)*o;for(let e=0;e<o;e++){let a=0;for(let n=s;n<c;n++)for(let s=h;s<m;s++)a+=r[(n*t+s)*o+e];n[f+e]=a*l}}}if(e instanceof Float32Array)return n;const c=new(0,e.constructor)(s);for(let e=0;e<s;e++)c[e]=n[e]+.5|0;return c}static ConvertCubeMapToSphericalPolynomial(r,i=0){const l=i>0?this._NearestPow2Floor(i):0;if(l>0&&r.size>l){const t=r.format===e.TEXTUREFORMAT_RGBA?4:3,a=["right","left","up","down","front","back"],o={};for(const e of a)o[e]=this._DownsampleFace(r[e],r.size,l,t);r={...r,...o,size:l}}const c=new s;let w=0;const h=2/r.size,m=h,f=.5*h,d=f-1;for(let s=0;s<6;s++){const n=this._FileFaces[s],i=r[n.name];let l=d;const p=r.format===e.TEXTUREFORMAT_RGBA?4:3;for(let s=0;s<r.size;s++){let F=d;for(let m=0;m<r.size;m++){const d=n.worldAxisForFileX.scale(F).add(n.worldAxisForFileY.scale(l)).add(n.worldAxisForNormal);d.normalize();const _=this._AreaElement(F-f,l-f)-this._AreaElement(F-f,l+f)-this._AreaElement(F+f,l-f)+this._AreaElement(F+f,l+f);let E=i[s*r.size*p+m*p+0],M=i[s*r.size*p+m*p+1],A=i[s*r.size*p+m*p+2];isNaN(E)&&(E=0),isNaN(M)&&(M=0),isNaN(A)&&(A=0),r.type===e.TEXTURETYPE_UNSIGNED_BYTE&&(E/=255,M/=255,A/=255),r.gammaSpace&&(E=Math.pow(a(E),o),M=Math.pow(a(M),o),A=Math.pow(a(A),o));const T=this.MAX_HDRI_VALUE;if(this.PRESERVE_CLAMPED_COLORS){const e=Math.max(E,M,A);if(e>T){const t=T/e;E*=t,M*=t,A*=t}}else E=a(E,0,T),M=a(M,0,T),A=a(A,0,T);const P=new t(E,M,A);c.addLight(d,P,_),w+=_,F+=h}l+=m}}const p=6*(4*Math.PI)/6/w;return c.scaleInPlace(p),c.convertIncidentRadianceToIrradiance(),c.convertIrradianceToLambertianRadiance(),n.FromHarmonics(c)}}l._FileFaces=[new i("right",new r(1,0,0),new r(0,0,-1),new r(0,-1,0)),new i("left",new r(-1,0,0),new r(0,0,1),new r(0,-1,0)),new i("up",new r(0,1,0),new r(1,0,0),new r(0,0,1)),new i("down",new r(0,-1,0),new r(1,0,0),new r(0,0,-1)),new i("front",new r(0,0,1),new r(1,0,0),new r(0,-1,0)),new i("back",new r(0,0,-1),new r(-1,0,0),new r(0,-1,0))],l.MAX_HDRI_VALUE=4096,l.PRESERVE_CLAMPED_COLORS=!1;export{l as C};
//# sourceMappingURL=cubemapToSphericalPolynomial-PoSb7sAl.esm.min.js.map