@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,243 @@
|
|
|
1
|
+
import { aE as PBR2_HAS_IRIDESCENCE_MAP, aF as PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, aG as PBR2_HAS_IRIDESCENCE, aq as PBR_HAS_METALLIC_REFLECTANCE_MAP, ar as PBR_HAS_REFLECTANCE_MAP, as as PBR2_HAS_REFLECTANCE_FACTORS } from "./index-C8HOR2sB.js";
|
|
2
|
+
const STAGE_FRAGMENT = 2;
|
|
3
|
+
const PBR2_HAS_IRIDESCENCE_UV_TX = 1 << 20;
|
|
4
|
+
const PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX = 1 << 21;
|
|
5
|
+
const PBR2_HAS_IRIDESCENCE_UV2 = 1 << 22;
|
|
6
|
+
const PBR2_HAS_IRIDESCENCE_THICKNESS_UV2 = 1 << 23;
|
|
7
|
+
const IRI_MSH_HAS_UV2 = 1 << 7;
|
|
8
|
+
const IRIDESCENCE_HELPERS = `const IRI_XYZ_TO_REC709:mat3x3<f32>=mat3x3<f32>(
|
|
9
|
+
3.2404542,-0.9692660,0.0556434,
|
|
10
|
+
-1.5371385,1.8760108,-0.2040259,
|
|
11
|
+
-0.4985314,0.0415560,1.0572252);
|
|
12
|
+
fn iri_square3(x:vec3<f32>)->vec3<f32>{return x*x;}
|
|
13
|
+
fn iri_iorFromAirF0(f0:vec3<f32>)->vec3<f32>{
|
|
14
|
+
let s=sqrt(clamp(f0,vec3<f32>(0.0),vec3<f32>(0.9999)));
|
|
15
|
+
return (vec3<f32>(1.0)+s)/(vec3<f32>(1.0)-s);
|
|
16
|
+
}
|
|
17
|
+
fn iri_r0FromIor3(iorT:vec3<f32>,iorI:f32)->vec3<f32>{return iri_square3((iorT-vec3<f32>(iorI))/(iorT+vec3<f32>(iorI)));}
|
|
18
|
+
fn iri_r0FromIor(iorT:f32,iorI:f32)->f32{let r=(iorT-iorI)/(iorT+iorI);return r*r;}
|
|
19
|
+
fn iri_fresSchlick(c:f32,F0:vec3<f32>,F90:vec3<f32>)->vec3<f32>{
|
|
20
|
+
let t=1.0-c;
|
|
21
|
+
let t2=t*t;
|
|
22
|
+
return F0+(F90-F0)*(t2*t2*t);
|
|
23
|
+
}
|
|
24
|
+
fn iri_evalSensitivity(opd:f32,shift:vec3<f32>)->vec3<f32>{
|
|
25
|
+
let phase=6.283185307179586*opd*1.0e-9;
|
|
26
|
+
let val=vec3<f32>(5.4856e-13,4.4201e-13,5.2481e-13);
|
|
27
|
+
let pos=vec3<f32>(1.6810e+06,1.7953e+06,2.2084e+06);
|
|
28
|
+
let vr=vec3<f32>(4.3278e+09,9.3046e+09,6.6121e+09);
|
|
29
|
+
var xyz=val*sqrt(6.283185307179586*vr)*cos(pos*phase+shift)*exp(-(phase*phase)*vr);
|
|
30
|
+
xyz.x=xyz.x+9.7470e-14*sqrt(6.283185307179586*4.5282e+09)*cos(2.2399e+06*phase+shift.x)*exp(-4.5282e+09*phase*phase);
|
|
31
|
+
xyz=xyz/1.0685e-7;
|
|
32
|
+
return IRI_XYZ_TO_REC709*xyz;
|
|
33
|
+
}
|
|
34
|
+
fn iri_eval(outsideIor:f32,eta2:f32,cosTheta1:f32,thickness:f32,baseF0:vec3<f32>)->vec3<f32>{
|
|
35
|
+
let iridescenceIor=mix(outsideIor,eta2,smoothstep(0.0,0.03,thickness));
|
|
36
|
+
let eta=outsideIor/iridescenceIor;
|
|
37
|
+
let sinTheta2Sq=eta*eta*(1.0-cosTheta1*cosTheta1);
|
|
38
|
+
let cosTheta2Sq=1.0-sinTheta2Sq;
|
|
39
|
+
if(cosTheta2Sq<0.0){return vec3<f32>(1.0);}
|
|
40
|
+
let cosTheta2=sqrt(cosTheta2Sq);
|
|
41
|
+
let r0=iri_r0FromIor(iridescenceIor,outsideIor);
|
|
42
|
+
let r12=iri_fresSchlick(cosTheta1,vec3<f32>(r0),vec3<f32>(1.0)).x;
|
|
43
|
+
let t121=1.0-r12;
|
|
44
|
+
var phi12=0.0;
|
|
45
|
+
if(iridescenceIor<outsideIor){phi12=3.141592653589793;}
|
|
46
|
+
let phi21=3.141592653589793-phi12;
|
|
47
|
+
let baseIor=iri_iorFromAirF0(baseF0);
|
|
48
|
+
let r1=iri_r0FromIor3(baseIor,iridescenceIor);
|
|
49
|
+
let r23=iri_fresSchlick(cosTheta2,r1,vec3<f32>(1.0));
|
|
50
|
+
var phi23=vec3<f32>(0.0);
|
|
51
|
+
if(baseIor.x<iridescenceIor){phi23.x=3.141592653589793;}
|
|
52
|
+
if(baseIor.y<iridescenceIor){phi23.y=3.141592653589793;}
|
|
53
|
+
if(baseIor.z<iridescenceIor){phi23.z=3.141592653589793;}
|
|
54
|
+
let opd=2.0*iridescenceIor*thickness*cosTheta2;
|
|
55
|
+
let phi=vec3<f32>(phi21)+phi23;
|
|
56
|
+
let r123=clamp(vec3<f32>(r12)*r23,vec3<f32>(1e-5),vec3<f32>(0.9999));
|
|
57
|
+
let smallR123=sqrt(r123);
|
|
58
|
+
let rs=(t121*t121)*r23/(vec3<f32>(1.0)-r123);
|
|
59
|
+
var outI=vec3<f32>(r12)+rs;
|
|
60
|
+
var cm=rs-vec3<f32>(t121);
|
|
61
|
+
for(var m:i32=1;m<=2;m=m+1){
|
|
62
|
+
cm=cm*smallR123;
|
|
63
|
+
outI=outI+cm*(2.0*iri_evalSensitivity(f32(m)*opd,f32(m)*phi));
|
|
64
|
+
}
|
|
65
|
+
return max(outI,vec3<f32>(0.0));
|
|
66
|
+
}`;
|
|
67
|
+
const IRI_TEX = [
|
|
68
|
+
[PBR2_HAS_IRIDESCENCE_MAP, "texture"],
|
|
69
|
+
[PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, "thicknessTexture"]
|
|
70
|
+
];
|
|
71
|
+
function uvBaseExpr(features2, meshFeatures, uv2Flag) {
|
|
72
|
+
return (features2 & uv2Flag) !== 0 && (meshFeatures & IRI_MSH_HAS_UV2) !== 0 ? "input.uv2" : "input.uv";
|
|
73
|
+
}
|
|
74
|
+
function uvDecl(name, baseUv, hasTx) {
|
|
75
|
+
return hasTx ? `let ${name}=vec2<f32>(dot(material.${name}m.xy,${baseUv}),dot(material.${name}m.zw,${baseUv}))+material.${name}t.xy;` : `let ${name}=${baseUv};`;
|
|
76
|
+
}
|
|
77
|
+
function uvTransformUboFields(name) {
|
|
78
|
+
return [
|
|
79
|
+
{ _name: `${name}m`, _type: "vec4<f32>" },
|
|
80
|
+
{ _name: `${name}t`, _type: "vec4<f32>" }
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
function writeUvTransform(data, offsets, name, tex) {
|
|
84
|
+
const mOff = offsets.get(`${name}m`);
|
|
85
|
+
const tOff = offsets.get(`${name}t`);
|
|
86
|
+
if (mOff === void 0 || tOff === void 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const mi = mOff / 4;
|
|
90
|
+
const ti = tOff / 4;
|
|
91
|
+
const sx = (tex == null ? void 0 : tex.uScale) ?? 1;
|
|
92
|
+
const sy = (tex == null ? void 0 : tex.vScale) ?? 1;
|
|
93
|
+
const ang = (tex == null ? void 0 : tex.uAng) ?? 0;
|
|
94
|
+
const ox = (tex == null ? void 0 : tex.uOffset) ?? 0;
|
|
95
|
+
const oy = (tex == null ? void 0 : tex.vOffset) ?? 0;
|
|
96
|
+
if (ang === 0) {
|
|
97
|
+
data[mi] = sx;
|
|
98
|
+
data[mi + 1] = 0;
|
|
99
|
+
data[mi + 2] = 0;
|
|
100
|
+
data[mi + 3] = sy;
|
|
101
|
+
} else {
|
|
102
|
+
const c = Math.cos(ang);
|
|
103
|
+
const s = Math.sin(ang);
|
|
104
|
+
data[mi] = c * sx;
|
|
105
|
+
data[mi + 1] = -s * sy;
|
|
106
|
+
data[mi + 2] = s * sx;
|
|
107
|
+
data[mi + 3] = c * sy;
|
|
108
|
+
}
|
|
109
|
+
data[ti] = ox;
|
|
110
|
+
data[ti + 1] = oy;
|
|
111
|
+
data[ti + 2] = 0;
|
|
112
|
+
data[ti + 3] = 0;
|
|
113
|
+
}
|
|
114
|
+
function createIridescenceFragment(features, features2, meshFeatures) {
|
|
115
|
+
if ((features2 & PBR2_HAS_IRIDESCENCE) === 0) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const hasIntensityMap = (features2 & PBR2_HAS_IRIDESCENCE_MAP) !== 0;
|
|
119
|
+
const hasThicknessMap = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_MAP) !== 0;
|
|
120
|
+
const hasIntensityUvTx = (features2 & PBR2_HAS_IRIDESCENCE_UV_TX) !== 0;
|
|
121
|
+
const hasThicknessUvTx = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX) !== 0;
|
|
122
|
+
const bindings = [];
|
|
123
|
+
const uboFields = [{ _name: "iridescenceParams", _type: "vec4<f32>" }];
|
|
124
|
+
if (hasIntensityMap) {
|
|
125
|
+
bindings.push(
|
|
126
|
+
{ _name: "iridescenceTexture", _type: { _kind: "texture", _textureType: "texture_2d<f32>" }, _visibility: STAGE_FRAGMENT },
|
|
127
|
+
{ _name: "iridescenceSampler_", _type: { _kind: "sampler", _samplerType: "sampler" }, _visibility: STAGE_FRAGMENT }
|
|
128
|
+
);
|
|
129
|
+
if (hasIntensityUvTx) {
|
|
130
|
+
uboFields.push(...uvTransformUboFields("iridescenceUV"));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (hasThicknessMap) {
|
|
134
|
+
bindings.push(
|
|
135
|
+
{ _name: "iridescenceThicknessTexture", _type: { _kind: "texture", _textureType: "texture_2d<f32>" }, _visibility: STAGE_FRAGMENT },
|
|
136
|
+
{ _name: "iridescenceThicknessSampler_", _type: { _kind: "sampler", _samplerType: "sampler" }, _visibility: STAGE_FRAGMENT }
|
|
137
|
+
);
|
|
138
|
+
if (hasThicknessUvTx) {
|
|
139
|
+
uboFields.push(...uvTransformUboFields("iridescenceThicknessUV"));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const scopeVars = [];
|
|
143
|
+
if (hasIntensityMap) {
|
|
144
|
+
scopeVars.push(uvDecl("iridescenceUV", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_UV2), hasIntensityUvTx));
|
|
145
|
+
}
|
|
146
|
+
if (hasThicknessMap) {
|
|
147
|
+
scopeVars.push(uvDecl("iridescenceThicknessUV", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_THICKNESS_UV2), hasThicknessUvTx));
|
|
148
|
+
}
|
|
149
|
+
const intensity = hasIntensityMap ? "material.iridescenceParams.x*textureSample(iridescenceTexture,iridescenceSampler_,iridescenceUV).r" : "material.iridescenceParams.x";
|
|
150
|
+
const thickness = hasThicknessMap ? "mix(material.iridescenceParams.z,material.iridescenceParams.w,textureSample(iridescenceThicknessTexture,iridescenceThicknessSampler_,iridescenceThicknessUV).g)" : "material.iridescenceParams.w";
|
|
151
|
+
return {
|
|
152
|
+
_id: "iridescence",
|
|
153
|
+
_dependencies: (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0 || (features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0 ? ["reflectance"] : void 0,
|
|
154
|
+
_uboFields: uboFields,
|
|
155
|
+
_bindings: bindings,
|
|
156
|
+
_helperFunctions: IRIDESCENCE_HELPERS,
|
|
157
|
+
_fragmentSlots: {
|
|
158
|
+
...scopeVars.length ? { SV: scopeVars.join("\n") } : void 0,
|
|
159
|
+
MF: `{
|
|
160
|
+
let iriIntensity=clamp(${intensity},0.0,1.0);
|
|
161
|
+
let iriThickness=max(${thickness},0.0);
|
|
162
|
+
let iriF0=iri_eval(1.0,max(material.iridescenceParams.y,1.0001),NdotV,iriThickness,colorF0);
|
|
163
|
+
colorF0=mix(colorF0,iriF0,iriIntensity);
|
|
164
|
+
}`
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function writeIridescenceUBO(data, material, offsets) {
|
|
169
|
+
const iri = material.iridescence;
|
|
170
|
+
if (!(iri == null ? void 0 : iri.isEnabled) || !offsets.has("iridescenceParams")) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const off = offsets.get("iridescenceParams") / 4;
|
|
174
|
+
data[off] = iri.intensity ?? 1;
|
|
175
|
+
data[off + 1] = iri.indexOfRefraction ?? 1.3;
|
|
176
|
+
data[off + 2] = iri.minimumThickness ?? 100;
|
|
177
|
+
data[off + 3] = iri.maximumThickness ?? 400;
|
|
178
|
+
writeUvTransform(data, offsets, "iridescenceUV", iri.texture);
|
|
179
|
+
writeUvTransform(data, offsets, "iridescenceThicknessUV", iri.thicknessTexture);
|
|
180
|
+
}
|
|
181
|
+
const pbrExt = {
|
|
182
|
+
id: "iridescence",
|
|
183
|
+
phase: "base-tex",
|
|
184
|
+
detect(mat) {
|
|
185
|
+
const iri = mat.iridescence;
|
|
186
|
+
if (!(iri == null ? void 0 : iri.isEnabled)) {
|
|
187
|
+
return { f: 0, f2: 0 };
|
|
188
|
+
}
|
|
189
|
+
let f2 = PBR2_HAS_IRIDESCENCE;
|
|
190
|
+
if (iri.texture) {
|
|
191
|
+
f2 |= PBR2_HAS_IRIDESCENCE_MAP;
|
|
192
|
+
if (iri.texture._hasTx) {
|
|
193
|
+
f2 |= PBR2_HAS_IRIDESCENCE_UV_TX;
|
|
194
|
+
}
|
|
195
|
+
if (iri.texture._texCoord === 1) {
|
|
196
|
+
f2 |= PBR2_HAS_IRIDESCENCE_UV2;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (iri.thicknessTexture) {
|
|
200
|
+
f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_MAP;
|
|
201
|
+
if (iri.thicknessTexture._hasTx) {
|
|
202
|
+
f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX;
|
|
203
|
+
}
|
|
204
|
+
if (iri.thicknessTexture._texCoord === 1) {
|
|
205
|
+
f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV2;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return { f: 0, f2 };
|
|
209
|
+
},
|
|
210
|
+
frag: (ctx) => createIridescenceFragment(ctx._features, ctx._features2, ctx._meshFeatures),
|
|
211
|
+
writeUbo: writeIridescenceUBO,
|
|
212
|
+
bind(ctx, entries, b) {
|
|
213
|
+
const iri = ctx._material.iridescence;
|
|
214
|
+
if (!iri) {
|
|
215
|
+
return b;
|
|
216
|
+
}
|
|
217
|
+
for (const [flag, key] of IRI_TEX) {
|
|
218
|
+
const tex = iri[key];
|
|
219
|
+
if ((ctx._features2 & flag) !== 0 && tex) {
|
|
220
|
+
entries.push({ binding: b++, resource: tex.view });
|
|
221
|
+
entries.push({ binding: b++, resource: tex.sampler });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return b;
|
|
225
|
+
},
|
|
226
|
+
textures(mat, t) {
|
|
227
|
+
const iri = mat.iridescence;
|
|
228
|
+
if (!iri) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
for (const [, key] of IRI_TEX) {
|
|
232
|
+
const tex = iri[key];
|
|
233
|
+
if (tex) {
|
|
234
|
+
t.push(tex);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
export {
|
|
240
|
+
pbrExt,
|
|
241
|
+
writeIridescenceUBO
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=iridescence-fragment-Gymp7or5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iridescence-fragment-Gymp7or5.js","sources":["../src/material/pbr/fragments/iridescence-fragment.ts"],"sourcesContent":["/**\n * Iridescence Fragment\n *\n * Native PBR thin-film iridescence (BJS PBRMaterial.iridescence and\n * KHR_materials_iridescence). Modifies the already-computed base-layer colorF0\n * before direct and IBL lighting consume it.\n */\n\nimport type { BindingDecl, ShaderFragment, UboField } from \"../../../shader/fragment-types.js\";\nimport type { Texture2D } from \"../../../texture/texture-2d.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport type { IridescenceProps, PbrMaterialProps } from \"../pbr-material.js\";\nimport {\n PBR_HAS_METALLIC_REFLECTANCE_MAP,\n PBR_HAS_REFLECTANCE_MAP,\n PBR2_HAS_IRIDESCENCE,\n PBR2_HAS_IRIDESCENCE_MAP,\n PBR2_HAS_IRIDESCENCE_THICKNESS_MAP,\n PBR2_HAS_REFLECTANCE_FACTORS,\n} from \"../pbr-flag-bits.js\";\n\nconst STAGE_FRAGMENT = 0x2;\nconst PBR2_HAS_IRIDESCENCE_UV_TX = 1 << 20;\nconst PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX = 1 << 21;\nconst PBR2_HAS_IRIDESCENCE_UV2 = 1 << 22;\nconst PBR2_HAS_IRIDESCENCE_THICKNESS_UV2 = 1 << 23;\nconst IRI_MSH_HAS_UV2 = 1 << 7;\n\nconst IRIDESCENCE_HELPERS = `const IRI_XYZ_TO_REC709:mat3x3<f32>=mat3x3<f32>(\n3.2404542,-0.9692660,0.0556434,\n-1.5371385,1.8760108,-0.2040259,\n-0.4985314,0.0415560,1.0572252);\nfn iri_square3(x:vec3<f32>)->vec3<f32>{return x*x;}\nfn iri_iorFromAirF0(f0:vec3<f32>)->vec3<f32>{\nlet s=sqrt(clamp(f0,vec3<f32>(0.0),vec3<f32>(0.9999)));\nreturn (vec3<f32>(1.0)+s)/(vec3<f32>(1.0)-s);\n}\nfn iri_r0FromIor3(iorT:vec3<f32>,iorI:f32)->vec3<f32>{return iri_square3((iorT-vec3<f32>(iorI))/(iorT+vec3<f32>(iorI)));}\nfn iri_r0FromIor(iorT:f32,iorI:f32)->f32{let r=(iorT-iorI)/(iorT+iorI);return r*r;}\nfn iri_fresSchlick(c:f32,F0:vec3<f32>,F90:vec3<f32>)->vec3<f32>{\nlet t=1.0-c;\nlet t2=t*t;\nreturn F0+(F90-F0)*(t2*t2*t);\n}\nfn iri_evalSensitivity(opd:f32,shift:vec3<f32>)->vec3<f32>{\nlet phase=6.283185307179586*opd*1.0e-9;\nlet val=vec3<f32>(5.4856e-13,4.4201e-13,5.2481e-13);\nlet pos=vec3<f32>(1.6810e+06,1.7953e+06,2.2084e+06);\nlet vr=vec3<f32>(4.3278e+09,9.3046e+09,6.6121e+09);\nvar xyz=val*sqrt(6.283185307179586*vr)*cos(pos*phase+shift)*exp(-(phase*phase)*vr);\nxyz.x=xyz.x+9.7470e-14*sqrt(6.283185307179586*4.5282e+09)*cos(2.2399e+06*phase+shift.x)*exp(-4.5282e+09*phase*phase);\nxyz=xyz/1.0685e-7;\nreturn IRI_XYZ_TO_REC709*xyz;\n}\nfn iri_eval(outsideIor:f32,eta2:f32,cosTheta1:f32,thickness:f32,baseF0:vec3<f32>)->vec3<f32>{\nlet iridescenceIor=mix(outsideIor,eta2,smoothstep(0.0,0.03,thickness));\nlet eta=outsideIor/iridescenceIor;\nlet sinTheta2Sq=eta*eta*(1.0-cosTheta1*cosTheta1);\nlet cosTheta2Sq=1.0-sinTheta2Sq;\nif(cosTheta2Sq<0.0){return vec3<f32>(1.0);}\nlet cosTheta2=sqrt(cosTheta2Sq);\nlet r0=iri_r0FromIor(iridescenceIor,outsideIor);\nlet r12=iri_fresSchlick(cosTheta1,vec3<f32>(r0),vec3<f32>(1.0)).x;\nlet t121=1.0-r12;\nvar phi12=0.0;\nif(iridescenceIor<outsideIor){phi12=3.141592653589793;}\nlet phi21=3.141592653589793-phi12;\nlet baseIor=iri_iorFromAirF0(baseF0);\nlet r1=iri_r0FromIor3(baseIor,iridescenceIor);\nlet r23=iri_fresSchlick(cosTheta2,r1,vec3<f32>(1.0));\nvar phi23=vec3<f32>(0.0);\nif(baseIor.x<iridescenceIor){phi23.x=3.141592653589793;}\nif(baseIor.y<iridescenceIor){phi23.y=3.141592653589793;}\nif(baseIor.z<iridescenceIor){phi23.z=3.141592653589793;}\nlet opd=2.0*iridescenceIor*thickness*cosTheta2;\nlet phi=vec3<f32>(phi21)+phi23;\nlet r123=clamp(vec3<f32>(r12)*r23,vec3<f32>(1e-5),vec3<f32>(0.9999));\nlet smallR123=sqrt(r123);\nlet rs=(t121*t121)*r23/(vec3<f32>(1.0)-r123);\nvar outI=vec3<f32>(r12)+rs;\nvar cm=rs-vec3<f32>(t121);\nfor(var m:i32=1;m<=2;m=m+1){\ncm=cm*smallR123;\noutI=outI+cm*(2.0*iri_evalSensitivity(f32(m)*opd,f32(m)*phi));\n}\nreturn max(outI,vec3<f32>(0.0));\n}`;\n\nconst IRI_TEX: ReadonlyArray<readonly [number, \"texture\" | \"thicknessTexture\"]> = [\n [PBR2_HAS_IRIDESCENCE_MAP, \"texture\"],\n [PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, \"thicknessTexture\"],\n];\n\nfunction uvBaseExpr(features2: number, meshFeatures: number, uv2Flag: number): string {\n return (features2 & uv2Flag) !== 0 && (meshFeatures & IRI_MSH_HAS_UV2) !== 0 ? \"input.uv2\" : \"input.uv\";\n}\n\nfunction uvDecl(name: string, baseUv: string, hasTx: boolean): string {\n return hasTx ? `let ${name}=vec2<f32>(dot(material.${name}m.xy,${baseUv}),dot(material.${name}m.zw,${baseUv}))+material.${name}t.xy;` : `let ${name}=${baseUv};`;\n}\n\nfunction uvTransformUboFields(name: string): UboField[] {\n return [\n { _name: `${name}m`, _type: \"vec4<f32>\" },\n { _name: `${name}t`, _type: \"vec4<f32>\" },\n ];\n}\n\nfunction writeUvTransform(data: Float32Array, offsets: ReadonlyMap<string, number>, name: string, tex: Texture2D | undefined): void {\n const mOff = offsets.get(`${name}m`);\n const tOff = offsets.get(`${name}t`);\n if (mOff === undefined || tOff === undefined) {\n return;\n }\n const mi = mOff / 4;\n const ti = tOff / 4;\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 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\nfunction createIridescenceFragment(features: number, features2: number, meshFeatures: number): ShaderFragment | null {\n if ((features2 & PBR2_HAS_IRIDESCENCE) === 0) {\n return null;\n }\n const hasIntensityMap = (features2 & PBR2_HAS_IRIDESCENCE_MAP) !== 0;\n const hasThicknessMap = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_MAP) !== 0;\n const hasIntensityUvTx = (features2 & PBR2_HAS_IRIDESCENCE_UV_TX) !== 0;\n const hasThicknessUvTx = (features2 & PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX) !== 0;\n const bindings: BindingDecl[] = [];\n const uboFields: UboField[] = [{ _name: \"iridescenceParams\", _type: \"vec4<f32>\" }];\n if (hasIntensityMap) {\n bindings.push(\n { _name: \"iridescenceTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"iridescenceSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n if (hasIntensityUvTx) {\n uboFields.push(...uvTransformUboFields(\"iridescenceUV\"));\n }\n }\n if (hasThicknessMap) {\n bindings.push(\n { _name: \"iridescenceThicknessTexture\", _type: { _kind: \"texture\", _textureType: \"texture_2d<f32>\" }, _visibility: STAGE_FRAGMENT },\n { _name: \"iridescenceThicknessSampler_\", _type: { _kind: \"sampler\", _samplerType: \"sampler\" }, _visibility: STAGE_FRAGMENT }\n );\n if (hasThicknessUvTx) {\n uboFields.push(...uvTransformUboFields(\"iridescenceThicknessUV\"));\n }\n }\n\n const scopeVars: string[] = [];\n if (hasIntensityMap) {\n scopeVars.push(uvDecl(\"iridescenceUV\", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_UV2), hasIntensityUvTx));\n }\n if (hasThicknessMap) {\n scopeVars.push(uvDecl(\"iridescenceThicknessUV\", uvBaseExpr(features2, meshFeatures, PBR2_HAS_IRIDESCENCE_THICKNESS_UV2), hasThicknessUvTx));\n }\n\n const intensity = hasIntensityMap ? \"material.iridescenceParams.x*textureSample(iridescenceTexture,iridescenceSampler_,iridescenceUV).r\" : \"material.iridescenceParams.x\";\n const thickness = hasThicknessMap\n ? \"mix(material.iridescenceParams.z,material.iridescenceParams.w,textureSample(iridescenceThicknessTexture,iridescenceThicknessSampler_,iridescenceThicknessUV).g)\"\n : \"material.iridescenceParams.w\";\n return {\n _id: \"iridescence\",\n _dependencies:\n (features & (PBR_HAS_METALLIC_REFLECTANCE_MAP | PBR_HAS_REFLECTANCE_MAP)) !== 0 || (features2 & PBR2_HAS_REFLECTANCE_FACTORS) !== 0 ? [\"reflectance\"] : undefined,\n _uboFields: uboFields,\n _bindings: bindings,\n _helperFunctions: IRIDESCENCE_HELPERS,\n _fragmentSlots: {\n ...(scopeVars.length ? { SV: scopeVars.join(\"\\n\") } : undefined),\n MF: `{\nlet iriIntensity=clamp(${intensity},0.0,1.0);\nlet iriThickness=max(${thickness},0.0);\nlet iriF0=iri_eval(1.0,max(material.iridescenceParams.y,1.0001),NdotV,iriThickness,colorF0);\ncolorF0=mix(colorF0,iriF0,iriIntensity);\n}`,\n },\n };\n}\n\nexport function writeIridescenceUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n const iri = material.iridescence as IridescenceProps | undefined;\n if (!iri?.isEnabled || !offsets.has(\"iridescenceParams\")) {\n return;\n }\n const off = offsets.get(\"iridescenceParams\")! / 4;\n data[off] = iri.intensity ?? 1.0;\n data[off + 1] = iri.indexOfRefraction ?? 1.3;\n data[off + 2] = iri.minimumThickness ?? 100;\n data[off + 3] = iri.maximumThickness ?? 400;\n writeUvTransform(data, offsets, \"iridescenceUV\", iri.texture);\n writeUvTransform(data, offsets, \"iridescenceThicknessUV\", iri.thicknessTexture);\n}\n\nexport const pbrExt: PbrExt = {\n id: \"iridescence\",\n phase: \"base-tex\",\n detect(mat) {\n const iri = (mat as PbrMaterialProps).iridescence;\n if (!iri?.isEnabled) {\n return { f: 0, f2: 0 };\n }\n let f2 = PBR2_HAS_IRIDESCENCE;\n if (iri.texture) {\n f2 |= PBR2_HAS_IRIDESCENCE_MAP;\n if ((iri.texture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_IRIDESCENCE_UV_TX;\n }\n if ((iri.texture as { _texCoord?: number })._texCoord === 1) {\n f2 |= PBR2_HAS_IRIDESCENCE_UV2;\n }\n }\n if (iri.thicknessTexture) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_MAP;\n if ((iri.thicknessTexture as { _hasTx?: boolean })._hasTx) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX;\n }\n if ((iri.thicknessTexture as { _texCoord?: number })._texCoord === 1) {\n f2 |= PBR2_HAS_IRIDESCENCE_THICKNESS_UV2;\n }\n }\n return { f: 0, f2 };\n },\n frag: (ctx) => createIridescenceFragment(ctx._features, ctx._features2, ctx._meshFeatures),\n writeUbo: writeIridescenceUBO as PbrExt[\"writeUbo\"],\n bind(ctx, entries, b) {\n const iri = (ctx._material as PbrMaterialProps).iridescence;\n if (!iri) {\n return b;\n }\n for (const [flag, key] of IRI_TEX) {\n const tex = iri[key];\n if ((ctx._features2 & flag) !== 0 && tex) {\n entries.push({ binding: b++, resource: tex.view });\n entries.push({ binding: b++, resource: tex.sampler });\n }\n }\n return b;\n },\n textures(mat, t) {\n const iri = (mat as PbrMaterialProps).iridescence;\n if (!iri) {\n return;\n }\n for (const [, key] of IRI_TEX) {\n const tex = iri[key];\n if (tex) {\n t.push(tex);\n }\n }\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const emitter = {
|
|
2
|
+
className: "LengthBlock",
|
|
3
|
+
emit(block, _outputName, stage, state, ctx) {
|
|
4
|
+
const value = ctx.resolve(block, "value", stage, state);
|
|
5
|
+
return { expr: `length(${value.expr})`, type: "f32" };
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
export {
|
|
9
|
+
emitter
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=length-block-ChOkeiHR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-block-ChOkeiHR.js","sources":["../src/material/node/blocks/length-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LengthBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const value = ctx.resolve(block, \"value\", stage, state);\n return { expr: `length(${value.expr})`, type: \"f32\" };\n },\n};\n"],"names":[],"mappings":"AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,WAAO,EAAE,MAAM,UAAU,MAAM,IAAI,KAAK,MAAM,MAAA;AAAA,EAClD;AACJ;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { w as widerType } from "./_math-factory-C-QqW-Wi.js";
|
|
2
|
+
const emitter = {
|
|
3
|
+
className: "LerpBlock",
|
|
4
|
+
emit(block, _outputName, stage, state, ctx) {
|
|
5
|
+
const left = ctx.resolve(block, "left", stage, state);
|
|
6
|
+
const right = ctx.resolve(block, "right", stage, state);
|
|
7
|
+
const gradient = ctx.resolve(block, "gradient", stage, state);
|
|
8
|
+
const t = widerType(left.type, right.type);
|
|
9
|
+
const lc = ctx.cast(left, t).expr;
|
|
10
|
+
const rc = ctx.cast(right, t).expr;
|
|
11
|
+
const gc = ctx.cast(gradient, t).expr;
|
|
12
|
+
return { expr: `mix(${lc}, ${rc}, ${gc})`, type: t };
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
emitter
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=lerp-block-DjI2SfmI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lerp-block-DjI2SfmI.js","sources":["../src/material/node/blocks/lerp-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\nimport { widerType } from \"./_math-factory.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LerpBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const left = ctx.resolve(block, \"left\", stage, state);\n const right = ctx.resolve(block, \"right\", stage, state);\n const gradient = ctx.resolve(block, \"gradient\", stage, state);\n const t = widerType(left.type, right.type);\n const lc = ctx.cast(left, t).expr;\n const rc = ctx.cast(right, t).expr;\n // Gradient can be scalar (broadcast) or vector (per-component). Cast to result type.\n const gc = ctx.cast(gradient, t).expr;\n return { expr: `mix(${lc}, ${rc}, ${gc})`, type: t };\n },\n};\n"],"names":[],"mappings":";AAGO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,OAAO,IAAI,QAAQ,OAAO,QAAQ,OAAO,KAAK;AACpD,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,WAAW,IAAI,QAAQ,OAAO,YAAY,OAAO,KAAK;AAC5D,UAAM,IAAI,UAAU,KAAK,MAAM,MAAM,IAAI;AACzC,UAAM,KAAK,IAAI,KAAK,MAAM,CAAC,EAAE;AAC7B,UAAM,KAAK,IAAI,KAAK,OAAO,CAAC,EAAE;AAE9B,UAAM,KAAK,IAAI,KAAK,UAAU,CAAC,EAAE;AACjC,WAAO,EAAE,MAAM,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,EAAA;AAAA,EACrD;AACJ;"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-C8HOR2sB.js";
|
|
2
|
+
const NME_LIGHTING_HELPER_KEY = "nme_lighting";
|
|
3
|
+
const NME_LIGHTING_HELPER_WGSL = `struct NmeLightResult {
|
|
4
|
+
diffuse: vec3<f32>,
|
|
5
|
+
specular: vec3<f32>,
|
|
6
|
+
shadow: f32,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
fn nme_computeLighting(
|
|
10
|
+
worldPos: vec3<f32>,
|
|
11
|
+
worldNormal: vec3<f32>,
|
|
12
|
+
cameraPos: vec3<f32>,
|
|
13
|
+
diffuseColor: vec3<f32>,
|
|
14
|
+
specularColor: vec3<f32>,
|
|
15
|
+
glossiness: f32,
|
|
16
|
+
shadowFactors: array<f32, ${MAX_LIGHTS}>
|
|
17
|
+
) -> NmeLightResult {
|
|
18
|
+
var result: NmeLightResult;
|
|
19
|
+
result.diffuse = vec3<f32>(0.0);
|
|
20
|
+
result.specular = vec3<f32>(0.0);
|
|
21
|
+
var aggShadow: f32 = 0.0;
|
|
22
|
+
var numLights: f32 = 0.0;
|
|
23
|
+
let viewDir = normalize(cameraPos - worldPos);
|
|
24
|
+
let N = normalize(worldNormal);
|
|
25
|
+
let lc = min(meshU.lc, ${MAX_LIGHTS}u);
|
|
26
|
+
for (var i: u32 = 0u; i < lc; i = i + 1u) {
|
|
27
|
+
let lightIndex = nli(i);
|
|
28
|
+
let L = nmeLights.lights[lightIndex];
|
|
29
|
+
let t = u32(L.vLightData.w);
|
|
30
|
+
let sh = shadowFactors[lightIndex];
|
|
31
|
+
var lv: vec3<f32>;
|
|
32
|
+
var atten: f32 = 1.0;
|
|
33
|
+
if (t == 3u) {
|
|
34
|
+
// Hemispheric: ground/sky mix via half-lambert.
|
|
35
|
+
let nl = 0.5 + 0.5 * dot(N, normalize(L.vLightData.xyz));
|
|
36
|
+
let diff = mix(L.vLightDirection.xyz, L.vLightDiffuse.rgb, nl);
|
|
37
|
+
result.diffuse = result.diffuse + diff * diffuseColor * sh;
|
|
38
|
+
let H = normalize(viewDir + normalize(L.vLightData.xyz));
|
|
39
|
+
let sf = pow(max(0.0, dot(N, H)), max(1.0, glossiness));
|
|
40
|
+
result.specular = result.specular + sf * L.vLightSpecular.rgb * specularColor * sh;
|
|
41
|
+
aggShadow = aggShadow + sh;
|
|
42
|
+
numLights = numLights + 1.0;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (t == 1u) {
|
|
46
|
+
// Directional: vLightData.xyz is the light's forward direction.
|
|
47
|
+
lv = normalize(-L.vLightData.xyz);
|
|
48
|
+
} else {
|
|
49
|
+
// Point / Spot: vLightData.xyz is world-space position; range in vLightDiffuse.a.
|
|
50
|
+
let d = L.vLightData.xyz - worldPos;
|
|
51
|
+
atten = max(0.0, 1.0 - length(d) / L.vLightDiffuse.a);
|
|
52
|
+
lv = normalize(d);
|
|
53
|
+
if (t == 2u) {
|
|
54
|
+
// Spot cone falloff (vLightDirection.xyz=dir, .w=cosHalfAngle; vLightSpecular.a=exp).
|
|
55
|
+
let c = max(0.0, dot(L.vLightDirection.xyz, -lv));
|
|
56
|
+
if (c >= L.vLightDirection.w) {
|
|
57
|
+
atten = atten * max(0.0, pow(c, L.vLightSpecular.a));
|
|
58
|
+
} else {
|
|
59
|
+
atten = 0.0;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
let NdotL = max(0.0, dot(N, lv));
|
|
64
|
+
result.diffuse = result.diffuse + L.vLightDiffuse.rgb * diffuseColor * NdotL * atten * sh;
|
|
65
|
+
let H = normalize(lv + viewDir);
|
|
66
|
+
let NdotH = max(0.0, dot(N, H));
|
|
67
|
+
let specFactor = pow(NdotH, max(1.0, glossiness));
|
|
68
|
+
result.specular = result.specular + L.vLightSpecular.rgb * specularColor * specFactor * atten * sh;
|
|
69
|
+
aggShadow = aggShadow + sh;
|
|
70
|
+
numLights = numLights + 1.0;
|
|
71
|
+
}
|
|
72
|
+
if (numLights > 0.0) {
|
|
73
|
+
result.shadow = aggShadow / numLights;
|
|
74
|
+
} else {
|
|
75
|
+
result.shadow = 1.0;
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
`;
|
|
80
|
+
const SHADOW_FACTORS_ONE = `array<f32, ${MAX_LIGHTS}>(${new Array(MAX_LIGHTS).fill("1.0").join(", ")})`;
|
|
81
|
+
function resolveOptional(block, inputName, fallback, stage, state, ctx, target) {
|
|
82
|
+
const input = block.inputs.get(inputName);
|
|
83
|
+
if (input == null ? void 0 : input.source) {
|
|
84
|
+
return ctx.cast(ctx.resolve(block, inputName, stage, state), target).expr;
|
|
85
|
+
}
|
|
86
|
+
return fallback;
|
|
87
|
+
}
|
|
88
|
+
const emitter = {
|
|
89
|
+
className: "LightBlock",
|
|
90
|
+
stage: "fragment",
|
|
91
|
+
emit(block, outputName, stage, state, ctx) {
|
|
92
|
+
state.fragment.helpers.set(NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL);
|
|
93
|
+
state.usesLightsUbo = true;
|
|
94
|
+
const memoKey = `_light_${block.id}_call`;
|
|
95
|
+
const callExpr = state.fragment.memo.get(memoKey);
|
|
96
|
+
let callVar;
|
|
97
|
+
if (!callExpr) {
|
|
98
|
+
const wp = resolveOptional(block, "worldPosition", "vec3<f32>(0.0)", stage, state, ctx, "vec3f");
|
|
99
|
+
const wn = resolveOptional(block, "worldNormal", "vec3<f32>(0.0, 1.0, 0.0)", stage, state, ctx, "vec3f");
|
|
100
|
+
const cp = resolveOptional(block, "cameraPosition", "_NME_CAMERA_POS_", stage, state, ctx, "vec3f");
|
|
101
|
+
const dc = resolveOptional(block, "diffuseColor", "vec3<f32>(1.0)", stage, state, ctx, "vec3f");
|
|
102
|
+
const sc = resolveOptional(block, "specularColor", "vec3<f32>(1.0)", stage, state, ctx, "vec3f");
|
|
103
|
+
const gl = resolveOptional(block, "glossiness", "1.0", stage, state, ctx, "f32");
|
|
104
|
+
const gp = resolveOptional(block, "glossPower", "1024.0", stage, state, ctx, "f32");
|
|
105
|
+
const sf = state.shadowLights.length > 0 ? `nme_computeShadowFactors(in)` : SHADOW_FACTORS_ONE;
|
|
106
|
+
callVar = `_lt${ctx.temp(state, "light")}`;
|
|
107
|
+
state.fragment.body.push(`let ${callVar} = nme_computeLighting(${wp}, ${wn}, ${cp}, ${dc}, ${sc}, (${gl}) * (${gp}), ${sf});`);
|
|
108
|
+
state.fragment.memo.set(memoKey, { expr: callVar, type: "vec4f" });
|
|
109
|
+
} else {
|
|
110
|
+
callVar = callExpr.expr;
|
|
111
|
+
}
|
|
112
|
+
const out = {
|
|
113
|
+
diffuseOutput: { expr: `${callVar}.diffuse`, type: "vec3f" },
|
|
114
|
+
specularOutput: { expr: `${callVar}.specular`, type: "vec3f" },
|
|
115
|
+
shadow: { expr: `${callVar}.shadow`, type: "f32" }
|
|
116
|
+
};
|
|
117
|
+
return out[outputName] ?? { expr: `${callVar}.diffuse`, type: "vec3f" };
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
export {
|
|
121
|
+
emitter
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=light-block-B11ew7FA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light-block-B11ew7FA.js","sources":["../src/material/node/blocks/_lighting-helper.ts","../src/material/node/blocks/light-block.ts"],"sourcesContent":["/** Shared WGSL helper source for LightBlock.\n *\n * This module exports just the `nme_computeLighting` function definition.\n * The surrounding `LightEntry` / `lightsUniforms` struct decls and the\n * `@group(1) @binding(N) var<uniform> nmeLights` declaration are injected\n * by the pipeline builder (see node-pipeline.ts) once `state.usesLightsUbo`\n * is true. Keeping them out of the helper lets a single `MAX_LIGHTS` value\n * (at compile time) drive both the WGSL array length and the BGL entry size.\n */\n\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nexport const NME_LIGHTING_HELPER_KEY = \"nme_lighting\";\n\nexport const NME_LIGHTING_HELPER_WGSL = `struct NmeLightResult {\n diffuse: vec3<f32>,\n specular: vec3<f32>,\n shadow: f32,\n};\n\nfn nme_computeLighting(\n worldPos: vec3<f32>,\n worldNormal: vec3<f32>,\n cameraPos: vec3<f32>,\n diffuseColor: vec3<f32>,\n specularColor: vec3<f32>,\n glossiness: f32,\n shadowFactors: array<f32, ${MAX_LIGHTS}>\n) -> NmeLightResult {\n var result: NmeLightResult;\n result.diffuse = vec3<f32>(0.0);\n result.specular = vec3<f32>(0.0);\n var aggShadow: f32 = 0.0;\n var numLights: f32 = 0.0;\n let viewDir = normalize(cameraPos - worldPos);\n let N = normalize(worldNormal);\n let lc = min(meshU.lc, ${MAX_LIGHTS}u);\n for (var i: u32 = 0u; i < lc; i = i + 1u) {\n let lightIndex = nli(i);\n let L = nmeLights.lights[lightIndex];\n let t = u32(L.vLightData.w);\n let sh = shadowFactors[lightIndex];\n var lv: vec3<f32>;\n var atten: f32 = 1.0;\n if (t == 3u) {\n // Hemispheric: ground/sky mix via half-lambert.\n let nl = 0.5 + 0.5 * dot(N, normalize(L.vLightData.xyz));\n let diff = mix(L.vLightDirection.xyz, L.vLightDiffuse.rgb, nl);\n result.diffuse = result.diffuse + diff * diffuseColor * sh;\n let H = normalize(viewDir + normalize(L.vLightData.xyz));\n let sf = pow(max(0.0, dot(N, H)), max(1.0, glossiness));\n result.specular = result.specular + sf * L.vLightSpecular.rgb * specularColor * sh;\n aggShadow = aggShadow + sh;\n numLights = numLights + 1.0;\n continue;\n }\n if (t == 1u) {\n // Directional: vLightData.xyz is the light's forward direction.\n lv = normalize(-L.vLightData.xyz);\n } else {\n // Point / Spot: vLightData.xyz is world-space position; range in vLightDiffuse.a.\n let d = L.vLightData.xyz - worldPos;\n atten = max(0.0, 1.0 - length(d) / L.vLightDiffuse.a);\n lv = normalize(d);\n if (t == 2u) {\n // Spot cone falloff (vLightDirection.xyz=dir, .w=cosHalfAngle; vLightSpecular.a=exp).\n let c = max(0.0, dot(L.vLightDirection.xyz, -lv));\n if (c >= L.vLightDirection.w) {\n atten = atten * max(0.0, pow(c, L.vLightSpecular.a));\n } else {\n atten = 0.0;\n }\n }\n }\n let NdotL = max(0.0, dot(N, lv));\n result.diffuse = result.diffuse + L.vLightDiffuse.rgb * diffuseColor * NdotL * atten * sh;\n let H = normalize(lv + viewDir);\n let NdotH = max(0.0, dot(N, H));\n let specFactor = pow(NdotH, max(1.0, glossiness));\n result.specular = result.specular + L.vLightSpecular.rgb * specularColor * specFactor * atten * sh;\n aggShadow = aggShadow + sh;\n numLights = numLights + 1.0;\n }\n if (numLights > 0.0) {\n result.shadow = aggShadow / numLights;\n } else {\n result.shadow = 1.0;\n }\n return result;\n}\n`;\n","/** LightBlock — classic Blinn-Phong lighting.\n *\n * Inputs: worldPosition, worldNormal, cameraPosition, glossiness, glossPower\n * (optional), diffuseColor, specularColor.\n * Outputs: diffuseOutput (vec3), specularOutput (vec3), shadow (f32).\n *\n * The actual math lives in `_lighting-helper.ts` and is injected into the\n * fragment helper map. The pipeline builder is responsible for binding the\n * scene's Lights UBO under `nmeLights` / `nmeLightsCount` at group/binding\n * slots reserved for NME.\n */\n\nimport type { BlockEmitter, NodeExpr } from \"../node-types.js\";\nimport { NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL } from \"./_lighting-helper.js\";\nimport { MAX_LIGHTS } from \"../../../light/types.js\";\n\nconst SHADOW_FACTORS_ONE = `array<f32, ${MAX_LIGHTS}>(${new Array(MAX_LIGHTS).fill(\"1.0\").join(\", \")})`;\n\nfunction resolveOptional(\n block: Parameters<BlockEmitter[\"emit\"]>[0],\n inputName: string,\n fallback: string,\n stage: Parameters<BlockEmitter[\"emit\"]>[2],\n state: Parameters<BlockEmitter[\"emit\"]>[3],\n ctx: Parameters<BlockEmitter[\"emit\"]>[4],\n target: \"vec3f\" | \"f32\"\n): string {\n const input = block.inputs.get(inputName);\n if (input?.source) {\n return ctx.cast(ctx.resolve(block, inputName, stage, state), target).expr;\n }\n return fallback;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"LightBlock\",\n stage: \"fragment\",\n emit(block, outputName, stage, state, ctx) {\n // Inject helper + mark the lights UBO as required.\n state.fragment.helpers.set(NME_LIGHTING_HELPER_KEY, NME_LIGHTING_HELPER_WGSL);\n state.usesLightsUbo = true;\n\n const memoKey = `_light_${block.id}_call`;\n const callExpr = state.fragment.memo.get(memoKey);\n let callVar: string;\n if (!callExpr) {\n const wp = resolveOptional(block, \"worldPosition\", \"vec3<f32>(0.0)\", stage, state, ctx, \"vec3f\");\n const wn = resolveOptional(block, \"worldNormal\", \"vec3<f32>(0.0, 1.0, 0.0)\", stage, state, ctx, \"vec3f\");\n const cp = resolveOptional(block, \"cameraPosition\", \"_NME_CAMERA_POS_\", stage, state, ctx, \"vec3f\");\n const dc = resolveOptional(block, \"diffuseColor\", \"vec3<f32>(1.0)\", stage, state, ctx, \"vec3f\");\n const sc = resolveOptional(block, \"specularColor\", \"vec3<f32>(1.0)\", stage, state, ctx, \"vec3f\");\n const gl = resolveOptional(block, \"glossiness\", \"1.0\", stage, state, ctx, \"f32\");\n // BJS multiplies glossiness * glossPower; default glossPower is 1024 when unconnected.\n const gp = resolveOptional(block, \"glossPower\", \"1024.0\", stage, state, ctx, \"f32\");\n const sf = state.shadowLights.length > 0 ? `nme_computeShadowFactors(in)` : SHADOW_FACTORS_ONE;\n callVar = `_lt${ctx.temp(state, \"light\")}`;\n state.fragment.body.push(`let ${callVar} = nme_computeLighting(${wp}, ${wn}, ${cp}, ${dc}, ${sc}, (${gl}) * (${gp}), ${sf});`);\n state.fragment.memo.set(memoKey, { expr: callVar, type: \"vec4f\" });\n } else {\n callVar = callExpr.expr;\n }\n\n const out: Record<string, NodeExpr> = {\n diffuseOutput: { expr: `${callVar}.diffuse`, type: \"vec3f\" },\n specularOutput: { expr: `${callVar}.specular`, type: \"vec3f\" },\n shadow: { expr: `${callVar}.shadow`, type: \"f32\" },\n };\n return out[outputName] ?? { expr: `${callVar}.diffuse`, type: \"vec3f\" };\n },\n};\n"],"names":[],"mappings":";AAYO,MAAM,0BAA0B;AAEhC,MAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAaR,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BASZ,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACpBxC,MAAM,qBAAqB,cAAc,UAAU,KAAK,IAAI,MAAM,UAAU,EAAE,KAAK,KAAK,EAAE,KAAK,IAAI,CAAC;AAEpG,SAAS,gBACL,OACA,WACA,UACA,OACA,OACA,KACA,QACM;AACN,QAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;AACxC,MAAI,+BAAO,QAAQ;AACf,WAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK,GAAG,MAAM,EAAE;AAAA,EACzE;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAEvC,UAAM,SAAS,QAAQ,IAAI,yBAAyB,wBAAwB;AAC5E,UAAM,gBAAgB;AAEtB,UAAM,UAAU,UAAU,MAAM,EAAE;AAClC,UAAM,WAAW,MAAM,SAAS,KAAK,IAAI,OAAO;AAChD,QAAI;AACJ,QAAI,CAAC,UAAU;AACX,YAAM,KAAK,gBAAgB,OAAO,iBAAiB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC/F,YAAM,KAAK,gBAAgB,OAAO,eAAe,4BAA4B,OAAO,OAAO,KAAK,OAAO;AACvG,YAAM,KAAK,gBAAgB,OAAO,kBAAkB,oBAAoB,OAAO,OAAO,KAAK,OAAO;AAClG,YAAM,KAAK,gBAAgB,OAAO,gBAAgB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC9F,YAAM,KAAK,gBAAgB,OAAO,iBAAiB,kBAAkB,OAAO,OAAO,KAAK,OAAO;AAC/F,YAAM,KAAK,gBAAgB,OAAO,cAAc,OAAO,OAAO,OAAO,KAAK,KAAK;AAE/E,YAAM,KAAK,gBAAgB,OAAO,cAAc,UAAU,OAAO,OAAO,KAAK,KAAK;AAClF,YAAM,KAAK,MAAM,aAAa,SAAS,IAAI,iCAAiC;AAC5E,gBAAU,MAAM,IAAI,KAAK,OAAO,OAAO,CAAC;AACxC,YAAM,SAAS,KAAK,KAAK,OAAO,OAAO,0BAA0B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI;AAC7H,YAAM,SAAS,KAAK,IAAI,SAAS,EAAE,MAAM,SAAS,MAAM,SAAS;AAAA,IACrE,OAAO;AACH,gBAAU,SAAS;AAAA,IACvB;AAEA,UAAM,MAAgC;AAAA,MAClC,eAAe,EAAE,MAAM,GAAG,OAAO,YAAY,MAAM,QAAA;AAAA,MACnD,gBAAgB,EAAE,MAAM,GAAG,OAAO,aAAa,MAAM,QAAA;AAAA,MACrD,QAAQ,EAAE,MAAM,GAAG,OAAO,WAAW,MAAM,MAAA;AAAA,IAAM;AAErD,WAAO,IAAI,UAAU,KAAK,EAAE,MAAM,GAAG,OAAO,YAAY,MAAM,QAAA;AAAA,EAClE;AACJ;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const emitter = {
|
|
2
|
+
className: "LightInformationBlock",
|
|
3
|
+
emit(block, outputName, _stage, state, _ctx) {
|
|
4
|
+
state.usesLightsUbo = true;
|
|
5
|
+
const idxRaw = block.serialized.lightId;
|
|
6
|
+
const idx = typeof idxRaw === "number" ? idxRaw : 0;
|
|
7
|
+
const base = `nmeLights.lights[nli(${idx}u)]`;
|
|
8
|
+
const out = {
|
|
9
|
+
direction: { expr: `${base}.vLightData.xyz`, type: "vec3f" },
|
|
10
|
+
color: { expr: `${base}.vLightDiffuse.rgb`, type: "vec3f" },
|
|
11
|
+
intensity: { expr: `${base}.vLightDiffuse.a`, type: "f32" }
|
|
12
|
+
};
|
|
13
|
+
return out[outputName] ?? out.direction;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export {
|
|
17
|
+
emitter
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=light-information-VJbW0jbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"light-information-VJbW0jbs.js","sources":["../src/material/node/blocks/light-information.ts"],"sourcesContent":["/** LightInformationBlock — exposes a specific light's direction / color / intensity.\n *\n * BJS picks the light by index (serialized as `lightId` or picked default 0).\n * The pipeline builder binds the scene's shared lights UBO under `nmeLights`\n * (an array of `LightEntry` in `lightsUniforms`).\n */\n\nimport type { BlockEmitter, NodeExpr } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"LightInformationBlock\",\n emit(block, outputName, _stage, state, _ctx) {\n state.usesLightsUbo = true;\n const idxRaw = block.serialized.lightId;\n const idx = typeof idxRaw === \"number\" ? idxRaw : 0;\n const base = `nmeLights.lights[nli(${idx}u)]`;\n const out: Record<string, NodeExpr> = {\n direction: { expr: `${base}.vLightData.xyz`, type: \"vec3f\" },\n color: { expr: `${base}.vLightDiffuse.rgb`, type: \"vec3f\" },\n intensity: { expr: `${base}.vLightDiffuse.a`, type: \"f32\" },\n };\n return out[outputName] ?? out.direction!;\n },\n};\n"],"names":[],"mappings":"AASO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,QAAQ,OAAO,MAAM;AACzC,UAAM,gBAAgB;AACtB,UAAM,SAAS,MAAM,WAAW;AAChC,UAAM,MAAM,OAAO,WAAW,WAAW,SAAS;AAClD,UAAM,OAAO,wBAAwB,GAAG;AACxC,UAAM,MAAgC;AAAA,MAClC,WAAW,EAAE,MAAM,GAAG,IAAI,mBAAmB,MAAM,QAAA;AAAA,MACnD,OAAO,EAAE,MAAM,GAAG,IAAI,sBAAsB,MAAM,QAAA;AAAA,MAClD,WAAW,EAAE,MAAM,GAAG,IAAI,oBAAoB,MAAM,MAAA;AAAA,IAAM;AAE9D,WAAO,IAAI,UAAU,KAAK,IAAI;AAAA,EAClC;AACJ;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { aS as WGSL } from "./index-C8HOR2sB.js";
|
|
2
|
+
function loopKey(stage, blockId) {
|
|
3
|
+
return `${stage}|${blockId}`;
|
|
4
|
+
}
|
|
5
|
+
function storageWritesForLoop(block, ctx) {
|
|
6
|
+
var _a;
|
|
7
|
+
const writes = [];
|
|
8
|
+
for (const candidate of ctx.graph.blocks.values()) {
|
|
9
|
+
if (candidate.className !== "StorageWriteBlock") {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const loopID = (_a = candidate.inputs.get("loopID")) == null ? void 0 : _a.source;
|
|
13
|
+
if ((loopID == null ? void 0 : loopID.blockId) === block.id && loopID.outputName === "loopID") {
|
|
14
|
+
writes.push(candidate);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return writes;
|
|
18
|
+
}
|
|
19
|
+
const emitter = {
|
|
20
|
+
className: "LoopBlock",
|
|
21
|
+
emit(block, outputName, stage, state, ctx) {
|
|
22
|
+
const active = state.loopVariables.get(loopKey(stage, block.id));
|
|
23
|
+
if (outputName === "index") {
|
|
24
|
+
if (!active) {
|
|
25
|
+
throw new Error(`LoopBlock "${block.name}": index can only be read while emitting the loop body`);
|
|
26
|
+
}
|
|
27
|
+
return { expr: `f32(${active.indexVar})`, type: "f32" };
|
|
28
|
+
}
|
|
29
|
+
if (outputName === "loopID") {
|
|
30
|
+
throw new Error(`LoopBlock "${block.name}": loopID can only be consumed by StorageReadBlock/StorageWriteBlock`);
|
|
31
|
+
}
|
|
32
|
+
if (outputName !== "output") {
|
|
33
|
+
throw new Error(`LoopBlock "${block.name}": unsupported output "${outputName}"`);
|
|
34
|
+
}
|
|
35
|
+
const initial = ctx.resolve(block, "input", stage, state);
|
|
36
|
+
const valueVar = ctx.temp(state, "loop");
|
|
37
|
+
const indexVar = ctx.temp(state, "loopIndex");
|
|
38
|
+
const body = stage === "vertex" ? state.vertex.body : state.fragment.body;
|
|
39
|
+
body.push(`var ${valueVar}: ${WGSL[initial.type]} = ${initial.expr};`);
|
|
40
|
+
const iterationsInput = block.inputs.get("iterations");
|
|
41
|
+
const iterations = (iterationsInput == null ? void 0 : iterationsInput.source) ? `i32(${ctx.cast(ctx.resolve(block, "iterations", stage, state), "f32").expr})` : String(Math.max(0, Math.floor(block.serialized["iterations"] ?? 4)));
|
|
42
|
+
body.push(`for (var ${indexVar} = 0; ${indexVar} < ${iterations}; ${indexVar} = ${indexVar} + 1) {`);
|
|
43
|
+
const key = loopKey(stage, block.id);
|
|
44
|
+
const previous = state.loopVariables.get(key);
|
|
45
|
+
const stageState = stage === "vertex" ? state.vertex : state.fragment;
|
|
46
|
+
const previousMemo = new Map(stageState.memo);
|
|
47
|
+
state.loopVariables.set(key, { valueVar, valueType: initial.type, indexVar });
|
|
48
|
+
try {
|
|
49
|
+
for (const write of storageWritesForLoop(block, ctx)) {
|
|
50
|
+
const value = ctx.cast(ctx.resolve(write, "value", stage, state), initial.type);
|
|
51
|
+
body.push(`${valueVar} = ${value.expr};`);
|
|
52
|
+
}
|
|
53
|
+
} finally {
|
|
54
|
+
stageState.memo.clear();
|
|
55
|
+
for (const [memoKey, memoValue] of previousMemo) {
|
|
56
|
+
stageState.memo.set(memoKey, memoValue);
|
|
57
|
+
}
|
|
58
|
+
if (previous) {
|
|
59
|
+
state.loopVariables.set(key, previous);
|
|
60
|
+
} else {
|
|
61
|
+
state.loopVariables.delete(key);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
body.push("}");
|
|
65
|
+
return { expr: valueVar, type: initial.type };
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
export {
|
|
69
|
+
emitter
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=loop-block-Bb23EOMb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-block-Bb23EOMb.js","sources":["../src/material/node/blocks/loop-block.ts"],"sourcesContent":["import type { BlockEmitter, NodeBlock, Stage } from \"../node-types.js\";\nimport { WGSL } from \"../node-types.js\";\n\nfunction loopKey(stage: Stage, blockId: number): string {\n return `${stage}|${blockId}`;\n}\n\nfunction storageWritesForLoop(block: NodeBlock, ctx: Parameters<BlockEmitter[\"emit\"]>[4]): NodeBlock[] {\n const writes: NodeBlock[] = [];\n for (const candidate of ctx.graph.blocks.values()) {\n if (candidate.className !== \"StorageWriteBlock\") {\n continue;\n }\n const loopID = candidate.inputs.get(\"loopID\")?.source;\n if (loopID?.blockId === block.id && loopID.outputName === \"loopID\") {\n writes.push(candidate);\n }\n }\n return writes;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"LoopBlock\",\n emit(block, outputName, stage, state, ctx) {\n const active = state.loopVariables.get(loopKey(stage, block.id));\n if (outputName === \"index\") {\n if (!active) {\n throw new Error(`LoopBlock \"${block.name}\": index can only be read while emitting the loop body`);\n }\n return { expr: `f32(${active.indexVar})`, type: \"f32\" };\n }\n if (outputName === \"loopID\") {\n throw new Error(`LoopBlock \"${block.name}\": loopID can only be consumed by StorageReadBlock/StorageWriteBlock`);\n }\n if (outputName !== \"output\") {\n throw new Error(`LoopBlock \"${block.name}\": unsupported output \"${outputName}\"`);\n }\n\n const initial = ctx.resolve(block, \"input\", stage, state);\n const valueVar = ctx.temp(state, \"loop\");\n const indexVar = ctx.temp(state, \"loopIndex\");\n const body = stage === \"vertex\" ? state.vertex.body : state.fragment.body;\n body.push(`var ${valueVar}: ${WGSL[initial.type]} = ${initial.expr};`);\n\n const iterationsInput = block.inputs.get(\"iterations\");\n const iterations = iterationsInput?.source\n ? `i32(${ctx.cast(ctx.resolve(block, \"iterations\", stage, state), \"f32\").expr})`\n : String(Math.max(0, Math.floor((block.serialized[\"iterations\"] as number | undefined) ?? 4)));\n\n body.push(`for (var ${indexVar} = 0; ${indexVar} < ${iterations}; ${indexVar} = ${indexVar} + 1) {`);\n const key = loopKey(stage, block.id);\n const previous = state.loopVariables.get(key);\n const stageState = stage === \"vertex\" ? state.vertex : state.fragment;\n const previousMemo = new Map(stageState.memo);\n state.loopVariables.set(key, { valueVar, valueType: initial.type, indexVar });\n try {\n for (const write of storageWritesForLoop(block, ctx)) {\n const value = ctx.cast(ctx.resolve(write, \"value\", stage, state), initial.type);\n body.push(`${valueVar} = ${value.expr};`);\n }\n } finally {\n stageState.memo.clear();\n for (const [memoKey, memoValue] of previousMemo) {\n stageState.memo.set(memoKey, memoValue);\n }\n if (previous) {\n state.loopVariables.set(key, previous);\n } else {\n state.loopVariables.delete(key);\n }\n }\n body.push(\"}\");\n return { expr: valueVar, type: initial.type };\n },\n};\n"],"names":[],"mappings":";AAGA,SAAS,QAAQ,OAAc,SAAyB;AACpD,SAAO,GAAG,KAAK,IAAI,OAAO;AAC9B;AAEA,SAAS,qBAAqB,OAAkB,KAAuD;;AACnG,QAAM,SAAsB,CAAA;AAC5B,aAAW,aAAa,IAAI,MAAM,OAAO,UAAU;AAC/C,QAAI,UAAU,cAAc,qBAAqB;AAC7C;AAAA,IACJ;AACA,UAAM,UAAS,eAAU,OAAO,IAAI,QAAQ,MAA7B,mBAAgC;AAC/C,SAAI,iCAAQ,aAAY,MAAM,MAAM,OAAO,eAAe,UAAU;AAChE,aAAO,KAAK,SAAS;AAAA,IACzB;AAAA,EACJ;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AACvC,UAAM,SAAS,MAAM,cAAc,IAAI,QAAQ,OAAO,MAAM,EAAE,CAAC;AAC/D,QAAI,eAAe,SAAS;AACxB,UAAI,CAAC,QAAQ;AACT,cAAM,IAAI,MAAM,cAAc,MAAM,IAAI,wDAAwD;AAAA,MACpG;AACA,aAAO,EAAE,MAAM,OAAO,OAAO,QAAQ,KAAK,MAAM,MAAA;AAAA,IACpD;AACA,QAAI,eAAe,UAAU;AACzB,YAAM,IAAI,MAAM,cAAc,MAAM,IAAI,sEAAsE;AAAA,IAClH;AACA,QAAI,eAAe,UAAU;AACzB,YAAM,IAAI,MAAM,cAAc,MAAM,IAAI,0BAA0B,UAAU,GAAG;AAAA,IACnF;AAEA,UAAM,UAAU,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACxD,UAAM,WAAW,IAAI,KAAK,OAAO,MAAM;AACvC,UAAM,WAAW,IAAI,KAAK,OAAO,WAAW;AAC5C,UAAM,OAAO,UAAU,WAAW,MAAM,OAAO,OAAO,MAAM,SAAS;AACrE,SAAK,KAAK,OAAO,QAAQ,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AAErE,UAAM,kBAAkB,MAAM,OAAO,IAAI,YAAY;AACrD,UAAM,cAAa,mDAAiB,UAC9B,OAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,cAAc,OAAO,KAAK,GAAG,KAAK,EAAE,IAAI,MAC3E,OAAO,KAAK,IAAI,GAAG,KAAK,MAAO,MAAM,WAAW,YAAY,KAA4B,CAAC,CAAC,CAAC;AAEjG,SAAK,KAAK,YAAY,QAAQ,SAAS,QAAQ,MAAM,UAAU,KAAK,QAAQ,MAAM,QAAQ,SAAS;AACnG,UAAM,MAAM,QAAQ,OAAO,MAAM,EAAE;AACnC,UAAM,WAAW,MAAM,cAAc,IAAI,GAAG;AAC5C,UAAM,aAAa,UAAU,WAAW,MAAM,SAAS,MAAM;AAC7D,UAAM,eAAe,IAAI,IAAI,WAAW,IAAI;AAC5C,UAAM,cAAc,IAAI,KAAK,EAAE,UAAU,WAAW,QAAQ,MAAM,UAAU;AAC5E,QAAI;AACA,iBAAW,SAAS,qBAAqB,OAAO,GAAG,GAAG;AAClD,cAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,QAAQ,IAAI;AAC9E,aAAK,KAAK,GAAG,QAAQ,MAAM,MAAM,IAAI,GAAG;AAAA,MAC5C;AAAA,IACJ,UAAA;AACI,iBAAW,KAAK,MAAA;AAChB,iBAAW,CAAC,SAAS,SAAS,KAAK,cAAc;AAC7C,mBAAW,KAAK,IAAI,SAAS,SAAS;AAAA,MAC1C;AACA,UAAI,UAAU;AACV,cAAM,cAAc,IAAI,KAAK,QAAQ;AAAA,MACzC,OAAO;AACH,cAAM,cAAc,OAAO,GAAG;AAAA,MAClC;AAAA,IACJ;AACA,SAAK,KAAK,GAAG;AACb,WAAO,EAAE,MAAM,UAAU,MAAM,QAAQ,KAAA;AAAA,EAC3C;AACJ;"}
|