@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{f as e,B as a,I as r,o as t,p as o,q as i,F as n,j as s,U as c,k as f}from"./index-B8IgtevW.esm.min.js";import{W as m,a as d}from"./wgsl-helpers-CJmgf3KG.esm.min.js";import{c as p}from"./cubemap-skybox-material-JpKAlKzF.esm.min.js";const u="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>{var 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);}";async function l(b,v,x,g,w,h=!0){const y=b.surface.engine,[T,V]=function(r,t){const o=new n([-t,-t,-t,t,-t,-t,-t,t,-t,t,t,-t,-t,-t,t,t,-t,t,-t,t,t,t,t,t]),i=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[e(r,o,a.VERTEX),e(r,i,a.INDEX)]}(y,v),{cubeView:W,sampler:_}=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=Math.max(c[7],1),d=808540228===c[21]?148:128,p=new o(s,d),u="rgba16float",l=n.createTexture({size:[f,f,6],format:u,mipLevelCount:m,usage:t.TEXTURE_BINDING|t.COPY_DST|t.RENDER_ATTACHMENT});let b=0;for(let e=0;e<6;e++)for(let a=0;a<m;a++){const r=Math.max(f>>a,1);n.queue.writeTexture({texture:l,origin:{x:0,y:0,z:e},mipLevel:a},p.buffer,{offset:p.byteOffset+b,bytesPerRow:8*r},{width:r,height:r}),b+=r*r*8}const v=l.createView({dimension:"cube"}),x=i(e,{magFilter:"linear",minFilter:"linear",mipmapFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",maxAnisotropy:4});return{cubeView:v,sampler:x}}(y,w??"https://assets.babylonjs.com/core/environments/backgroundSkybox.dds"),E=await(b._environmentSkyboxShaderComposer?.(u,"dds"))??u,I=p(h?"skybox-dds":"skybox-dds0",f+"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;}",f+(h?m:d)+E),P=function(e,a,r,t,o){const i=new n(24);return i[0]=i[5]=i[10]=i[15]=1,i[12]=a[0],i[13]=a[1],i[14]=a[2],i[16]=r[0],i[17]=r[1],i[18]=r[2],i[19]=t,i[20]=o,s(e,i)}(y,x,g,b.imageProcessing.exposure,b.imageProcessing.contrast),k=I.createBindGroup(y,P,W,_),B={order:0,isTransparent:!1,bind:(e,a)=>({renderable:B,pipeline:I.getPipeline(e,a),draw:e=>(e.setBindGroup(1,k),e.setVertexBuffer(0,T),e.setIndexBuffer(V,"uint16"),e.drawIndexed(36),1)}),_rebuild:()=>l(b,v,x,g,w,h)};return B}export{l as buildDdsSkyboxRenderable};
//# sourceMappingURL=background-dds-skybox-De6RohmZ.esm.min.js.map