UNPKG

@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.24 kB
import{T as t,S as e}from"./index-DFZFpUG-.esm.min.js";function r(e,r){return!r._destroyed&&r._data||t(315),r._engine!==e&&t(316),e._storageBuffers?.has(r)||t(317),r._buffer}function n(t,e,r){let n=`var ${t}: mat4x4<f32> = readMatrixFromVat(vatSampler, f32(joints[0]), ${e}) * weights[0];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints[1]), ${e}) * weights[1];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints[2]), ${e}) * weights[2];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints[3]), ${e}) * weights[3];`;return r&&(n+=`\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints1[0]), ${e}) * weights1[0];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints1[1]), ${e}) * weights1[1];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints1[2]), ${e}) * weights1[2];\n${t} = ${t} + readMatrixFromVat(vatSampler, f32(joints1[3]), ${e}) * weights1[3];`),n}function a(t){return`let vatRow = vatFrameRow(vat.params, vat.clock.x);\n${n("influence","vatRow",t)}`}function i(t,e,r=!1){return`${r?`let vatIdx = ${e} * 2u;\nlet vatA = vatInstanceStorage[vatIdx];\nlet vatB = vatInstanceStorage[vatIdx + 1u];`:`let vatIdx = i32(${e}) * 2;\nlet vatA = textureLoad(vatInstanceTex, vec2<i32>(vatIdx, 0), 0);\nlet vatB = textureLoad(vatInstanceTex, vec2<i32>(vatIdx + 1, 0), 0);`}\nlet rowA = vatFrameRow(vatA, vat.clock.x);\nlet rowB = vatFrameRow(vec4f(vatB.x, vatB.y, vatA.z, vatB.w), vat.clock.x);\n${n("infA","rowA",t)}\n${n("infB","rowB",t)}\nvar influence: mat4x4f = infA * (1.0 - vatB.z) + infB * vatB.z;`}let o=null,s=null;function f(t){return", @location(1) joints: vec4<u32>, @location(2) weights: vec4<f32>"+(t?", @location(3) joints1: vec4<u32>, @location(4) weights1: vec4<f32>":"")}function u(t){const e=[{arrayStride:16,attributes:[{shaderLocation:1,offset:0,format:"uint32x4"}]},{arrayStride:16,attributes:[{shaderLocation:2,offset:0,format:"float32x4"}]}];return t&&e.push({arrayStride:16,attributes:[{shaderLocation:3,offset:0,format:"uint32x4"}]},{arrayStride:16,attributes:[{shaderLocation:4,offset:0,format:"float32x4"}]}),e}function l(t,r,n){const o=t._device,s=function(t,e=!1){return{helpers:"struct vatUniforms {\nparams: vec4<f32>,\nclock: vec4<f32>,\n}\nfn readMatrixFromVat(smp: texture_2d<f32>, index: f32, row: i32) -> mat4x4<f32> {\nlet o = i32(index) * 4;\nlet m0 = textureLoad(smp, vec2<i32>(o + 0, row), 0);\nlet m1 = textureLoad(smp, vec2<i32>(o + 1, row), 0);\nlet m2 = textureLoad(smp, vec2<i32>(o + 2, row), 0);\nlet m3 = textureLoad(smp, vec2<i32>(o + 3, row), 0);\nreturn mat4x4f(m0, m1, m2, m3);\n}\nfn vatFrameRow(p: vec4<f32>, t: f32) -> i32 {\nlet span = max(1.0, p.y - p.x + 1.0);\nlet raw = p.z + t * p.w;\nlet wrapped = raw - floor(raw / span) * span;\nreturn i32(p.x + wrapped);\n}",regularBody:`${a(t)}\nlet projectedTransform = mesh.world * influence;\nlet projectedWorld = (projectedTransform * vec4f(position, 1.0)).xyz;`,thinBody:`${i(t,"instanceIndex",e)}\nlet projectedTransform = instanceWorld * tiMesh.world * influence;\nlet projectedWorld = (projectedTransform * vec4f(position, 1.0)).xyz;`}}(r,n),l=o.createBindGroupLayout({label:`picking-vat-${r?8:4}-regular-bgl`,entries:[{binding:0,visibility:e.VERTEX,texture:{sampleType:"unfilterable-float"}},{binding:1,visibility:e.VERTEX,buffer:{type:"uniform"}}]}),c=o.createBindGroupLayout({label:`picking-vat-${r?8:4}-thin-bgl`,entries:[{binding:0,visibility:e.VERTEX,texture:{sampleType:"unfilterable-float"}},{binding:1,visibility:e.VERTEX,buffer:{type:"uniform"}},n?{binding:2,visibility:e.VERTEX,buffer:{type:"read-only-storage"}}:{binding:2,visibility:e.VERTEX,texture:{sampleType:"unfilterable-float"}}]}),v=`${s.helpers}\n@group(3) @binding(0) var vatSampler: texture_2d<f32>;\n@group(3) @binding(1) var<uniform> vat: vatUniforms;`;return{key:`vat-${r?8:4}-${n?"storage":"texture"}`,shader:{regularDeclarations:v,thinDeclarations:`${v}\n@group(3) @binding(2) ${n?"var<storage, read> vatInstanceStorage: array<vec4<f32>>;":"var vatInstanceTex: texture_2d<f32>;"}`,regularInputs:f(r),thinInputs:f(r),regularBody:s.regularBody,thinBody:s.thinBody},vertexBuffers:u(r),regularBGL:l,thinBGL:c}}function c(t,e){const r=e.vat,n=!!r?._instanceStorage;return!r||e.thinInstances&&!n&&!r.instanceTexture?null:function(t,e,r){o!==t._device&&(o=t._device,s=null);const n=`${e?8:4}-${r?"storage":"texture"}`,a=s??=new Map;let i=a.get(n);return i||(i=l(t,e,r),a.set(n,i)),i}(t,null!==r.joints1Buffer&&null!==r.weights1Buffer,n)}function v(t,e,n,a,i,o){const s=a.vat;if(!s)return;const f=[{binding:0,resource:s.texture.createView()},{binding:1,resource:{buffer:s.settingsBuffer}}];if(i)if(s._instanceStorage)f.push({binding:2,resource:{buffer:r(t,s._instanceStorage)}});else{if(!s.instanceTexture)return;f.push({binding:2,resource:s.instanceTexture.createView()})}e.setBindGroup(3,t._device.createBindGroup({label:`picking-vat-${i?"thin":"regular"}-bg`,layout:n.getBindGroupLayout(3),entries:f}));let u=o;e.setVertexBuffer(u++,s.jointsBuffer),e.setVertexBuffer(u++,s.weightsBuffer),s.joints1Buffer&&s.weights1Buffer&&(e.setVertexBuffer(u++,s.joints1Buffer),e.setVertexBuffer(u,s.weights1Buffer))}export{v as bindVatPickingProjection,c as getVatPickingProjection}; //# sourceMappingURL=vat-picking-pipeline-NESiWpc7.esm.min.js.map