@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.16 kB
JavaScript
import{d as e,B as a,I as r,i,j as t,k as o,F as n,e as s,U as c}from"./index-DFZFpUG-.esm.min.js";import{W as f,a as m}from"./wgsl-helpers-CJmgf3KG.esm.min.js";import{S as d}from"./scene-uniforms-Cr9D1h23.esm.min.js";import{c as p}from"./cubemap-skybox-material-Dv1ZF8tN.esm.min.js";async function u(u,l,x,b,g,v=!0){const w=u.surface.engine,h=function(r,i){const t=new n([-i,-i,-i,i,-i,-i,-i,i,-i,i,i,-i,-i,-i,i,i,-i,i,-i,i,i,i,i,i]),o=new c([6,4,5,7,6,5,0,2,3,1,0,3,5,1,3,7,5,3,0,4,6,2,0,6,3,2,6,7,3,6,0,1,5,4,0,5]);return{posBuffer:e(r,t,a.VERTEX),idxBuffer:e(r,o,a.INDEX)}}(w,l),{cubeView:y,sampler:B}=await async function(e,a){const n=e._device,s=await(await fetch(a)).arrayBuffer(),c=new r(s,0,32),f=c[3],m=c[4],d=Math.max(c[7],1),p=808540228===c[21]?148:128,u=new t(s,p),l="rgba16float",x=n.createTexture({size:[f,m,6],format:l,mipLevelCount:d,usage:i.TEXTURE_BINDING|i.COPY_DST|i.RENDER_ATTACHMENT,dimension:"2d"});let b=0;for(let e=0;e<6;e++)for(let a=0;a<d;a++){const r=Math.max(f>>a,1);n.queue.writeTexture({texture:x,origin:{x:0,y:0,z:e},mipLevel:a},u.buffer,{offset:u.byteOffset+b,bytesPerRow:8*r},{width:r,height:r}),b+=r*r*8}const g=x.createView({dimension:"cube"}),v=o(e,{magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",maxAnisotropy:4});return{cubeView:g,sampler:v}}(w,g??"https://assets.babylonjs.com/core/environments/backgroundSkybox.dds"),T=p(v?"skybox-dds":"skybox-dds0",d+"struct e{world:mat4x4<f32>}@group(1) @binding(0) var<uniform> mesh:e;struct d{@builtin(position) clipPos:vec4<f32>,@location(0) positionUVW:vec3<f32>,@location(1) positionW:vec3<f32>}@vertex fn main(@location(0) b:vec3<f32>)->d{var a:d;a.positionUVW=b;let c=(mesh.world*vec4<f32>(b,1.0)).xyz;a.positionW=c;a.clipPos=scene.viewProjection*vec4<f32>(c,1.0);return a;}",d+(v?f:m)+"struct g{world:mat4x4<f32>,primaryColor:vec3<f32>,exposureLinear:f32,contrast:f32,_pad1:f32,_pad2:f32,_pad3:f32}@group(1) @binding(0) var<uniform> mesh:g;@group(1) @binding(1) var c:texture_cube<f32>;@group(1) @binding(2) var d:sampler;struct h{@location(0) positionUVW:vec3<f32>,@location(1) positionW:vec3<f32>}@fragment fn main(b:h)->@location(0) vec4<f32>{let e=normalize(b.positionUVW);var a=textureSampleLevel(c,d,e,0.0).rgb;a*=mesh.primaryColor;if (scene.vImageInfos.w>=0.0){a*=mesh.exposureLinear;a=1.0-exp2(-1.590579*a);a=pow(a,vec3<f32>(1.0/2.2));a=saturate(a);let f=a*a*(3.0-2.0*a);a=mix(a,f,mesh.contrast-1.0);a=a+vec3<f32>(dither(b.positionW.xy,0.5));a=max(a,vec3<f32>(0.0));}return vec4<f32>(a,1.0);}"),V=function(e,a,r,i,t){const o=new n(24);return o[0]=o[5]=o[10]=o[15]=1,o[12]=a[0],o[13]=a[1],o[14]=a[2],o[16]=r[0],o[17]=r[1],o[18]=r[2],o[19]=i,o[20]=t,s(e,o)}(w,x,b,u.imageProcessing.exposure,u.imageProcessing.contrast),W=T.createBindGroup(w,V,y,B),E={order:0,isTransparent:!1,bind:(e,a)=>({renderable:E,pipeline:T.getPipeline(e,a),draw:e=>(e.setBindGroup(1,W),e.setVertexBuffer(0,h.posBuffer),e.setIndexBuffer(h.idxBuffer,"uint16"),e.drawIndexed(36),1)})};return E}export{u as buildDdsSkyboxRenderable};
//# sourceMappingURL=background-dds-skybox-FertzWWH.esm.min.js.map