@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,82 @@
|
|
|
1
|
+
import { m as markMaterialUboDirty } from "./index-C8HOR2sB.js";
|
|
2
|
+
function observableColor3(r, g, b, owner) {
|
|
3
|
+
const arr = [r, g, b];
|
|
4
|
+
for (let i = 0; i < 3; i++) {
|
|
5
|
+
let val = arr[i];
|
|
6
|
+
Object.defineProperty(arr, i, {
|
|
7
|
+
get() {
|
|
8
|
+
return val;
|
|
9
|
+
},
|
|
10
|
+
set(v) {
|
|
11
|
+
if (val !== v) {
|
|
12
|
+
val = v;
|
|
13
|
+
markMaterialUboDirty(owner);
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
configurable: true,
|
|
17
|
+
enumerable: true
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return arr;
|
|
21
|
+
}
|
|
22
|
+
function observableVec2(x, y, owner) {
|
|
23
|
+
const arr = [x, y];
|
|
24
|
+
for (let i = 0; i < 2; i++) {
|
|
25
|
+
let val = arr[i];
|
|
26
|
+
Object.defineProperty(arr, i, {
|
|
27
|
+
get() {
|
|
28
|
+
return val;
|
|
29
|
+
},
|
|
30
|
+
set(v) {
|
|
31
|
+
if (val !== v) {
|
|
32
|
+
val = v;
|
|
33
|
+
markMaterialUboDirty(owner);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
configurable: true,
|
|
37
|
+
enumerable: true
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return arr;
|
|
41
|
+
}
|
|
42
|
+
function trackScalar(obj, key) {
|
|
43
|
+
let val = obj[key];
|
|
44
|
+
Object.defineProperty(obj, key, {
|
|
45
|
+
get() {
|
|
46
|
+
return val;
|
|
47
|
+
},
|
|
48
|
+
set(v) {
|
|
49
|
+
if (val !== v) {
|
|
50
|
+
val = v;
|
|
51
|
+
markMaterialUboDirty(obj);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
configurable: true,
|
|
55
|
+
enumerable: true
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function trackSubProps(parent, sub, keys) {
|
|
59
|
+
for (const key of keys) {
|
|
60
|
+
let val = sub[key];
|
|
61
|
+
Object.defineProperty(sub, key, {
|
|
62
|
+
get() {
|
|
63
|
+
return val;
|
|
64
|
+
},
|
|
65
|
+
set(v) {
|
|
66
|
+
if (val !== v) {
|
|
67
|
+
val = v;
|
|
68
|
+
markMaterialUboDirty(parent);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
configurable: true,
|
|
72
|
+
enumerable: true
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
observableVec2 as a,
|
|
78
|
+
trackSubProps as b,
|
|
79
|
+
observableColor3 as o,
|
|
80
|
+
trackScalar as t
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=tracking-primitives-wgdBY85t.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking-primitives-wgdBY85t.js","sources":["../src/material/tracking/tracking-primitives.ts"],"sourcesContent":["/** Shared tracking primitives for observable material properties. */\n\nimport type { Material } from \"../material.js\";\nimport { markMaterialUboDirty } from \"../material-dirty.js\";\n\nexport function observableColor3(r: number, g: number, b: number, owner: Material): [number, number, number] {\n const arr = [r, g, b] as [number, number, number];\n for (let i = 0; i < 3; i++) {\n let val = arr[i]!;\n Object.defineProperty(arr, i, {\n get() {\n return val;\n },\n set(v: number) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(owner);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n return arr;\n}\n\nexport function observableVec2(x: number, y: number, owner: Material): [number, number] {\n const arr = [x, y] as [number, number];\n for (let i = 0; i < 2; i++) {\n let val = arr[i]!;\n Object.defineProperty(arr, i, {\n get() {\n return val;\n },\n set(v: number) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(owner);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n return arr;\n}\n\nexport function trackScalar(obj: any, key: string): void {\n let val = obj[key];\n Object.defineProperty(obj, key, {\n get() {\n return val;\n },\n set(v: any) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(obj as Material);\n }\n },\n configurable: true,\n enumerable: true,\n });\n}\n\nexport function trackSubProps(parent: Material, sub: any, keys: string[]): void {\n for (const key of keys) {\n let val = sub[key];\n Object.defineProperty(sub, key, {\n get() {\n return val;\n },\n set(v: any) {\n if (val !== v) {\n val = v;\n markMaterialUboDirty(parent);\n }\n },\n configurable: true,\n enumerable: true,\n });\n }\n}\n"],"names":[],"mappings":";AAKO,SAAS,iBAAiB,GAAW,GAAW,GAAW,OAA2C;AACzG,QAAM,MAAM,CAAC,GAAG,GAAG,CAAC;AACpB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,MAAM,IAAI,CAAC;AACf,WAAO,eAAe,KAAK,GAAG;AAAA,MAC1B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAW;AACX,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,KAAK;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACA,SAAO;AACX;AAEO,SAAS,eAAe,GAAW,GAAW,OAAmC;AACpF,QAAM,MAAM,CAAC,GAAG,CAAC;AACjB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,QAAI,MAAM,IAAI,CAAC;AACf,WAAO,eAAe,KAAK,GAAG;AAAA,MAC1B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAW;AACX,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,KAAK;AAAA,QAC9B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACA,SAAO;AACX;AAEO,SAAS,YAAY,KAAU,KAAmB;AACrD,MAAI,MAAM,IAAI,GAAG;AACjB,SAAO,eAAe,KAAK,KAAK;AAAA,IAC5B,MAAM;AACF,aAAO;AAAA,IACX;AAAA,IACA,IAAI,GAAQ;AACR,UAAI,QAAQ,GAAG;AACX,cAAM;AACN,6BAAqB,GAAe;AAAA,MACxC;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,IACd,YAAY;AAAA,EAAA,CACf;AACL;AAEO,SAAS,cAAc,QAAkB,KAAU,MAAsB;AAC5E,aAAW,OAAO,MAAM;AACpB,QAAI,MAAM,IAAI,GAAG;AACjB,WAAO,eAAe,KAAK,KAAK;AAAA,MAC5B,MAAM;AACF,eAAO;AAAA,MACX;AAAA,MACA,IAAI,GAAQ;AACR,YAAI,QAAQ,GAAG;AACX,gBAAM;AACN,+BAAqB,MAAM;AAAA,QAC/B;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,IAAA,CACf;AAAA,EACL;AACJ;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { f as formatFloat } from "./_math-factory-C-QqW-Wi.js";
|
|
2
|
+
const emitter = {
|
|
3
|
+
className: "TransformBlock",
|
|
4
|
+
stage: "vertex",
|
|
5
|
+
emit(block, _outputName, stage, state, ctx) {
|
|
6
|
+
const vector = ctx.resolve(block, "vector", stage, state);
|
|
7
|
+
const transform = ctx.resolve(block, "transform", stage, state);
|
|
8
|
+
const wRaw = block.serialized.complementW;
|
|
9
|
+
const zRaw = block.serialized.complementZ;
|
|
10
|
+
const cw = formatFloat(typeof wRaw === "number" ? wRaw : 1);
|
|
11
|
+
const cz = formatFloat(typeof zRaw === "number" ? zRaw : 0);
|
|
12
|
+
let vec4;
|
|
13
|
+
switch (vector.type) {
|
|
14
|
+
case "vec4f":
|
|
15
|
+
vec4 = vector.expr;
|
|
16
|
+
break;
|
|
17
|
+
case "vec3f":
|
|
18
|
+
vec4 = `vec4<f32>(${vector.expr}, ${cw})`;
|
|
19
|
+
break;
|
|
20
|
+
case "vec2f":
|
|
21
|
+
vec4 = `vec4<f32>(${vector.expr}, ${cz}, ${cw})`;
|
|
22
|
+
break;
|
|
23
|
+
default:
|
|
24
|
+
vec4 = `vec4<f32>(${ctx.cast(vector, "vec3f").expr}, ${cw})`;
|
|
25
|
+
}
|
|
26
|
+
return { expr: `(${transform.expr} * ${vec4})`, type: "vec4f" };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
emitter
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=transform-block-DbRph9JI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-block-DbRph9JI.js","sources":["../src/material/node/blocks/transform-block.ts"],"sourcesContent":["/** TransformBlock — matrix * vector.\n *\n * BJS serializes `complementW` (default 1.0 for positions, 0.0 for directions)\n * and `complementZ` for 2D-vector → 3D promotion. We honour both.\n */\n\nimport type { BlockEmitter } from \"../node-types.js\";\nimport { formatFloat } from \"./_math-factory.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"TransformBlock\",\n stage: \"vertex\",\n emit(block, _outputName, stage, state, ctx) {\n const vector = ctx.resolve(block, \"vector\", stage, state);\n const transform = ctx.resolve(block, \"transform\", stage, state);\n const wRaw = block.serialized.complementW;\n const zRaw = block.serialized.complementZ;\n const cw = formatFloat(typeof wRaw === \"number\" ? wRaw : 1);\n const cz = formatFloat(typeof zRaw === \"number\" ? zRaw : 0);\n\n let vec4: string;\n switch (vector.type) {\n case \"vec4f\":\n vec4 = vector.expr;\n break;\n case \"vec3f\":\n vec4 = `vec4<f32>(${vector.expr}, ${cw})`;\n break;\n case \"vec2f\":\n vec4 = `vec4<f32>(${vector.expr}, ${cz}, ${cw})`;\n break;\n default:\n vec4 = `vec4<f32>(${ctx.cast(vector, \"vec3f\").expr}, ${cw})`;\n }\n return { expr: `(${transform.expr} * ${vec4})`, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":";AASO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,SAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK;AACxD,UAAM,YAAY,IAAI,QAAQ,OAAO,aAAa,OAAO,KAAK;AAC9D,UAAM,OAAO,MAAM,WAAW;AAC9B,UAAM,OAAO,MAAM,WAAW;AAC9B,UAAM,KAAK,YAAY,OAAO,SAAS,WAAW,OAAO,CAAC;AAC1D,UAAM,KAAK,YAAY,OAAO,SAAS,WAAW,OAAO,CAAC;AAE1D,QAAI;AACJ,YAAQ,OAAO,MAAA;AAAA,MACX,KAAK;AACD,eAAO,OAAO;AACd;AAAA,MACJ,KAAK;AACD,eAAO,aAAa,OAAO,IAAI,KAAK,EAAE;AACtC;AAAA,MACJ,KAAK;AACD,eAAO,aAAa,OAAO,IAAI,KAAK,EAAE,KAAK,EAAE;AAC7C;AAAA,MACJ;AACI,eAAO,aAAa,IAAI,KAAK,QAAQ,OAAO,EAAE,IAAI,KAAK,EAAE;AAAA,IAAA;AAEjE,WAAO,EAAE,MAAM,IAAI,UAAU,IAAI,MAAM,IAAI,KAAK,MAAM,QAAA;AAAA,EAC1D;AACJ;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const OP = {
|
|
2
|
+
0: "cos",
|
|
3
|
+
1: "sin",
|
|
4
|
+
2: "abs",
|
|
5
|
+
3: "exp",
|
|
6
|
+
4: "exp2",
|
|
7
|
+
5: "round",
|
|
8
|
+
6: "floor",
|
|
9
|
+
7: "ceil",
|
|
10
|
+
8: "sqrt",
|
|
11
|
+
9: "log",
|
|
12
|
+
10: "tan",
|
|
13
|
+
11: "atan",
|
|
14
|
+
12: "acos",
|
|
15
|
+
13: "asin",
|
|
16
|
+
14: "fract",
|
|
17
|
+
15: "sign",
|
|
18
|
+
16: "radians",
|
|
19
|
+
17: "degrees"
|
|
20
|
+
};
|
|
21
|
+
const emitter = {
|
|
22
|
+
className: "TrigonometryBlock",
|
|
23
|
+
emit(block, _outputName, stage, state, ctx) {
|
|
24
|
+
const input = ctx.resolve(block, "input", stage, state);
|
|
25
|
+
const opIdx = block.serialized.operation;
|
|
26
|
+
const fn = typeof opIdx === "number" ? OP[opIdx] : void 0;
|
|
27
|
+
if (!fn) {
|
|
28
|
+
throw new Error(`NodeMaterial: unknown TrigonometryBlock operation ${String(opIdx)}`);
|
|
29
|
+
}
|
|
30
|
+
return { expr: `${fn}(${input.expr})`, type: input.type };
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
emitter
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=trigonometry-block-BYQcTHiD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigonometry-block-BYQcTHiD.js","sources":["../src/material/node/blocks/trigonometry-block.ts"],"sourcesContent":["import type { BlockEmitter } from \"../node-types.js\";\n\n// Matches BJS `TrigonometryBlockOperations` enum.\nconst OP: Record<number, string> = {\n 0: \"cos\",\n 1: \"sin\",\n 2: \"abs\",\n 3: \"exp\",\n 4: \"exp2\",\n 5: \"round\",\n 6: \"floor\",\n 7: \"ceil\",\n 8: \"sqrt\",\n 9: \"log\",\n 10: \"tan\",\n 11: \"atan\",\n 12: \"acos\",\n 13: \"asin\",\n 14: \"fract\",\n 15: \"sign\",\n 16: \"radians\",\n 17: \"degrees\",\n};\n\nexport const emitter: BlockEmitter = {\n className: \"TrigonometryBlock\",\n emit(block, _outputName, stage, state, ctx) {\n const input = ctx.resolve(block, \"input\", stage, state);\n const opIdx = block.serialized.operation;\n const fn = typeof opIdx === \"number\" ? OP[opIdx] : undefined;\n if (!fn) {\n throw new Error(`NodeMaterial: unknown TrigonometryBlock operation ${String(opIdx)}`);\n }\n return { expr: `${fn}(${input.expr})`, type: input.type };\n },\n};\n"],"names":[],"mappings":"AAGA,MAAM,KAA6B;AAAA,EAC/B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACR;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,aAAa,OAAO,OAAO,KAAK;AACxC,UAAM,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK;AACtD,UAAM,QAAQ,MAAM,WAAW;AAC/B,UAAM,KAAK,OAAO,UAAU,WAAW,GAAG,KAAK,IAAI;AACnD,QAAI,CAAC,IAAI;AACL,YAAM,IAAI,MAAM,qDAAqD,OAAO,KAAK,CAAC,EAAE;AAAA,IACxF;AACA,WAAO,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM,IAAI,KAAK,MAAM,MAAM,KAAA;AAAA,EACvD;AACJ;"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
const OUTPUT = {
|
|
2
|
+
rgba: { swizzle: "", type: "vec4f" },
|
|
3
|
+
rgb: { swizzle: ".xyz", type: "vec3f" },
|
|
4
|
+
r: { swizzle: ".x", type: "f32" },
|
|
5
|
+
g: { swizzle: ".y", type: "f32" },
|
|
6
|
+
b: { swizzle: ".z", type: "f32" },
|
|
7
|
+
a: { swizzle: ".w", type: "f32" }
|
|
8
|
+
};
|
|
9
|
+
function sanitize(name) {
|
|
10
|
+
return name.replace(/[^A-Za-z0-9_]/g, "_");
|
|
11
|
+
}
|
|
12
|
+
function formatFloat(value) {
|
|
13
|
+
if (Number.isInteger(value)) {
|
|
14
|
+
return `${value}.0`;
|
|
15
|
+
}
|
|
16
|
+
return `${value}`;
|
|
17
|
+
}
|
|
18
|
+
function textureTransform(block) {
|
|
19
|
+
const tex = block.serialized["texture"];
|
|
20
|
+
const num = (name, fallback) => {
|
|
21
|
+
const value = tex == null ? void 0 : tex[name];
|
|
22
|
+
return typeof value === "number" ? value : fallback;
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
level: num("level", 1),
|
|
26
|
+
uAng: num("uAng", 0),
|
|
27
|
+
vAng: num("vAng", 0),
|
|
28
|
+
wAng: num("wAng", 0),
|
|
29
|
+
uOffset: num("uOffset", 0),
|
|
30
|
+
vOffset: num("vOffset", 0),
|
|
31
|
+
uScale: num("uScale", 1),
|
|
32
|
+
vScale: num("vScale", 1)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function bindingName(block, inputName, ctx, fallback) {
|
|
36
|
+
const input = block.inputs.get(inputName);
|
|
37
|
+
if (input == null ? void 0 : input.source) {
|
|
38
|
+
const producer = ctx.graph.blocks.get(input.source.blockId);
|
|
39
|
+
return sanitize((producer == null ? void 0 : producer.name) || fallback);
|
|
40
|
+
}
|
|
41
|
+
return sanitize(fallback);
|
|
42
|
+
}
|
|
43
|
+
function ensureBinding(state, name) {
|
|
44
|
+
if (!state.textures.find((t) => t.name === name)) {
|
|
45
|
+
state.textures.push({ name, kind: "texture2d", texture: null });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function applyColorSpace(expr, outputName, convertToLinear, convertToGamma) {
|
|
49
|
+
if (!convertToLinear && !convertToGamma) {
|
|
50
|
+
return expr;
|
|
51
|
+
}
|
|
52
|
+
const power = convertToLinear ? "2.2" : "0.45454545";
|
|
53
|
+
if (outputName === "rgba") {
|
|
54
|
+
return `vec4<f32>(pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power})), ${expr}.w)`;
|
|
55
|
+
}
|
|
56
|
+
if (outputName === "rgb") {
|
|
57
|
+
return `pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power}))`;
|
|
58
|
+
}
|
|
59
|
+
if (outputName === "r" || outputName === "g" || outputName === "b") {
|
|
60
|
+
return `pow(max(${expr}${OUTPUT[outputName].swizzle}, 0.0), ${power})`;
|
|
61
|
+
}
|
|
62
|
+
return expr;
|
|
63
|
+
}
|
|
64
|
+
function emitTriPlanarSample(block, stage, state, ctx) {
|
|
65
|
+
var _a;
|
|
66
|
+
if (stage !== "fragment") {
|
|
67
|
+
throw new Error("TriPlanarBlock: texture projection is supported only in the fragment stage");
|
|
68
|
+
}
|
|
69
|
+
const stageState = state.fragment;
|
|
70
|
+
const memoKey = `_triplanar_${block.id}_sample`;
|
|
71
|
+
const memo = stageState.memo.get(memoKey);
|
|
72
|
+
if (memo) {
|
|
73
|
+
return memo;
|
|
74
|
+
}
|
|
75
|
+
const baseName = sanitize(block.name || `triPlanar${block.id}`);
|
|
76
|
+
const texX = bindingName(block, "source", ctx, baseName);
|
|
77
|
+
const texY = bindingName(block, "sourceY", ctx, texX);
|
|
78
|
+
const texZ = bindingName(block, "sourceZ", ctx, texX);
|
|
79
|
+
ensureBinding(state, texX);
|
|
80
|
+
ensureBinding(state, texY);
|
|
81
|
+
ensureBinding(state, texZ);
|
|
82
|
+
const position = ctx.cast(ctx.resolve(block, "position", stage, state), "vec3f");
|
|
83
|
+
const normal = ctx.cast(ctx.resolve(block, "normal", stage, state), "vec3f");
|
|
84
|
+
const sharpnessInput = ((_a = block.inputs.get("sharpness")) == null ? void 0 : _a.source) ? ctx.cast(ctx.resolve(block, "sharpness", stage, state), "f32").expr : "1.0";
|
|
85
|
+
const transform = textureTransform(block);
|
|
86
|
+
const temp = ctx.temp(state, "tri");
|
|
87
|
+
const n = `_n${temp}`;
|
|
88
|
+
const uvx = `_uvx${temp}`;
|
|
89
|
+
const uvy = `_uvy${temp}`;
|
|
90
|
+
const uvz = `_uvz${temp}`;
|
|
91
|
+
const x = `_x${temp}`;
|
|
92
|
+
const y = `_y${temp}`;
|
|
93
|
+
const z = `_z${temp}`;
|
|
94
|
+
const w = `_w${temp}`;
|
|
95
|
+
const sample = `_sample${temp}`;
|
|
96
|
+
stageState.body.push(`let ${n} = ${normal.expr};`);
|
|
97
|
+
stageState.body.push(`var ${uvx} = (${position.expr}).yz;`);
|
|
98
|
+
stageState.body.push(`var ${uvy} = (${position.expr}).zx;`);
|
|
99
|
+
stageState.body.push(`var ${uvz} = (${position.expr}).xy;`);
|
|
100
|
+
if (block.serialized["projectAsCube"] === true) {
|
|
101
|
+
stageState.body.push(`${uvx} = (${uvx}).yx;`);
|
|
102
|
+
stageState.body.push(`if (${n}.x >= 0.0) { ${uvx}.x = -${uvx}.x; }`);
|
|
103
|
+
stageState.body.push(`if (${n}.y < 0.0) { ${uvy}.y = -${uvy}.y; }`);
|
|
104
|
+
stageState.body.push(`if (${n}.z < 0.0) { ${uvz}.x = -${uvz}.x; }`);
|
|
105
|
+
}
|
|
106
|
+
stageState.body.push(`let _cU${temp} = cos(${formatFloat(transform.uAng)});`);
|
|
107
|
+
stageState.body.push(`let _sU${temp} = sin(${formatFloat(transform.uAng)});`);
|
|
108
|
+
stageState.body.push(`${uvx} = mat2x2<f32>(_cU${temp}, -_sU${temp}, _sU${temp}, _cU${temp}) * ${uvx};`);
|
|
109
|
+
stageState.body.push(`let _cV${temp} = cos(${formatFloat(transform.vAng)});`);
|
|
110
|
+
stageState.body.push(`let _sV${temp} = sin(${formatFloat(transform.vAng)});`);
|
|
111
|
+
stageState.body.push(`${uvy} = mat2x2<f32>(_cV${temp}, _sV${temp}, -_sV${temp}, _cV${temp}) * ${uvy};`);
|
|
112
|
+
stageState.body.push(`let _cW${temp} = cos(${formatFloat(transform.wAng)});`);
|
|
113
|
+
stageState.body.push(`let _sW${temp} = sin(${formatFloat(transform.wAng)});`);
|
|
114
|
+
stageState.body.push(`${uvz} = mat2x2<f32>(_cW${temp}, -_sW${temp}, _sW${temp}, _cW${temp}) * ${uvz};`);
|
|
115
|
+
stageState.body.push(`let _scale${temp} = vec2<f32>(${formatFloat(transform.uScale)}, ${formatFloat(transform.vScale)});`);
|
|
116
|
+
stageState.body.push(`let _offset${temp} = vec2<f32>(${formatFloat(transform.uOffset)}, ${formatFloat(transform.vOffset)});`);
|
|
117
|
+
stageState.body.push(`${uvx} = ${uvx} * _scale${temp} + _offset${temp};`);
|
|
118
|
+
stageState.body.push(`${uvy} = ${uvy} * _scale${temp} + _offset${temp};`);
|
|
119
|
+
stageState.body.push(`${uvz} = ${uvz} * _scale${temp} + _offset${temp};`);
|
|
120
|
+
stageState.body.push(`let ${x} = textureSample(nodeTex_${texX}, nodeSamp_${texX}, ${uvx});`);
|
|
121
|
+
stageState.body.push(`let ${y} = textureSample(nodeTex_${texY}, nodeSamp_${texY}, ${uvy});`);
|
|
122
|
+
stageState.body.push(`let ${z} = textureSample(nodeTex_${texZ}, nodeSamp_${texZ}, ${uvz});`);
|
|
123
|
+
stageState.body.push(`let ${w} = pow(abs(${n}), vec3<f32>(${sharpnessInput}));`);
|
|
124
|
+
stageState.body.push(
|
|
125
|
+
`let ${sample} = ((${x} * ${w}.x + ${y} * ${w}.y + ${z} * ${w}.z) / (${w}.x + ${w}.y + ${w}.z)) * ${formatFloat(block.serialized["disableLevelMultiplication"] === true ? 1 : transform.level)};`
|
|
126
|
+
);
|
|
127
|
+
const result = { expr: sample, type: "vec4f" };
|
|
128
|
+
stageState.memo.set(memoKey, result);
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
const emitter = {
|
|
132
|
+
className: "TriPlanarBlock",
|
|
133
|
+
emit(block, outputName, stage, state, ctx) {
|
|
134
|
+
if (outputName === "level") {
|
|
135
|
+
const transform = textureTransform(block);
|
|
136
|
+
return { expr: formatFloat(transform.level), type: "f32" };
|
|
137
|
+
}
|
|
138
|
+
const sample = emitTriPlanarSample(block, stage, state, ctx);
|
|
139
|
+
const out = OUTPUT[outputName] ?? OUTPUT.rgba;
|
|
140
|
+
const serialized = block.serialized;
|
|
141
|
+
const converted = applyColorSpace(sample.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);
|
|
142
|
+
return { expr: converted === sample.expr ? `${sample.expr}${out.swizzle}` : converted, type: out.type };
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
export {
|
|
146
|
+
emitter
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=triplanar-block-BZHkD9hX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triplanar-block-BZHkD9hX.js","sources":["../src/material/node/blocks/triplanar-block.ts"],"sourcesContent":["/** TriPlanarBlock — texture projection from position/normal.\n *\n * Implements the Babylon.js WGSL math for the common texture-source path:\n * uvx = position.yz, uvy = position.zx, uvz = position.xy\n * optional cube-facing flips\n * sample X/Y/Z projections\n * blend by pow(abs(normal), sharpness)\n *\n * Texture transform/level defaults are identity/1.0 unless serialized on the\n * block's embedded texture. Runtime ImageSource texture transforms are not part\n * of Lite's NME binding ABI today, so Scene 81 uses default transforms.\n */\n\nimport type { BlockEmitter, NodeBlock, NodeBuildState, NodeEmitContext, NodeExpr, NodeValueType, Stage } from \"../node-types.js\";\n\nconst OUTPUT: Record<string, { swizzle: string; type: NodeValueType }> = {\n rgba: { swizzle: \"\", type: \"vec4f\" },\n rgb: { swizzle: \".xyz\", type: \"vec3f\" },\n r: { swizzle: \".x\", type: \"f32\" },\n g: { swizzle: \".y\", type: \"f32\" },\n b: { swizzle: \".z\", type: \"f32\" },\n a: { swizzle: \".w\", type: \"f32\" },\n};\n\ninterface TextureTransform {\n readonly level: number;\n readonly uAng: number;\n readonly vAng: number;\n readonly wAng: number;\n readonly uOffset: number;\n readonly vOffset: number;\n readonly uScale: number;\n readonly vScale: number;\n}\n\nfunction sanitize(name: string): string {\n return name.replace(/[^A-Za-z0-9_]/g, \"_\");\n}\n\nfunction formatFloat(value: number): string {\n if (Number.isInteger(value)) {\n return `${value}.0`;\n }\n return `${value}`;\n}\n\nfunction textureTransform(block: NodeBlock): TextureTransform {\n const tex = block.serialized[\"texture\"] as Record<string, unknown> | null | undefined;\n const num = (name: string, fallback: number): number => {\n const value = tex?.[name];\n return typeof value === \"number\" ? value : fallback;\n };\n return {\n level: num(\"level\", 1),\n uAng: num(\"uAng\", 0),\n vAng: num(\"vAng\", 0),\n wAng: num(\"wAng\", 0),\n uOffset: num(\"uOffset\", 0),\n vOffset: num(\"vOffset\", 0),\n uScale: num(\"uScale\", 1),\n vScale: num(\"vScale\", 1),\n };\n}\n\nfunction bindingName(block: NodeBlock, inputName: string, ctx: NodeEmitContext, fallback: string): string {\n const input = block.inputs.get(inputName);\n if (input?.source) {\n const producer = ctx.graph.blocks.get(input.source.blockId);\n return sanitize(producer?.name || fallback);\n }\n return sanitize(fallback);\n}\n\nfunction ensureBinding(state: NodeBuildState, name: string): void {\n if (!state.textures.find((t) => t.name === name)) {\n state.textures.push({ name, kind: \"texture2d\", texture: null });\n }\n}\n\nfunction applyColorSpace(expr: string, outputName: string, convertToLinear: boolean, convertToGamma: boolean): string {\n if (!convertToLinear && !convertToGamma) {\n return expr;\n }\n const power = convertToLinear ? \"2.2\" : \"0.45454545\";\n if (outputName === \"rgba\") {\n return `vec4<f32>(pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power})), ${expr}.w)`;\n }\n if (outputName === \"rgb\") {\n return `pow(max(${expr}.xyz, vec3<f32>(0.0)), vec3<f32>(${power}))`;\n }\n if (outputName === \"r\" || outputName === \"g\" || outputName === \"b\") {\n return `pow(max(${expr}${OUTPUT[outputName]!.swizzle}, 0.0), ${power})`;\n }\n return expr;\n}\n\nfunction emitTriPlanarSample(block: NodeBlock, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr {\n if (stage !== \"fragment\") {\n throw new Error(\"TriPlanarBlock: texture projection is supported only in the fragment stage\");\n }\n\n const stageState = state.fragment;\n const memoKey = `_triplanar_${block.id}_sample`;\n const memo = stageState.memo.get(memoKey);\n if (memo) {\n return memo;\n }\n\n const baseName = sanitize(block.name || `triPlanar${block.id}`);\n const texX = bindingName(block, \"source\", ctx, baseName);\n const texY = bindingName(block, \"sourceY\", ctx, texX);\n const texZ = bindingName(block, \"sourceZ\", ctx, texX);\n ensureBinding(state, texX);\n ensureBinding(state, texY);\n ensureBinding(state, texZ);\n\n const position = ctx.cast(ctx.resolve(block, \"position\", stage, state), \"vec3f\");\n const normal = ctx.cast(ctx.resolve(block, \"normal\", stage, state), \"vec3f\");\n const sharpnessInput = block.inputs.get(\"sharpness\")?.source ? ctx.cast(ctx.resolve(block, \"sharpness\", stage, state), \"f32\").expr : \"1.0\";\n const transform = textureTransform(block);\n\n const temp = ctx.temp(state, \"tri\");\n const n = `_n${temp}`;\n const uvx = `_uvx${temp}`;\n const uvy = `_uvy${temp}`;\n const uvz = `_uvz${temp}`;\n const x = `_x${temp}`;\n const y = `_y${temp}`;\n const z = `_z${temp}`;\n const w = `_w${temp}`;\n const sample = `_sample${temp}`;\n\n stageState.body.push(`let ${n} = ${normal.expr};`);\n stageState.body.push(`var ${uvx} = (${position.expr}).yz;`);\n stageState.body.push(`var ${uvy} = (${position.expr}).zx;`);\n stageState.body.push(`var ${uvz} = (${position.expr}).xy;`);\n if (block.serialized[\"projectAsCube\"] === true) {\n stageState.body.push(`${uvx} = (${uvx}).yx;`);\n stageState.body.push(`if (${n}.x >= 0.0) { ${uvx}.x = -${uvx}.x; }`);\n stageState.body.push(`if (${n}.y < 0.0) { ${uvy}.y = -${uvy}.y; }`);\n stageState.body.push(`if (${n}.z < 0.0) { ${uvz}.x = -${uvz}.x; }`);\n }\n stageState.body.push(`let _cU${temp} = cos(${formatFloat(transform.uAng)});`);\n stageState.body.push(`let _sU${temp} = sin(${formatFloat(transform.uAng)});`);\n stageState.body.push(`${uvx} = mat2x2<f32>(_cU${temp}, -_sU${temp}, _sU${temp}, _cU${temp}) * ${uvx};`);\n stageState.body.push(`let _cV${temp} = cos(${formatFloat(transform.vAng)});`);\n stageState.body.push(`let _sV${temp} = sin(${formatFloat(transform.vAng)});`);\n stageState.body.push(`${uvy} = mat2x2<f32>(_cV${temp}, _sV${temp}, -_sV${temp}, _cV${temp}) * ${uvy};`);\n stageState.body.push(`let _cW${temp} = cos(${formatFloat(transform.wAng)});`);\n stageState.body.push(`let _sW${temp} = sin(${formatFloat(transform.wAng)});`);\n stageState.body.push(`${uvz} = mat2x2<f32>(_cW${temp}, -_sW${temp}, _sW${temp}, _cW${temp}) * ${uvz};`);\n stageState.body.push(`let _scale${temp} = vec2<f32>(${formatFloat(transform.uScale)}, ${formatFloat(transform.vScale)});`);\n stageState.body.push(`let _offset${temp} = vec2<f32>(${formatFloat(transform.uOffset)}, ${formatFloat(transform.vOffset)});`);\n stageState.body.push(`${uvx} = ${uvx} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`${uvy} = ${uvy} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`${uvz} = ${uvz} * _scale${temp} + _offset${temp};`);\n stageState.body.push(`let ${x} = textureSample(nodeTex_${texX}, nodeSamp_${texX}, ${uvx});`);\n stageState.body.push(`let ${y} = textureSample(nodeTex_${texY}, nodeSamp_${texY}, ${uvy});`);\n stageState.body.push(`let ${z} = textureSample(nodeTex_${texZ}, nodeSamp_${texZ}, ${uvz});`);\n stageState.body.push(`let ${w} = pow(abs(${n}), vec3<f32>(${sharpnessInput}));`);\n stageState.body.push(\n `let ${sample} = ((${x} * ${w}.x + ${y} * ${w}.y + ${z} * ${w}.z) / (${w}.x + ${w}.y + ${w}.z)) * ${formatFloat(block.serialized[\"disableLevelMultiplication\"] === true ? 1 : transform.level)};`\n );\n\n const result = { expr: sample, type: \"vec4f\" } as const;\n stageState.memo.set(memoKey, result);\n return result;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TriPlanarBlock\",\n emit(block, outputName, stage, state, ctx) {\n if (outputName === \"level\") {\n const transform = textureTransform(block);\n return { expr: formatFloat(transform.level), type: \"f32\" };\n }\n const sample = emitTriPlanarSample(block, stage, state, ctx);\n const out = OUTPUT[outputName] ?? OUTPUT.rgba!;\n const serialized = block.serialized as { convertToLinearSpace?: boolean; convertToGammaSpace?: boolean };\n const converted = applyColorSpace(sample.expr, outputName, serialized.convertToLinearSpace === true, serialized.convertToGammaSpace === true);\n return { expr: converted === sample.expr ? `${sample.expr}${out.swizzle}` : converted, type: out.type };\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const OUTPUTS = {
|
|
2
|
+
output: { swizzle: "", type: "vec2f" },
|
|
3
|
+
x: { swizzle: ".x", type: "f32" },
|
|
4
|
+
y: { swizzle: ".y", type: "f32" }
|
|
5
|
+
};
|
|
6
|
+
function defaultVec2(expr) {
|
|
7
|
+
return { expr, type: "vec2f" };
|
|
8
|
+
}
|
|
9
|
+
function defaultF32(expr) {
|
|
10
|
+
return { expr, type: "f32" };
|
|
11
|
+
}
|
|
12
|
+
const emitter = {
|
|
13
|
+
className: "TwirlBlock",
|
|
14
|
+
stage: "fragment",
|
|
15
|
+
emit(block, outputName, stage, state, ctx) {
|
|
16
|
+
var _a, _b, _c;
|
|
17
|
+
const input = ctx.cast(ctx.resolve(block, "input", stage, state), "vec2f");
|
|
18
|
+
const strength = ctx.cast(((_a = block.inputs.get("strength")) == null ? void 0 : _a.source) ? ctx.resolve(block, "strength", stage, state) : defaultF32("1.0"), "f32");
|
|
19
|
+
const center = ctx.cast(((_b = block.inputs.get("center")) == null ? void 0 : _b.source) ? ctx.resolve(block, "center", stage, state) : defaultVec2("vec2<f32>(0.5, 0.5)"), "vec2f");
|
|
20
|
+
const offset = ctx.cast(((_c = block.inputs.get("offset")) == null ? void 0 : _c.source) ? ctx.resolve(block, "offset", stage, state) : defaultVec2("vec2<f32>(0.0, 0.0)"), "vec2f");
|
|
21
|
+
const delta = ctx.temp(state, "twirlDelta");
|
|
22
|
+
const angle = ctx.temp(state, "twirlAngle");
|
|
23
|
+
const result = ctx.temp(state, "twirl");
|
|
24
|
+
state.fragment.body.push(`let ${delta} = ${input.expr} - ${center.expr};`);
|
|
25
|
+
state.fragment.body.push(`let ${angle} = ${strength.expr} * length(${delta});`);
|
|
26
|
+
state.fragment.body.push(
|
|
27
|
+
`let ${result} = vec2<f32>(cos(${angle}) * ${delta}.x - sin(${angle}) * ${delta}.y, sin(${angle}) * ${delta}.x + cos(${angle}) * ${delta}.y) + ${center.expr} + ${offset.expr};`
|
|
28
|
+
);
|
|
29
|
+
const out = OUTPUTS[outputName];
|
|
30
|
+
if (!out) {
|
|
31
|
+
throw new Error(`NodeMaterial: TwirlBlock has no output "${outputName}"`);
|
|
32
|
+
}
|
|
33
|
+
return { expr: `${result}${out.swizzle}`, type: out.type };
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export {
|
|
37
|
+
emitter
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=twirl-block-78WtdiBd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twirl-block-78WtdiBd.js","sources":["../src/material/node/blocks/twirl-block.ts"],"sourcesContent":["/** TwirlBlock — rotates a vec2 around a center by strength * distance, then adds offset. */\n\nimport type { BlockEmitter, NodeValueType } from \"../node-types.js\";\n\nconst OUTPUTS: Record<string, { readonly swizzle: string; readonly type: NodeValueType }> = {\n output: { swizzle: \"\", type: \"vec2f\" },\n x: { swizzle: \".x\", type: \"f32\" },\n y: { swizzle: \".y\", type: \"f32\" },\n};\n\nfunction defaultVec2(expr: string): { readonly expr: string; readonly type: \"vec2f\" } {\n return { expr, type: \"vec2f\" };\n}\n\nfunction defaultF32(expr: string): { readonly expr: string; readonly type: \"f32\" } {\n return { expr, type: \"f32\" };\n}\n\nexport const emitter: BlockEmitter = {\n className: \"TwirlBlock\",\n stage: \"fragment\",\n emit(block, outputName, stage, state, ctx) {\n const input = ctx.cast(ctx.resolve(block, \"input\", stage, state), \"vec2f\");\n const strength = ctx.cast(block.inputs.get(\"strength\")?.source ? ctx.resolve(block, \"strength\", stage, state) : defaultF32(\"1.0\"), \"f32\");\n const center = ctx.cast(block.inputs.get(\"center\")?.source ? ctx.resolve(block, \"center\", stage, state) : defaultVec2(\"vec2<f32>(0.5, 0.5)\"), \"vec2f\");\n const offset = ctx.cast(block.inputs.get(\"offset\")?.source ? ctx.resolve(block, \"offset\", stage, state) : defaultVec2(\"vec2<f32>(0.0, 0.0)\"), \"vec2f\");\n const delta = ctx.temp(state, \"twirlDelta\");\n const angle = ctx.temp(state, \"twirlAngle\");\n const result = ctx.temp(state, \"twirl\");\n state.fragment.body.push(`let ${delta} = ${input.expr} - ${center.expr};`);\n state.fragment.body.push(`let ${angle} = ${strength.expr} * length(${delta});`);\n state.fragment.body.push(\n `let ${result} = vec2<f32>(cos(${angle}) * ${delta}.x - sin(${angle}) * ${delta}.y, sin(${angle}) * ${delta}.x + cos(${angle}) * ${delta}.y) + ${center.expr} + ${offset.expr};`\n );\n const out = OUTPUTS[outputName];\n if (!out) {\n throw new Error(`NodeMaterial: TwirlBlock has no output \"${outputName}\"`);\n }\n return { expr: `${result}${out.swizzle}`, type: out.type };\n },\n};\n"],"names":[],"mappings":"AAIA,MAAM,UAAsF;AAAA,EACxF,QAAQ,EAAE,SAAS,IAAI,MAAM,QAAA;AAAA,EAC7B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAC9B;AAEA,SAAS,YAAY,MAAiE;AAClF,SAAO,EAAE,MAAM,MAAM,QAAA;AACzB;AAEA,SAAS,WAAW,MAA+D;AAC/E,SAAO,EAAE,MAAM,MAAM,MAAA;AACzB;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAjB/C;AAkBQ,UAAM,QAAQ,IAAI,KAAK,IAAI,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,OAAO;AACzE,UAAM,WAAW,IAAI,OAAK,WAAM,OAAO,IAAI,UAAU,MAA3B,mBAA8B,UAAS,IAAI,QAAQ,OAAO,YAAY,OAAO,KAAK,IAAI,WAAW,KAAK,GAAG,KAAK;AACxI,UAAM,SAAS,IAAI,OAAK,WAAM,OAAO,IAAI,QAAQ,MAAzB,mBAA4B,UAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK,IAAI,YAAY,qBAAqB,GAAG,OAAO;AACrJ,UAAM,SAAS,IAAI,OAAK,WAAM,OAAO,IAAI,QAAQ,MAAzB,mBAA4B,UAAS,IAAI,QAAQ,OAAO,UAAU,OAAO,KAAK,IAAI,YAAY,qBAAqB,GAAG,OAAO;AACrJ,UAAM,QAAQ,IAAI,KAAK,OAAO,YAAY;AAC1C,UAAM,QAAQ,IAAI,KAAK,OAAO,YAAY;AAC1C,UAAM,SAAS,IAAI,KAAK,OAAO,OAAO;AACtC,UAAM,SAAS,KAAK,KAAK,OAAO,KAAK,MAAM,MAAM,IAAI,MAAM,OAAO,IAAI,GAAG;AACzE,UAAM,SAAS,KAAK,KAAK,OAAO,KAAK,MAAM,SAAS,IAAI,aAAa,KAAK,IAAI;AAC9E,UAAM,SAAS,KAAK;AAAA,MAChB,OAAO,MAAM,oBAAoB,KAAK,OAAO,KAAK,YAAY,KAAK,OAAO,KAAK,WAAW,KAAK,OAAO,KAAK,YAAY,KAAK,OAAO,KAAK,SAAS,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA,IAAA;AAEjL,UAAM,MAAM,QAAQ,UAAU;AAC9B,QAAI,CAAC,KAAK;AACN,YAAM,IAAI,MAAM,2CAA2C,UAAU,GAAG;AAAA,IAC5E;AACA,WAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,OAAO,IAAI,MAAM,IAAI,KAAA;AAAA,EACxD;AACJ;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { aM as PBR2_HAS_UNLIT } from "./index-C8HOR2sB.js";
|
|
2
|
+
function createUnlitFragment(hasIbl) {
|
|
3
|
+
const assign = `color = baseColor * material.unlitColor;`;
|
|
4
|
+
return {
|
|
5
|
+
_id: "unlit",
|
|
6
|
+
_dependencies: hasIbl ? ["ibl"] : void 0,
|
|
7
|
+
_uboFields: [
|
|
8
|
+
{ _name: "unlitColor", _type: "vec3<f32>" },
|
|
9
|
+
{ _name: "_unlitColorPad", _type: "f32" }
|
|
10
|
+
],
|
|
11
|
+
_fragmentSlots: hasIbl ? { AI: assign } : { NI: assign }
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function writeUnlitUBO(data, material, offsets) {
|
|
15
|
+
if (!material.unlit || !offsets.has("unlitColor")) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const off = offsets.get("unlitColor") / 4;
|
|
19
|
+
const tint = material.unlitColor ?? [1, 1, 1];
|
|
20
|
+
data[off] = tint[0];
|
|
21
|
+
data[off + 1] = tint[1];
|
|
22
|
+
data[off + 2] = tint[2];
|
|
23
|
+
}
|
|
24
|
+
const pbrExt = {
|
|
25
|
+
id: "unlit",
|
|
26
|
+
phase: "fragment",
|
|
27
|
+
detect(mat) {
|
|
28
|
+
return mat.unlit ? { f: 0, f2: PBR2_HAS_UNLIT } : { f: 0, f2: 0 };
|
|
29
|
+
},
|
|
30
|
+
frag(ctx) {
|
|
31
|
+
if (!(ctx._features2 & PBR2_HAS_UNLIT)) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return createUnlitFragment(ctx._hasIbl);
|
|
35
|
+
},
|
|
36
|
+
writeUbo: writeUnlitUBO
|
|
37
|
+
};
|
|
38
|
+
export {
|
|
39
|
+
createUnlitFragment,
|
|
40
|
+
pbrExt,
|
|
41
|
+
writeUnlitUBO
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=unlit-fragment-BIlhJpz6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlit-fragment-BIlhJpz6.js","sources":["../src/material/pbr/fragments/unlit-fragment.ts"],"sourcesContent":["/**\n * Unlit Fragment (KHR_materials_unlit).\n *\n * Replaces the lit-color computation with `baseColor * unlitColor` right\n * before the tonemap/gamma/contrast chain runs. Depends on the IBL fragment\n * when present so our AI injection runs *after* IBL's, overwriting the IBL\n * color contribution. The subsequent tonemap/gamma/contrast stages still\n * apply, matching BJS's unlit output under `createDefaultEnvironment`.\n *\n * Zero bytes in bundles for scenes that don't use unlit materials.\n */\n\nimport type { ShaderFragment } from \"../../../shader/fragment-types.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\nimport { PBR2_HAS_UNLIT } from \"../pbr-flag-bits.js\";\n\nexport function createUnlitFragment(hasIbl: boolean): ShaderFragment {\n const assign = `color = baseColor * material.unlitColor;`;\n return {\n _id: \"unlit\",\n _dependencies: hasIbl ? [\"ibl\"] : undefined,\n _uboFields: [\n { _name: \"unlitColor\", _type: \"vec3<f32>\" },\n { _name: \"_unlitColorPad\", _type: \"f32\" },\n ],\n _fragmentSlots: hasIbl ? { AI: assign } : { NI: assign },\n };\n}\n\n/** Write the unlit material-UBO slice. */\nexport function writeUnlitUBO(data: Float32Array, material: PbrMaterialProps, offsets: ReadonlyMap<string, number>): void {\n if (!material.unlit || !offsets.has(\"unlitColor\")) {\n return;\n }\n const off = offsets.get(\"unlitColor\")! / 4;\n const tint = material.unlitColor ?? [1, 1, 1];\n data[off] = tint[0]!;\n data[off + 1] = tint[1]!;\n data[off + 2] = tint[2]!;\n}\n\nexport const pbrExt: PbrExt = {\n id: \"unlit\",\n phase: \"fragment\",\n detect(mat) {\n return (mat as PbrMaterialProps).unlit ? { f: 0, f2: PBR2_HAS_UNLIT } : { f: 0, f2: 0 };\n },\n frag(ctx) {\n if (!(ctx._features2 & PBR2_HAS_UNLIT)) {\n return null;\n }\n return createUnlitFragment(ctx._hasIbl);\n },\n writeUbo: writeUnlitUBO as PbrExt[\"writeUbo\"],\n};\n"],"names":[],"mappings":";AAiBO,SAAS,oBAAoB,QAAiC;AACjE,QAAM,SAAS;AACf,SAAO;AAAA,IACH,KAAK;AAAA,IACL,eAAe,SAAS,CAAC,KAAK,IAAI;AAAA,IAClC,YAAY;AAAA,MACR,EAAE,OAAO,cAAc,OAAO,YAAA;AAAA,MAC9B,EAAE,OAAO,kBAAkB,OAAO,MAAA;AAAA,IAAM;AAAA,IAE5C,gBAAgB,SAAS,EAAE,IAAI,WAAW,EAAE,IAAI,OAAA;AAAA,EAAO;AAE/D;AAGO,SAAS,cAAc,MAAoB,UAA4B,SAA4C;AACtH,MAAI,CAAC,SAAS,SAAS,CAAC,QAAQ,IAAI,YAAY,GAAG;AAC/C;AAAA,EACJ;AACA,QAAM,MAAM,QAAQ,IAAI,YAAY,IAAK;AACzC,QAAM,OAAO,SAAS,cAAc,CAAC,GAAG,GAAG,CAAC;AAC5C,OAAK,GAAG,IAAI,KAAK,CAAC;AAClB,OAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AACtB,OAAK,MAAM,CAAC,IAAI,KAAK,CAAC;AAC1B;AAEO,MAAM,SAAiB;AAAA,EAC1B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO,KAAK;AACR,WAAQ,IAAyB,QAAQ,EAAE,GAAG,GAAG,IAAI,eAAA,IAAmB,EAAE,GAAG,GAAG,IAAI,EAAA;AAAA,EACxF;AAAA,EACA,KAAK,KAAK;AACN,QAAI,EAAE,IAAI,aAAa,iBAAiB;AACpC,aAAO;AAAA,IACX;AACA,WAAO,oBAAoB,IAAI,OAAO;AAAA,EAC1C;AAAA,EACA,UAAU;AACd;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function writeOne(data, offsets, texName, tex) {
|
|
2
|
+
const mOff = offsets.get(`${texName}UVm`);
|
|
3
|
+
const tOff = offsets.get(`${texName}UVt`);
|
|
4
|
+
if (mOff === void 0 || tOff === void 0) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const mi = mOff / 4;
|
|
8
|
+
const ti = tOff / 4;
|
|
9
|
+
const sx = (tex == null ? void 0 : tex.uScale) ?? 1;
|
|
10
|
+
const sy = (tex == null ? void 0 : tex.vScale) ?? 1;
|
|
11
|
+
const ang = (tex == null ? void 0 : tex.uAng) ?? 0;
|
|
12
|
+
const ox = (tex == null ? void 0 : tex.uOffset) ?? 0;
|
|
13
|
+
const oy = (tex == null ? void 0 : tex.vOffset) ?? 0;
|
|
14
|
+
if (ang === 0) {
|
|
15
|
+
data[mi] = sx;
|
|
16
|
+
data[mi + 1] = 0;
|
|
17
|
+
data[mi + 2] = 0;
|
|
18
|
+
data[mi + 3] = sy;
|
|
19
|
+
} else {
|
|
20
|
+
const c = Math.cos(ang);
|
|
21
|
+
const s = Math.sin(ang);
|
|
22
|
+
data[mi] = c * sx;
|
|
23
|
+
data[mi + 1] = -s * sy;
|
|
24
|
+
data[mi + 2] = s * sx;
|
|
25
|
+
data[mi + 3] = c * sy;
|
|
26
|
+
}
|
|
27
|
+
data[ti] = ox;
|
|
28
|
+
data[ti + 1] = oy;
|
|
29
|
+
data[ti + 2] = 0;
|
|
30
|
+
data[ti + 3] = 0;
|
|
31
|
+
}
|
|
32
|
+
const pbrExt = {
|
|
33
|
+
id: "uv-transform",
|
|
34
|
+
phase: "fragment",
|
|
35
|
+
writeUbo(data, material, offsets) {
|
|
36
|
+
const m = material;
|
|
37
|
+
writeOne(data, offsets, "baseColor", m.baseColorTexture);
|
|
38
|
+
writeOne(data, offsets, "normal", m.normalTexture);
|
|
39
|
+
writeOne(data, offsets, "orm", m.ormTexture);
|
|
40
|
+
writeOne(data, offsets, "emissive", m.emissiveTexture);
|
|
41
|
+
writeOne(data, offsets, "specGloss", m.specGlossTexture);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export {
|
|
45
|
+
pbrExt
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=uv-transform-fragment-hYujGpZg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uv-transform-fragment-hYujGpZg.js","sources":["../src/material/pbr/fragments/uv-transform-fragment.ts"],"sourcesContent":["/** UV-transform PbrExt. Registered lazily only when a scene actually has a\n * material with PBR2_HAS_UV_TRANSFORM set, so non-UV-transform bundles pay\n * zero bytes. Template-only ext — contributes no fragment or bindings, just\n * a material-UBO slice. */\n\nimport type { Texture2D } from \"../../../texture/texture-2d.js\";\nimport type { PbrMaterialProps } from \"../pbr-material.js\";\nimport type { PbrExt } from \"../pbr-flags.js\";\n\nfunction writeOne(data: Float32Array, offsets: ReadonlyMap<string, number>, texName: string, tex: Texture2D | null | undefined): void {\n const mOff = offsets.get(`${texName}UVm`);\n const tOff = offsets.get(`${texName}UVt`);\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\nexport const pbrExt: PbrExt = {\n id: \"uv-transform\",\n phase: \"fragment\",\n writeUbo(data: Float32Array, material: unknown, offsets: ReadonlyMap<string, number>): void {\n const m = material as PbrMaterialProps;\n writeOne(data, offsets, \"baseColor\", m.baseColorTexture);\n writeOne(data, offsets, \"normal\", m.normalTexture);\n writeOne(data, offsets, \"orm\", m.ormTexture);\n writeOne(data, offsets, \"emissive\", m.emissiveTexture);\n writeOne(data, offsets, \"specGloss\", m.specGlossTexture);\n },\n};\n"],"names":[],"mappings":"AASA,SAAS,SAAS,MAAoB,SAAsC,SAAiB,KAAyC;AAClI,QAAM,OAAO,QAAQ,IAAI,GAAG,OAAO,KAAK;AACxC,QAAM,OAAO,QAAQ,IAAI,GAAG,OAAO,KAAK;AACxC,MAAI,SAAS,UAAa,SAAS,QAAW;AAC1C;AAAA,EACJ;AACA,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,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,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,SAAS,MAAoB,UAAmB,SAA4C;AACxF,UAAM,IAAI;AACV,aAAS,MAAM,SAAS,aAAa,EAAE,gBAAgB;AACvD,aAAS,MAAM,SAAS,UAAU,EAAE,aAAa;AACjD,aAAS,MAAM,SAAS,OAAO,EAAE,UAAU;AAC3C,aAAS,MAAM,SAAS,YAAY,EAAE,eAAe;AACrD,aAAS,MAAM,SAAS,aAAa,EAAE,gBAAgB;AAAA,EAC3D;AACJ;"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function tryResolve(block, inputName, stage, state, ctx) {
|
|
2
|
+
const input = block.inputs.get(inputName);
|
|
3
|
+
if (!input || !input.source) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
return ctx.resolve(block, inputName, stage, state);
|
|
7
|
+
}
|
|
8
|
+
function tryResolveAny(block, inputNames, stage, state, ctx) {
|
|
9
|
+
for (const inputName of inputNames) {
|
|
10
|
+
const resolved = tryResolve(block, inputName, stage, state, ctx);
|
|
11
|
+
if (resolved) {
|
|
12
|
+
return resolved;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const emitter = {
|
|
18
|
+
className: "VectorMergerBlock",
|
|
19
|
+
emit(block, outputName, stage, state, ctx) {
|
|
20
|
+
const xyzIn = tryResolveAny(block, ["xyzIn", "xyz"], stage, state, ctx);
|
|
21
|
+
const xyIn = tryResolveAny(block, ["xyIn", "xy"], stage, state, ctx);
|
|
22
|
+
const zwIn = tryResolveAny(block, ["zwIn", "zw"], stage, state, ctx);
|
|
23
|
+
const x = tryResolve(block, "x", stage, state, ctx);
|
|
24
|
+
const y = tryResolve(block, "y", stage, state, ctx);
|
|
25
|
+
const z = tryResolve(block, "z", stage, state, ctx);
|
|
26
|
+
const w = tryResolve(block, "w", stage, state, ctx);
|
|
27
|
+
const sx = x ? ctx.cast(x, "f32").expr : xyIn ? `(${xyIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).x` : "0.0";
|
|
28
|
+
const sy = y ? ctx.cast(y, "f32").expr : xyIn ? `(${xyIn.expr}).y` : xyzIn ? `(${xyzIn.expr}).y` : "0.0";
|
|
29
|
+
const sz = z ? ctx.cast(z, "f32").expr : zwIn ? `(${zwIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).z` : "0.0";
|
|
30
|
+
const sw = w ? ctx.cast(w, "f32").expr : zwIn ? `(${zwIn.expr}).y` : "0.0";
|
|
31
|
+
if (outputName === "xy") {
|
|
32
|
+
return { expr: `vec2<f32>(${sx}, ${sy})`, type: "vec2f" };
|
|
33
|
+
}
|
|
34
|
+
if (outputName === "xyz") {
|
|
35
|
+
return { expr: `vec3<f32>(${sx}, ${sy}, ${sz})`, type: "vec3f" };
|
|
36
|
+
}
|
|
37
|
+
return { expr: `vec4<f32>(${sx}, ${sy}, ${sz}, ${sw})`, type: "vec4f" };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export {
|
|
41
|
+
emitter
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=vector-merger-CrW-ONB0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-merger-CrW-ONB0.js","sources":["../src/material/node/blocks/vector-merger.ts"],"sourcesContent":["/** VectorMergerBlock emitter.\n *\n * Combines up to 4 scalar/vector inputs into a vector output. BJS input names:\n * `xyIn`, `zwIn`, `xyzIn`, `x`, `y`, `z`, `w`. Outputs: `xyzw`, `xyz`, `xy`.\n * Unconnected inputs default to 0.\n */\n\nimport type { BlockEmitter, NodeExpr, NodeEmitContext, NodeBuildState, NodeBlock, Stage } from \"../node-types.js\";\n\nfunction tryResolve(block: NodeBlock, inputName: string, stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr | null {\n const input = block.inputs.get(inputName);\n if (!input || !input.source) {\n return null;\n }\n return ctx.resolve(block, inputName, stage, state);\n}\n\nfunction tryResolveAny(block: NodeBlock, inputNames: string[], stage: Stage, state: NodeBuildState, ctx: NodeEmitContext): NodeExpr | null {\n for (const inputName of inputNames) {\n const resolved = tryResolve(block, inputName, stage, state, ctx);\n if (resolved) {\n return resolved;\n }\n }\n return null;\n}\n\nexport const emitter: BlockEmitter = {\n className: \"VectorMergerBlock\",\n emit(block, outputName, stage, state, ctx) {\n // Resolve optional inputs. Prefer bundle (xyzIn/xyIn/zwIn) over scalar (x/y/z/w).\n const xyzIn = tryResolveAny(block, [\"xyzIn\", \"xyz\"], stage, state, ctx);\n const xyIn = tryResolveAny(block, [\"xyIn\", \"xy\"], stage, state, ctx);\n const zwIn = tryResolveAny(block, [\"zwIn\", \"zw\"], stage, state, ctx);\n const x = tryResolve(block, \"x\", stage, state, ctx);\n const y = tryResolve(block, \"y\", stage, state, ctx);\n const z = tryResolve(block, \"z\", stage, state, ctx);\n const w = tryResolve(block, \"w\", stage, state, ctx);\n\n const sx = x ? ctx.cast(x, \"f32\").expr : xyIn ? `(${xyIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).x` : \"0.0\";\n const sy = y ? ctx.cast(y, \"f32\").expr : xyIn ? `(${xyIn.expr}).y` : xyzIn ? `(${xyzIn.expr}).y` : \"0.0\";\n const sz = z ? ctx.cast(z, \"f32\").expr : zwIn ? `(${zwIn.expr}).x` : xyzIn ? `(${xyzIn.expr}).z` : \"0.0\";\n const sw = w ? ctx.cast(w, \"f32\").expr : zwIn ? `(${zwIn.expr}).y` : \"0.0\";\n\n if (outputName === \"xy\") {\n return { expr: `vec2<f32>(${sx}, ${sy})`, type: \"vec2f\" };\n }\n if (outputName === \"xyz\") {\n return { expr: `vec3<f32>(${sx}, ${sy}, ${sz})`, type: \"vec3f\" };\n }\n // Default to xyzw.\n return { expr: `vec4<f32>(${sx}, ${sy}, ${sz}, ${sw})`, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":"AASA,SAAS,WAAW,OAAkB,WAAmB,OAAc,OAAuB,KAAuC;AACjI,QAAM,QAAQ,MAAM,OAAO,IAAI,SAAS;AACxC,MAAI,CAAC,SAAS,CAAC,MAAM,QAAQ;AACzB,WAAO;AAAA,EACX;AACA,SAAO,IAAI,QAAQ,OAAO,WAAW,OAAO,KAAK;AACrD;AAEA,SAAS,cAAc,OAAkB,YAAsB,OAAc,OAAuB,KAAuC;AACvI,aAAW,aAAa,YAAY;AAChC,UAAM,WAAW,WAAW,OAAO,WAAW,OAAO,OAAO,GAAG;AAC/D,QAAI,UAAU;AACV,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAEvC,UAAM,QAAQ,cAAc,OAAO,CAAC,SAAS,KAAK,GAAG,OAAO,OAAO,GAAG;AACtE,UAAM,OAAO,cAAc,OAAO,CAAC,QAAQ,IAAI,GAAG,OAAO,OAAO,GAAG;AACnE,UAAM,OAAO,cAAc,OAAO,CAAC,QAAQ,IAAI,GAAG,OAAO,OAAO,GAAG;AACnE,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAClD,UAAM,IAAI,WAAW,OAAO,KAAK,OAAO,OAAO,GAAG;AAElD,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,IAAI,QAAQ;AACnG,UAAM,KAAK,IAAI,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,IAAI,KAAK,IAAI,QAAQ;AAErE,QAAI,eAAe,MAAM;AACrB,aAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,IACpD;AACA,QAAI,eAAe,OAAO;AACtB,aAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,IAC3D;AAEA,WAAO,EAAE,MAAM,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,MAAM,QAAA;AAAA,EAClE;AACJ;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const COMPONENT = {
|
|
2
|
+
xyzw: { swizzle: "", type: "vec4f" },
|
|
3
|
+
xyz: { swizzle: ".xyz", type: "vec3f" },
|
|
4
|
+
xy: { swizzle: ".xy", type: "vec2f" },
|
|
5
|
+
x: { swizzle: ".x", type: "f32" },
|
|
6
|
+
y: { swizzle: ".y", type: "f32" },
|
|
7
|
+
z: { swizzle: ".z", type: "f32" },
|
|
8
|
+
w: { swizzle: ".w", type: "f32" }
|
|
9
|
+
};
|
|
10
|
+
const emitter = {
|
|
11
|
+
className: "VectorSplitterBlock",
|
|
12
|
+
emit(block, outputName, stage, state, ctx) {
|
|
13
|
+
var _a;
|
|
14
|
+
let source = null;
|
|
15
|
+
for (const key of ["xyzw", "xyz", "xy"]) {
|
|
16
|
+
if ((_a = block.inputs.get(key)) == null ? void 0 : _a.source) {
|
|
17
|
+
source = ctx.resolve(block, key, stage, state);
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!source) {
|
|
22
|
+
throw new Error(`NodeMaterial: VectorSplitterBlock (id=${block.id}) has no connected input`);
|
|
23
|
+
}
|
|
24
|
+
const c = COMPONENT[outputName];
|
|
25
|
+
if (!c) {
|
|
26
|
+
throw new Error(`NodeMaterial: VectorSplitterBlock has no output "${outputName}"`);
|
|
27
|
+
}
|
|
28
|
+
return { expr: `(${source.expr})${c.swizzle}`, type: c.type };
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export {
|
|
32
|
+
emitter
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=vector-splitter-BoJuHrAU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-splitter-BoJuHrAU.js","sources":["../src/material/node/blocks/vector-splitter.ts"],"sourcesContent":["/** VectorSplitterBlock — splits a vector into sub-vectors / components. */\n\nimport type { BlockEmitter, NodeExpr, NodeValueType } from \"../node-types.js\";\n\nconst COMPONENT: Record<string, { swizzle: string; type: NodeValueType }> = {\n xyzw: { swizzle: \"\", type: \"vec4f\" },\n xyz: { swizzle: \".xyz\", type: \"vec3f\" },\n xy: { swizzle: \".xy\", type: \"vec2f\" },\n x: { swizzle: \".x\", type: \"f32\" },\n y: { swizzle: \".y\", type: \"f32\" },\n z: { swizzle: \".z\", type: \"f32\" },\n w: { swizzle: \".w\", type: \"f32\" },\n};\n\nexport const emitter: BlockEmitter = {\n className: \"VectorSplitterBlock\",\n emit(block, outputName, stage, state, ctx) {\n // Pick the widest connected input: xyzw > xyz > xy\n let source: NodeExpr | null = null;\n for (const key of [\"xyzw\", \"xyz\", \"xy\"] as const) {\n if (block.inputs.get(key)?.source) {\n source = ctx.resolve(block, key, stage, state);\n break;\n }\n }\n if (!source) {\n throw new Error(`NodeMaterial: VectorSplitterBlock (id=${block.id}) has no connected input`);\n }\n const c = COMPONENT[outputName];\n if (!c) {\n throw new Error(`NodeMaterial: VectorSplitterBlock has no output \"${outputName}\"`);\n }\n return { expr: `(${source.expr})${c.swizzle}`, type: c.type };\n },\n};\n"],"names":[],"mappings":"AAIA,MAAM,YAAsE;AAAA,EACxE,MAAM,EAAE,SAAS,IAAI,MAAM,QAAA;AAAA,EAC3B,KAAK,EAAE,SAAS,QAAQ,MAAM,QAAA;AAAA,EAC9B,IAAI,EAAE,SAAS,OAAO,MAAM,QAAA;AAAA,EAC5B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAAA,EAC1B,GAAG,EAAE,SAAS,MAAM,MAAM,MAAA;AAC9B;AAEO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,KAAK,OAAO,YAAY,OAAO,OAAO,KAAK;AAZ/C;AAcQ,QAAI,SAA0B;AAC9B,eAAW,OAAO,CAAC,QAAQ,OAAO,IAAI,GAAY;AAC9C,WAAI,WAAM,OAAO,IAAI,GAAG,MAApB,mBAAuB,QAAQ;AAC/B,iBAAS,IAAI,QAAQ,OAAO,KAAK,OAAO,KAAK;AAC7C;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,MAAM,yCAAyC,MAAM,EAAE,0BAA0B;AAAA,IAC/F;AACA,UAAM,IAAI,UAAU,UAAU;AAC9B,QAAI,CAAC,GAAG;AACJ,YAAM,IAAI,MAAM,oDAAoD,UAAU,GAAG;AAAA,IACrF;AACA,WAAO,EAAE,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,MAAM,EAAE,KAAA;AAAA,EAC3D;AACJ;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const emitter = {
|
|
2
|
+
className: "VertexOutputBlock",
|
|
3
|
+
stage: "vertex",
|
|
4
|
+
emit(block, _outputName, _stage, state, ctx) {
|
|
5
|
+
const vector = ctx.resolve(block, "vector", "vertex", state);
|
|
6
|
+
const pos = ctx.cast(vector, "vec4f").expr;
|
|
7
|
+
state.vertex.body.push(`_NME_VTX_OUTPUT_ = ${pos};`);
|
|
8
|
+
return { expr: pos, type: "vec4f" };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
emitter
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=vertex-output-Cvft64y0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex-output-Cvft64y0.js","sources":["../src/material/node/blocks/vertex-output.ts"],"sourcesContent":["/** VertexOutputBlock — terminal block for the vertex stage.\n *\n * Writes the final clip-space position to the sentinel `_NME_VTX_OUTPUT_`,\n * which the pipeline builder wraps with the vertex entry-point boilerplate.\n */\n\nimport type { BlockEmitter } from \"../node-types.js\";\n\nexport const emitter: BlockEmitter = {\n className: \"VertexOutputBlock\",\n stage: \"vertex\",\n emit(block, _outputName, _stage, state, ctx) {\n const vector = ctx.resolve(block, \"vector\", \"vertex\", state);\n const pos = ctx.cast(vector, \"vec4f\").expr;\n state.vertex.body.push(`_NME_VTX_OUTPUT_ = ${pos};`);\n return { expr: pos, type: \"vec4f\" };\n },\n};\n"],"names":[],"mappings":"AAQO,MAAM,UAAwB;AAAA,EACjC,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK,OAAO,aAAa,QAAQ,OAAO,KAAK;AACzC,UAAM,SAAS,IAAI,QAAQ,OAAO,UAAU,UAAU,KAAK;AAC3D,UAAM,MAAM,IAAI,KAAK,QAAQ,OAAO,EAAE;AACtC,UAAM,OAAO,KAAK,KAAK,sBAAsB,GAAG,GAAG;AACnD,WAAO,EAAE,MAAM,KAAK,MAAM,QAAA;AAAA,EAC9B;AACJ;"}
|