@babylonjs/lite 0.1.1 → 1.0.0
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/_mat4-storage-f64-CjDoht2w.js +11 -0
- package/_mat4-storage-f64-CjDoht2w.js.map +1 -0
- package/{alpha-test-fragment-CUiHCw7W.js → alpha-test-fragment-B7DjSnF7.js} +2 -2
- package/{alpha-test-fragment-CUiHCw7W.js.map → alpha-test-fragment-B7DjSnF7.js.map} +1 -1
- package/assets/splat-sort-worker-DT3eybMZ.js.map +1 -0
- package/{background-dds-skybox-yHTqabU3.js → background-dds-skybox-BEX309u3.js} +14 -14
- package/background-dds-skybox-BEX309u3.js.map +1 -0
- package/{background-ground-DIw6D3qf.js → background-ground-BU0HOcM4.js} +20 -20
- package/background-ground-BU0HOcM4.js.map +1 -0
- package/{background-hdr-skybox-c4uuTmkP.js → background-hdr-skybox--RRRic_K.js} +10 -10
- package/background-hdr-skybox--RRRic_K.js.map +1 -0
- package/{background-solid-skybox-DPGBpPbm.js → background-solid-skybox-BrH2fXSu.js} +12 -13
- package/background-solid-skybox-BrH2fXSu.js.map +1 -0
- package/{billboard-renderable-D8mlVGCd.js → billboard-renderable-BHWryAeC.js} +46 -10
- package/billboard-renderable-BHWryAeC.js.map +1 -0
- package/{clamp-block-BdII67hT.js → clamp-block-DqbwnQGW.js} +2 -2
- package/{clamp-block-BdII67hT.js.map → clamp-block-DqbwnQGW.js.map} +1 -1
- package/{clearcoat-fragment-LCiG98Rf.js → clearcoat-fragment-D6FSCie1.js} +2 -2
- package/{clearcoat-fragment-LCiG98Rf.js.map → clearcoat-fragment-D6FSCie1.js.map} +1 -1
- package/{create-skeleton-C9JdIJnb.js → create-skeleton-D_uplboC.js} +9 -9
- package/create-skeleton-D_uplboC.js.map +1 -0
- package/{cubemap-skybox-material-DvXMVc4k.js → cubemap-skybox-material-DQcMMdf-.js} +6 -7
- package/cubemap-skybox-material-DQcMMdf-.js.map +1 -0
- package/{curve-block-BlJpXVYv.js → curve-block-21rT0JjG.js} +2 -2
- package/{curve-block-BlJpXVYv.js.map → curve-block-21rT0JjG.js.map} +1 -1
- package/{emissive-fragment-BnNvbBCw.js → emissive-fragment-C5FtBs3y.js} +3 -3
- package/emissive-fragment-C5FtBs3y.js.map +1 -0
- package/{esm-shadow-view-DN9HIaM4.js → esm-shadow-view-Cl3rPGof.js} +2 -2
- package/{esm-shadow-view-DN9HIaM4.js.map → esm-shadow-view-Cl3rPGof.js.map} +1 -1
- package/{esm-shadow-view-Dk9NFtLq.js → esm-shadow-view-Gtd1LWRP.js} +2 -2
- package/{esm-shadow-view-Dk9NFtLq.js.map → esm-shadow-view-Gtd1LWRP.js.map} +1 -1
- package/{esm-shadow-view-DGKdF1NI.js → esm-shadow-view-c5YV4Eg9.js} +2 -2
- package/{esm-shadow-view-DGKdF1NI.js.map → esm-shadow-view-c5YV4Eg9.js.map} +1 -1
- package/{gaussian-splatting-pipeline-sh-DgJl7l56.js → gaussian-splatting-pipeline-sh-7J31V23x.js} +19 -19
- package/gaussian-splatting-pipeline-sh-7J31V23x.js.map +1 -0
- package/geometry-texture-output-dXk4E9uu.js +41 -0
- package/geometry-texture-output-dXk4E9uu.js.map +1 -0
- package/geometry-view-BsFJpBJa.js +404 -0
- package/geometry-view-BsFJpBJa.js.map +1 -0
- package/{gltf-animation-D7uyTyO3.js → gltf-animation-K_zZxj_d.js} +7 -7
- package/gltf-animation-K_zZxj_d.js.map +1 -0
- package/gltf-color-normalize-Qxl-9C48.js +29 -0
- package/gltf-color-normalize-Qxl-9C48.js.map +1 -0
- package/{gltf-ext-basisu-CPg5kPrx.js → gltf-ext-basisu-CDbPclzZ.js} +53 -18
- package/gltf-ext-basisu-CDbPclzZ.js.map +1 -0
- package/{gltf-ext-node-visibility-MafA9ot2.js → gltf-ext-node-visibility-DXCJEYr6.js} +2 -2
- package/{gltf-ext-node-visibility-MafA9ot2.js.map → gltf-ext-node-visibility-DXCJEYr6.js.map} +1 -1
- package/{gltf-ext-quantization-CpZyLDIz.js → gltf-ext-quantization-CvHI_0Vg.js} +4 -3
- package/gltf-ext-quantization-CvHI_0Vg.js.map +1 -0
- package/{gltf-ext-uv-transform-CE_-T1Tr.js → gltf-ext-uv-transform-DgYazJBs.js} +2 -2
- package/{gltf-ext-uv-transform-CE_-T1Tr.js.map → gltf-ext-uv-transform-DgYazJBs.js.map} +1 -1
- package/{gltf-feature-animation-pointer-BjpwOOqo.js → gltf-feature-animation-pointer-D1RJRFBw.js} +9 -9
- package/gltf-feature-animation-pointer-D1RJRFBw.js.map +1 -0
- package/{gltf-feature-animations-CCizegp8.js → gltf-feature-animations-Cmc1uoIu.js} +2 -2
- package/{gltf-feature-animations-CCizegp8.js.map → gltf-feature-animations-Cmc1uoIu.js.map} +1 -1
- package/{gltf-feature-draco-yGSMGTE3.js → gltf-feature-draco-CKKzT5E3.js} +6 -5
- package/gltf-feature-draco-CKKzT5E3.js.map +1 -0
- package/{gltf-feature-gpu-instancing-2e_CFQnl.js → gltf-feature-gpu-instancing-n87SO6Vh.js} +7 -6
- package/gltf-feature-gpu-instancing-n87SO6Vh.js.map +1 -0
- package/{gltf-feature-lights-punctual-DDDg4j0U.js → gltf-feature-lights-punctual-Ckm3ciL8.js} +5 -5
- package/{gltf-feature-lights-punctual-DDDg4j0U.js.map → gltf-feature-lights-punctual-Ckm3ciL8.js.map} +1 -1
- package/{gltf-feature-meshopt-Des96YFI.js → gltf-feature-meshopt-DLC4SF1E.js} +7 -6
- package/gltf-feature-meshopt-DLC4SF1E.js.map +1 -0
- package/{gltf-feature-morph-CKCw6tkX.js → gltf-feature-morph-Cjtu7hYa.js} +4 -4
- package/gltf-feature-morph-Cjtu7hYa.js.map +1 -0
- package/gltf-feature-registry-C63Hjp9w.js +59 -0
- package/gltf-feature-registry-C63Hjp9w.js.map +1 -0
- package/{gltf-feature-skeleton-D8hWLqi2.js → gltf-feature-skeleton-DKbOGidp.js} +3 -3
- package/{gltf-feature-skeleton-D8hWLqi2.js.map → gltf-feature-skeleton-DKbOGidp.js.map} +1 -1
- package/{gltf-feature-variants-Ds6v9byg.js → gltf-feature-variants-Cmzu0O0e.js} +2 -2
- package/{gltf-feature-variants-Ds6v9byg.js.map → gltf-feature-variants-Cmzu0O0e.js.map} +1 -1
- package/{gltf-glb-parser-D6UZWFuC.js → gltf-glb-parser-Cj5MHS-v.js} +5 -4
- package/gltf-glb-parser-Cj5MHS-v.js.map +1 -0
- package/{gltf-interleave-DGnUlz28.js → gltf-interleave-gHf9_t0i.js} +14 -14
- package/gltf-interleave-gHf9_t0i.js.map +1 -0
- package/gltf-normals-b2h74380.js +37 -0
- package/gltf-normals-b2h74380.js.map +1 -0
- package/{gltf-pbr-builder-ext-BFOxOCnQ.js → gltf-pbr-builder-ext-edNcjwPf.js} +5 -5
- package/gltf-pbr-builder-ext-edNcjwPf.js.map +1 -0
- package/{gltf-variants-DFbr8EES.js → gltf-variants-CPxNdtP4.js} +4 -4
- package/{gltf-variants-DFbr8EES.js.map → gltf-variants-CPxNdtP4.js.map} +1 -1
- package/{gs-picking-pipeline-DzfMASL9.js → gs-picking-pipeline-DYaW_Lg3.js} +14 -14
- package/gs-picking-pipeline-DYaW_Lg3.js.map +1 -0
- package/havok-floating-origin-Dr-18Nds.js +198 -0
- package/havok-floating-origin-Dr-18Nds.js.map +1 -0
- package/index-CLElg2Bo.js +39209 -0
- package/index-CLElg2Bo.js.map +1 -0
- package/index-CYZDclhF.js +918 -0
- package/index-CYZDclhF.js.map +1 -0
- package/index-SMJ67XwT.js +3330 -0
- package/index-SMJ67XwT.js.map +1 -0
- package/index.d.ts +2508 -119
- package/index.js +444 -302
- package/{input-block-DgAJBzN_.js → input-block-DqEedWF2.js} +2 -2
- package/{input-block-DgAJBzN_.js.map → input-block-DqEedWF2.js.map} +1 -1
- package/{iridescence-fragment-Gymp7or5.js → iridescence-fragment-BHU59-gQ.js} +2 -2
- package/{iridescence-fragment-Gymp7or5.js.map → iridescence-fragment-BHU59-gQ.js.map} +1 -1
- package/{light-block-B11ew7FA.js → light-block-Bv37V8vl.js} +2 -2
- package/{light-block-B11ew7FA.js.map → light-block-Bv37V8vl.js.map} +1 -1
- package/{loop-block-Bb23EOMb.js → loop-block-qTg8vb99.js} +2 -2
- package/{loop-block-Bb23EOMb.js.map → loop-block-qTg8vb99.js.map} +1 -1
- package/{morph-fragment-DOVo70gP.js → morph-fragment-BRCUr2wQ.js} +2 -2
- package/{morph-fragment-DOVo70gP.js.map → morph-fragment-BRCUr2wQ.js.map} +1 -1
- package/{multilight-wgsl-BGyiIOp3.js → multilight-wgsl-DMeppAdZ.js} +4 -4
- package/{multilight-wgsl-BGyiIOp3.js.map → multilight-wgsl-DMeppAdZ.js.map} +1 -1
- package/{node-env-BPZXZzBf.js → node-env-Bc559GmY.js} +6 -5
- package/node-env-Bc559GmY.js.map +1 -0
- package/node-geometry-view-COmWsRXK.js +291 -0
- package/node-geometry-view-COmWsRXK.js.map +1 -0
- package/{node-registry-extra-compat-Dhrw8fDQ.js → node-registry-extra-compat-dWrv7gpS.js} +2 -2
- package/{node-registry-extra-compat-Dhrw8fDQ.js.map → node-registry-extra-compat-dWrv7gpS.js.map} +1 -1
- package/{node-registry-extra-math-CsAHvIZo.js → node-registry-extra-math-Bn854sX9.js} +2 -2
- package/{node-registry-extra-math-CsAHvIZo.js.map → node-registry-extra-math-Bn854sX9.js.map} +1 -1
- package/{node-renderable-DlLIdBmd.js → node-renderable-B5G8WcdH.js} +41 -22
- package/node-renderable-B5G8WcdH.js.map +1 -0
- package/{node-shadow-DKrcqmNg.js → node-shadow-CVIUlNf0.js} +7 -7
- package/node-shadow-CVIUlNf0.js.map +1 -0
- package/{normal-map-fragment-DpsIXrJf.js → normal-map-fragment-CQSxhjCy.js} +3 -3
- package/{normal-map-fragment-DpsIXrJf.js.map → normal-map-fragment-CQSxhjCy.js.map} +1 -1
- package/pack-mat4-with-offset-BqB8Jqo7.js +37 -0
- package/pack-mat4-with-offset-BqB8Jqo7.js.map +1 -0
- package/package.json +3 -10
- package/{parse-camera-DM3oJJeT.js → parse-camera-pBRT_6i5.js} +2 -2
- package/{parse-camera-DM3oJJeT.js.map → parse-camera-pBRT_6i5.js.map} +1 -1
- package/pbr-fog-wgsl-BqdCid6r.js +8 -0
- package/pbr-fog-wgsl-BqdCid6r.js.map +1 -0
- package/pbr-geometry-view-NiZY_juX.js +491 -0
- package/pbr-geometry-view-NiZY_juX.js.map +1 -0
- package/{pbr-metallic-roughness-block-h_KAOZrW.js → pbr-metallic-roughness-block-JBSi-tQN.js} +2 -2
- package/{pbr-metallic-roughness-block-h_KAOZrW.js.map → pbr-metallic-roughness-block-JBSi-tQN.js.map} +1 -1
- package/{pbr-metallic-roughness-block-full-6vMm1Jk6.js → pbr-metallic-roughness-block-full-Ta9lR2cz.js} +2 -2
- package/{pbr-metallic-roughness-block-full-6vMm1Jk6.js.map → pbr-metallic-roughness-block-full-Ta9lR2cz.js.map} +1 -1
- package/{pbr-mr-helper-core-CIwm-T1G.js → pbr-mr-helper-core-BVWNR08D.js} +2 -2
- package/{pbr-mr-helper-core-CIwm-T1G.js.map → pbr-mr-helper-core-BVWNR08D.js.map} +1 -1
- package/{pbr-refraction-DGmMSa2v.js → pbr-refraction-C9FvFmAp.js} +2 -2
- package/{pbr-refraction-DGmMSa2v.js.map → pbr-refraction-C9FvFmAp.js.map} +1 -1
- package/{pbr-renderable-BJxUtPBb.js → pbr-renderable-DzUF2QIk.js} +118 -58
- package/pbr-renderable-DzUF2QIk.js.map +1 -0
- package/{pbr-shadow-fragment-LO9SlbJj.js → pbr-shadow-fragment-CnqnbGYS.js} +6 -1
- package/pbr-shadow-fragment-CnqnbGYS.js.map +1 -0
- package/{pbr-template-ext-8q7BcTDf.js → pbr-template-ext-CGgB2n2y.js} +3 -2
- package/{pbr-template-ext-8q7BcTDf.js.map → pbr-template-ext-CGgB2n2y.js.map} +1 -1
- package/{pbr-tracking-B3alzn91.js → pbr-tracking-3tU1kqea.js} +2 -2
- package/{pbr-tracking-B3alzn91.js.map → pbr-tracking-3tU1kqea.js.map} +1 -1
- package/pbr-transmission-ext-BcLjRxfB.js +190 -0
- package/pbr-transmission-ext-BcLjRxfB.js.map +1 -0
- package/recast-navigation.wasm-DG_0AFuk.js +8706 -0
- package/recast-navigation.wasm-DG_0AFuk.js.map +1 -0
- package/recast-navigation.wasm-compat-C-Bf2ylB.js +8692 -0
- package/recast-navigation.wasm-compat-C-Bf2ylB.js.map +1 -0
- package/{reflectance-fragment-BCrgPmrt.js → reflectance-fragment-Dbpgw3Jt.js} +2 -2
- package/{reflectance-fragment-BCrgPmrt.js.map → reflectance-fragment-Dbpgw3Jt.js.map} +1 -1
- package/{rgbd-decode-DCvzUYeI.js → rgbd-decode-DoyUquy3.js} +7 -6
- package/rgbd-decode-DoyUquy3.js.map +1 -0
- package/{scene-material-swap-C2ykv55W.js → scene-material-swap-nNUH4nGn.js} +11 -4
- package/scene-material-swap-nNUH4nGn.js.map +1 -0
- package/screenshot-readback-D0Sj9qq3.js +92 -0
- package/screenshot-readback-D0Sj9qq3.js.map +1 -0
- package/{mesh-features-BLENkYVt.js → shader-composer-BUD_pSX4.js} +7 -55
- package/shader-composer-BUD_pSX4.js.map +1 -0
- package/{shader-renderable-D-6796KR.js → shader-renderable-D7-RyVxa.js} +62 -27
- package/shader-renderable-D7-RyVxa.js.map +1 -0
- package/shader-thin-instance-DuBotxDO.js +150 -0
- package/shader-thin-instance-DuBotxDO.js.map +1 -0
- package/shadow-fragment-core-DHN2G6FI.js.map +1 -1
- package/{sheen-fragment-Dze2f7XJ.js → sheen-fragment-1MkEMcbc.js} +2 -2
- package/{sheen-fragment-Dze2f7XJ.js.map → sheen-fragment-1MkEMcbc.js.map} +1 -1
- package/{singlelight-directional-wgsl-CmUDZxwz.js → singlelight-directional-wgsl-BsV8G456.js} +2 -2
- package/{singlelight-directional-wgsl-CmUDZxwz.js.map → singlelight-directional-wgsl-BsV8G456.js.map} +1 -1
- package/{singlelight-hemispheric-wgsl-t-83IP_s.js → singlelight-hemispheric-wgsl-Bo0jKlW5.js} +2 -2
- package/{singlelight-hemispheric-wgsl-t-83IP_s.js.map → singlelight-hemispheric-wgsl-Bo0jKlW5.js.map} +1 -1
- package/{singlelight-point-wgsl-CLzULIYV.js → singlelight-point-wgsl-DV39UP5Y.js} +2 -2
- package/{singlelight-point-wgsl-CLzULIYV.js.map → singlelight-point-wgsl-DV39UP5Y.js.map} +1 -1
- package/{singlelight-spot-wgsl-DEEUrfVM.js → singlelight-spot-wgsl-yg3od6vL.js} +2 -2
- package/{singlelight-spot-wgsl-DEEUrfVM.js.map → singlelight-spot-wgsl-yg3od6vL.js.map} +1 -1
- package/{skeleton-fragment-B_XlFbtx.js → skeleton-fragment-DdxYG6kv.js} +2 -2
- package/{skeleton-fragment-B_XlFbtx.js.map → skeleton-fragment-DdxYG6kv.js.map} +1 -1
- package/{skybox-renderable-DDwzu-PT.js → skybox-renderable-CJD4XmX5.js} +8 -9
- package/skybox-renderable-CJD4XmX5.js.map +1 -0
- package/{splat-ply-compressed-BahdBG1r.js → splat-ply-compressed-DHjyiVmI.js} +9 -8
- package/splat-ply-compressed-DHjyiVmI.js.map +1 -0
- package/{standard-renderable-GjxL9xSf.js → standard-pipeline-XTbHL7MY.js} +12 -257
- package/standard-pipeline-XTbHL7MY.js.map +1 -0
- package/standard-renderable-CREWLNHI.js +191 -0
- package/standard-renderable-CREWLNHI.js.map +1 -0
- package/{std-ambient-fragment-BoUsD06w.js → std-ambient-fragment-Bjx3VFrr.js} +2 -2
- package/{std-ambient-fragment-BoUsD06w.js.map → std-ambient-fragment-Bjx3VFrr.js.map} +1 -1
- package/{std-cube-reflection-fragment-ulqc3bsP.js → std-cube-reflection-fragment-y9WWdXUt.js} +2 -2
- package/{std-cube-reflection-fragment-ulqc3bsP.js.map → std-cube-reflection-fragment-y9WWdXUt.js.map} +1 -1
- package/{std-emissive-fragment-DNGj1HdQ.js → std-emissive-fragment-C8Lnmojh.js} +2 -2
- package/{std-emissive-fragment-DNGj1HdQ.js.map → std-emissive-fragment-C8Lnmojh.js.map} +1 -1
- package/{std-lightmap-fragment-Bqj89aIe.js → std-lightmap-fragment-DFxGcoA5.js} +2 -2
- package/{std-lightmap-fragment-Bqj89aIe.js.map → std-lightmap-fragment-DFxGcoA5.js.map} +1 -1
- package/{std-opacity-fragment-KuPh5N2Z.js → std-opacity-fragment-EXzFWiSp.js} +2 -2
- package/{std-opacity-fragment-KuPh5N2Z.js.map → std-opacity-fragment-EXzFWiSp.js.map} +1 -1
- package/{std-reflection-fragment-BA5Ghn_M.js → std-reflection-fragment-BoJORqpG.js} +2 -2
- package/{std-reflection-fragment-BA5Ghn_M.js.map → std-reflection-fragment-BoJORqpG.js.map} +1 -1
- package/std-shadow-fragment-Bq-Wc8UJ.js +13 -0
- package/std-shadow-fragment-Bq-Wc8UJ.js.map +1 -0
- package/{std-specular-fragment-CE-6scqd.js → std-specular-fragment-CM5R5j2g.js} +2 -2
- package/{std-specular-fragment-CE-6scqd.js.map → std-specular-fragment-CM5R5j2g.js.map} +1 -1
- package/{std-tracking-CNKZ-hJN.js → std-tracking-Cif_wXeT.js} +2 -2
- package/{std-tracking-CNKZ-hJN.js.map → std-tracking-Cif_wXeT.js.map} +1 -1
- package/{subsurface-fragment-liM3y2-P.js → subsurface-fragment-BEaAXYXz.js} +2 -2
- package/{subsurface-fragment-liM3y2-P.js.map → subsurface-fragment-BEaAXYXz.js.map} +1 -1
- package/swapchain-overlay-UCLilhbq.js +37 -0
- package/swapchain-overlay-UCLilhbq.js.map +1 -0
- package/thin-instance-cull-binding-DWKUt5ZN.js +310 -0
- package/thin-instance-cull-binding-DWKUt5ZN.js.map +1 -0
- package/{thin-instance-gpu-C9Gv_Z1w.js → thin-instance-gpu-BDdRcNAh.js} +30 -5
- package/thin-instance-gpu-BDdRcNAh.js.map +1 -0
- package/{tracking-primitives-wgdBY85t.js → tracking-primitives-CglRNTlX.js} +2 -2
- package/{tracking-primitives-wgdBY85t.js.map → tracking-primitives-CglRNTlX.js.map} +1 -1
- package/{unlit-fragment-BIlhJpz6.js → unlit-fragment-kxfZWlnp.js} +2 -2
- package/{unlit-fragment-BIlhJpz6.js.map → unlit-fragment-kxfZWlnp.js.map} +1 -1
- package/{wgsl-helpers-DyzNzCeE.js → wgsl-helpers-D8sl1VVA.js} +4 -4
- package/{wgsl-helpers-DyzNzCeE.js.map → wgsl-helpers-D8sl1VVA.js.map} +1 -1
- package/assets/splat-sort-worker-Crg3CaCc.js.map +0 -1
- package/background-dds-skybox-yHTqabU3.js.map +0 -1
- package/background-ground-DIw6D3qf.js.map +0 -1
- package/background-hdr-skybox-c4uuTmkP.js.map +0 -1
- package/background-solid-skybox-DPGBpPbm.js.map +0 -1
- package/billboard-renderable-D8mlVGCd.js.map +0 -1
- package/create-skeleton-C9JdIJnb.js.map +0 -1
- package/cubemap-skybox-material-DvXMVc4k.js.map +0 -1
- package/emissive-fragment-BnNvbBCw.js.map +0 -1
- package/gaussian-splatting-pipeline-sh-DgJl7l56.js.map +0 -1
- package/gltf-animation-D7uyTyO3.js.map +0 -1
- package/gltf-ext-basisu-CPg5kPrx.js.map +0 -1
- package/gltf-ext-quantization-CpZyLDIz.js.map +0 -1
- package/gltf-feature-animation-pointer-BjpwOOqo.js.map +0 -1
- package/gltf-feature-draco-yGSMGTE3.js.map +0 -1
- package/gltf-feature-gpu-instancing-2e_CFQnl.js.map +0 -1
- package/gltf-feature-meshopt-Des96YFI.js.map +0 -1
- package/gltf-feature-morph-CKCw6tkX.js.map +0 -1
- package/gltf-glb-parser-D6UZWFuC.js.map +0 -1
- package/gltf-interleave-DGnUlz28.js.map +0 -1
- package/gltf-pbr-builder-ext-BFOxOCnQ.js.map +0 -1
- package/gs-picking-pipeline-DzfMASL9.js.map +0 -1
- package/index-C8HOR2sB.js +0 -19222
- package/index-C8HOR2sB.js.map +0 -1
- package/mesh-features-BLENkYVt.js.map +0 -1
- package/node-env-BPZXZzBf.js.map +0 -1
- package/node-registry-DwgC4yth.js +0 -190
- package/node-registry-DwgC4yth.js.map +0 -1
- package/node-renderable-DlLIdBmd.js.map +0 -1
- package/node-shadow-DKrcqmNg.js.map +0 -1
- package/pbr-renderable-BJxUtPBb.js.map +0 -1
- package/pbr-shadow-fragment-LO9SlbJj.js.map +0 -1
- package/pbr-transmission-ext-BxW4CEGu.js +0 -581
- package/pbr-transmission-ext-BxW4CEGu.js.map +0 -1
- package/rgbd-decode-DCvzUYeI.js.map +0 -1
- package/scene-material-swap-C2ykv55W.js.map +0 -1
- package/shader-renderable-D-6796KR.js.map +0 -1
- package/skybox-renderable-DDwzu-PT.js.map +0 -1
- package/splat-ply-compressed-BahdBG1r.js.map +0 -1
- package/standard-renderable-GjxL9xSf.js.map +0 -1
- package/std-shadow-fragment-FNQfrJuC.js +0 -8
- package/std-shadow-fragment-FNQfrJuC.js.map +0 -1
- package/swapchain-overlay-DcCSFDp7.js +0 -35
- package/swapchain-overlay-DcCSFDp7.js.map +0 -1
- package/thin-instance-gpu-C9Gv_Z1w.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheen-fragment-Dze2f7XJ.js","sources":["../src/material/pbr/fragments/sheen-fragment.ts"],"sourcesContent":["/**\n * Sheen Fragment\n *\n * Adds a soft velvet-like sheen layer (fabric, cloth).\n * Only bundled when a scene uses PbrMaterialProps.sheen.\n *\n * Math follows BJS PBRSheenConfiguration:\n * - Charlie NDF (sheen distribution)\n * - Ashikhmin visibility\n * - IBL: environment sampled at sheen roughness, BRDF LUT blue channel\n * - Energy conservation: albedo scaled by (1 - maxSheenColor * brdf.b)\n */\n\nimport type { ShaderFragment, BindingDecl, UboField } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps, SheenProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_SHEEN, PBR_HAS_SHEEN_TEXTURE, PBR_HAS_SHEEN_ALBEDO_SCALING, PBR2_HAS_SHEEN_UV_TX } from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\n\nconst SHEEN_HELPERS = `\nfn normalDistributionFunction_CharlieSheen(NdotH_sh: f32, alphaG_sh: f32) -> f32 {\nlet invR = 1.0 / alphaG_sh;\nlet cos2h = NdotH_sh * NdotH_sh;\nlet sin2h = 1.0 - cos2h;\nreturn (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * 3.141592653589793);\n}\nfn visibility_Ashikhmin(NdotL_sh: f32, NdotV_sh: f32) -> f32 {\nreturn 1.0 / (4.0 * (NdotL_sh + NdotV_sh - NdotL_sh * NdotV_sh));\n}\n`;\n\nconst SHEEN_DIRECT_MOD = (intensityExpr: string): string => `\n{\nlet shIntensity = ${intensityExpr};\nlet shColorScaled = sheenColorFinal * shIntensity;\nlet shRoughness_clamped = max(sheenRoughnessAdjusted, AA_factor_x);\nlet shAlphaG = shRoughness_clamped * shRoughness_clamped + 0.0005;\nlet shD = normalDistributionFunction_CharlieSheen(NdotH, shAlphaG);\nlet shV = visibility_Ashikhmin(NdotL, NdotV);\nsheenDirectTerm = shColorScaled * shD * shV * NdotL * lightColor * lightAtten * material.directIntensity;\n}\n`;\n\nconst SHEEN_IBL_MOD = (intensityExpr: string, albedoScaling: boolean): string => `\n{\nlet shIntensity_ibl = ${intensityExpr};\nlet shColorScaled = sheenColorFinal * shIntensity_ibl;\nlet shRoughness_ibl = sheenRoughnessAdjusted;\nlet shAlphaG_ibl = shRoughness_ibl * shRoughness_ibl + 0.0005 + AA_factor_y;\nvar shSpecLod = log2(cubemapDim * shAlphaG_ibl) * scene.vImageInfos.z;\nlet shEnvRadiance = textureSampleLevel(iblTexture, iblSampler, R, clamp(shSpecLod, 0.0, maxLod)).rgb * material.environmentIntensity;\nlet shBrdf = textureSampleLevel(brdfLUT, brdfSampler_, vec2<f32>(NdotV, shRoughness_ibl), 0.0);\nlet shEnvReflectance = shColorScaled * shBrdf.b${albedoScaling ? \" * seo * eho\" : \"\"};\nsheenIblTerm = shEnvRadiance * shEnvReflectance;\n${albedoScaling ? \"let shMax = max(shColorScaled.r, max(shColorScaled.g, shColorScaled.b));\\nsheenAlbedoScaling = 1.0 - shMax * shBrdf.b;\" : \"\"}\n}\n`;\n\nconst SHEEN_IBL_COLOR_MOD = (albedoScaling: boolean): string =>\n albedoScaling\n ? `\n{\ncolor = (finalIrradiance\n + finalRadianceScaled\n + finalSpecularScaled\n + directDiffuse) * sheenAlbedoScaling\n + sheenDirectTerm\n + sheenIblTerm\n + emissive;\n}\n`\n : `\n{\ncolor = finalIrradiance\n + finalRadianceScaled\n + finalSpecularScaled\n + directDiffuse\n + sheenDirectTerm\n + sheenIblTerm\n + emissive;\n}\n`;\n\nconst SHEEN_NON_IBL_MOD = `\n{\ncolor = color + sheenDirectTerm;\n}\n`;\n\n/**\n * Create a sheen fragment.\n * @param hasSheenTexture - Whether the material has a sheen texture.\n * @param hasIbl - Whether IBL is active for this pipeline.\n * @param hasAlbedoScaling - When true, uses BJS-spec sheen math (no F0 attenuation,\n * proper base-layer albedo scaling, treats sheen texture as linear — upload\n * as sRGB so the sampler does the conversion). When false (legacy), applies\n * pow(rgb, 2.2) to the texture and uses (1-F0) as the sheen intensity scalar.\n */\nexport function createSheenFragment(hasSheenTexture: boolean, hasIbl: boolean = false, hasAlbedoScaling: boolean = false, hasSheenUvTx: boolean = false): ShaderFragment {\n let scopeVars = `var sheenDirectTerm = vec3<f32>(0.0);\nvar sheenIblTerm = vec3<f32>(0.0);\nvar sheenAlbedoScaling = 1.0;\nvar sheenColorFinal = material.sheenParams.rgb;\nvar sheenRoughnessAdjusted = material.sheenParams2.x;`;\n if (hasSheenTexture) {\n const gammaStmt = hasAlbedoScaling ? \"sheenMapData.rgb\" : \"pow(sheenMapData.rgb, vec3<f32>(2.2))\";\n const sheenUvDecl = hasSheenUvTx\n ? \"let sheenUV = vec2<f32>(dot(material.sheenUVm.xy, input.uv), dot(material.sheenUVm.zw, input.uv)) + material.sheenUVt.xy;\"\n : \"let sheenUV = input.uv;\";\n scopeVars += `\n{\n${sheenUvDecl}\nlet sheenMapData = textureSample(sheenTexture_, sheenSampler_, sheenUV);\nsheenColorFinal *= ${gammaStmt};\nsheenRoughnessAdjusted *= sheenMapData.a;\n}`;\n }\n\n const intensityExpr = hasAlbedoScaling ? \"material.sheenParams.a\" : \"material.sheenParams.a * (1.0 - dielectricF0)\";\n const slots: Partial<Record<string, string>> = {\n SV: scopeVars,\n AD: SHEEN_DIRECT_MOD(intensityExpr),\n };\n // AI and NI are mutually exclusive — only one path runs\n if (hasIbl) {\n slots.AI = SHEEN_IBL_MOD(intensityExpr, hasAlbedoScaling) + SHEEN_IBL_COLOR_MOD(hasAlbedoScaling);\n } else {\n slots.NI = SHEEN_NON_IBL_MOD;\n }\n\n const bindings: BindingDecl[] = [];\n if (hasSheenTexture) {\n bindings.push(\n { _name: \"sheenTexture_\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"sheenSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n const uboFields: UboField[] = [\n { _name: \"sheenParams\", _type: \"vec4<f32>\" },\n { _name: \"sheenParams2\", _type: \"vec4<f32>\" },\n ];\n if (hasSheenUvTx) {\n uboFields.push({ _name: \"sheenUVm\", _type: \"vec4<f32>\" }, { _name: \"sheenUVt\", _type: \"vec4<f32>\" });\n }\n\n return {\n _id: \"sheen\",\n _dependencies: hasIbl ? [\"ibl\"] : undefined,\n\n _uboFields: uboFields,\n\n _bindings: bindings,\n\n _helperFunctions: SHEEN_HELPERS,\n\n _fragmentSlots: slots,\n };\n}\n\n/** Write the sheen material-UBO slice (sheenParams, sheenParams2, optional UV transform). */\nexport function writeSheenUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const sh = material.sheen as SheenProps | undefined;\n if (!sh?.isEnabled || !offsets.has(\"sheenParams\")) {\n return;\n }\n const off = offsets.get(\"sheenParams\")! / 4;\n const color = sh.color ?? [1, 1, 1];\n data[off] = color[0]!;\n data[off + 1] = color[1]!;\n data[off + 2] = color[2]!;\n data[off + 3] = sh.intensity ?? 1.0;\n data[off + 4] = sh.roughness ?? 0.0;\n data[off + 5] = sh.texture ? 1.0 : 0.0;\n\n // Optional per-texture UV transform (KHR_texture_transform on sheenColorTexture).\n const mOff = offsets.get(\"sheenUVm\");\n const tOff = offsets.get(\"sheenUVt\");\n if (mOff === undefined || tOff === undefined) {\n return;\n }\n const tex = sh.texture;\n const sx = tex?.uScale ?? 1;\n const sy = tex?.vScale ?? 1;\n const ang = tex?.uAng ?? 0;\n const ox = tex?.uOffset ?? 0;\n const oy = tex?.vOffset ?? 0;\n const mi = mOff / 4;\n const ti = tOff / 4;\n if (ang === 0) {\n data[mi] = sx;\n data[mi + 1] = 0;\n data[mi + 2] = 0;\n data[mi + 3] = sy;\n } else {\n const c = Math.cos(ang);\n const s = Math.sin(ang);\n data[mi] = c * sx;\n data[mi + 1] = -s * sy;\n data[mi + 2] = s * sx;\n data[mi + 3] = c * sy;\n }\n data[ti] = ox;\n data[ti + 1] = oy;\n data[ti + 2] = 0;\n data[ti + 3] = 0;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"sheen\",\n phase: \"base-tex\",\n detect(mat) {\n const sh = (mat as PbrMaterialProps).sheen as SheenProps | undefined;\n if (!sh?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f = PBR_HAS_SHEEN;\n let f2 = 0;\n if (sh.texture) {\n f |= PBR_HAS_SHEEN_TEXTURE;\n if ((sh.texture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_SHEEN_UV_TX;\n }\n }\n if (sh.albedoScaling) {\n f |= PBR_HAS_SHEEN_ALBEDO_SCALING;\n }\n return { f, f2 };\n },\n frag(ctx) {\n if (!(ctx._features & PBR_HAS_SHEEN)) {\n return null;\n }\n return createSheenFragment(\n (ctx._features & PBR_HAS_SHEEN_TEXTURE) !== 0,\n ctx._hasIbl,\n (ctx._features & PBR_HAS_SHEEN_ALBEDO_SCALING) !== 0,\n (ctx._features2 & PBR2_HAS_SHEEN_UV_TX) !== 0\n );\n },\n writeUbo: writeSheenUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n if ((ctx._features & PBR_HAS_SHEEN_TEXTURE) === 0) {\n return b;\n }\n const sh = (ctx._material as PbrMaterialProps).sheen as SheenProps | undefined;\n if (sh?.texture) {\n entries.push({ binding: b++, resource: sh.texture.view });\n entries.push({ binding: b++, resource: sh.texture.sampler });\n }\n return b;\n },\n textures(mat, out) {\n const sh = (mat as PbrMaterialProps).sheen;\n if (sh?.texture) {\n out.push(sh.texture);\n }\n },\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheen-fragment-1MkEMcbc.js","sources":["../src/material/pbr/fragments/sheen-fragment.ts"],"sourcesContent":["/**\n * Sheen Fragment\n *\n * Adds a soft velvet-like sheen layer (fabric, cloth).\n * Only bundled when a scene uses PbrMaterialProps.sheen.\n *\n * Math follows BJS PBRSheenConfiguration:\n * - Charlie NDF (sheen distribution)\n * - Ashikhmin visibility\n * - IBL: environment sampled at sheen roughness, BRDF LUT blue channel\n * - Energy conservation: albedo scaled by (1 - maxSheenColor * brdf.b)\n */\n\nimport type { ShaderFragment, BindingDecl, UboField } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps, SheenProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR_HAS_SHEEN, PBR_HAS_SHEEN_TEXTURE, PBR_HAS_SHEEN_ALBEDO_SCALING, PBR2_HAS_SHEEN_UV_TX } from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\n\nconst SHEEN_HELPERS = `\nfn normalDistributionFunction_CharlieSheen(NdotH_sh: f32, alphaG_sh: f32) -> f32 {\nlet invR = 1.0 / alphaG_sh;\nlet cos2h = NdotH_sh * NdotH_sh;\nlet sin2h = 1.0 - cos2h;\nreturn (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * 3.141592653589793);\n}\nfn visibility_Ashikhmin(NdotL_sh: f32, NdotV_sh: f32) -> f32 {\nreturn 1.0 / (4.0 * (NdotL_sh + NdotV_sh - NdotL_sh * NdotV_sh));\n}\n`;\n\nconst SHEEN_DIRECT_MOD = (intensityExpr: string): string => `\n{\nlet shIntensity = ${intensityExpr};\nlet shColorScaled = sheenColorFinal * shIntensity;\nlet shRoughness_clamped = max(sheenRoughnessAdjusted, AA_factor_x);\nlet shAlphaG = shRoughness_clamped * shRoughness_clamped + 0.0005;\nlet shD = normalDistributionFunction_CharlieSheen(NdotH, shAlphaG);\nlet shV = visibility_Ashikhmin(NdotL, NdotV);\nsheenDirectTerm = shColorScaled * shD * shV * NdotL * lightColor * lightAtten * material.directIntensity;\n}\n`;\n\nconst SHEEN_IBL_MOD = (intensityExpr: string, albedoScaling: boolean): string => `\n{\nlet shIntensity_ibl = ${intensityExpr};\nlet shColorScaled = sheenColorFinal * shIntensity_ibl;\nlet shRoughness_ibl = sheenRoughnessAdjusted;\nlet shAlphaG_ibl = shRoughness_ibl * shRoughness_ibl + 0.0005 + AA_factor_y;\nvar shSpecLod = log2(cubemapDim * shAlphaG_ibl) * scene.vImageInfos.z;\nlet shEnvRadiance = textureSampleLevel(iblTexture, iblSampler, R, clamp(shSpecLod, 0.0, maxLod)).rgb * material.environmentIntensity;\nlet shBrdf = textureSampleLevel(brdfLUT, brdfSampler_, vec2<f32>(NdotV, shRoughness_ibl), 0.0);\nlet shEnvReflectance = shColorScaled * shBrdf.b${albedoScaling ? \" * seo * eho\" : \"\"};\nsheenIblTerm = shEnvRadiance * shEnvReflectance;\n${albedoScaling ? \"let shMax = max(shColorScaled.r, max(shColorScaled.g, shColorScaled.b));\\nsheenAlbedoScaling = 1.0 - shMax * shBrdf.b;\" : \"\"}\n}\n`;\n\nconst SHEEN_IBL_COLOR_MOD = (albedoScaling: boolean): string =>\n albedoScaling\n ? `\n{\ncolor = (finalIrradiance\n + finalRadianceScaled\n + finalSpecularScaled\n + directDiffuse) * sheenAlbedoScaling\n + sheenDirectTerm\n + sheenIblTerm\n + emissive;\n}\n`\n : `\n{\ncolor = finalIrradiance\n + finalRadianceScaled\n + finalSpecularScaled\n + directDiffuse\n + sheenDirectTerm\n + sheenIblTerm\n + emissive;\n}\n`;\n\nconst SHEEN_NON_IBL_MOD = `\n{\ncolor = color + sheenDirectTerm;\n}\n`;\n\n/**\n * Create a sheen fragment.\n * @param hasSheenTexture - Whether the material has a sheen texture.\n * @param hasIbl - Whether IBL is active for this pipeline.\n * @param hasAlbedoScaling - When true, uses BJS-spec sheen math (no F0 attenuation,\n * proper base-layer albedo scaling, treats sheen texture as linear — upload\n * as sRGB so the sampler does the conversion). When false (legacy), applies\n * pow(rgb, 2.2) to the texture and uses (1-F0) as the sheen intensity scalar.\n */\nexport function createSheenFragment(hasSheenTexture: boolean, hasIbl: boolean = false, hasAlbedoScaling: boolean = false, hasSheenUvTx: boolean = false): ShaderFragment {\n let scopeVars = `var sheenDirectTerm = vec3<f32>(0.0);\nvar sheenIblTerm = vec3<f32>(0.0);\nvar sheenAlbedoScaling = 1.0;\nvar sheenColorFinal = material.sheenParams.rgb;\nvar sheenRoughnessAdjusted = material.sheenParams2.x;`;\n if (hasSheenTexture) {\n const gammaStmt = hasAlbedoScaling ? \"sheenMapData.rgb\" : \"pow(sheenMapData.rgb, vec3<f32>(2.2))\";\n const sheenUvDecl = hasSheenUvTx\n ? \"let sheenUV = vec2<f32>(dot(material.sheenUVm.xy, input.uv), dot(material.sheenUVm.zw, input.uv)) + material.sheenUVt.xy;\"\n : \"let sheenUV = input.uv;\";\n scopeVars += `\n{\n${sheenUvDecl}\nlet sheenMapData = textureSample(sheenTexture_, sheenSampler_, sheenUV);\nsheenColorFinal *= ${gammaStmt};\nsheenRoughnessAdjusted *= sheenMapData.a;\n}`;\n }\n\n const intensityExpr = hasAlbedoScaling ? \"material.sheenParams.a\" : \"material.sheenParams.a * (1.0 - dielectricF0)\";\n const slots: Partial<Record<string, string>> = {\n SV: scopeVars,\n AD: SHEEN_DIRECT_MOD(intensityExpr),\n };\n // AI and NI are mutually exclusive — only one path runs\n if (hasIbl) {\n slots.AI = SHEEN_IBL_MOD(intensityExpr, hasAlbedoScaling) + SHEEN_IBL_COLOR_MOD(hasAlbedoScaling);\n } else {\n slots.NI = SHEEN_NON_IBL_MOD;\n }\n\n const bindings: BindingDecl[] = [];\n if (hasSheenTexture) {\n bindings.push(\n { _name: \"sheenTexture_\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"sheenSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n }\n\n const uboFields: UboField[] = [\n { _name: \"sheenParams\", _type: \"vec4<f32>\" },\n { _name: \"sheenParams2\", _type: \"vec4<f32>\" },\n ];\n if (hasSheenUvTx) {\n uboFields.push({ _name: \"sheenUVm\", _type: \"vec4<f32>\" }, { _name: \"sheenUVt\", _type: \"vec4<f32>\" });\n }\n\n return {\n _id: \"sheen\",\n _dependencies: hasIbl ? [\"ibl\"] : undefined,\n\n _uboFields: uboFields,\n\n _bindings: bindings,\n\n _helperFunctions: SHEEN_HELPERS,\n\n _fragmentSlots: slots,\n };\n}\n\n/** Write the sheen material-UBO slice (sheenParams, sheenParams2, optional UV transform). */\nexport function writeSheenUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const sh = material.sheen as SheenProps | undefined;\n if (!sh?.isEnabled || !offsets.has(\"sheenParams\")) {\n return;\n }\n const off = offsets.get(\"sheenParams\")! / 4;\n const color = sh.color ?? [1, 1, 1];\n data[off] = color[0]!;\n data[off + 1] = color[1]!;\n data[off + 2] = color[2]!;\n data[off + 3] = sh.intensity ?? 1.0;\n data[off + 4] = sh.roughness ?? 0.0;\n data[off + 5] = sh.texture ? 1.0 : 0.0;\n\n // Optional per-texture UV transform (KHR_texture_transform on sheenColorTexture).\n const mOff = offsets.get(\"sheenUVm\");\n const tOff = offsets.get(\"sheenUVt\");\n if (mOff === undefined || tOff === undefined) {\n return;\n }\n const tex = sh.texture;\n const sx = tex?.uScale ?? 1;\n const sy = tex?.vScale ?? 1;\n const ang = tex?.uAng ?? 0;\n const ox = tex?.uOffset ?? 0;\n const oy = tex?.vOffset ?? 0;\n const mi = mOff / 4;\n const ti = tOff / 4;\n if (ang === 0) {\n data[mi] = sx;\n data[mi + 1] = 0;\n data[mi + 2] = 0;\n data[mi + 3] = sy;\n } else {\n const c = Math.cos(ang);\n const s = Math.sin(ang);\n data[mi] = c * sx;\n data[mi + 1] = -s * sy;\n data[mi + 2] = s * sx;\n data[mi + 3] = c * sy;\n }\n data[ti] = ox;\n data[ti + 1] = oy;\n data[ti + 2] = 0;\n data[ti + 3] = 0;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"sheen\",\n phase: \"base-tex\",\n detect(mat) {\n const sh = (mat as PbrMaterialProps).sheen as SheenProps | undefined;\n if (!sh?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f = PBR_HAS_SHEEN;\n let f2 = 0;\n if (sh.texture) {\n f |= PBR_HAS_SHEEN_TEXTURE;\n if ((sh.texture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_SHEEN_UV_TX;\n }\n }\n if (sh.albedoScaling) {\n f |= PBR_HAS_SHEEN_ALBEDO_SCALING;\n }\n return { f, f2 };\n },\n frag(ctx) {\n if (!(ctx._features & PBR_HAS_SHEEN)) {\n return null;\n }\n return createSheenFragment(\n (ctx._features & PBR_HAS_SHEEN_TEXTURE) !== 0,\n ctx._hasIbl,\n (ctx._features & PBR_HAS_SHEEN_ALBEDO_SCALING) !== 0,\n (ctx._features2 & PBR2_HAS_SHEEN_UV_TX) !== 0\n );\n },\n writeUbo: writeSheenUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n if ((ctx._features & PBR_HAS_SHEEN_TEXTURE) === 0) {\n return b;\n }\n const sh = (ctx._material as PbrMaterialProps).sheen as SheenProps | undefined;\n if (sh?.texture) {\n entries.push({ binding: b++, resource: sh.texture.view });\n entries.push({ binding: b++, resource: sh.texture.sampler });\n }\n return b;\n },\n textures(mat, out) {\n const sh = (mat as PbrMaterialProps).sheen;\n if (sh?.texture) {\n out.push(sh.texture);\n }\n },\n};\n"],"names":[],"mappings":";AAkBA,MAAM,iBAAiB;AAEvB,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,MAAM,mBAAmB,CAAC,kBAAkC;AAAA;AAAA,oBAExC,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUjC,MAAM,gBAAgB,CAAC,eAAuB,kBAAmC;AAAA;AAAA,wBAEzD,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAOY,gBAAgB,iBAAiB,EAAE;AAAA;AAAA,EAElF,gBAAgB,2HAA2H,EAAE;AAAA;AAAA;AAI/I,MAAM,sBAAsB,CAAC,kBACzB,gBACM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYV,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAenB,SAAS,oBAAoB,iBAA0B,SAAkB,OAAO,mBAA4B,OAAO,eAAwB,OAAuB;AACrK,MAAI,YAAY;AAAA;AAAA;AAAA;AAAA;AAKhB,MAAI,iBAAiB;AACjB,UAAM,YAAY,mBAAmB,qBAAqB;AAC1D,UAAM,cAAc,eACd,8HACA;AACN,iBAAa;AAAA;AAAA,EAEnB,WAAW;AAAA;AAAA,qBAEQ,SAAS;AAAA;AAAA;AAAA,EAG1B;AAEA,QAAM,gBAAgB,mBAAmB,2BAA2B;AACpE,QAAM,QAAyC;AAAA,IAC3C,IAAI;AAAA,IACJ,IAAI,iBAAiB,aAAa;AAAA,EAAA;AAGtC,MAAI,QAAQ;AACR,UAAM,KAAK,cAAc,eAAe,gBAAgB,IAAI,oBAAoB,gBAAgB;AAAA,EACpG,OAAO;AACH,UAAM,KAAK;AAAA,EACf;AAEA,QAAM,WAA0B,CAAA;AAChC,MAAI,iBAAiB;AACjB,aAAS;AAAA,MACL,EAAE,OAAO,iBAAiB,OAAO,EAAE,OAAO,WAAW,cAAc,kBAAA,GAAqB,aAAa,eAAA;AAAA,MACrG,EAAE,OAAO,iBAAiB,OAAO,EAAE,OAAO,WAAW,cAAc,aAAa,aAAa,eAAA;AAAA,IAAe;AAAA,EAEpH;AAEA,QAAM,YAAwB;AAAA,IAC1B,EAAE,OAAO,eAAe,OAAO,YAAA;AAAA,IAC/B,EAAE,OAAO,gBAAgB,OAAO,YAAA;AAAA,EAAY;AAEhD,MAAI,cAAc;AACd,cAAU,KAAK,EAAE,OAAO,YAAY,OAAO,YAAA,GAAe,EAAE,OAAO,YAAY,OAAO,YAAA,CAAa;AAAA,EACvG;AAEA,SAAO;AAAA,IACH,KAAK;AAAA,IACL,eAAe,SAAS,CAAC,KAAK,IAAI;AAAA,IAElC,YAAY;AAAA,IAEZ,WAAW;AAAA,IAEX,kBAAkB;AAAA,IAElB,gBAAgB;AAAA,EAAA;AAExB;AAGO,SAAS,cAAc,MAAoB,UAA4B,SAA4C;AACtH,QAAM,KAAK,SAAS;AACpB,MAAI,EAAC,yBAAI,cAAa,CAAC,QAAQ,IAAI,aAAa,GAAG;AAC/C;AAAA,EACJ;AACA,QAAM,MAAM,QAAQ,IAAI,aAAa,IAAK;AAC1C,QAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;AAClC,OAAK,GAAG,IAAI,MAAM,CAAC;AACnB,OAAK,MAAM,CAAC,IAAI,MAAM,CAAC;AACvB,OAAK,MAAM,CAAC,IAAI,MAAM,CAAC;AACvB,OAAK,MAAM,CAAC,IAAI,GAAG,aAAa;AAChC,OAAK,MAAM,CAAC,IAAI,GAAG,aAAa;AAChC,OAAK,MAAM,CAAC,IAAI,GAAG,UAAU,IAAM;AAGnC,QAAM,OAAO,QAAQ,IAAI,UAAU;AACnC,QAAM,OAAO,QAAQ,IAAI,UAAU;AACnC,MAAI,SAAS,UAAa,SAAS,QAAW;AAC1C;AAAA,EACJ;AACA,QAAM,MAAM,GAAG;AACf,QAAM,MAAK,2BAAK,WAAU;AAC1B,QAAM,MAAK,2BAAK,WAAU;AAC1B,QAAM,OAAM,2BAAK,SAAQ;AACzB,QAAM,MAAK,2BAAK,YAAW;AAC3B,QAAM,MAAK,2BAAK,YAAW;AAC3B,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,MAAI,QAAQ,GAAG;AACX,SAAK,EAAE,IAAI;AACX,SAAK,KAAK,CAAC,IAAI;AACf,SAAK,KAAK,CAAC,IAAI;AACf,SAAK,KAAK,CAAC,IAAI;AAAA,EACnB,OAAO;AACH,UAAM,IAAI,KAAK,IAAI,GAAG;AACtB,UAAM,IAAI,KAAK,IAAI,GAAG;AACtB,SAAK,EAAE,IAAI,IAAI;AACf,SAAK,KAAK,CAAC,IAAI,CAAC,IAAI;AACpB,SAAK,KAAK,CAAC,IAAI,IAAI;AACnB,SAAK,KAAK,CAAC,IAAI,IAAI;AAAA,EACvB;AACA,OAAK,EAAE,IAAI;AACX,OAAK,KAAK,CAAC,IAAI;AACf,OAAK,KAAK,CAAC,IAAI;AACf,OAAK,KAAK,CAAC,IAAI;AACnB;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO,KAAK;AACR,UAAM,KAAM,IAAyB;AACrC,QAAI,EAAC,yBAAI,YAAW;AAChB,aAAO,EAAE,GAAG,GAAG,IAAI,EAAA;AAAA,IACvB;AACA,QAAI,IAAI;AACR,QAAI,KAAK;AACT,QAAI,GAAG,SAAS;AACZ,WAAK;AACL,UAAK,GAAG,QAAiC,QAAQ;AAC7C,cAAM;AAAA,MACV;AAAA,IACJ;AACA,QAAI,GAAG,eAAe;AAClB,WAAK;AAAA,IACT;AACA,WAAO,EAAE,GAAG,GAAA;AAAA,EAChB;AAAA,EACA,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,YAAY,gBAAgB;AAClC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,OACF,IAAI,YAAY,2BAA2B;AAAA,MAC5C,IAAI;AAAA,OACH,IAAI,YAAY,kCAAkC;AAAA,OAClD,IAAI,aAAa,0BAA0B;AAAA,IAAA;AAAA,EAEpD;AAAA,EACA,UAAU;AAAA,EACV,KAAK,KAAK,SAAS,GAAG;AAClB,SAAK,IAAI,YAAY,2BAA2B,GAAG;AAC/C,aAAO;AAAA,IACX;AACA,UAAM,KAAM,IAAI,UAA+B;AAC/C,QAAI,yBAAI,SAAS;AACb,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,GAAG,QAAQ,MAAM;AACxD,cAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,GAAG,QAAQ,SAAS;AAAA,IAC/D;AACA,WAAO;AAAA,EACX;AAAA,EACA,SAAS,KAAK,KAAK;AACf,UAAM,KAAM,IAAyB;AACrC,QAAI,yBAAI,SAAS;AACb,UAAI,KAAK,GAAG,OAAO;AAAA,IACvB;AAAA,EACJ;AACJ;"}
|
package/{singlelight-directional-wgsl-CmUDZxwz.js → singlelight-directional-wgsl-BsV8G456.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MAX_LIGHTS } from "./index-
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-CLElg2Bo.js";
|
|
2
2
|
const SINGLE_LIGHT_STRUCTS = `
|
|
3
3
|
struct LightEntry {
|
|
4
4
|
vLightData: vec4<f32>,
|
|
@@ -36,4 +36,4 @@ export {
|
|
|
36
36
|
SINGLE_LIGHT_STRUCTS,
|
|
37
37
|
getSingleLightBlock
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=singlelight-directional-wgsl-
|
|
39
|
+
//# sourceMappingURL=singlelight-directional-wgsl-BsV8G456.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singlelight-directional-wgsl-
|
|
1
|
+
{"version":3,"file":"singlelight-directional-wgsl-BsV8G456.js","sources":["../src/material/pbr/fragments/singlelight-directional-wgsl.ts"],"sourcesContent":["/** Single directional-light WGSL helpers for the PBR template. */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const SINGLE_LIGHT_STRUCTS = `\nstruct LightEntry {\nvLightData: vec4<f32>,\nvLightDiffuse: vec4<f32>,\nvLightSpecular: vec4<f32>,\nvLightDirection: vec4<f32>,\n};\nstruct lightsUniforms {\ncount: u32, _p0: u32, _p1: u32, _p2: u32,\n lights: array<LightEntry, ${MAX_LIGHTS}>,\n};\n`;\n\nfunction specularBlock(): string {\n return `let H = normalize(V + L);\nlet NdotH = clamp(dot(N, H), 0.0000001, 1.0);\nlet VdotH = saturate(dot(V, H));\nlet directRoughness = max(roughness, AA_factor_x);\nlet directAlphaG = directRoughness * directRoughness + 0.0005;\nlet D = distributionGGX(NdotH, directAlphaG);\nlet G = geometrySmithGGX(NdotL, NdotV, directAlphaG);\nlet coloredFresnel = fresnelSchlick(VdotH, colorF0, colorF90);\nvar directSpecular = coloredFresnel * D * G * NdotL * lightColor * lightAtten * material.directIntensity;`;\n}\n\nexport function getSingleLightBlock(): string {\n return `let entry = lights.lights[mli(0u)];\nlet L = normalize(-entry.vLightData.xyz);\nlet NdotL = max(dot(N, L), 0.0);\nlet lightAtten = 1.0;\nlet lightColor = entry.vLightDiffuse.rgb;\nvar directDiffuse = surfaceAlbedo * (1.0 / PI) * NdotL * lightColor * material.directIntensity;\n${specularBlock()}\n/*AD*/`;\n}\n"],"names":[],"mappings":";AAIO,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASJ,UAAU;AAAA;AAAA;AAI1C,SAAS,gBAAwB;AAC7B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASX;AAEO,SAAS,sBAA8B;AAC1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,eAAe;AAAA;AAEjB;"}
|
package/{singlelight-hemispheric-wgsl-t-83IP_s.js → singlelight-hemispheric-wgsl-Bo0jKlW5.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MAX_LIGHTS } from "./index-
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-CLElg2Bo.js";
|
|
2
2
|
const SINGLE_LIGHT_STRUCTS = `
|
|
3
3
|
struct LightEntry {
|
|
4
4
|
vLightData: vec4<f32>,
|
|
@@ -37,4 +37,4 @@ export {
|
|
|
37
37
|
SINGLE_LIGHT_STRUCTS,
|
|
38
38
|
getSingleLightBlock
|
|
39
39
|
};
|
|
40
|
-
//# sourceMappingURL=singlelight-hemispheric-wgsl-
|
|
40
|
+
//# sourceMappingURL=singlelight-hemispheric-wgsl-Bo0jKlW5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singlelight-hemispheric-wgsl-
|
|
1
|
+
{"version":3,"file":"singlelight-hemispheric-wgsl-Bo0jKlW5.js","sources":["../src/material/pbr/fragments/singlelight-hemispheric-wgsl.ts"],"sourcesContent":["/** Single hemispheric-light WGSL helpers for the PBR template. */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const SINGLE_LIGHT_STRUCTS = `\nstruct LightEntry {\nvLightData: vec4<f32>,\nvLightDiffuse: vec4<f32>,\nvLightSpecular: vec4<f32>,\nvLightDirection: vec4<f32>,\n};\nstruct lightsUniforms {\ncount: u32, _p0: u32, _p1: u32, _p2: u32,\n lights: array<LightEntry, ${MAX_LIGHTS}>,\n};\n`;\n\nfunction specularBlock(): string {\n return `let H = normalize(V + L);\nlet NdotH = clamp(dot(N, H), 0.0000001, 1.0);\nlet VdotH = saturate(dot(V, H));\nlet directRoughness = max(roughness, AA_factor_x);\nlet directAlphaG = directRoughness * directRoughness + 0.0005;\nlet D = distributionGGX(NdotH, directAlphaG);\nlet G = geometrySmithGGX(NdotL, NdotV, directAlphaG);\nlet coloredFresnel = fresnelSchlick(VdotH, colorF0, colorF90);\nvar directSpecular = coloredFresnel * D * G * NdotL * lightColor * lightAtten * material.directIntensity;`;\n}\n\nexport function getSingleLightBlock(): string {\n return `let entry = lights.lights[mli(0u)];\nlet L = normalize(entry.vLightData.xyz);\nlet NdotL = dot(N, L) * 0.5 + 0.5;\nlet lightAtten = 1.0;\nlet lightColor = entry.vLightDiffuse.rgb;\nlet hemiDiffuse = mix(entry.vLightDirection.xyz, lightColor, NdotL);\nvar directDiffuse = hemiDiffuse * surfaceAlbedo * material.directIntensity;\n${specularBlock()}\n/*AD*/`;\n}\n"],"names":[],"mappings":";AAIO,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASJ,UAAU;AAAA;AAAA;AAI1C,SAAS,gBAAwB;AAC7B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASX;AAEO,SAAS,sBAA8B;AAC1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,eAAe;AAAA;AAEjB;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MAX_LIGHTS } from "./index-
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-CLElg2Bo.js";
|
|
2
2
|
const SINGLE_LIGHT_STRUCTS = `
|
|
3
3
|
struct LightEntry {
|
|
4
4
|
vLightData: vec4<f32>,
|
|
@@ -42,4 +42,4 @@ export {
|
|
|
42
42
|
SINGLE_LIGHT_STRUCTS,
|
|
43
43
|
getSingleLightBlock
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=singlelight-point-wgsl-
|
|
45
|
+
//# sourceMappingURL=singlelight-point-wgsl-DV39UP5Y.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singlelight-point-wgsl-
|
|
1
|
+
{"version":3,"file":"singlelight-point-wgsl-DV39UP5Y.js","sources":["../src/material/pbr/fragments/singlelight-point-wgsl.ts"],"sourcesContent":["/** Single point-light WGSL helpers for the PBR template. */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const SINGLE_LIGHT_STRUCTS = `\nstruct LightEntry {\nvLightData: vec4<f32>,\nvLightDiffuse: vec4<f32>,\nvLightSpecular: vec4<f32>,\nvLightDirection: vec4<f32>,\n};\nstruct lightsUniforms {\ncount: u32, _p0: u32, _p1: u32, _p2: u32,\n lights: array<LightEntry, ${MAX_LIGHTS}>,\n};\n`;\n\nfunction specularBlock(): string {\n return `let H = normalize(V + L);\nlet NdotH = clamp(dot(N, H), 0.0000001, 1.0);\nlet VdotH = saturate(dot(V, H));\nlet directRoughness = max(roughness, AA_factor_x);\nlet directAlphaG = directRoughness * directRoughness + 0.0005;\nlet D = distributionGGX(NdotH, directAlphaG);\nlet G = geometrySmithGGX(NdotL, NdotV, directAlphaG);\nlet coloredFresnel = fresnelSchlick(VdotH, colorF0, colorF90);\nvar directSpecular = coloredFresnel * D * G * NdotL * lightColor * lightAtten * material.directIntensity;`;\n}\n\nexport function getSingleLightBlock(): string {\n return `let entry = lights.lights[mli(0u)];\nlet lightToFrag = entry.vLightData.xyz - input.worldPos;\nlet lightDist2 = dot(lightToFrag, lightToFrag);\nlet L = normalize(lightToFrag);\nlet NdotL = max(dot(N, L), 0.0);\nlet range = entry.vLightDiffuse.a;\nlet physicalFalloff = material.lightFalloffMode >= 0.5;\nlet physicalAtten = 1.0 / max(lightDist2, 0.0001);\nlet standardAtten = max(0.0, 1.0 - sqrt(lightDist2) / range);\nlet lightAtten = select(standardAtten, physicalAtten, physicalFalloff);\nlet lightColor = entry.vLightDiffuse.rgb;\nvar directDiffuse = surfaceAlbedo * (1.0 / PI) * NdotL * lightColor * lightAtten * material.directIntensity;\n${specularBlock()}\n/*AD*/`;\n}\n"],"names":[],"mappings":";AAIO,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASJ,UAAU;AAAA;AAAA;AAI1C,SAAS,gBAAwB;AAC7B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASX;AAEO,SAAS,sBAA8B;AAC1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYT,eAAe;AAAA;AAEjB;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MAX_LIGHTS } from "./index-
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-CLElg2Bo.js";
|
|
2
2
|
const SINGLE_LIGHT_STRUCTS = `
|
|
3
3
|
struct LightEntry {
|
|
4
4
|
vLightData: vec4<f32>,
|
|
@@ -44,4 +44,4 @@ export {
|
|
|
44
44
|
SINGLE_LIGHT_STRUCTS,
|
|
45
45
|
getSingleLightBlock
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=singlelight-spot-wgsl-
|
|
47
|
+
//# sourceMappingURL=singlelight-spot-wgsl-yg3od6vL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singlelight-spot-wgsl-
|
|
1
|
+
{"version":3,"file":"singlelight-spot-wgsl-yg3od6vL.js","sources":["../src/material/pbr/fragments/singlelight-spot-wgsl.ts"],"sourcesContent":["/** Single spot-light WGSL helpers for the PBR template. */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const SINGLE_LIGHT_STRUCTS = `\nstruct LightEntry {\nvLightData: vec4<f32>,\nvLightDiffuse: vec4<f32>,\nvLightSpecular: vec4<f32>,\nvLightDirection: vec4<f32>,\n};\nstruct lightsUniforms {\ncount: u32, _p0: u32, _p1: u32, _p2: u32,\n lights: array<LightEntry, ${MAX_LIGHTS}>,\n};\n`;\n\nfunction specularBlock(): string {\n return `let H = normalize(V + L);\nlet NdotH = clamp(dot(N, H), 0.0000001, 1.0);\nlet VdotH = saturate(dot(V, H));\nlet directRoughness = max(roughness, AA_factor_x);\nlet directAlphaG = directRoughness * directRoughness + 0.0005;\nlet D = distributionGGX(NdotH, directAlphaG);\nlet G = geometrySmithGGX(NdotL, NdotV, directAlphaG);\nlet coloredFresnel = fresnelSchlick(VdotH, colorF0, colorF90);\nvar directSpecular = coloredFresnel * D * G * NdotL * lightColor * lightAtten * material.directIntensity;`;\n}\n\nexport function getSingleLightBlock(): string {\n return `let entry = lights.lights[mli(0u)];\nlet lightToFrag = entry.vLightData.xyz - input.worldPos;\nlet lightDist = length(lightToFrag);\nlet L = lightToFrag / max(lightDist, 0.0001);\nlet NdotL = max(dot(N, L), 0.0);\nlet spotC = dot(entry.vLightDirection.xyz, -L);\nlet physicalFalloff = material.lightFalloffMode >= 0.5;\nlet rangeAtt = select(max(0.0, 1.0 - lightDist / entry.vLightDiffuse.a), 1.0 / max(dot(lightToFrag, lightToFrag), 0.0000001), physicalFalloff);\nlet standardDirFalloff = select(0.0, max(0.0, pow(max(spotC, 0.0), entry.vLightSpecular.a)), spotC >= entry.vLightDirection.w);\nlet kappa = 6.64385618977 / max(1.0 - entry.vLightDirection.w, 0.0001);\nlet physicalDirFalloff = exp2(kappa * (spotC - 1.0));\nlet lightAtten = rangeAtt * select(standardDirFalloff, physicalDirFalloff, physicalFalloff);\nlet lightColor = entry.vLightDiffuse.rgb;\nvar directDiffuse = surfaceAlbedo * (1.0 / PI) * NdotL * lightColor * lightAtten * material.directIntensity;\n${specularBlock()}\n/*AD*/`;\n}\n"],"names":[],"mappings":";AAIO,MAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASJ,UAAU;AAAA;AAAA;AAI1C,SAAS,gBAAwB;AAC7B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASX;AAEO,SAAS,sBAA8B;AAC1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcT,eAAe;AAAA;AAEjB;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { b4 as MSH_HAS_SKELETON, b5 as MSH_HAS_SKELETON_8 } from "./index-CLElg2Bo.js";
|
|
2
2
|
const STAGE_VERTEX = 1;
|
|
3
3
|
const SKELETON_HELPERS = `
|
|
4
4
|
fn readMatrixFromRawSampler(smp: texture_2d<f32>, index: f32) -> mat4x4<f32> {
|
|
@@ -68,4 +68,4 @@ export {
|
|
|
68
68
|
createSkeletonFragment,
|
|
69
69
|
pbrExt
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=skeleton-fragment-
|
|
71
|
+
//# sourceMappingURL=skeleton-fragment-DdxYG6kv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-fragment-
|
|
1
|
+
{"version":3,"file":"skeleton-fragment-DdxYG6kv.js","sources":["../src/material/pbr/fragments/skeleton-fragment.ts"],"sourcesContent":["/**\n * Skeleton Fragment\n *\n * Vertex-stage skeletal animation: bone texture sampling + skinning matrix.\n * Only bundled when a scene has skeletal animation.\n * Supports 4-bone and 8-bone skinning.\n */\n\nimport type { ShaderFragment, VertexAttribute } from \"../../../shader/fragment-types.js\";\n\n// WebGPU shader stage constants\nconst STAGE_VERTEX = 0x1;\n\nconst SKELETON_HELPERS = `\nfn readMatrixFromRawSampler(smp: texture_2d<f32>, index: f32) -> mat4x4<f32> {\nlet offset = i32(index) * 4;\nlet m0 = textureLoad(smp, vec2<i32>(offset + 0, 0), 0);\nlet m1 = textureLoad(smp, vec2<i32>(offset + 1, 0), 0);\nlet m2 = textureLoad(smp, vec2<i32>(offset + 2, 0), 0);\nlet m3 = textureLoad(smp, vec2<i32>(offset + 3, 0), 0);\nreturn mat4x4f(m0, m1, m2, m3);\n}\n`;\n\nfunction makeSkinningCode(has8Bones: boolean): string {\n let code = `var influence: mat4x4<f32> = readMatrixFromRawSampler(boneSampler, f32(joints[0])) * weights[0];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints[1])) * weights[1];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints[2])) * weights[2];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints[3])) * weights[3];`;\n if (has8Bones) {\n code += `\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints1[0])) * weights1[0];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints1[1])) * weights1[1];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints1[2])) * weights1[2];\ninfluence = influence + readMatrixFromRawSampler(boneSampler, f32(joints1[3])) * weights1[3];`;\n }\n code += `\\nfinalWorld = mesh.world * influence;`;\n return code;\n}\n\n/**\n * Create a skeleton fragment.\n * @param has8Bones - Whether to use 8-bone skinning (joints1/weights1).\n */\nexport function createSkeletonFragment(has8Bones: boolean): ShaderFragment {\n return {\n _id: \"skeleton\",\n\n _vertexAttributes: [\n { _name: \"joints\", _type: \"vec4<u32>\", _gpuFormat: \"uint32x4\" as GPUVertexFormat, _arrayStride: 16 },\n { _name: \"weights\", _type: \"vec4<f32>\", _gpuFormat: \"float32x4\" as GPUVertexFormat, _arrayStride: 16 },\n ...(has8Bones\n ? [\n { _name: \"joints1\", _type: \"vec4<u32>\", _gpuFormat: \"uint32x4\" as GPUVertexFormat, _arrayStride: 16 },\n { _name: \"weights1\", _type: \"vec4<f32>\", _gpuFormat: \"float32x4\" as GPUVertexFormat, _arrayStride: 16 },\n ]\n : []),\n ] as VertexAttribute[],\n\n _vertexBindings: [\n { _name: \"boneSampler\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" as const, _sampleType: \"unfilterable-float\" as const }, _visibility: STAGE_VERTEX },\n ],\n\n _vertexHelperFunctions: SKELETON_HELPERS,\n\n _vertexSlots: {\n VW: makeSkinningCode(has8Bones),\n },\n };\n}\n\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { MSH_HAS_SKELETON, MSH_HAS_SKELETON_8 } from \"../../mesh-features.js\";\n\nexport const pbrExt: PbrExt = {\n id: \"skeleton\",\n phase: \"vertex\",\n frag(ctx) {\n if (!(ctx._meshFeatures & MSH_HAS_SKELETON)) {\n return null;\n }\n return createSkeletonFragment((ctx._meshFeatures & MSH_HAS_SKELETON_8) !== 0);\n },\n bind(ctx, entries, b) {\n const mesh = ctx._mesh as { skeleton?: { boneTexture: GPUTexture } } | undefined;\n if (!(ctx._meshFeatures & MSH_HAS_SKELETON) || !mesh?.skeleton) {\n return b;\n }\n entries.push({ binding: b++, resource: mesh.skeleton.boneTexture.createView() });\n return b;\n },\n};\n"],"names":[],"mappings":";AAWA,MAAM,eAAe;AAErB,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWzB,SAAS,iBAAiB,WAA4B;AAClD,MAAI,OAAO;AAAA;AAAA;AAAA;AAIX,MAAI,WAAW;AACX,YAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ;AACA,UAAQ;AAAA;AACR,SAAO;AACX;AAMO,SAAS,uBAAuB,WAAoC;AACvE,SAAO;AAAA,IACH,KAAK;AAAA,IAEL,mBAAmB;AAAA,MACf,EAAE,OAAO,UAAU,OAAO,aAAa,YAAY,YAA+B,cAAc,GAAA;AAAA,MAChG,EAAE,OAAO,WAAW,OAAO,aAAa,YAAY,aAAgC,cAAc,GAAA;AAAA,MAClG,GAAI,YACE;AAAA,QACI,EAAE,OAAO,WAAW,OAAO,aAAa,YAAY,YAA+B,cAAc,GAAA;AAAA,QACjG,EAAE,OAAO,YAAY,OAAO,aAAa,YAAY,aAAgC,cAAc,GAAA;AAAA,MAAG,IAE1G,CAAA;AAAA,IAAC;AAAA,IAGX,iBAAiB;AAAA,MACb,EAAE,OAAO,eAAe,OAAO,EAAE,OAAO,WAAW,cAAc,mBAA4B,aAAa,qBAAA,GAAiC,aAAa,aAAA;AAAA,IAAa;AAAA,IAGzK,wBAAwB;AAAA,IAExB,cAAc;AAAA,MACV,IAAI,iBAAiB,SAAS;AAAA,IAAA;AAAA,EAClC;AAER;AAKO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,gBAAgB,mBAAmB;AACzC,aAAO;AAAA,IACX;AACA,WAAO,wBAAwB,IAAI,gBAAgB,wBAAwB,CAAC;AAAA,EAChF;AAAA,EACA,KAAK,KAAK,SAAS,GAAG;AAClB,UAAM,OAAO,IAAI;AACjB,QAAI,EAAE,IAAI,gBAAgB,qBAAqB,EAAC,6BAAM,WAAU;AAC5D,aAAO;AAAA,IACX;AACA,YAAQ,KAAK,EAAE,SAAS,KAAK,UAAU,KAAK,SAAS,YAAY,WAAA,EAAW,CAAG;AAC/E,WAAO;AAAA,EACX;AACJ;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { S as SS, av as createUniformBuffer, q as SCENE_UBO_WGSL, x as targetSignatureKey, y as createDefaultPipelineDescriptor, z as getSceneBindGroupLayout } from "./index-CLElg2Bo.js";
|
|
2
|
+
import { a as WGSL_FOG } from "./wgsl-helpers-D8sl1VVA.js";
|
|
3
3
|
const skyVertSrc = "// Skybox CubeMap Vertex Shader\n// Passes object-space position (for cube texture lookup) and world-space position.\n\nstruct MeshUniforms {\n world: mat4x4<f32>,\n};\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\n\nstruct VertexOutput {\n @builtin(position) clipPos: vec4<f32>,\n @location(0) vPositionW: vec3<f32>,\n @location(1) vPositionLocal: vec3<f32>,\n @location(2) vFogDistance: vec3<f32>,\n};\n\n@vertex\nfn main(\n @location(0) position: vec3<f32>,\n @location(1) normal: vec3<f32>,\n) -> VertexOutput {\n var out: VertexOutput;\n let worldPos = mesh.world * vec4<f32>(position, 1.0);\n out.vPositionW = worldPos.xyz;\n out.vPositionLocal = position;\n out.clipPos = scene.viewProjection * worldPos;\n out.vFogDistance = (scene.view * worldPos).xyz;\n return out;\n}\n";
|
|
4
4
|
const skyFragSrc = "// Skybox CubeMap Fragment Shader\n// Samples cube texture using object-space position as lookup direction.\n// Matches Babylon StandardMaterial with REFLECTION + REFLECTIONMAP_SKYBOX.\n\n@group(1) @binding(1) var cubeTexture: texture_cube<f32>;\n@group(1) @binding(2) var cubeSampler: sampler;\n\nstruct FragmentInput {\n @location(0) vPositionW: vec3<f32>,\n @location(1) vPositionLocal: vec3<f32>,\n @location(2) vFogDistance: vec3<f32>,\n};\n\n@fragment\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\n // SKYBOX_MODE: use object-space position as cube lookup direction\n let lookupDir = normalize(input.vPositionLocal);\n var color = textureSample(cubeTexture, cubeSampler, lookupDir);\n\n // Apply fog\n if (scene.vFogInfos.x > 0.0) {\n let fog = calcFogFactor(input.vFogDistance);\n color = vec4<f32>(mix(scene.vFogColor.rgb, color.rgb, fog), color.a);\n }\n\n return color;\n}\n";
|
|
5
5
|
function buildSkyboxCubeMapGPU(engine, worldMatrix, cubeView, cubeSampler) {
|
|
@@ -7,9 +7,9 @@ function buildSkyboxCubeMapGPU(engine, worldMatrix, cubeView, cubeSampler) {
|
|
|
7
7
|
const meshBindGroupLayout = device.createBindGroupLayout({
|
|
8
8
|
label: "skybox-cm-mesh",
|
|
9
9
|
entries: [
|
|
10
|
-
{ binding: 0, visibility:
|
|
11
|
-
{ binding: 1, visibility:
|
|
12
|
-
{ binding: 2, visibility:
|
|
10
|
+
{ binding: 0, visibility: SS.VERTEX, buffer: { type: "uniform" } },
|
|
11
|
+
{ binding: 1, visibility: SS.FRAGMENT, texture: { sampleType: "float", viewDimension: "cube" } },
|
|
12
|
+
{ binding: 2, visibility: SS.FRAGMENT, sampler: {} }
|
|
13
13
|
]
|
|
14
14
|
});
|
|
15
15
|
const meshUBO = createUniformBuffer(engine, worldMatrix);
|
|
@@ -45,8 +45,7 @@ function buildSkyboxCubeMapGPU(engine, worldMatrix, cubeView, cubeSampler) {
|
|
|
45
45
|
_depthStencilFormat: sig._depthStencilFormat,
|
|
46
46
|
_depthCompare: sig._depthCompare,
|
|
47
47
|
_msaaSamples: sig._sampleCount,
|
|
48
|
-
_cullMode: "none"
|
|
49
|
-
_flipY: sig._flipY
|
|
48
|
+
_cullMode: "none"
|
|
50
49
|
})
|
|
51
50
|
);
|
|
52
51
|
gpu.pipelines.set(key, pipeline);
|
|
@@ -62,7 +61,7 @@ function buildSkyboxCubeMapGPU(engine, worldMatrix, cubeView, cubeSampler) {
|
|
|
62
61
|
return gpu;
|
|
63
62
|
}
|
|
64
63
|
function buildSkyboxRenderable(scene, skybox) {
|
|
65
|
-
const engine = scene.engine;
|
|
64
|
+
const engine = scene.surface.engine;
|
|
66
65
|
const gpu = buildSkyboxCubeMapGPU(engine, skybox.worldMatrix, skybox.cubeView, skybox.cubeSampler);
|
|
67
66
|
const r = {
|
|
68
67
|
order: 0,
|
|
@@ -89,4 +88,4 @@ function buildSkyboxRenderable(scene, skybox) {
|
|
|
89
88
|
export {
|
|
90
89
|
buildSkyboxRenderable
|
|
91
90
|
};
|
|
92
|
-
//# sourceMappingURL=skybox-renderable-
|
|
91
|
+
//# sourceMappingURL=skybox-renderable-CJD4XmX5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skybox-renderable-CJD4XmX5.js","sources":["../shaders/skybox-cubemap.vertex.wgsl?raw","../shaders/skybox-cubemap.fragment.wgsl?raw","../src/material/standard/skybox-cubemap.ts","../src/loader-skybox/skybox-renderable.ts"],"sourcesContent":["export default \"// Skybox CubeMap Vertex Shader\\n// Passes object-space position (for cube texture lookup) and world-space position.\\n\\nstruct MeshUniforms {\\n world: mat4x4<f32>,\\n};\\n@group(1) @binding(0) var<uniform> mesh: MeshUniforms;\\n\\nstruct VertexOutput {\\n @builtin(position) clipPos: vec4<f32>,\\n @location(0) vPositionW: vec3<f32>,\\n @location(1) vPositionLocal: vec3<f32>,\\n @location(2) vFogDistance: vec3<f32>,\\n};\\n\\n@vertex\\nfn main(\\n @location(0) position: vec3<f32>,\\n @location(1) normal: vec3<f32>,\\n) -> VertexOutput {\\n var out: VertexOutput;\\n let worldPos = mesh.world * vec4<f32>(position, 1.0);\\n out.vPositionW = worldPos.xyz;\\n out.vPositionLocal = position;\\n out.clipPos = scene.viewProjection * worldPos;\\n out.vFogDistance = (scene.view * worldPos).xyz;\\n return out;\\n}\\n\"","export default \"// Skybox CubeMap Fragment Shader\\n// Samples cube texture using object-space position as lookup direction.\\n// Matches Babylon StandardMaterial with REFLECTION + REFLECTIONMAP_SKYBOX.\\n\\n@group(1) @binding(1) var cubeTexture: texture_cube<f32>;\\n@group(1) @binding(2) var cubeSampler: sampler;\\n\\nstruct FragmentInput {\\n @location(0) vPositionW: vec3<f32>,\\n @location(1) vPositionLocal: vec3<f32>,\\n @location(2) vFogDistance: vec3<f32>,\\n};\\n\\n@fragment\\nfn main(input: FragmentInput) -> @location(0) vec4<f32> {\\n // SKYBOX_MODE: use object-space position as cube lookup direction\\n let lookupDir = normalize(input.vPositionLocal);\\n var color = textureSample(cubeTexture, cubeSampler, lookupDir);\\n\\n // Apply fog\\n if (scene.vFogInfos.x > 0.0) {\\n let fog = calcFogFactor(input.vFogDistance);\\n color = vec4<f32>(mix(scene.vFogColor.rgb, color.rgb, fog), color.a);\\n }\\n\\n return color;\\n}\\n\"","/**\n * Skybox CubeMap Material — renders a cube map on the inside of a box.\n * Material owns shaders (pillar 4c). Self-contained pipeline and bind groups.\n *\n * Used for StandardMaterial + CubeTexture(SKYBOX_MODE) in Babylon.\n * Renders backfaces (no culling → sees inside of box).\n */\n\nimport { SS } from \"../../engine/gpu-flags.js\";\nimport type { EngineContext } from \"../../engine/engine.js\";\nimport type { RenderTargetSignature } from \"../../engine/render-target.js\";\nimport skyVertSrc from \"../../../shaders/skybox-cubemap.vertex.wgsl?raw\";\nimport skyFragSrc from \"../../../shaders/skybox-cubemap.fragment.wgsl?raw\";\nimport { getSceneBindGroupLayout, createDefaultPipelineDescriptor } from \"../../render/scene-helpers.js\";\nimport { WGSL_FOG } from \"../../shader/wgsl-helpers.js\";\nimport { SCENE_UBO_WGSL } from \"../../shader/scene-uniforms.js\";\nimport { createUniformBuffer } from \"../../resource/gpu-buffers.js\";\nimport { targetSignatureKey } from \"../../engine/render-target.js\";\n\nexport interface SkyboxCubeMapGPU {\n /** Sig-keyed pipeline lookup (called from `bind()` once the target sig is known). */\n getPipeline(engine: EngineContext, sig: RenderTargetSignature): GPURenderPipeline;\n meshBindGroup: GPUBindGroup;\n meshUBO: GPUBuffer;\n meshBindGroupLayout: GPUBindGroupLayout;\n /** Pre-compiled shader modules — sig-independent. */\n vertModule: GPUShaderModule;\n fragModule: GPUShaderModule;\n /** Per-sig pipeline cache, owned by this skybox instance. */\n pipelines: Map<string, GPURenderPipeline>;\n}\n\n/**\n * Build the per-skybox GPU resources (mesh BGL + bind group + UBO + shader modules\n * + pipeline cache). The pipeline is created lazily by `getPipeline(engine, sig)`\n * once the target sig is known. The scene bind group is supplied per-pass by the\n * active RenderTask.\n */\nexport function buildSkyboxCubeMapGPU(engine: EngineContext, worldMatrix: Float32Array, cubeView: GPUTextureView, cubeSampler: GPUSampler): SkyboxCubeMapGPU {\n const device = engine._device;\n const meshBindGroupLayout = device.createBindGroupLayout({\n label: \"skybox-cm-mesh\",\n entries: [\n { binding: 0, visibility: SS.VERTEX, buffer: { type: \"uniform\" } },\n { binding: 1, visibility: SS.FRAGMENT, texture: { sampleType: \"float\", viewDimension: \"cube\" } },\n { binding: 2, visibility: SS.FRAGMENT, sampler: {} },\n ],\n });\n\n const meshUBO = createUniformBuffer(engine, worldMatrix);\n const meshBindGroup = device.createBindGroup({\n layout: meshBindGroupLayout,\n entries: [\n { binding: 0, resource: { buffer: meshUBO } },\n { binding: 1, resource: cubeView },\n { binding: 2, resource: cubeSampler },\n ],\n });\n\n const vertModule = device.createShaderModule({ code: SCENE_UBO_WGSL + skyVertSrc, label: \"skybox-cm-vert\" });\n const fragModule = device.createShaderModule({ code: SCENE_UBO_WGSL + WGSL_FOG + skyFragSrc, label: \"skybox-cm-frag\" });\n\n const gpu: SkyboxCubeMapGPU = {\n getPipeline(_engine, sig) {\n const key = targetSignatureKey(sig);\n const cached = gpu.pipelines.get(key);\n if (cached) {\n return cached;\n }\n const pipeline = _engine._device.createRenderPipeline(\n createDefaultPipelineDescriptor({\n _label: \"skybox-cubemap-pipeline\",\n _engine,\n _bgls: [getSceneBindGroupLayout(_engine), gpu.meshBindGroupLayout],\n _vertModule: gpu.vertModule,\n _fragModule: gpu.fragModule,\n _vertexBuffers: [\n { arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x3\" as GPUVertexFormat }] },\n { arrayStride: 12, attributes: [{ shaderLocation: 1, offset: 0, format: \"float32x3\" as GPUVertexFormat }] },\n ],\n _format: sig._colorFormat!,\n _depthStencilFormat: sig._depthStencilFormat,\n _depthCompare: sig._depthCompare,\n _msaaSamples: sig._sampleCount,\n _cullMode: \"none\",\n })\n );\n gpu.pipelines.set(key, pipeline);\n return pipeline;\n },\n meshBindGroup,\n meshUBO,\n meshBindGroupLayout,\n vertModule,\n fragModule,\n pipelines: new Map(),\n };\n return gpu;\n}\n","/** Skybox renderable for cube-texture skyboxes (standard-material scenes).\n * Wraps the existing skybox-cubemap material into a Renderable. */\n\nimport type { SceneContext } from \"../scene/scene.js\";\nimport type { EngineContext } from \"../engine/engine.js\";\nimport type { SkyboxData } from \"./load-skybox.js\";\nimport type { Renderable } from \"../render/renderable.js\";\nimport { buildSkyboxCubeMapGPU } from \"../material/standard/skybox-cubemap.js\";\n\n/** Build a skybox Renderable from a SkyboxData (loaded via loadSkybox). */\nexport function buildSkyboxRenderable(scene: SceneContext, skybox: SkyboxData): Renderable {\n const engine = scene.surface.engine;\n\n const gpu = buildSkyboxCubeMapGPU(engine, skybox.worldMatrix, skybox.cubeView, skybox.cubeSampler);\n\n const r: Renderable = {\n order: 0, // skybox behind everything\n isTransparent: false,\n bind(eng, sig) {\n const pipeline = gpu.getPipeline(eng as EngineContext, sig);\n return {\n renderable: r,\n pipeline,\n draw(pass) {\n pass.setBindGroup(1, gpu.meshBindGroup);\n pass.setVertexBuffer(0, skybox.posBuffer);\n pass.setVertexBuffer(1, skybox.normBuffer);\n pass.setIndexBuffer(skybox.idxBuffer, \"uint32\");\n pass.drawIndexed(skybox.idxCount);\n return 1;\n },\n };\n },\n };\n return r;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { D as DV, e as U8, L as U8C, a as F32 } from "./index-CLElg2Bo.js";
|
|
1
2
|
const SH_C0 = 0.28209479177387814;
|
|
2
3
|
const SQRT2 = Math.SQRT2;
|
|
3
4
|
const ROW_OUTPUT_LENGTH = 32;
|
|
@@ -18,7 +19,7 @@ function shDegreeForIndex(i) {
|
|
|
18
19
|
return 0;
|
|
19
20
|
}
|
|
20
21
|
function parseHeader(data) {
|
|
21
|
-
const headerText = new TextDecoder().decode(new
|
|
22
|
+
const headerText = new TextDecoder().decode(new U8(data, 0, Math.min(data.byteLength, 1024 * 10)));
|
|
22
23
|
const headerEnd = "end_header\n";
|
|
23
24
|
const idx = headerText.indexOf(headerEnd);
|
|
24
25
|
if (idx < 0) {
|
|
@@ -224,7 +225,7 @@ function convertCompressedPlyToParsedSplat(data) {
|
|
|
224
225
|
return { data };
|
|
225
226
|
}
|
|
226
227
|
const isCompressed = header.chunkCount > 0;
|
|
227
|
-
const dv = new
|
|
228
|
+
const dv = new DV(data, header.dataStart);
|
|
228
229
|
const out = new ArrayBuffer(ROW_OUTPUT_LENGTH * header.vertexCount);
|
|
229
230
|
const tmpPos = [0, 0, 0];
|
|
230
231
|
const tmpScl = [0, 0, 0];
|
|
@@ -232,14 +233,14 @@ function convertCompressedPlyToParsedSplat(data) {
|
|
|
232
233
|
const tmpQuat = [0, 0, 0, 1];
|
|
233
234
|
const offsetRef = { value: 0 };
|
|
234
235
|
const chunks = isCompressed ? readChunks(header, dv, offsetRef) : null;
|
|
235
|
-
const shFlat = header.shDegree && header.shCoefficientCount ? new
|
|
236
|
+
const shFlat = header.shDegree && header.shCoefficientCount ? new U8(header.shCoefficientCount * header.vertexCount) : null;
|
|
236
237
|
const shBlockBase = header.rowChunkLength * header.chunkCount + header.vertexCount * header.rowVertexLength;
|
|
237
238
|
const shDim = header.shCoefficientCount / 3;
|
|
238
239
|
for (let i = 0; i < header.vertexCount; i++) {
|
|
239
|
-
const position = new
|
|
240
|
-
const scale = new
|
|
241
|
-
const rgba = new
|
|
242
|
-
const rot = new
|
|
240
|
+
const position = new F32(out, i * ROW_OUTPUT_LENGTH, 3);
|
|
241
|
+
const scale = new F32(out, i * ROW_OUTPUT_LENGTH + 12, 3);
|
|
242
|
+
const rgba = new U8C(out, i * ROW_OUTPUT_LENGTH + 24, 4);
|
|
243
|
+
const rot = new U8C(out, i * ROW_OUTPUT_LENGTH + 28, 4);
|
|
243
244
|
const chunk = chunks ? chunks[i >> 8] : null;
|
|
244
245
|
let r0 = 255, r1 = 0, r2 = 0, r3 = 0;
|
|
245
246
|
const plySH = shFlat ? new Array(header.shCoefficientCount) : null;
|
|
@@ -391,4 +392,4 @@ function convertCompressedPlyToParsedSplat(data) {
|
|
|
391
392
|
export {
|
|
392
393
|
convertCompressedPlyToParsedSplat
|
|
393
394
|
};
|
|
394
|
-
//# sourceMappingURL=splat-ply-compressed-
|
|
395
|
+
//# sourceMappingURL=splat-ply-compressed-DHjyiVmI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splat-ply-compressed-DHjyiVmI.js","sources":["../src/loader-splat/splat-ply-compressed.ts"],"sourcesContent":["/** Compressed-PLY + SH parser (separate from `splat-ply-parser.ts` so the\n * standard PLY path stays small enough to fit scene 120's bundle ceiling).\n *\n * Compressed PLY layout (BJS / PlayCanvas convention):\n * • `element chunk K` — K records of 12 floats:\n * min_x..z, max_x..z, min_scale_*, max_scale_*, min_r..b, max_r..b\n * • `element vertex N` — N rows of `packed_position`/`_rotation`/`_scale`/\n * `_color` (uint32 each); chunkIndex = `vertexIndex >> 8`.\n * • `element sh M` — properties define SH bytes laid out in a\n * *trailing* block (absolute offset `chunkBytes + vertexBytes`).\n *\n * Standard PLY with per-vertex `f_rest_*` properties also routes through\n * this parser so SH evaluation stays paired with the rest of the SH\n * pipeline.\n *\n * Returns the same `ParsedSplat` contract as `convertPlyToSplat` (flat SH\n * byte layout — see `splat-data.ts` for the exact convention). */\n\nimport { F32, U8C, U8, DV } from \"../engine/typed-arrays.js\";\nimport type { ParsedSplat } from \"./splat-data.js\";\n\nconst SH_C0 = 0.28209479177387814;\nconst SQRT2 = Math.SQRT2;\nconst ROW_OUTPUT_LENGTH = 32;\n\nconst TYPE_SIZE: Record<string, number> = { double: 8, int: 4, uint: 4, float: 4, short: 2, ushort: 2, uchar: 1 };\n\nconst enum Section {\n Vertex = 0,\n Chunk = 1,\n SH = 2,\n Unused = 3,\n}\n\ninterface PlyProp {\n name: string;\n type: string;\n offset: number;\n}\n\ninterface PlyHeader {\n vertexCount: number;\n chunkCount: number;\n rowVertexLength: number;\n rowChunkLength: number;\n vertexProps: PlyProp[];\n chunkProps: PlyProp[];\n shProps: PlyProp[];\n shDegree: number;\n shCoefficientCount: number;\n dataStart: number;\n}\n\nfunction shDegreeForIndex(i: number): number {\n if (i >= 71) {\n return 4;\n }\n if (i >= 44) {\n return 3;\n }\n if (i >= 23) {\n return 2;\n }\n if (i >= 8) {\n return 1;\n }\n return 0;\n}\n\nfunction parseHeader(data: ArrayBuffer): PlyHeader | null {\n const headerText = new TextDecoder().decode(new U8(data, 0, Math.min(data.byteLength, 1024 * 10)));\n const headerEnd = \"end_header\\n\";\n const idx = headerText.indexOf(headerEnd);\n if (idx < 0) {\n return null;\n }\n const vmatch = /element vertex (\\d+)\\n/.exec(headerText);\n if (!vmatch) {\n return null;\n }\n const vertexCount = parseInt(vmatch[1]!, 10);\n const cmatch = /element chunk (\\d+)\\n/.exec(headerText);\n const chunkCount = cmatch ? parseInt(cmatch[1]!, 10) : 0;\n let section: Section = Section.Chunk;\n let rowVertex = 0;\n let rowChunk = 0;\n const vertexProps: PlyProp[] = [];\n const chunkProps: PlyProp[] = [];\n const shProps: PlyProp[] = [];\n let shDegree = 0;\n for (const line of headerText.slice(0, idx).split(\"\\n\")) {\n if (line.startsWith(\"element \")) {\n const [, kind] = line.split(\" \");\n section = kind === \"chunk\" ? Section.Chunk : kind === \"vertex\" ? Section.Vertex : kind === \"sh\" ? Section.SH : Section.Unused;\n continue;\n }\n if (!line.startsWith(\"property \")) {\n continue;\n }\n const [, type, name] = line.split(\" \");\n if (!type || !name || TYPE_SIZE[type] === undefined) {\n return null;\n }\n const sz = TYPE_SIZE[type]!;\n if (section === Section.Chunk) {\n chunkProps.push({ name, type, offset: rowChunk });\n rowChunk += sz;\n } else if (section === Section.Vertex) {\n vertexProps.push({ name, type, offset: rowVertex });\n rowVertex += sz;\n if (name.startsWith(\"f_rest_\")) {\n shDegree = Math.max(shDegree, shDegreeForIndex(parseInt(name.slice(7), 10)));\n }\n } else if (section === Section.SH) {\n shProps.push({ name, type, offset: 0 });\n if (name.startsWith(\"f_rest_\")) {\n shDegree = Math.max(shDegree, shDegreeForIndex(parseInt(name.slice(7), 10)));\n }\n }\n }\n const shCoefficientCount = shDegree ? ((shDegree + 1) * (shDegree + 1) - 1) * 3 : 0;\n return {\n vertexCount,\n chunkCount,\n rowVertexLength: rowVertex,\n rowChunkLength: rowChunk,\n vertexProps,\n chunkProps,\n shProps,\n shDegree,\n shCoefficientCount,\n dataStart: idx + headerEnd.length,\n };\n}\n\ninterface CompressedChunk {\n minX: number;\n minY: number;\n minZ: number;\n maxX: number;\n maxY: number;\n maxZ: number;\n minSX: number;\n minSY: number;\n minSZ: number;\n maxSX: number;\n maxSY: number;\n maxSZ: number;\n minR: number;\n minG: number;\n minB: number;\n maxR: number;\n maxG: number;\n maxB: number;\n}\n\nfunction readChunks(header: PlyHeader, dv: DataView, offsetRef: { value: number }): CompressedChunk[] {\n const out: CompressedChunk[] = [];\n for (let i = 0; i < header.chunkCount; i++) {\n const c: CompressedChunk = {\n minX: 0,\n minY: 0,\n minZ: 0,\n maxX: 0,\n maxY: 0,\n maxZ: 0,\n minSX: 0,\n minSY: 0,\n minSZ: 0,\n maxSX: 0,\n maxSY: 0,\n maxSZ: 0,\n minR: 0,\n minG: 0,\n minB: 0,\n maxR: 1,\n maxG: 1,\n maxB: 1,\n };\n for (const p of header.chunkProps) {\n if (p.type !== \"float\") {\n continue;\n }\n const v = dv.getFloat32(offsetRef.value + p.offset, true);\n switch (p.name) {\n case \"min_x\":\n c.minX = v;\n break;\n case \"min_y\":\n c.minY = v;\n break;\n case \"min_z\":\n c.minZ = v;\n break;\n case \"max_x\":\n c.maxX = v;\n break;\n case \"max_y\":\n c.maxY = v;\n break;\n case \"max_z\":\n c.maxZ = v;\n break;\n case \"min_scale_x\":\n c.minSX = v;\n break;\n case \"min_scale_y\":\n c.minSY = v;\n break;\n case \"min_scale_z\":\n c.minSZ = v;\n break;\n case \"max_scale_x\":\n c.maxSX = v;\n break;\n case \"max_scale_y\":\n c.maxSY = v;\n break;\n case \"max_scale_z\":\n c.maxSZ = v;\n break;\n case \"min_r\":\n c.minR = v;\n break;\n case \"min_g\":\n c.minG = v;\n break;\n case \"min_b\":\n c.minB = v;\n break;\n case \"max_r\":\n c.maxR = v;\n break;\n case \"max_g\":\n c.maxG = v;\n break;\n case \"max_b\":\n c.maxB = v;\n break;\n }\n }\n out.push(c);\n offsetRef.value += header.rowChunkLength;\n }\n return out;\n}\n\nconst lerp = (a: number, b: number, t: number): number => a + (b - a) * t;\nconst clamp255 = (v: number): number => (v < 0 ? 0 : v > 255 ? 255 : v);\n\n/** Unpack a uint32 as 11-10-11 bits → three normalized floats in [0,1]. */\nfunction unpack111011(value: number, out: [number, number, number]): void {\n out[0] = ((value >>> 21) & 0x7ff) / 0x7ff;\n out[1] = ((value >>> 11) & 0x3ff) / 0x3ff;\n out[2] = (value & 0x7ff) / 0x7ff;\n}\n\n/** Unpack a uint32 as 4 bytes (R,G,B,A normalized to [0,1]). */\nfunction unpack8888(value: number, out: [number, number, number, number]): void {\n out[0] = ((value >>> 24) & 0xff) / 0xff;\n out[1] = ((value >>> 16) & 0xff) / 0xff;\n out[2] = ((value >>> 8) & 0xff) / 0xff;\n out[3] = (value & 0xff) / 0xff;\n}\n\n/** Unpack a uint32 as (2-bit largest index, 3×10-bit components). Returns\n * quaternion as [x, y, z, w] matching BJS `Quaternion.set(x, y, z, w)`. */\nfunction unpackRot(value: number, out: [number, number, number, number]): void {\n const norm = 1.0 / (SQRT2 * 0.5);\n const a = (((value >>> 20) & 0x3ff) / 0x3ff - 0.5) * norm;\n const b = (((value >>> 10) & 0x3ff) / 0x3ff - 0.5) * norm;\n const c = ((value & 0x3ff) / 0x3ff - 0.5) * norm;\n const m = Math.sqrt(Math.max(0, 1.0 - (a * a + b * b + c * c)));\n switch (value >>> 30) {\n case 0:\n out[0] = a;\n out[1] = b;\n out[2] = c;\n out[3] = m;\n break;\n case 1:\n out[0] = m;\n out[1] = b;\n out[2] = c;\n out[3] = a;\n break;\n case 2:\n out[0] = b;\n out[1] = m;\n out[2] = c;\n out[3] = a;\n break;\n default:\n out[0] = b;\n out[1] = c;\n out[2] = m;\n out[3] = a;\n break;\n }\n}\n\n/** Decode a compressed PLY (or a standard PLY with `f_rest_*` SH properties)\n * into a `ParsedSplat`. Dynamic-imported from `load-splat.ts` when\n * `isPlyCompressedOrSH(data)` is true, so the standard-PLY path remains\n * bundle-lean. */\nexport function convertCompressedPlyToParsedSplat(data: ArrayBuffer): ParsedSplat {\n const header = parseHeader(data);\n if (!header) {\n return { data };\n }\n\n const isCompressed = header.chunkCount > 0;\n const dv = new DV(data, header.dataStart);\n const out = new ArrayBuffer(ROW_OUTPUT_LENGTH * header.vertexCount);\n\n const tmpPos: [number, number, number] = [0, 0, 0];\n const tmpScl: [number, number, number] = [0, 0, 0];\n const tmpRgba: [number, number, number, number] = [0, 0, 0, 0];\n const tmpQuat: [number, number, number, number] = [0, 0, 0, 1];\n\n const offsetRef = { value: 0 };\n const chunks = isCompressed ? readChunks(header, dv, offsetRef) : null;\n\n const shFlat = header.shDegree && header.shCoefficientCount ? new U8(header.shCoefficientCount * header.vertexCount) : null;\n const shBlockBase = header.rowChunkLength * header.chunkCount + header.vertexCount * header.rowVertexLength;\n const shDim = header.shCoefficientCount / 3;\n\n for (let i = 0; i < header.vertexCount; i++) {\n const position = new F32(out, i * ROW_OUTPUT_LENGTH, 3);\n const scale = new F32(out, i * ROW_OUTPUT_LENGTH + 12, 3);\n const rgba = new U8C(out, i * ROW_OUTPUT_LENGTH + 24, 4);\n const rot = new U8C(out, i * ROW_OUTPUT_LENGTH + 28, 4);\n const chunk = chunks ? chunks[i >> 8] : null;\n\n let r0 = 255,\n r1 = 0,\n r2 = 0,\n r3 = 0;\n const plySH = shFlat ? new Array<number>(header.shCoefficientCount) : null;\n\n for (const prop of header.vertexProps) {\n let value: number;\n switch (prop.type) {\n case \"float\":\n value = dv.getFloat32(offsetRef.value + prop.offset, true);\n break;\n case \"int\":\n value = dv.getInt32(offsetRef.value + prop.offset, true);\n break;\n case \"uint\":\n value = dv.getUint32(offsetRef.value + prop.offset, true);\n break;\n case \"uchar\":\n value = dv.getUint8(offsetRef.value + prop.offset);\n break;\n case \"short\":\n value = dv.getInt16(offsetRef.value + prop.offset, true);\n break;\n case \"ushort\":\n value = dv.getUint16(offsetRef.value + prop.offset, true);\n break;\n case \"double\":\n value = dv.getFloat64(offsetRef.value + prop.offset, true);\n break;\n default:\n continue;\n }\n switch (prop.name) {\n case \"packed_position\":\n unpack111011(value, tmpPos);\n position[0] = lerp(chunk!.minX, chunk!.maxX, tmpPos[0]);\n position[1] = lerp(chunk!.minY, chunk!.maxY, tmpPos[1]);\n position[2] = lerp(chunk!.minZ, chunk!.maxZ, tmpPos[2]);\n break;\n case \"packed_rotation\":\n unpackRot(value, tmpQuat);\n r0 = tmpQuat[3];\n r1 = tmpQuat[0];\n r2 = tmpQuat[1];\n r3 = tmpQuat[2];\n break;\n case \"packed_scale\":\n unpack111011(value, tmpScl);\n scale[0] = Math.exp(lerp(chunk!.minSX, chunk!.maxSX, tmpScl[0]));\n scale[1] = Math.exp(lerp(chunk!.minSY, chunk!.maxSY, tmpScl[1]));\n scale[2] = Math.exp(lerp(chunk!.minSZ, chunk!.maxSZ, tmpScl[2]));\n break;\n case \"packed_color\":\n unpack8888(value, tmpRgba);\n rgba[0] = lerp(chunk!.minR, chunk!.maxR, tmpRgba[0]) * 255;\n rgba[1] = lerp(chunk!.minG, chunk!.maxG, tmpRgba[1]) * 255;\n rgba[2] = lerp(chunk!.minB, chunk!.maxB, tmpRgba[2]) * 255;\n rgba[3] = tmpRgba[3] * 255;\n break;\n case \"x\":\n position[0] = value;\n break;\n case \"y\":\n position[1] = value;\n break;\n case \"z\":\n position[2] = value;\n break;\n case \"scale_0\":\n scale[0] = Math.exp(value);\n break;\n case \"scale_1\":\n scale[1] = Math.exp(value);\n break;\n case \"scale_2\":\n scale[2] = Math.exp(value);\n break;\n case \"red\":\n case \"diffuse_red\":\n rgba[0] = value;\n break;\n case \"green\":\n case \"diffuse_green\":\n rgba[1] = value;\n break;\n case \"blue\":\n case \"diffuse_blue\":\n rgba[2] = value;\n break;\n case \"f_dc_0\":\n rgba[0] = (0.5 + SH_C0 * value) * 255;\n break;\n case \"f_dc_1\":\n rgba[1] = (0.5 + SH_C0 * value) * 255;\n break;\n case \"f_dc_2\":\n rgba[2] = (0.5 + SH_C0 * value) * 255;\n break;\n case \"f_dc_3\":\n rgba[3] = (0.5 + SH_C0 * value) * 255;\n break;\n case \"opacity\":\n rgba[3] = (1 / (1 + Math.exp(-value))) * 255;\n break;\n case \"rot_0\":\n r0 = value;\n break;\n case \"rot_1\":\n r1 = value;\n break;\n case \"rot_2\":\n r2 = value;\n break;\n case \"rot_3\":\n r3 = value;\n break;\n default:\n if (plySH && prop.name.startsWith(\"f_rest_\")) {\n const shIdx = parseInt(prop.name.slice(7), 10);\n plySH[shIdx] = clamp255(value * 127.5 + 127.5);\n }\n break;\n }\n }\n\n // Compressed PLY: SH bytes live in a trailing block keyed by splat\n // index. Uchar dequant uses BJS's `(v * 8/255 - 4) * 127.5 + 127.5`\n // (different from the standard f_rest float path).\n if (plySH && header.shProps.length > 0) {\n for (let k = 0; k < header.shCoefficientCount; k++) {\n const b = dv.getUint8(shBlockBase + i * header.shCoefficientCount + k);\n plySH[k] = clamp255((b * (8 / 255) - 4) * 127.5 + 127.5);\n }\n }\n\n // PLY stores SH as [R0..R(d-1), G0..G(d-1), B0..B(d-1)]; transpose to\n // the BJS-coefficient layout `[R0,G0,B0, R1,G1,B1, …]`.\n if (plySH && shFlat) {\n for (let j = 0; j < shDim; j++) {\n shFlat[i * header.shCoefficientCount + j * 3 + 0] = plySH[j]!;\n shFlat[i * header.shCoefficientCount + j * 3 + 1] = plySH[j + shDim]!;\n shFlat[i * header.shCoefficientCount + j * 3 + 2] = plySH[j + shDim * 2]!;\n }\n }\n\n const len = Math.hypot(r0, r1, r2, r3) || 1;\n const inv = 1 / len;\n rot[0] = r0 * inv * 127.5 + 127.5;\n rot[1] = r1 * inv * 127.5 + 127.5;\n rot[2] = r2 * inv * 127.5 + 127.5;\n rot[3] = r3 * inv * 127.5 + 127.5;\n\n offsetRef.value += header.rowVertexLength;\n }\n\n if (shFlat && header.shDegree) {\n return { data: out, sh: shFlat, shDegree: header.shDegree };\n }\n return { data: out };\n}\n"],"names":[],"mappings":"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"}
|