@babylonjs/lite 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_math-factory-C-QqW-Wi.js +55 -0
- package/_math-factory-C-QqW-Wi.js.map +1 -0
- package/add-block-CikX5gWy.js +6 -0
- package/add-block-CikX5gWy.js.map +1 -0
- package/alpha-test-fragment-CUiHCw7W.js +22 -0
- package/alpha-test-fragment-CUiHCw7W.js.map +1 -0
- package/ambient-occlusion-block-DForhWL3.js +77 -0
- package/ambient-occlusion-block-DForhWL3.js.map +1 -0
- package/anisotropy-block-D5fXH_OY.js +12 -0
- package/anisotropy-block-D5fXH_OY.js.map +1 -0
- package/anisotropy-fragment-HgasXS7l.js +89 -0
- package/anisotropy-fragment-HgasXS7l.js.map +1 -0
- package/arc-tan2-block-d8sWt_x0.js +12 -0
- package/arc-tan2-block-d8sWt_x0.js.map +1 -0
- package/assets/splat-sort-worker-Crg3CaCc.js.map +1 -0
- package/background-dds-skybox-yHTqabU3.js +221 -0
- package/background-dds-skybox-yHTqabU3.js.map +1 -0
- package/background-ground-DIw6D3qf.js +235 -0
- package/background-ground-DIw6D3qf.js.map +1 -0
- package/background-hdr-skybox-c4uuTmkP.js +179 -0
- package/background-hdr-skybox-c4uuTmkP.js.map +1 -0
- package/background-solid-skybox-DPGBpPbm.js +235 -0
- package/background-solid-skybox-DPGBpPbm.js.map +1 -0
- package/bake-local-matrix-Dfpd3b06.js +28 -0
- package/bake-local-matrix-Dfpd3b06.js.map +1 -0
- package/billboard-renderable-D8mlVGCd.js +242 -0
- package/billboard-renderable-D8mlVGCd.js.map +1 -0
- package/biplanar-block-DZnKuV81.js +115 -0
- package/biplanar-block-DZnKuV81.js.map +1 -0
- package/bones-block-D6IhqUVV.js +31 -0
- package/bones-block-D6IhqUVV.js.map +1 -0
- package/clamp-block-BdII67hT.js +21 -0
- package/clamp-block-BdII67hT.js.map +1 -0
- package/clearcoat-block-BGML4npi.js +12 -0
- package/clearcoat-block-BGML4npi.js.map +1 -0
- package/clearcoat-fragment-LCiG98Rf.js +256 -0
- package/clearcoat-fragment-LCiG98Rf.js.map +1 -0
- package/clip-planes-block-BPfFJrbf.js +26 -0
- package/clip-planes-block-BPfFJrbf.js.map +1 -0
- package/cloud-block-BeVrangc.js +90 -0
- package/cloud-block-BeVrangc.js.map +1 -0
- package/color-converter-block-CvwKiW4k.js +123 -0
- package/color-converter-block-CvwKiW4k.js.map +1 -0
- package/color-merger-CCu21ZII.js +57 -0
- package/color-merger-CCu21ZII.js.map +1 -0
- package/color-splitter-CGn1G4ow.js +33 -0
- package/color-splitter-CGn1G4ow.js.map +1 -0
- package/conditional-block-Cd2pbejI.js +51 -0
- package/conditional-block-Cd2pbejI.js.map +1 -0
- package/create-skeleton-C9JdIJnb.js +44 -0
- package/create-skeleton-C9JdIJnb.js.map +1 -0
- package/cross-block-DCrLwCpt.js +12 -0
- package/cross-block-DCrLwCpt.js.map +1 -0
- package/cubemap-skybox-material-DvXMVc4k.js +79 -0
- package/cubemap-skybox-material-DvXMVc4k.js.map +1 -0
- package/curve-block-BlJpXVYv.js +89 -0
- package/curve-block-BlJpXVYv.js.map +1 -0
- package/debug-block-D2pg4Yf6.js +14 -0
- package/debug-block-D2pg4Yf6.js.map +1 -0
- package/derivative-block-B8KjtaWs.js +20 -0
- package/derivative-block-B8KjtaWs.js.map +1 -0
- package/desaturate-block-C1RghNSB.js +15 -0
- package/desaturate-block-C1RghNSB.js.map +1 -0
- package/discard-block-B2jKjaEL.js +21 -0
- package/discard-block-B2jKjaEL.js.map +1 -0
- package/distance-block-3NkgFZ3f.js +16 -0
- package/distance-block-3NkgFZ3f.js.map +1 -0
- package/divide-block-ZyepIg_-.js +6 -0
- package/divide-block-ZyepIg_-.js.map +1 -0
- package/dot-block-VlfAC6cD.js +16 -0
- package/dot-block-VlfAC6cD.js.map +1 -0
- package/elbow-block-NEOiIxzO.js +10 -0
- package/elbow-block-NEOiIxzO.js.map +1 -0
- package/emissive-fragment-BnNvbBCw.js +39 -0
- package/emissive-fragment-BnNvbBCw.js.map +1 -0
- package/esm-shadow-view-DGKdF1NI.js +18 -0
- package/esm-shadow-view-DGKdF1NI.js.map +1 -0
- package/esm-shadow-view-DN9HIaM4.js +15 -0
- package/esm-shadow-view-DN9HIaM4.js.map +1 -0
- package/esm-shadow-view-Dk9NFtLq.js +15 -0
- package/esm-shadow-view-Dk9NFtLq.js.map +1 -0
- package/fog-block-DJ9hEolm.js +41 -0
- package/fog-block-DJ9hEolm.js.map +1 -0
- package/frag-coord-block-DzXfFgfV.js +25 -0
- package/frag-coord-block-DzXfFgfV.js.map +1 -0
- package/frag-depth-block-UQbeKP2D.js +34 -0
- package/frag-depth-block-UQbeKP2D.js.map +1 -0
- package/fragment-output-BOphkIeh.js +26 -0
- package/fragment-output-BOphkIeh.js.map +1 -0
- package/fresnel-block-DefHWeO-.js +20 -0
- package/fresnel-block-DefHWeO-.js.map +1 -0
- package/front-facing-0d6aiyrv.js +11 -0
- package/front-facing-0d6aiyrv.js.map +1 -0
- package/gaussian-splatting-pipeline-sh-DgJl7l56.js +500 -0
- package/gaussian-splatting-pipeline-sh-DgJl7l56.js.map +1 -0
- package/gltf-animation-D7uyTyO3.js +245 -0
- package/gltf-animation-D7uyTyO3.js.map +1 -0
- package/gltf-ext-anisotropy-CknJiJK8.js +22 -0
- package/gltf-ext-anisotropy-CknJiJK8.js.map +1 -0
- package/gltf-ext-basisu-CPg5kPrx.js +452 -0
- package/gltf-ext-basisu-CPg5kPrx.js.map +1 -0
- package/gltf-ext-clearcoat-CLH2SVph.js +31 -0
- package/gltf-ext-clearcoat-CLH2SVph.js.map +1 -0
- package/gltf-ext-dielectric-qHzlnvdl.js +105 -0
- package/gltf-ext-dielectric-qHzlnvdl.js.map +1 -0
- package/gltf-ext-emissive-strength-nzGZXZVK.js +19 -0
- package/gltf-ext-emissive-strength-nzGZXZVK.js.map +1 -0
- package/gltf-ext-iridescence-C6bq7jiM.js +26 -0
- package/gltf-ext-iridescence-C6bq7jiM.js.map +1 -0
- package/gltf-ext-node-visibility-MafA9ot2.js +25 -0
- package/gltf-ext-node-visibility-MafA9ot2.js.map +1 -0
- package/gltf-ext-orm-CT18G_vQ.js +33 -0
- package/gltf-ext-orm-CT18G_vQ.js.map +1 -0
- package/gltf-ext-quantization-CpZyLDIz.js +94 -0
- package/gltf-ext-quantization-CpZyLDIz.js.map +1 -0
- package/gltf-ext-sheen-BgIxUzyZ.js +25 -0
- package/gltf-ext-sheen-BgIxUzyZ.js.map +1 -0
- package/gltf-ext-spec-gloss-D0LJLBUM.js +24 -0
- package/gltf-ext-spec-gloss-D0LJLBUM.js.map +1 -0
- package/gltf-ext-unlit-D2ANui0V.js +16 -0
- package/gltf-ext-unlit-D2ANui0V.js.map +1 -0
- package/gltf-ext-uv-transform-CE_-T1Tr.js +38 -0
- package/gltf-ext-uv-transform-CE_-T1Tr.js.map +1 -0
- package/gltf-feature-animation-pointer-BjpwOOqo.js +88 -0
- package/gltf-feature-animation-pointer-BjpwOOqo.js.map +1 -0
- package/gltf-feature-animations-CCizegp8.js +15 -0
- package/gltf-feature-animations-CCizegp8.js.map +1 -0
- package/gltf-feature-draco-yGSMGTE3.js +124 -0
- package/gltf-feature-draco-yGSMGTE3.js.map +1 -0
- package/gltf-feature-gpu-instancing-2e_CFQnl.js +151 -0
- package/gltf-feature-gpu-instancing-2e_CFQnl.js.map +1 -0
- package/gltf-feature-lights-punctual-DDDg4j0U.js +71 -0
- package/gltf-feature-lights-punctual-DDDg4j0U.js.map +1 -0
- package/gltf-feature-meshopt-Des96YFI.js +84 -0
- package/gltf-feature-meshopt-Des96YFI.js.map +1 -0
- package/gltf-feature-morph-CKCw6tkX.js +29 -0
- package/gltf-feature-morph-CKCw6tkX.js.map +1 -0
- package/gltf-feature-skeleton-D8hWLqi2.js +36 -0
- package/gltf-feature-skeleton-D8hWLqi2.js.map +1 -0
- package/gltf-feature-variants-Ds6v9byg.js +17 -0
- package/gltf-feature-variants-Ds6v9byg.js.map +1 -0
- package/gltf-feature-xmp-BUfq_IVG.js +15 -0
- package/gltf-feature-xmp-BUfq_IVG.js.map +1 -0
- package/gltf-glb-parser-D6UZWFuC.js +27 -0
- package/gltf-glb-parser-D6UZWFuC.js.map +1 -0
- package/gltf-interleave-DGnUlz28.js +241 -0
- package/gltf-interleave-DGnUlz28.js.map +1 -0
- package/gltf-pbr-builder-ext-BFOxOCnQ.js +85 -0
- package/gltf-pbr-builder-ext-BFOxOCnQ.js.map +1 -0
- package/gltf-variants-DFbr8EES.js +88 -0
- package/gltf-variants-DFbr8EES.js.map +1 -0
- package/gradient-block-DL_60sDc.js +50 -0
- package/gradient-block-DL_60sDc.js.map +1 -0
- package/gs-picking-pipeline-DzfMASL9.js +280 -0
- package/gs-picking-pipeline-DzfMASL9.js.map +1 -0
- package/height-to-normal-block-DhPHkDFg.js +65 -0
- package/height-to-normal-block-DhPHkDFg.js.map +1 -0
- package/ibl-fragment-DqQVi8k0.js +91 -0
- package/ibl-fragment-DqQVi8k0.js.map +1 -0
- package/ibl-skybox-wgsl-DCah0kWV.js +13 -0
- package/ibl-skybox-wgsl-DCah0kWV.js.map +1 -0
- package/image-processing-block-DwrhhmuF.js +40 -0
- package/image-processing-block-DwrhhmuF.js.map +1 -0
- package/image-source-BuMJgd9-.js +17 -0
- package/image-source-BuMJgd9-.js.map +1 -0
- package/index-C8HOR2sB.js +19222 -0
- package/index-C8HOR2sB.js.map +1 -0
- package/index.d.ts +4611 -0
- package/index.js +309 -0
- package/index.js.map +1 -0
- package/input-block-DgAJBzN_.js +109 -0
- package/input-block-DgAJBzN_.js.map +1 -0
- package/instances-block-BaSSiz8m.js +12 -0
- package/instances-block-BaSSiz8m.js.map +1 -0
- package/iridescence-block-B0pRFoOU.js +67 -0
- package/iridescence-block-B0pRFoOU.js.map +1 -0
- package/iridescence-fragment-Gymp7or5.js +243 -0
- package/iridescence-fragment-Gymp7or5.js.map +1 -0
- package/length-block-ChOkeiHR.js +11 -0
- package/length-block-ChOkeiHR.js.map +1 -0
- package/lerp-block-DjI2SfmI.js +18 -0
- package/lerp-block-DjI2SfmI.js.map +1 -0
- package/light-block-B11ew7FA.js +123 -0
- package/light-block-B11ew7FA.js.map +1 -0
- package/light-information-VJbW0jbs.js +19 -0
- package/light-information-VJbW0jbs.js.map +1 -0
- package/loop-block-Bb23EOMb.js +71 -0
- package/loop-block-Bb23EOMb.js.map +1 -0
- package/manifold-AS8POaOr.js +3022 -0
- package/manifold-AS8POaOr.js.map +1 -0
- package/manifold-RCa7RkKz.js +5 -0
- package/manifold-RCa7RkKz.js.map +1 -0
- package/matrix-blocks-acWn_V6g.js +51 -0
- package/matrix-blocks-acWn_V6g.js.map +1 -0
- package/max-block-CjFgljZ7.js +6 -0
- package/max-block-CjFgljZ7.js.map +1 -0
- package/mesh-attribute-exists-block-BfK8UiSL.js +44 -0
- package/mesh-attribute-exists-block-BfK8UiSL.js.map +1 -0
- package/mesh-features-BLENkYVt.js +341 -0
- package/mesh-features-BLENkYVt.js.map +1 -0
- package/min-block-CHtBngNl.js +6 -0
- package/min-block-CHtBngNl.js.map +1 -0
- package/mod-block-Ceizv8Y7.js +6 -0
- package/mod-block-Ceizv8Y7.js.map +1 -0
- package/morph-fragment-DOVo70gP.js +59 -0
- package/morph-fragment-DOVo70gP.js.map +1 -0
- package/morph-targets-55z342ZB.js +35 -0
- package/morph-targets-55z342ZB.js.map +1 -0
- package/multilight-wgsl-BGyiIOp3.js +112 -0
- package/multilight-wgsl-BGyiIOp3.js.map +1 -0
- package/multiply-block-DaXLJ7Ud.js +6 -0
- package/multiply-block-DaXLJ7Ud.js.map +1 -0
- package/negate-block-9CSLc5pM.js +6 -0
- package/negate-block-9CSLc5pM.js.map +1 -0
- package/nlerp-block-BNK1adIb.js +21 -0
- package/nlerp-block-BNK1adIb.js.map +1 -0
- package/node-env-BPZXZzBf.js +39 -0
- package/node-env-BPZXZzBf.js.map +1 -0
- package/node-registry-DwgC4yth.js +190 -0
- package/node-registry-DwgC4yth.js.map +1 -0
- package/node-registry-extra-advanced-2DJVt67-.js +45 -0
- package/node-registry-extra-advanced-2DJVt67-.js.map +1 -0
- package/node-registry-extra-compat-Dhrw8fDQ.js +41 -0
- package/node-registry-extra-compat-Dhrw8fDQ.js.map +1 -0
- package/node-registry-extra-math-CsAHvIZo.js +49 -0
- package/node-registry-extra-math-CsAHvIZo.js.map +1 -0
- package/node-registry-extra-procedural-5pLQ3Bhz.js +45 -0
- package/node-registry-extra-procedural-5pLQ3Bhz.js.map +1 -0
- package/node-renderable-DlLIdBmd.js +269 -0
- package/node-renderable-DlLIdBmd.js.map +1 -0
- package/node-shadow-DKrcqmNg.js +122 -0
- package/node-shadow-DKrcqmNg.js.map +1 -0
- package/node-snippet-DUMm9qEO.js +22 -0
- package/node-snippet-DUMm9qEO.js.map +1 -0
- package/normal-blend-block-BfH_nBoj.js +29 -0
- package/normal-blend-block-BfH_nBoj.js.map +1 -0
- package/normal-map-fragment-DpsIXrJf.js +38 -0
- package/normal-map-fragment-DpsIXrJf.js.map +1 -0
- package/normalize-block-F2bLNj9K.js +6 -0
- package/normalize-block-F2bLNj9K.js.map +1 -0
- package/oneminus-block-BP9x4Dc3.js +6 -0
- package/oneminus-block-BP9x4Dc3.js.map +1 -0
- package/opposite-block-Cnqmm-lH.js +6 -0
- package/opposite-block-Cnqmm-lH.js.map +1 -0
- package/package.json +26 -0
- package/panner-block-BwMQq-6Y.js +13 -0
- package/panner-block-BwMQq-6Y.js.map +1 -0
- package/parse-camera-DM3oJJeT.js +23 -0
- package/parse-camera-DM3oJJeT.js.map +1 -0
- package/pbr-aces-wgsl-HpiQHGN_.js +13 -0
- package/pbr-aces-wgsl-HpiQHGN_.js.map +1 -0
- package/pbr-metallic-roughness-block-full-6vMm1Jk6.js +763 -0
- package/pbr-metallic-roughness-block-full-6vMm1Jk6.js.map +1 -0
- package/pbr-metallic-roughness-block-h_KAOZrW.js +104 -0
- package/pbr-metallic-roughness-block-h_KAOZrW.js.map +1 -0
- package/pbr-mr-helper-core-CIwm-T1G.js +237 -0
- package/pbr-mr-helper-core-CIwm-T1G.js.map +1 -0
- package/pbr-refraction-DGmMSa2v.js +17 -0
- package/pbr-refraction-DGmMSa2v.js.map +1 -0
- package/pbr-renderable-BJxUtPBb.js +961 -0
- package/pbr-renderable-BJxUtPBb.js.map +1 -0
- package/pbr-shadow-fragment-LO9SlbJj.js +14 -0
- package/pbr-shadow-fragment-LO9SlbJj.js.map +1 -0
- package/pbr-template-ext-8q7BcTDf.js +88 -0
- package/pbr-template-ext-8q7BcTDf.js.map +1 -0
- package/pbr-tracking-B3alzn91.js +31 -0
- package/pbr-tracking-B3alzn91.js.map +1 -0
- package/pbr-transmission-ext-BxW4CEGu.js +581 -0
- package/pbr-transmission-ext-BxW4CEGu.js.map +1 -0
- package/perturb-normal-0Q8EM9ig.js +39 -0
- package/perturb-normal-0Q8EM9ig.js.map +1 -0
- package/posterize-block-DfdKsbEf.js +28 -0
- package/posterize-block-DfdKsbEf.js.map +1 -0
- package/pow-block-DI5ICzhc.js +13 -0
- package/pow-block-DI5ICzhc.js.map +1 -0
- package/random-number-block-2OyRYljF.js +15 -0
- package/random-number-block-2OyRYljF.js.map +1 -0
- package/reciprocal-block-Ck3CW-j-.js +14 -0
- package/reciprocal-block-Ck3CW-j-.js.map +1 -0
- package/reflect-block-CizpzrX4.js +12 -0
- package/reflect-block-CizpzrX4.js.map +1 -0
- package/reflectance-fragment-BCrgPmrt.js +143 -0
- package/reflectance-fragment-BCrgPmrt.js.map +1 -0
- package/reflection-block-DqcwyYqr.js +12 -0
- package/reflection-block-DqcwyYqr.js.map +1 -0
- package/reflection-texture-base-block-1xmJ0HDj.js +10 -0
- package/reflection-texture-base-block-1xmJ0HDj.js.map +1 -0
- package/reflection-texture-block-C3QtzoV8.js +60 -0
- package/reflection-texture-block-C3QtzoV8.js.map +1 -0
- package/refract-block-HHiAk-7U.js +13 -0
- package/refract-block-HHiAk-7U.js.map +1 -0
- package/refraction-block-U8y6XiXs.js +11 -0
- package/refraction-block-U8y6XiXs.js.map +1 -0
- package/refraction-dispersion-wgsl-DdQCyyO1.js +16 -0
- package/refraction-dispersion-wgsl-DdQCyyO1.js.map +1 -0
- package/remap-block-DxK1W1vp.js +27 -0
- package/remap-block-DxK1W1vp.js.map +1 -0
- package/replace-color-block-1m--hiru.js +17 -0
- package/replace-color-block-1m--hiru.js.map +1 -0
- package/rgbd-decode-DCvzUYeI.js +110 -0
- package/rgbd-decode-DCvzUYeI.js.map +1 -0
- package/rotate2d-block-nEe1N2MJ.js +15 -0
- package/rotate2d-block-nEe1N2MJ.js.map +1 -0
- package/scale-block-C5Z8159G.js +13 -0
- package/scale-block-C5Z8159G.js.map +1 -0
- package/scene-material-swap-C2ykv55W.js +34 -0
- package/scene-material-swap-C2ykv55W.js.map +1 -0
- package/screen-size-block-BVNnOvE8.js +21 -0
- package/screen-size-block-BVNnOvE8.js.map +1 -0
- package/screen-space-block-CwaxdfSe.js +28 -0
- package/screen-space-block-CwaxdfSe.js.map +1 -0
- package/shader-renderable-D-6796KR.js +531 -0
- package/shader-renderable-D-6796KR.js.map +1 -0
- package/shadow-fragment-core-DHN2G6FI.js +110 -0
- package/shadow-fragment-core-DHN2G6FI.js.map +1 -0
- package/shadow-map-CQNQC-Fw.js +13 -0
- package/shadow-map-CQNQC-Fw.js.map +1 -0
- package/sheen-block-BugfJqK3.js +12 -0
- package/sheen-block-BugfJqK3.js.map +1 -0
- package/sheen-fragment-Dze2f7XJ.js +215 -0
- package/sheen-fragment-Dze2f7XJ.js.map +1 -0
- package/simplex-perlin-3d-block-CcMtofzV.js +58 -0
- package/simplex-perlin-3d-block-CcMtofzV.js.map +1 -0
- package/singlelight-directional-wgsl-CmUDZxwz.js +39 -0
- package/singlelight-directional-wgsl-CmUDZxwz.js.map +1 -0
- package/singlelight-hemispheric-wgsl-t-83IP_s.js +40 -0
- package/singlelight-hemispheric-wgsl-t-83IP_s.js.map +1 -0
- package/singlelight-point-wgsl-CLzULIYV.js +45 -0
- package/singlelight-point-wgsl-CLzULIYV.js.map +1 -0
- package/singlelight-spot-wgsl-DEEUrfVM.js +47 -0
- package/singlelight-spot-wgsl-DEEUrfVM.js.map +1 -0
- package/skeleton-fragment-B_XlFbtx.js +71 -0
- package/skeleton-fragment-B_XlFbtx.js.map +1 -0
- package/skybox-renderable-DDwzu-PT.js +92 -0
- package/skybox-renderable-DDwzu-PT.js.map +1 -0
- package/skybox.vertex-DJgi072W.js +5 -0
- package/skybox.vertex-DJgi072W.js.map +1 -0
- package/smoothstep-block-Di4t37x-.js +15 -0
- package/smoothstep-block-Di4t37x-.js.map +1 -0
- package/splat-ply-compressed-BahdBG1r.js +394 -0
- package/splat-ply-compressed-BahdBG1r.js.map +1 -0
- package/standard-renderable-GjxL9xSf.js +636 -0
- package/standard-renderable-GjxL9xSf.js.map +1 -0
- package/std-ambient-fragment-BoUsD06w.js +37 -0
- package/std-ambient-fragment-BoUsD06w.js.map +1 -0
- package/std-cube-reflection-fragment-ulqc3bsP.js +31 -0
- package/std-cube-reflection-fragment-ulqc3bsP.js.map +1 -0
- package/std-emissive-fragment-DNGj1HdQ.js +40 -0
- package/std-emissive-fragment-DNGj1HdQ.js.map +1 -0
- package/std-lightmap-fragment-Bqj89aIe.js +37 -0
- package/std-lightmap-fragment-Bqj89aIe.js.map +1 -0
- package/std-opacity-fragment-KuPh5N2Z.js +37 -0
- package/std-opacity-fragment-KuPh5N2Z.js.map +1 -0
- package/std-reflection-fragment-BA5Ghn_M.js +57 -0
- package/std-reflection-fragment-BA5Ghn_M.js.map +1 -0
- package/std-shadow-fragment-FNQfrJuC.js +8 -0
- package/std-shadow-fragment-FNQfrJuC.js.map +1 -0
- package/std-specular-fragment-CE-6scqd.js +37 -0
- package/std-specular-fragment-CE-6scqd.js.map +1 -0
- package/std-tracking-CNKZ-hJN.js +15 -0
- package/std-tracking-CNKZ-hJN.js.map +1 -0
- package/step-block-BkywzTYm.js +13 -0
- package/step-block-BkywzTYm.js.map +1 -0
- package/storage-read-block-BdzhJfln.js +25 -0
- package/storage-read-block-BdzhJfln.js.map +1 -0
- package/storage-write-block-DjLKZ0Ro.js +11 -0
- package/storage-write-block-DjLKZ0Ro.js.map +1 -0
- package/subsurface-block-CBhxT9ui.js +12 -0
- package/subsurface-block-CBhxT9ui.js.map +1 -0
- package/subsurface-fragment-liM3y2-P.js +158 -0
- package/subsurface-fragment-liM3y2-P.js.map +1 -0
- package/subtract-block-NPfKvzQP.js +6 -0
- package/subtract-block-NPfKvzQP.js.map +1 -0
- package/swapchain-overlay-DcCSFDp7.js +35 -0
- package/swapchain-overlay-DcCSFDp7.js.map +1 -0
- package/tbn-block-ByOI6Y43.js +43 -0
- package/tbn-block-ByOI6Y43.js.map +1 -0
- package/teleport-in-block-BMa17cqq.js +10 -0
- package/teleport-in-block-BMa17cqq.js.map +1 -0
- package/teleport-out-block-5AkB25H6.js +19 -0
- package/teleport-out-block-5AkB25H6.js.map +1 -0
- package/texture-block-rr21KIL_.js +70 -0
- package/texture-block-rr21KIL_.js.map +1 -0
- package/thin-instance-fragment-hsv-RyDs.js +69 -0
- package/thin-instance-fragment-hsv-RyDs.js.map +1 -0
- package/thin-instance-gpu-C9Gv_Z1w.js +62 -0
- package/thin-instance-gpu-C9Gv_Z1w.js.map +1 -0
- package/tracking-primitives-wgdBY85t.js +82 -0
- package/tracking-primitives-wgdBY85t.js.map +1 -0
- package/transform-block-DbRph9JI.js +32 -0
- package/transform-block-DbRph9JI.js.map +1 -0
- package/trigonometry-block-BYQcTHiD.js +36 -0
- package/trigonometry-block-BYQcTHiD.js.map +1 -0
- package/triplanar-block-BZHkD9hX.js +148 -0
- package/triplanar-block-BZHkD9hX.js.map +1 -0
- package/twirl-block-78WtdiBd.js +39 -0
- package/twirl-block-78WtdiBd.js.map +1 -0
- package/unlit-fragment-BIlhJpz6.js +43 -0
- package/unlit-fragment-BIlhJpz6.js.map +1 -0
- package/uv-transform-fragment-hYujGpZg.js +47 -0
- package/uv-transform-fragment-hYujGpZg.js.map +1 -0
- package/vector-merger-CrW-ONB0.js +43 -0
- package/vector-merger-CrW-ONB0.js.map +1 -0
- package/vector-splitter-BoJuHrAU.js +34 -0
- package/vector-splitter-BoJuHrAU.js.map +1 -0
- package/vertex-output-Cvft64y0.js +14 -0
- package/vertex-output-Cvft64y0.js.map +1 -0
- package/view-direction-CWVucfnT.js +12 -0
- package/view-direction-CWVucfnT.js.map +1 -0
- package/voronoi-noise-block-iNQxa_Ls.js +43 -0
- package/voronoi-noise-block-iNQxa_Ls.js.map +1 -0
- package/wave-block-CY_mk1ec.js +41 -0
- package/wave-block-CY_mk1ec.js.map +1 -0
- package/wgsl-helpers-DyzNzCeE.js +48 -0
- package/wgsl-helpers-DyzNzCeE.js.map +1 -0
- package/worley-noise-3d-block-CyR2-k4s.js +58 -0
- package/worley-noise-3d-block-CyR2-k4s.js.map +1 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { s as skyboxVertSrc } from "./skybox.vertex-DJgi072W.js";
|
|
2
|
+
import { e as createMappedBuffer, aY as createUniformBuffer, D as targetSignatureKey, aW as SCENE_UBO_WGSL, E as createDefaultPipelineDescriptor, F as getSceneBindGroupLayout, aZ as createSingleUniformBGL } from "./index-C8HOR2sB.js";
|
|
3
|
+
import { a as WGSL_DITHER } from "./wgsl-helpers-DyzNzCeE.js";
|
|
4
|
+
const skyboxFragSrc = "// Skybox Fragment Shader — matches Babylon BackgroundMaterial\n// BJS loads a separate CDN skybox texture (backgroundSkybox.dds) that produces\n// exactly scene.clearColor when rendered through the BackgroundMaterial pipeline.\n// We replicate this by outputting the pre-computed clearColor directly from a UBO.\n\nstruct MeshUniforms {\n world: mat4x4<f32>,\n primaryColor: vec3<f32>,\n _pad: f32,\n // Pre-computed sRGB output color for the sky background (= scene.clearColor).\n skyOutputColor: vec3<f32>,\n _pad2: f32,\n};\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\n\nstruct FragmentInput {\n @location(0) positionUVW: vec3<f32>,\n @location(1) positionW: vec3<f32>,\n};\n\n@fragment\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\n var result = vec4<f32>(mesh.skyOutputColor, 1.0);\n\n // Dithering (enableNoise=true, variance=0.5)\n result = vec4<f32>(result.rgb + vec3<f32>(dither(input.positionW.xy, 0.5)), result.a);\n result = max(result, vec4<f32>(0.0));\n\n return result;\n}\n";
|
|
5
|
+
const SKY_MESH_UNIFORM_SIZE = 96;
|
|
6
|
+
function createSkyboxBuffers(engine, S) {
|
|
7
|
+
const positions = new Float32Array([
|
|
8
|
+
S,
|
|
9
|
+
-S,
|
|
10
|
+
S,
|
|
11
|
+
-S,
|
|
12
|
+
-S,
|
|
13
|
+
S,
|
|
14
|
+
-S,
|
|
15
|
+
S,
|
|
16
|
+
S,
|
|
17
|
+
S,
|
|
18
|
+
S,
|
|
19
|
+
S,
|
|
20
|
+
S,
|
|
21
|
+
S,
|
|
22
|
+
-S,
|
|
23
|
+
-S,
|
|
24
|
+
S,
|
|
25
|
+
-S,
|
|
26
|
+
-S,
|
|
27
|
+
-S,
|
|
28
|
+
-S,
|
|
29
|
+
S,
|
|
30
|
+
-S,
|
|
31
|
+
-S,
|
|
32
|
+
S,
|
|
33
|
+
S,
|
|
34
|
+
-S,
|
|
35
|
+
S,
|
|
36
|
+
-S,
|
|
37
|
+
-S,
|
|
38
|
+
S,
|
|
39
|
+
-S,
|
|
40
|
+
S,
|
|
41
|
+
S,
|
|
42
|
+
S,
|
|
43
|
+
S,
|
|
44
|
+
-S,
|
|
45
|
+
S,
|
|
46
|
+
S,
|
|
47
|
+
-S,
|
|
48
|
+
-S,
|
|
49
|
+
S,
|
|
50
|
+
-S,
|
|
51
|
+
-S,
|
|
52
|
+
-S,
|
|
53
|
+
-S,
|
|
54
|
+
S,
|
|
55
|
+
-S,
|
|
56
|
+
-S,
|
|
57
|
+
S,
|
|
58
|
+
S,
|
|
59
|
+
-S,
|
|
60
|
+
S,
|
|
61
|
+
-S,
|
|
62
|
+
S,
|
|
63
|
+
S,
|
|
64
|
+
-S,
|
|
65
|
+
S,
|
|
66
|
+
S,
|
|
67
|
+
S,
|
|
68
|
+
S,
|
|
69
|
+
-S,
|
|
70
|
+
S,
|
|
71
|
+
S,
|
|
72
|
+
-S,
|
|
73
|
+
-S,
|
|
74
|
+
-S,
|
|
75
|
+
-S,
|
|
76
|
+
-S,
|
|
77
|
+
-S,
|
|
78
|
+
-S,
|
|
79
|
+
S
|
|
80
|
+
]);
|
|
81
|
+
const indices = new Uint16Array([
|
|
82
|
+
2,
|
|
83
|
+
1,
|
|
84
|
+
0,
|
|
85
|
+
3,
|
|
86
|
+
2,
|
|
87
|
+
0,
|
|
88
|
+
6,
|
|
89
|
+
5,
|
|
90
|
+
4,
|
|
91
|
+
7,
|
|
92
|
+
6,
|
|
93
|
+
4,
|
|
94
|
+
10,
|
|
95
|
+
9,
|
|
96
|
+
8,
|
|
97
|
+
11,
|
|
98
|
+
10,
|
|
99
|
+
8,
|
|
100
|
+
14,
|
|
101
|
+
13,
|
|
102
|
+
12,
|
|
103
|
+
15,
|
|
104
|
+
14,
|
|
105
|
+
12,
|
|
106
|
+
18,
|
|
107
|
+
17,
|
|
108
|
+
16,
|
|
109
|
+
19,
|
|
110
|
+
18,
|
|
111
|
+
16,
|
|
112
|
+
22,
|
|
113
|
+
21,
|
|
114
|
+
20,
|
|
115
|
+
23,
|
|
116
|
+
22,
|
|
117
|
+
20
|
|
118
|
+
]);
|
|
119
|
+
return {
|
|
120
|
+
posBuffer: createMappedBuffer(engine, positions, GPUBufferUsage.VERTEX),
|
|
121
|
+
idxBuffer: createMappedBuffer(engine, indices, GPUBufferUsage.INDEX),
|
|
122
|
+
idxCount: 36
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function buildSkyboxWorldMatrix(rootPosition) {
|
|
126
|
+
const world = new Float32Array(16);
|
|
127
|
+
world[0] = 1;
|
|
128
|
+
world[5] = 1;
|
|
129
|
+
world[10] = 1;
|
|
130
|
+
world[15] = 1;
|
|
131
|
+
world[12] = rootPosition[0];
|
|
132
|
+
world[13] = rootPosition[1];
|
|
133
|
+
world[14] = rootPosition[2];
|
|
134
|
+
return world;
|
|
135
|
+
}
|
|
136
|
+
const SKYBOX_POS_BUFFER = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: "float32x3" }] }];
|
|
137
|
+
const _skyPipelines = /* @__PURE__ */ new Map();
|
|
138
|
+
let _skyLayout = null;
|
|
139
|
+
let _skyCachedDevice = null;
|
|
140
|
+
function createSkyboxMaterial() {
|
|
141
|
+
function getLayout(engine) {
|
|
142
|
+
const device = engine._device;
|
|
143
|
+
if (_skyLayout && _skyCachedDevice === device) {
|
|
144
|
+
return _skyLayout;
|
|
145
|
+
}
|
|
146
|
+
_skyLayout = createSingleUniformBGL(engine, "skybox-material", GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT);
|
|
147
|
+
return _skyLayout;
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
getPipeline(_engine, sig) {
|
|
151
|
+
const device = _engine._device;
|
|
152
|
+
if (_skyCachedDevice !== device) {
|
|
153
|
+
_skyPipelines.clear();
|
|
154
|
+
_skyLayout = null;
|
|
155
|
+
_skyCachedDevice = device;
|
|
156
|
+
}
|
|
157
|
+
const key = targetSignatureKey(sig);
|
|
158
|
+
const cached = _skyPipelines.get(key);
|
|
159
|
+
if (cached) {
|
|
160
|
+
return cached;
|
|
161
|
+
}
|
|
162
|
+
const _vertModule = device.createShaderModule({ code: SCENE_UBO_WGSL + skyboxVertSrc, label: "skybox-vert" });
|
|
163
|
+
const _fragModule = device.createShaderModule({ code: WGSL_DITHER + skyboxFragSrc, label: "skybox-frag" });
|
|
164
|
+
const pipeline = device.createRenderPipeline(
|
|
165
|
+
createDefaultPipelineDescriptor({
|
|
166
|
+
_label: "skybox-pipeline",
|
|
167
|
+
_engine,
|
|
168
|
+
_bgls: [getSceneBindGroupLayout(_engine), getLayout(_engine)],
|
|
169
|
+
_vertModule,
|
|
170
|
+
_fragModule,
|
|
171
|
+
_vertexBuffers: SKYBOX_POS_BUFFER,
|
|
172
|
+
_format: sig._colorFormat,
|
|
173
|
+
_depthStencilFormat: sig._depthStencilFormat,
|
|
174
|
+
_depthCompare: sig._depthCompare,
|
|
175
|
+
_msaaSamples: sig._sampleCount,
|
|
176
|
+
_depthWriteEnabled: false,
|
|
177
|
+
_flipY: sig._flipY
|
|
178
|
+
})
|
|
179
|
+
);
|
|
180
|
+
_skyPipelines.set(key, pipeline);
|
|
181
|
+
return pipeline;
|
|
182
|
+
},
|
|
183
|
+
createBindGroup(engine, meshUBO, _env) {
|
|
184
|
+
const device = engine._device;
|
|
185
|
+
return device.createBindGroup({
|
|
186
|
+
layout: getLayout(engine),
|
|
187
|
+
entries: [{ binding: 0, resource: { buffer: meshUBO } }]
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function buildSolidSkyboxRenderable(scene, envTextures, skyHalfSize, rootPosition, primaryColor) {
|
|
193
|
+
const engine = scene.engine;
|
|
194
|
+
const skyboxWorld = buildSkyboxWorldMatrix(rootPosition);
|
|
195
|
+
const cc = scene.clearColor;
|
|
196
|
+
const skyBufs = createSkyboxBuffers(engine, skyHalfSize);
|
|
197
|
+
const skyMat = createSkyboxMaterial();
|
|
198
|
+
const skyOutputColor = [cc.r, cc.g, cc.b];
|
|
199
|
+
const skyUBO = createSkyMeshUBO(engine, skyboxWorld, primaryColor, skyOutputColor);
|
|
200
|
+
const skyBG = skyMat.createBindGroup(engine, skyUBO, envTextures);
|
|
201
|
+
const r = {
|
|
202
|
+
order: 0,
|
|
203
|
+
// skybox renders first (behind everything)
|
|
204
|
+
isTransparent: false,
|
|
205
|
+
bind(eng, sig) {
|
|
206
|
+
return {
|
|
207
|
+
renderable: r,
|
|
208
|
+
pipeline: skyMat.getPipeline(eng, sig),
|
|
209
|
+
draw(pass) {
|
|
210
|
+
pass.setBindGroup(1, skyBG);
|
|
211
|
+
pass.setVertexBuffer(0, skyBufs.posBuffer);
|
|
212
|
+
pass.setIndexBuffer(skyBufs.idxBuffer, "uint16");
|
|
213
|
+
pass.drawIndexed(skyBufs.idxCount);
|
|
214
|
+
return 1;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
return r;
|
|
220
|
+
}
|
|
221
|
+
function createSkyMeshUBO(engine, world, primaryColor, skyOutputColor) {
|
|
222
|
+
const data = new Float32Array(SKY_MESH_UNIFORM_SIZE / 4);
|
|
223
|
+
data.set(world, 0);
|
|
224
|
+
data[16] = primaryColor[0];
|
|
225
|
+
data[17] = primaryColor[1];
|
|
226
|
+
data[18] = primaryColor[2];
|
|
227
|
+
data[20] = skyOutputColor[0];
|
|
228
|
+
data[21] = skyOutputColor[1];
|
|
229
|
+
data[22] = skyOutputColor[2];
|
|
230
|
+
return createUniformBuffer(engine, data);
|
|
231
|
+
}
|
|
232
|
+
export {
|
|
233
|
+
buildSolidSkyboxRenderable
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=background-solid-skybox-DPGBpPbm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-solid-skybox-DPGBpPbm.js","sources":["../shaders/skybox.fragment.wgsl?raw","../src/material/pbr/background-solid-skybox.ts"],"sourcesContent":["export default \"// Skybox Fragment Shader — matches Babylon BackgroundMaterial\\n// BJS loads a separate CDN skybox texture (backgroundSkybox.dds) that produces\\n// exactly scene.clearColor when rendered through the BackgroundMaterial pipeline.\\n// We replicate this by outputting the pre-computed clearColor directly from a UBO.\\n\\nstruct MeshUniforms {\\n world: mat4x4<f32>,\\n primaryColor: vec3<f32>,\\n _pad: f32,\\n // Pre-computed sRGB output color for the sky background (= scene.clearColor).\\n skyOutputColor: vec3<f32>,\\n _pad2: f32,\\n};\\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\\n\\nstruct FragmentInput {\\n @location(0) positionUVW: vec3<f32>,\\n @location(1) positionW: vec3<f32>,\\n};\\n\\n@fragment\\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\\n var result = vec4<f32>(mesh.skyOutputColor, 1.0);\\n\\n // Dithering (enableNoise=true, variance=0.5)\\n result = vec4<f32>(result.rgb + vec3<f32>(dither(input.positionW.xy, 0.5)), result.a);\\n result = max(result, vec4<f32>(0.0));\\n\\n return result;\\n}\\n\"","/** Solid-color skybox renderable — the clear-color background used by PBR\n * environment scenes when no HDR/DDS skybox is provided.\n *\n * Dynamically imported from `background-renderable.ts` so scenes that pass\n * `skipSkybox: true` (or use a dyn-imported HDR/DDS skybox instead) don't\n * pay for the shader module or cube geometry. */\n\nimport type { SceneContext } from \"../../scene/scene.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { EnvironmentTextures } from \"../../loader-env/load-env.js\";\nimport type { Mat4 } from \"../../math/types.js\";\nimport type { Renderable } from \"../../render/renderable.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\n\nimport skyboxVertSrc from \"../../../shaders/skybox.vertex.wgsl?raw\";\nimport skyboxFragSrc from \"../../../shaders/skybox.fragment.wgsl?raw\";\nimport { createDefaultPipelineDescriptor, getSceneBindGroupLayout } from \"../../render/scene-helpers.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\nimport { WGSL_DITHER } from \"../../shader/wgsl-helpers.js\";\nimport { SCENE_UBO_WGSL } from \"../../shader/scene-uniforms.js\";\nimport { createMappedBuffer, createUniformBuffer } from \"../../resource/gpu-buffers.js\";\nimport { createSingleUniformBGL } from \"../../shader/bgl-helpers.js\";\n\nconst SKY_MESH_UNIFORM_SIZE = 96; // mat4x4 + primaryColor vec3 + pad + skyOutputColor vec3 + pad\n\nfunction createSkyboxBuffers(engine: EngineContext, S: number): { posBuffer: GPUBuffer; idxBuffer: GPUBuffer; idxCount: number } {\n // prettier-ignore\n const positions = new Float32Array([\n S,-S, S, -S,-S, S, -S, S, S, S, S, S,\n S, S,-S, -S, S,-S, -S,-S,-S, S,-S,-S,\n S, S,-S, S,-S,-S, S,-S, S, S, S, S,\n -S, S, S, -S,-S, S, -S,-S,-S, -S, S,-S,\n -S, S, S, -S, S,-S, S, S,-S, S, S, S,\n S,-S, S, S,-S,-S, -S,-S,-S, -S,-S, S,\n ]);\n // prettier-ignore\n const indices = new Uint16Array([\n 2, 1, 0, 3, 2, 0, 6, 5, 4, 7, 6, 4,\n 10, 9, 8, 11,10, 8, 14,13,12, 15,14,12,\n 18,17,16, 19,18,16, 22,21,20, 23,22,20,\n ]);\n return {\n posBuffer: createMappedBuffer(engine, positions, GPUBufferUsage.VERTEX),\n idxBuffer: createMappedBuffer(engine, indices, GPUBufferUsage.INDEX),\n idxCount: 36,\n };\n}\n\nfunction buildSkyboxWorldMatrix(rootPosition: [number, number, number]): Mat4 {\n const world = new Float32Array(16) as Mat4;\n world[0] = 1;\n world[5] = 1;\n world[10] = 1;\n world[15] = 1;\n world[12] = rootPosition[0];\n world[13] = rootPosition[1];\n world[14] = rootPosition[2];\n return world;\n}\n\ninterface SkyboxMaterial {\n getPipeline(engine: EngineContext, sig: RenderTargetSignature): GPURenderPipeline;\n createBindGroup(engine: EngineContext, meshUBO: GPUBuffer, env: EnvironmentTextures): GPUBindGroup;\n}\n\nconst SKYBOX_POS_BUFFER: GPUVertexBufferLayout[] = [{ arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x3\" as GPUVertexFormat }] }];\n\n/** Module-global pipeline cache shared by all solid-skybox renderables. */\nconst _skyPipelines = new Map<string, GPURenderPipeline>();\nlet _skyLayout: GPUBindGroupLayout | null = null;\nlet _skyCachedDevice: GPUDevice | null = null;\n\nfunction createSkyboxMaterial(): SkyboxMaterial {\n function getLayout(engine: EngineContext): GPUBindGroupLayout {\n const device = engine._device;\n if (_skyLayout && _skyCachedDevice === device) {\n return _skyLayout;\n }\n _skyLayout = createSingleUniformBGL(engine, \"skybox-material\", GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT);\n return _skyLayout;\n }\n\n return {\n getPipeline(_engine, sig) {\n const device = _engine._device;\n if (_skyCachedDevice !== device) {\n _skyPipelines.clear();\n _skyLayout = null;\n _skyCachedDevice = device;\n }\n const key = targetSignatureKey(sig);\n const cached = _skyPipelines.get(key);\n if (cached) {\n return cached;\n }\n const _vertModule = device.createShaderModule({ code: SCENE_UBO_WGSL + skyboxVertSrc, label: \"skybox-vert\" });\n const _fragModule = device.createShaderModule({ code: WGSL_DITHER + skyboxFragSrc, label: \"skybox-frag\" });\n\n const pipeline = device.createRenderPipeline(\n createDefaultPipelineDescriptor({\n _label: \"skybox-pipeline\",\n _engine,\n _bgls: [getSceneBindGroupLayout(_engine), getLayout(_engine)],\n _vertModule,\n _fragModule,\n _vertexBuffers: SKYBOX_POS_BUFFER,\n _format: sig._colorFormat!,\n _depthStencilFormat: sig._depthStencilFormat,\n _depthCompare: sig._depthCompare,\n _msaaSamples: sig._sampleCount,\n _depthWriteEnabled: false,\n _flipY: sig._flipY,\n })\n );\n _skyPipelines.set(key, pipeline);\n return pipeline;\n },\n\n createBindGroup(engine, meshUBO, _env) {\n const device = engine._device;\n return device.createBindGroup({\n layout: getLayout(engine),\n entries: [{ binding: 0, resource: { buffer: meshUBO } }],\n });\n },\n };\n}\n\nexport function buildSolidSkyboxRenderable(\n scene: SceneContext,\n envTextures: EnvironmentTextures,\n skyHalfSize: number,\n rootPosition: [number, number, number],\n primaryColor: [number, number, number]\n): Renderable {\n const engine = scene.engine;\n const skyboxWorld = buildSkyboxWorldMatrix(rootPosition);\n const cc = scene.clearColor;\n const skyBufs = createSkyboxBuffers(engine, skyHalfSize);\n\n const skyMat = createSkyboxMaterial();\n const skyOutputColor: [number, number, number] = [cc.r, cc.g, cc.b];\n const skyUBO = createSkyMeshUBO(engine, skyboxWorld, primaryColor, skyOutputColor);\n const skyBG = skyMat.createBindGroup(engine, skyUBO, envTextures);\n\n const r: Renderable = {\n order: 0, // skybox renders first (behind everything)\n isTransparent: false,\n bind(eng, sig) {\n return {\n renderable: r,\n pipeline: skyMat.getPipeline(eng as EngineContext, sig),\n draw(pass) {\n pass.setBindGroup(1, skyBG);\n pass.setVertexBuffer(0, skyBufs.posBuffer);\n pass.setIndexBuffer(skyBufs.idxBuffer, \"uint16\");\n pass.drawIndexed(skyBufs.idxCount);\n return 1;\n },\n };\n },\n };\n return r;\n}\n\nfunction createSkyMeshUBO(engine: EngineContext, world: Mat4, primaryColor: [number, number, number], skyOutputColor: [number, number, number]): GPUBuffer {\n const data = new Float32Array(SKY_MESH_UNIFORM_SIZE / 4);\n data.set(world, 0);\n data[16] = primaryColor[0];\n data[17] = primaryColor[1];\n data[18] = primaryColor[2];\n data[20] = skyOutputColor[0];\n data[21] = skyOutputColor[1];\n data[22] = skyOutputColor[2];\n return createUniformBuffer(engine, data);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function bakeLocalMatrix(positions, normals, lm) {
|
|
2
|
+
const isIdentity = lm[0] === 1 && lm[1] === 0 && lm[2] === 0 && lm[4] === 0 && lm[5] === 1 && lm[6] === 0 && lm[8] === 0 && lm[9] === 0 && lm[10] === 1 && lm[12] === 0 && lm[13] === 0 && lm[14] === 0;
|
|
3
|
+
if (isIdentity) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
for (let i = 0; i < positions.length; i += 3) {
|
|
7
|
+
const x = positions[i], y = positions[i + 1], z = positions[i + 2];
|
|
8
|
+
positions[i] = x * lm[0] + y * lm[4] + z * lm[8] + lm[12];
|
|
9
|
+
positions[i + 1] = x * lm[1] + y * lm[5] + z * lm[9] + lm[13];
|
|
10
|
+
positions[i + 2] = x * lm[2] + y * lm[6] + z * lm[10] + lm[14];
|
|
11
|
+
}
|
|
12
|
+
for (let i = 0; i < normals.length; i += 3) {
|
|
13
|
+
const nx = normals[i], ny = normals[i + 1], nz = normals[i + 2];
|
|
14
|
+
const rx = nx * lm[0] + ny * lm[4] + nz * lm[8];
|
|
15
|
+
const ry = nx * lm[1] + ny * lm[5] + nz * lm[9];
|
|
16
|
+
const rz = nx * lm[2] + ny * lm[6] + nz * lm[10];
|
|
17
|
+
const len = Math.sqrt(rx * rx + ry * ry + rz * rz);
|
|
18
|
+
if (len > 1e-10) {
|
|
19
|
+
normals[i] = rx / len;
|
|
20
|
+
normals[i + 1] = ry / len;
|
|
21
|
+
normals[i + 2] = rz / len;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
bakeLocalMatrix
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=bake-local-matrix-Dfpd3b06.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bake-local-matrix-Dfpd3b06.js","sources":["../src/loader-babylon/bake-local-matrix.ts"],"sourcesContent":["/** Bake localMatrix (pivot) into vertex positions and normals.\n * Positions: full 4x3 affine. Normals: 3x3 part + renormalize.\n * Dynamically imported only when the scene uses localMatrix. */\nexport function bakeLocalMatrix(positions: Float32Array, normals: Float32Array, lm: number[]): void {\n const isIdentity =\n lm[0] === 1 &&\n lm[1] === 0 &&\n lm[2] === 0 &&\n lm[4] === 0 &&\n lm[5] === 1 &&\n lm[6] === 0 &&\n lm[8] === 0 &&\n lm[9] === 0 &&\n lm[10] === 1 &&\n lm[12] === 0 &&\n lm[13] === 0 &&\n lm[14] === 0;\n if (isIdentity) {\n return;\n }\n\n for (let i = 0; i < positions.length; i += 3) {\n const x = positions[i]!,\n y = positions[i + 1]!,\n z = positions[i + 2]!;\n positions[i] = x * lm[0]! + y * lm[4]! + z * lm[8]! + lm[12]!;\n positions[i + 1] = x * lm[1]! + y * lm[5]! + z * lm[9]! + lm[13]!;\n positions[i + 2] = x * lm[2]! + y * lm[6]! + z * lm[10]! + lm[14]!;\n }\n\n for (let i = 0; i < normals.length; i += 3) {\n const nx = normals[i]!,\n ny = normals[i + 1]!,\n nz = normals[i + 2]!;\n const rx = nx * lm[0]! + ny * lm[4]! + nz * lm[8]!;\n const ry = nx * lm[1]! + ny * lm[5]! + nz * lm[9]!;\n const rz = nx * lm[2]! + ny * lm[6]! + nz * lm[10]!;\n const len = Math.sqrt(rx * rx + ry * ry + rz * rz);\n if (len > 1e-10) {\n normals[i] = rx / len;\n normals[i + 1] = ry / len;\n normals[i + 2] = rz / len;\n }\n }\n}\n"],"names":[],"mappings":"AAGO,SAAS,gBAAgB,WAAyB,SAAuB,IAAoB;AAChG,QAAM,aACF,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,CAAC,MAAM,KACV,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM,KACX,GAAG,EAAE,MAAM;AACf,MAAI,YAAY;AACZ;AAAA,EACJ;AAEA,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,UAAM,IAAI,UAAU,CAAC,GACjB,IAAI,UAAU,IAAI,CAAC,GACnB,IAAI,UAAU,IAAI,CAAC;AACvB,cAAU,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,GAAG,EAAE;AAC3D,cAAU,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,GAAG,EAAE;AAC/D,cAAU,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,CAAC,IAAK,IAAI,GAAG,EAAE,IAAK,GAAG,EAAE;AAAA,EACpE;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AACxC,UAAM,KAAK,QAAQ,CAAC,GAChB,KAAK,QAAQ,IAAI,CAAC,GAClB,KAAK,QAAQ,IAAI,CAAC;AACtB,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC;AAChD,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC;AAChD,UAAM,KAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,CAAC,IAAK,KAAK,GAAG,EAAE;AACjD,UAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACjD,QAAI,MAAM,OAAO;AACb,cAAQ,CAAC,IAAI,KAAK;AAClB,cAAQ,IAAI,CAAC,IAAI,KAAK;AACtB,cAAQ,IAAI,CAAC,IAAI,KAAK;AAAA,IAC1B;AAAA,EACJ;AACJ;"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { e as createMappedBuffer, Z as BILLBOARD_INDEX_DATA, _ as createEmptyUniformBuffer, $ as BILLBOARD_SYSTEM_UBO_BYTES, a0 as createBillboardInstanceBuffer, a1 as _getBillboardFxHook, a2 as createBillboardInstanceSortScratch, a3 as getOrCreateBillboardPipeline, F as getSceneBindGroupLayout, a4 as createBillboardSystemBindGroup, a5 as resetBillboardPipelineCache, a6 as ensureBillboardInstanceBuffer, K as getViewMatrix, a7 as uploadSortedBillboardInstances, a8 as uploadBillboardInstances, a9 as buildBillboardSystemUbo, aa as writeBillboardSystemUboIfDirty, ab as createBillboardPipelineCache } from "./index-C8HOR2sB.js";
|
|
2
|
+
let _sharedPipelineCache = null;
|
|
3
|
+
let _sharedPipelineCacheRefs = 0;
|
|
4
|
+
function acquireSharedPipelineCache() {
|
|
5
|
+
_sharedPipelineCache ?? (_sharedPipelineCache = createBillboardPipelineCache());
|
|
6
|
+
_sharedPipelineCacheRefs++;
|
|
7
|
+
return _sharedPipelineCache;
|
|
8
|
+
}
|
|
9
|
+
function releaseSharedPipelineCache() {
|
|
10
|
+
if (_sharedPipelineCacheRefs === 0) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
_sharedPipelineCacheRefs--;
|
|
14
|
+
if (_sharedPipelineCacheRefs === 0 && _sharedPipelineCache) {
|
|
15
|
+
resetBillboardPipelineCache(_sharedPipelineCache);
|
|
16
|
+
_sharedPipelineCache = null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function buildBillboardRenderable(engine, system) {
|
|
20
|
+
var _a;
|
|
21
|
+
const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, GPUBufferUsage.INDEX);
|
|
22
|
+
const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);
|
|
23
|
+
const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);
|
|
24
|
+
const fx = ((_a = _getBillboardFxHook()) == null ? void 0 : _a.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system)) ?? null;
|
|
25
|
+
const isTransparent = system._depthMode === "transparent";
|
|
26
|
+
const renderable = {
|
|
27
|
+
order: system.order,
|
|
28
|
+
isTransparent,
|
|
29
|
+
_direct: !isTransparent,
|
|
30
|
+
_engine: engine,
|
|
31
|
+
_system: system,
|
|
32
|
+
_indexBuffer: indexBuffer,
|
|
33
|
+
_uniformBuffer: uniformBuffer,
|
|
34
|
+
_instanceBuffer: instanceBuffer,
|
|
35
|
+
_instanceBufferCapacity: system._capacity,
|
|
36
|
+
_instanceSortScratch: createBillboardInstanceSortScratch(),
|
|
37
|
+
_pipelineCache: acquireSharedPipelineCache(),
|
|
38
|
+
_bindGroups: /* @__PURE__ */ new Map(),
|
|
39
|
+
_uploadedVersion: -1,
|
|
40
|
+
_uploadedCamera: null,
|
|
41
|
+
_uploadedCameraViewVersion: -1,
|
|
42
|
+
_uploadedSorted: false,
|
|
43
|
+
_centerVersion: -1,
|
|
44
|
+
_drawableCount: 0,
|
|
45
|
+
_uboUploaded: false,
|
|
46
|
+
_lastUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
|
|
47
|
+
_scratchUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),
|
|
48
|
+
_fx: fx,
|
|
49
|
+
_disposed: false,
|
|
50
|
+
_worldCenter: [0, 0, 0],
|
|
51
|
+
bind(engine2, target) {
|
|
52
|
+
return bindSystem(renderable, engine2, target);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
refreshBillboardWorldCenter(renderable);
|
|
56
|
+
return {
|
|
57
|
+
renderable,
|
|
58
|
+
dispose() {
|
|
59
|
+
disposeRenderable(renderable);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function bindSystem(renderable, engine, target) {
|
|
64
|
+
if (!target._depthStencilFormat) {
|
|
65
|
+
throw new Error("BillboardSpriteSystem requires a depth-stencil render target.");
|
|
66
|
+
}
|
|
67
|
+
const sampleCount = target._sampleCount === 1 ? 1 : 4;
|
|
68
|
+
const pipeline = getOrCreateBillboardPipeline(
|
|
69
|
+
engine,
|
|
70
|
+
renderable._pipelineCache,
|
|
71
|
+
target._colorFormat,
|
|
72
|
+
sampleCount,
|
|
73
|
+
renderable._system,
|
|
74
|
+
target._depthStencilFormat,
|
|
75
|
+
getSceneBindGroupLayout(engine)
|
|
76
|
+
);
|
|
77
|
+
let bindGroup = renderable._bindGroups.get(pipeline);
|
|
78
|
+
if (!bindGroup) {
|
|
79
|
+
bindGroup = createBillboardSystemBindGroup(engine, pipeline, renderable._system, renderable._uniformBuffer, renderable._fx);
|
|
80
|
+
renderable._bindGroups.set(pipeline, bindGroup);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
renderable,
|
|
84
|
+
pipeline,
|
|
85
|
+
update(context) {
|
|
86
|
+
uploadSystem(renderable, context);
|
|
87
|
+
},
|
|
88
|
+
draw(pass) {
|
|
89
|
+
return drawSystem(renderable, bindGroup, pass);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function uploadSystem(renderable, context) {
|
|
94
|
+
if (renderable._disposed) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
refreshBillboardWorldCenter(renderable);
|
|
98
|
+
if (!renderable._system.visible || renderable._system.count === 0) {
|
|
99
|
+
if (renderable._system.count === 0) {
|
|
100
|
+
renderable._system._dirtyMin = 0;
|
|
101
|
+
renderable._system._dirtyMax = 0;
|
|
102
|
+
renderable._uploadedVersion = renderable._system._version;
|
|
103
|
+
renderable._uploadedSorted = false;
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (renderable._fx) {
|
|
108
|
+
_getBillboardFxHook().updateFx(renderable._fx, renderable._system, renderable._engine._currentDelta);
|
|
109
|
+
}
|
|
110
|
+
const grown = ensureBillboardInstanceBuffer(
|
|
111
|
+
renderable._engine._device,
|
|
112
|
+
renderable._system,
|
|
113
|
+
renderable._instanceBuffer,
|
|
114
|
+
renderable._instanceBufferCapacity,
|
|
115
|
+
`${renderable._system._orientation}-billboard-instances`
|
|
116
|
+
);
|
|
117
|
+
if (grown.reallocated) {
|
|
118
|
+
renderable._instanceBuffer = grown.buffer;
|
|
119
|
+
renderable._instanceBufferCapacity = grown.capacity;
|
|
120
|
+
renderable._uploadedVersion = -1;
|
|
121
|
+
renderable._uploadedCamera = null;
|
|
122
|
+
renderable._uploadedCameraViewVersion = -1;
|
|
123
|
+
renderable._uploadedSorted = false;
|
|
124
|
+
}
|
|
125
|
+
const camera = context._camera;
|
|
126
|
+
if (renderable._system._depthMode === "transparent" && camera) {
|
|
127
|
+
const cameraViewMatrix = getViewMatrix(camera);
|
|
128
|
+
if (!renderable._uploadedSorted || renderable._uploadedVersion !== renderable._system._version || renderable._uploadedCamera !== camera || renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion) {
|
|
129
|
+
uploadSortedBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, renderable._instanceSortScratch, cameraViewMatrix);
|
|
130
|
+
renderable._uploadedVersion = renderable._system._version;
|
|
131
|
+
renderable._uploadedCamera = camera;
|
|
132
|
+
renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;
|
|
133
|
+
renderable._uploadedSorted = true;
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
const uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;
|
|
137
|
+
renderable._uploadedVersion = uploadBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, uploadedVersion);
|
|
138
|
+
renderable._uploadedCamera = null;
|
|
139
|
+
renderable._uploadedCameraViewVersion = -1;
|
|
140
|
+
renderable._uploadedSorted = false;
|
|
141
|
+
}
|
|
142
|
+
buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);
|
|
143
|
+
writeBillboardSystemUboIfDirty(renderable._engine._device, renderable._uniformBuffer, renderable._scratchUbo, renderable._lastUbo, !renderable._uboUploaded);
|
|
144
|
+
renderable._uboUploaded = true;
|
|
145
|
+
}
|
|
146
|
+
function refreshBillboardWorldCenter(renderable) {
|
|
147
|
+
const system = renderable._system;
|
|
148
|
+
if (renderable._centerVersion === system._version) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const center = renderable._worldCenter;
|
|
152
|
+
if (system.count === 0) {
|
|
153
|
+
center[0] = 0;
|
|
154
|
+
center[1] = 0;
|
|
155
|
+
center[2] = 0;
|
|
156
|
+
renderable._drawableCount = 0;
|
|
157
|
+
renderable._centerVersion = system._version;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const data = system._instanceData;
|
|
161
|
+
const stride = system._instanceFloatsPerSprite;
|
|
162
|
+
let minX = Infinity;
|
|
163
|
+
let minY = Infinity;
|
|
164
|
+
let minZ = Infinity;
|
|
165
|
+
let maxX = -Infinity;
|
|
166
|
+
let maxY = -Infinity;
|
|
167
|
+
let maxZ = -Infinity;
|
|
168
|
+
let drawableCount = 0;
|
|
169
|
+
for (let index = 0; index < system.count; index++) {
|
|
170
|
+
const base = index * stride;
|
|
171
|
+
const width = data[base + 3];
|
|
172
|
+
const height = data[base + 4];
|
|
173
|
+
if (width === 0 || height === 0) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const x = data[base];
|
|
177
|
+
const y = data[base + 1];
|
|
178
|
+
const z = data[base + 2];
|
|
179
|
+
if (x < minX) {
|
|
180
|
+
minX = x;
|
|
181
|
+
}
|
|
182
|
+
if (y < minY) {
|
|
183
|
+
minY = y;
|
|
184
|
+
}
|
|
185
|
+
if (z < minZ) {
|
|
186
|
+
minZ = z;
|
|
187
|
+
}
|
|
188
|
+
if (x > maxX) {
|
|
189
|
+
maxX = x;
|
|
190
|
+
}
|
|
191
|
+
if (y > maxY) {
|
|
192
|
+
maxY = y;
|
|
193
|
+
}
|
|
194
|
+
if (z > maxZ) {
|
|
195
|
+
maxZ = z;
|
|
196
|
+
}
|
|
197
|
+
drawableCount++;
|
|
198
|
+
}
|
|
199
|
+
if (drawableCount === 0) {
|
|
200
|
+
center[0] = 0;
|
|
201
|
+
center[1] = 0;
|
|
202
|
+
center[2] = 0;
|
|
203
|
+
} else {
|
|
204
|
+
center[0] = (minX + maxX) * 0.5;
|
|
205
|
+
center[1] = (minY + maxY) * 0.5;
|
|
206
|
+
center[2] = (minZ + maxZ) * 0.5;
|
|
207
|
+
}
|
|
208
|
+
renderable._drawableCount = drawableCount;
|
|
209
|
+
renderable._centerVersion = system._version;
|
|
210
|
+
}
|
|
211
|
+
function drawSystem(renderable, bindGroup, pass) {
|
|
212
|
+
if (renderable._disposed) {
|
|
213
|
+
return 0;
|
|
214
|
+
}
|
|
215
|
+
refreshBillboardWorldCenter(renderable);
|
|
216
|
+
if (!renderable._system.visible || renderable._system.count === 0 || renderable._drawableCount === 0) {
|
|
217
|
+
return 0;
|
|
218
|
+
}
|
|
219
|
+
pass.setBindGroup(1, bindGroup);
|
|
220
|
+
pass.setIndexBuffer(renderable._indexBuffer, "uint16");
|
|
221
|
+
pass.setVertexBuffer(0, renderable._instanceBuffer);
|
|
222
|
+
pass.drawIndexed(6, renderable._system.count, 0, 0, 0);
|
|
223
|
+
return 1;
|
|
224
|
+
}
|
|
225
|
+
function disposeRenderable(renderable) {
|
|
226
|
+
if (renderable._disposed) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
renderable._disposed = true;
|
|
230
|
+
renderable._instanceBuffer.destroy();
|
|
231
|
+
renderable._uniformBuffer.destroy();
|
|
232
|
+
renderable._indexBuffer.destroy();
|
|
233
|
+
if (renderable._fx) {
|
|
234
|
+
_getBillboardFxHook().disposeFx(renderable._fx);
|
|
235
|
+
}
|
|
236
|
+
renderable._bindGroups.clear();
|
|
237
|
+
releaseSharedPipelineCache();
|
|
238
|
+
}
|
|
239
|
+
export {
|
|
240
|
+
buildBillboardRenderable
|
|
241
|
+
};
|
|
242
|
+
//# sourceMappingURL=billboard-renderable-D8mlVGCd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billboard-renderable-D8mlVGCd.js","sources":["../src/sprite/billboard-renderable.ts"],"sourcesContent":["import type { EngineContext } from \"../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../engine/render-target.js\";\nimport type { DrawBinding, DrawUpdateContext, Renderable } from \"../render/renderable.js\";\nimport type { Camera } from \"../camera/camera.js\";\nimport { getViewMatrix } from \"../camera/camera.js\";\nimport { getSceneBindGroupLayout } from \"../render/scene-helpers.js\";\nimport { createEmptyUniformBuffer, createMappedBuffer } from \"../resource/gpu-buffers.js\";\nimport type { SpriteLayerFx } from \"./custom-shader-core.js\";\nimport { _getBillboardFxHook } from \"./sprite-fx-hook.js\";\nimport type { BillboardSpriteSystem } from \"./billboard-sprite.js\";\nimport {\n BILLBOARD_INDEX_DATA,\n BILLBOARD_SYSTEM_UBO_BYTES,\n buildBillboardSystemUbo,\n createBillboardInstanceBuffer,\n createBillboardInstanceSortScratch,\n createBillboardPipelineCache,\n createBillboardSystemBindGroup,\n ensureBillboardInstanceBuffer,\n getOrCreateBillboardPipeline,\n resetBillboardPipelineCache,\n uploadBillboardInstances,\n uploadSortedBillboardInstances,\n writeBillboardSystemUboIfDirty,\n} from \"./billboard-pipeline.js\";\nimport type { BillboardInstanceSortScratch, BillboardPipelineCache } from \"./billboard-pipeline.js\";\n\nlet _sharedPipelineCache: BillboardPipelineCache | null = null;\nlet _sharedPipelineCacheRefs = 0;\n\nfunction acquireSharedPipelineCache(): BillboardPipelineCache {\n _sharedPipelineCache ??= createBillboardPipelineCache();\n _sharedPipelineCacheRefs++;\n return _sharedPipelineCache;\n}\n\nfunction releaseSharedPipelineCache(): void {\n if (_sharedPipelineCacheRefs === 0) {\n return;\n }\n _sharedPipelineCacheRefs--;\n if (_sharedPipelineCacheRefs === 0 && _sharedPipelineCache) {\n resetBillboardPipelineCache(_sharedPipelineCache);\n _sharedPipelineCache = null;\n }\n}\n\ninterface BillboardRenderableInternal extends Renderable {\n _engine: EngineContext;\n _system: BillboardSpriteSystem;\n _indexBuffer: GPUBuffer;\n _uniformBuffer: GPUBuffer;\n _instanceBuffer: GPUBuffer;\n _instanceBufferCapacity: number;\n _instanceSortScratch: BillboardInstanceSortScratch;\n _pipelineCache: BillboardPipelineCache;\n _bindGroups: Map<GPURenderPipeline, GPUBindGroup>;\n _uploadedVersion: number;\n _uploadedCamera: Camera | null;\n _uploadedCameraViewVersion: number;\n _uploadedSorted: boolean;\n _centerVersion: number;\n _drawableCount: number;\n _uboUploaded: boolean;\n _lastUbo: Float32Array;\n _scratchUbo: Float32Array;\n _fx: SpriteLayerFx | null;\n _disposed: boolean;\n}\n\nexport function buildBillboardRenderable(engine: EngineContext, system: BillboardSpriteSystem): { renderable: Renderable; dispose: () => void } {\n const indexBuffer = createMappedBuffer(engine, BILLBOARD_INDEX_DATA, GPUBufferUsage.INDEX);\n const uniformBuffer = createEmptyUniformBuffer(engine, BILLBOARD_SYSTEM_UBO_BYTES, `${system._orientation}-billboard-system-ubo`);\n const instanceBuffer = createBillboardInstanceBuffer(engine._device, system, `${system._orientation}-billboard-instances`);\n const fx = _getBillboardFxHook()?.createLayerFx(engine, `${system._orientation}-billboard-fx-ubo`, system) ?? null;\n const isTransparent = system._depthMode === \"transparent\";\n const renderable: BillboardRenderableInternal = {\n order: system.order,\n isTransparent,\n _direct: !isTransparent,\n _engine: engine,\n _system: system,\n _indexBuffer: indexBuffer,\n _uniformBuffer: uniformBuffer,\n _instanceBuffer: instanceBuffer,\n _instanceBufferCapacity: system._capacity,\n _instanceSortScratch: createBillboardInstanceSortScratch(),\n _pipelineCache: acquireSharedPipelineCache(),\n _bindGroups: new Map(),\n _uploadedVersion: -1,\n _uploadedCamera: null,\n _uploadedCameraViewVersion: -1,\n _uploadedSorted: false,\n _centerVersion: -1,\n _drawableCount: 0,\n _uboUploaded: false,\n _lastUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _scratchUbo: new Float32Array(BILLBOARD_SYSTEM_UBO_BYTES / 4),\n _fx: fx,\n _disposed: false,\n _worldCenter: [0, 0, 0],\n bind(engine, target) {\n return bindSystem(renderable, engine, target);\n },\n };\n refreshBillboardWorldCenter(renderable);\n return {\n renderable,\n dispose() {\n disposeRenderable(renderable);\n },\n };\n}\n\nfunction bindSystem(renderable: BillboardRenderableInternal, engine: EngineContext, target: RenderTargetSignature): DrawBinding {\n if (!target._depthStencilFormat) {\n throw new Error(\"BillboardSpriteSystem requires a depth-stencil render target.\");\n }\n const sampleCount = target._sampleCount === 1 ? 1 : 4;\n const pipeline = getOrCreateBillboardPipeline(\n engine,\n renderable._pipelineCache,\n target._colorFormat!,\n sampleCount,\n renderable._system,\n target._depthStencilFormat,\n getSceneBindGroupLayout(engine)\n );\n let bindGroup = renderable._bindGroups.get(pipeline);\n if (!bindGroup) {\n bindGroup = createBillboardSystemBindGroup(engine, pipeline, renderable._system, renderable._uniformBuffer, renderable._fx);\n renderable._bindGroups.set(pipeline, bindGroup);\n }\n return {\n renderable,\n pipeline,\n update(context) {\n uploadSystem(renderable, context);\n },\n draw(pass) {\n return drawSystem(renderable, bindGroup, pass);\n },\n };\n}\n\nfunction uploadSystem(renderable: BillboardRenderableInternal, context: DrawUpdateContext): void {\n if (renderable._disposed) {\n return;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0) {\n if (renderable._system.count === 0) {\n renderable._system._dirtyMin = 0;\n renderable._system._dirtyMax = 0;\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedSorted = false;\n }\n return;\n }\n // Match the pure-2D `SpriteRenderer` path: advance `fx.time` (and write the FX UBO) only for\n // visible, non-empty systems so time semantics stay consistent and we avoid wasted `writeBuffer` traffic.\n if (renderable._fx) {\n _getBillboardFxHook()!.updateFx(renderable._fx, renderable._system, renderable._engine._currentDelta);\n }\n const grown = ensureBillboardInstanceBuffer(\n renderable._engine._device,\n renderable._system,\n renderable._instanceBuffer,\n renderable._instanceBufferCapacity,\n `${renderable._system._orientation}-billboard-instances`\n );\n if (grown.reallocated) {\n renderable._instanceBuffer = grown.buffer;\n renderable._instanceBufferCapacity = grown.capacity;\n renderable._uploadedVersion = -1;\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n renderable._uploadedSorted = false;\n }\n const camera = context._camera;\n if (renderable._system._depthMode === \"transparent\" && camera) {\n const cameraViewMatrix = getViewMatrix(camera);\n if (\n !renderable._uploadedSorted ||\n renderable._uploadedVersion !== renderable._system._version ||\n renderable._uploadedCamera !== camera ||\n renderable._uploadedCameraViewVersion !== camera.worldMatrixVersion\n ) {\n uploadSortedBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, renderable._instanceSortScratch, cameraViewMatrix);\n renderable._uploadedVersion = renderable._system._version;\n renderable._uploadedCamera = camera;\n renderable._uploadedCameraViewVersion = camera.worldMatrixVersion;\n renderable._uploadedSorted = true;\n }\n } else {\n const uploadedVersion = renderable._uploadedSorted ? -1 : renderable._uploadedVersion;\n renderable._uploadedVersion = uploadBillboardInstances(renderable._engine._device, renderable._system, renderable._instanceBuffer, uploadedVersion);\n renderable._uploadedCamera = null;\n renderable._uploadedCameraViewVersion = -1;\n renderable._uploadedSorted = false;\n }\n buildBillboardSystemUbo(renderable._system, renderable._scratchUbo);\n writeBillboardSystemUboIfDirty(renderable._engine._device, renderable._uniformBuffer, renderable._scratchUbo, renderable._lastUbo, !renderable._uboUploaded);\n renderable._uboUploaded = true;\n}\n\nfunction refreshBillboardWorldCenter(renderable: BillboardRenderableInternal): void {\n const system = renderable._system;\n if (renderable._centerVersion === system._version) {\n return;\n }\n const center = renderable._worldCenter!;\n if (system.count === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n renderable._drawableCount = 0;\n renderable._centerVersion = system._version;\n return;\n }\n const data = system._instanceData;\n const stride = system._instanceFloatsPerSprite;\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n let drawableCount = 0;\n for (let index = 0; index < system.count; index++) {\n const base = index * stride;\n const width = data[base + 3]!;\n const height = data[base + 4]!;\n if (width === 0 || height === 0) {\n continue;\n }\n const x = data[base]!;\n const y = data[base + 1]!;\n const z = data[base + 2]!;\n if (x < minX) {\n minX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (z < minZ) {\n minZ = z;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (z > maxZ) {\n maxZ = z;\n }\n drawableCount++;\n }\n if (drawableCount === 0) {\n center[0] = 0;\n center[1] = 0;\n center[2] = 0;\n } else {\n center[0] = (minX + maxX) * 0.5;\n center[1] = (minY + maxY) * 0.5;\n center[2] = (minZ + maxZ) * 0.5;\n }\n renderable._drawableCount = drawableCount;\n renderable._centerVersion = system._version;\n}\n\nfunction drawSystem(renderable: BillboardRenderableInternal, bindGroup: GPUBindGroup, pass: GPURenderPassEncoder | GPURenderBundleEncoder): number {\n if (renderable._disposed) {\n return 0;\n }\n refreshBillboardWorldCenter(renderable);\n if (!renderable._system.visible || renderable._system.count === 0 || renderable._drawableCount === 0) {\n return 0;\n }\n pass.setBindGroup(1, bindGroup);\n pass.setIndexBuffer(renderable._indexBuffer, \"uint16\");\n pass.setVertexBuffer(0, renderable._instanceBuffer);\n pass.drawIndexed(6, renderable._system.count, 0, 0, 0);\n return 1;\n}\n\nfunction disposeRenderable(renderable: BillboardRenderableInternal): void {\n if (renderable._disposed) {\n return;\n }\n renderable._disposed = true;\n renderable._instanceBuffer.destroy();\n renderable._uniformBuffer.destroy();\n renderable._indexBuffer.destroy();\n if (renderable._fx) {\n _getBillboardFxHook()!.disposeFx(renderable._fx);\n }\n renderable._bindGroups.clear();\n releaseSharedPipelineCache();\n}\n"],"names":["engine"],"mappings":"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"}
|