@babylonjs/lite 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +51 -0
- package/THIRD_PARTY_NOTICES.txt +318 -0
- package/{_mat4-storage-f64-BW9sTaVh.js → _mat4-storage-f64-WeexU-hd.js} +2 -2
- package/{_mat4-storage-f64-BW9sTaVh.js.map → _mat4-storage-f64-WeexU-hd.js.map} +1 -1
- package/{alpha-test-fragment-eUG971h3.js → alpha-test-fragment-x2mnjLgC.js} +2 -2
- package/{alpha-test-fragment-eUG971h3.js.map → alpha-test-fragment-x2mnjLgC.js.map} +1 -1
- package/{background-dds-skybox-BwG0kYQP.js → background-dds-skybox-BpcDr-9c.js} +3 -3
- package/{background-dds-skybox-BwG0kYQP.js.map → background-dds-skybox-BpcDr-9c.js.map} +1 -1
- package/{background-ground-DiFpKJzF.js → background-ground-Bm6gjWqx.js} +2 -2
- package/{background-ground-DiFpKJzF.js.map → background-ground-Bm6gjWqx.js.map} +1 -1
- package/{background-hdr-skybox-DIgJhvfj.js → background-hdr-skybox-CSFo8RX6.js} +3 -3
- package/{background-hdr-skybox-DIgJhvfj.js.map → background-hdr-skybox-CSFo8RX6.js.map} +1 -1
- package/{background-solid-skybox--fqHdan_.js → background-solid-skybox-DOOBeDIz.js} +2 -2
- package/{background-solid-skybox--fqHdan_.js.map → background-solid-skybox-DOOBeDIz.js.map} +1 -1
- package/{billboard-renderable-HY2XCd52.js → billboard-renderable-IJfCpeDS.js} +2 -2
- package/{billboard-renderable-HY2XCd52.js.map → billboard-renderable-IJfCpeDS.js.map} +1 -1
- package/{clamp-block-XHdUk2Va.js → clamp-block-BD_t8I89.js} +2 -2
- package/{clamp-block-XHdUk2Va.js.map → clamp-block-BD_t8I89.js.map} +1 -1
- package/{clearcoat-fragment-CHYw8MPB.js → clearcoat-fragment-Dj7vGX2u.js} +2 -2
- package/{clearcoat-fragment-CHYw8MPB.js.map → clearcoat-fragment-Dj7vGX2u.js.map} +1 -1
- package/{create-skeleton-9tdiUjRP.js → create-skeleton-s0hjrC3A.js} +2 -2
- package/{create-skeleton-9tdiUjRP.js.map → create-skeleton-s0hjrC3A.js.map} +1 -1
- package/{cubemap-skybox-material-DqQ0dyz8.js → cubemap-skybox-material-8lzbgi7K.js} +2 -2
- package/{cubemap-skybox-material-DqQ0dyz8.js.map → cubemap-skybox-material-8lzbgi7K.js.map} +1 -1
- package/{curve-block-S27sXrJQ.js → curve-block-Ditr4R7V.js} +2 -2
- package/{curve-block-S27sXrJQ.js.map → curve-block-Ditr4R7V.js.map} +1 -1
- package/{emissive-fragment-CZMQ0_bF.js → emissive-fragment-BOAezkfk.js} +2 -2
- package/{emissive-fragment-CZMQ0_bF.js.map → emissive-fragment-BOAezkfk.js.map} +1 -1
- package/{esm-shadow-view-Cl36rOrK.js → esm-shadow-view-DRpyRAfa.js} +2 -2
- package/{esm-shadow-view-Cl36rOrK.js.map → esm-shadow-view-DRpyRAfa.js.map} +1 -1
- package/{esm-shadow-view-CUwxbnMR.js → esm-shadow-view-DmIORQGZ.js} +2 -2
- package/{esm-shadow-view-CUwxbnMR.js.map → esm-shadow-view-DmIORQGZ.js.map} +1 -1
- package/{esm-shadow-view-DKQ-FSoV.js → esm-shadow-view-JCPaOOi7.js} +2 -2
- package/{esm-shadow-view-DKQ-FSoV.js.map → esm-shadow-view-JCPaOOi7.js.map} +1 -1
- package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js → gaussian-splatting-pipeline-sh-B30Mu56i.js} +2 -2
- package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js.map → gaussian-splatting-pipeline-sh-B30Mu56i.js.map} +1 -1
- package/{geometry-texture-output-BmuAquio.js → geometry-texture-output-DURiaJ_n.js} +2 -2
- package/{geometry-texture-output-BmuAquio.js.map → geometry-texture-output-DURiaJ_n.js.map} +1 -1
- package/{geometry-view-xWZmq799.js → geometry-view-DRrscyWU.js} +4 -4
- package/{geometry-view-xWZmq799.js.map → geometry-view-DRrscyWU.js.map} +1 -1
- package/{gltf-animation-Bq7k_5HA.js → gltf-animation-BjnXkop6.js} +2 -2
- package/{gltf-animation-Bq7k_5HA.js.map → gltf-animation-BjnXkop6.js.map} +1 -1
- package/{gltf-ext-basisu-C5teqxzQ.js → gltf-ext-basisu-DtzVV1Xx.js} +2 -2
- package/{gltf-ext-basisu-C5teqxzQ.js.map → gltf-ext-basisu-DtzVV1Xx.js.map} +1 -1
- package/{gltf-ext-node-visibility-DnGTKkMf.js → gltf-ext-node-visibility-BhX0DmiP.js} +2 -2
- package/{gltf-ext-node-visibility-DnGTKkMf.js.map → gltf-ext-node-visibility-BhX0DmiP.js.map} +1 -1
- package/{gltf-ext-quantization-DheC7FhB.js → gltf-ext-quantization-DaymajCR.js} +2 -2
- package/{gltf-ext-quantization-DheC7FhB.js.map → gltf-ext-quantization-DaymajCR.js.map} +1 -1
- package/{gltf-ext-uv-transform-DljdVllE.js → gltf-ext-uv-transform-DFmNJ8kA.js} +2 -2
- package/{gltf-ext-uv-transform-DljdVllE.js.map → gltf-ext-uv-transform-DFmNJ8kA.js.map} +1 -1
- package/{gltf-feature-animation-pointer-DVhymFLK.js → gltf-feature-animation-pointer-C40tqOhL.js} +3 -3
- package/{gltf-feature-animation-pointer-DVhymFLK.js.map → gltf-feature-animation-pointer-C40tqOhL.js.map} +1 -1
- package/{gltf-feature-animations-hxC3y3bJ.js → gltf-feature-animations-v0S_yb4T.js} +2 -2
- package/{gltf-feature-animations-hxC3y3bJ.js.map → gltf-feature-animations-v0S_yb4T.js.map} +1 -1
- package/{gltf-feature-draco-B7Q_cMUv.js → gltf-feature-draco-CljWrsna.js} +2 -2
- package/{gltf-feature-draco-B7Q_cMUv.js.map → gltf-feature-draco-CljWrsna.js.map} +1 -1
- package/{gltf-feature-gpu-instancing-C7sRzWv7.js → gltf-feature-gpu-instancing-BoeSm6Tn.js} +2 -2
- package/{gltf-feature-gpu-instancing-C7sRzWv7.js.map → gltf-feature-gpu-instancing-BoeSm6Tn.js.map} +1 -1
- package/{gltf-feature-lights-punctual-DF7kya14.js → gltf-feature-lights-punctual-BCTwgyi_.js} +5 -5
- package/{gltf-feature-lights-punctual-DF7kya14.js.map → gltf-feature-lights-punctual-BCTwgyi_.js.map} +1 -1
- package/{gltf-feature-meshopt-DRG9hEqT.js → gltf-feature-meshopt-DItMkOMt.js} +2 -2
- package/{gltf-feature-meshopt-DRG9hEqT.js.map → gltf-feature-meshopt-DItMkOMt.js.map} +1 -1
- package/{gltf-feature-morph-DZydYgWp.js → gltf-feature-morph-Cv0mEYIq.js} +3 -3
- package/{gltf-feature-morph-DZydYgWp.js.map → gltf-feature-morph-Cv0mEYIq.js.map} +1 -1
- package/{gltf-feature-registry-DeYdy3DV.js → gltf-feature-registry-wNbt6UC-.js} +15 -15
- package/{gltf-feature-registry-DeYdy3DV.js.map → gltf-feature-registry-wNbt6UC-.js.map} +1 -1
- package/{gltf-feature-skeleton-B9och1W0.js → gltf-feature-skeleton-Deh2UBAn.js} +3 -3
- package/{gltf-feature-skeleton-B9och1W0.js.map → gltf-feature-skeleton-Deh2UBAn.js.map} +1 -1
- package/{gltf-feature-variants-CY_Qft7f.js → gltf-feature-variants-DGSdFNJq.js} +2 -2
- package/{gltf-feature-variants-CY_Qft7f.js.map → gltf-feature-variants-DGSdFNJq.js.map} +1 -1
- package/{gltf-glb-parser-CqOeXFOz.js → gltf-glb-parser-DSQWsT4r.js} +2 -2
- package/{gltf-glb-parser-CqOeXFOz.js.map → gltf-glb-parser-DSQWsT4r.js.map} +1 -1
- package/{gltf-interleave-DWf27t-h.js → gltf-interleave-OBqmlu-h.js} +11 -4
- package/gltf-interleave-OBqmlu-h.js.map +1 -0
- package/{gltf-normals-b2h74380.js → gltf-normals-D_P0KA4b.js} +10 -2
- package/gltf-normals-D_P0KA4b.js.map +1 -0
- package/{gltf-pbr-builder-ext-DvFxuOqN.js → gltf-pbr-builder-ext-3imk8Tev.js} +2 -2
- package/{gltf-pbr-builder-ext-DvFxuOqN.js.map → gltf-pbr-builder-ext-3imk8Tev.js.map} +1 -1
- package/{gltf-variants-CUvzYGYX.js → gltf-variants-Dyr54wwg.js} +4 -4
- package/{gltf-variants-CUvzYGYX.js.map → gltf-variants-Dyr54wwg.js.map} +1 -1
- package/{gpu-task-timer-Dgkff80h.js → gpu-task-timer-DVBNZfq5.js} +2 -2
- package/{gpu-task-timer-Dgkff80h.js.map → gpu-task-timer-DVBNZfq5.js.map} +1 -1
- package/{gs-picking-pipeline-55sM5LzV.js → gs-picking-pipeline-CERN-Trj.js} +2 -2
- package/{gs-picking-pipeline-55sM5LzV.js.map → gs-picking-pipeline-CERN-Trj.js.map} +1 -1
- package/{havok-floating-origin-5xp32P-C.js → havok-floating-origin-VVdJRUYc.js} +2 -2
- package/{havok-floating-origin-5xp32P-C.js.map → havok-floating-origin-VVdJRUYc.js.map} +1 -1
- package/{index-CYZDclhF.js → index-7Bk-uLSM.js} +2 -2
- package/{index-CYZDclhF.js.map → index-7Bk-uLSM.js.map} +1 -1
- package/{index-C-tEgwbZ.js → index-BgY3QEzL.js} +2817 -1166
- package/index-BgY3QEzL.js.map +1 -0
- package/{index-SMJ67XwT.js → index-Dr5LK2tg.js} +2 -2
- package/{index-SMJ67XwT.js.map → index-Dr5LK2tg.js.map} +1 -1
- package/index.d.ts +572 -18
- package/index.js +499 -464
- package/{input-block-DbRYCnet.js → input-block-DjdlndCL.js} +2 -2
- package/{input-block-DbRYCnet.js.map → input-block-DjdlndCL.js.map} +1 -1
- package/{iridescence-fragment-S3Ko1jvC.js → iridescence-fragment-kfsCs8lN.js} +2 -2
- package/{iridescence-fragment-S3Ko1jvC.js.map → iridescence-fragment-kfsCs8lN.js.map} +1 -1
- package/{light-block-CAqWkucp.js → light-block-qjCrz3de.js} +2 -2
- package/{light-block-CAqWkucp.js.map → light-block-qjCrz3de.js.map} +1 -1
- package/{loop-block-ch-biPFY.js → loop-block-C8vkQ2bz.js} +2 -2
- package/{loop-block-ch-biPFY.js.map → loop-block-C8vkQ2bz.js.map} +1 -1
- package/{manifold-AS8POaOr.js → manifold-DeXMNgxT.js} +3 -3
- package/{manifold-AS8POaOr.js.map → manifold-DeXMNgxT.js.map} +1 -1
- package/{morph-fragment-D9he3Ksk.js → morph-fragment-NpZYyIIU.js} +2 -2
- package/{morph-fragment-D9he3Ksk.js.map → morph-fragment-NpZYyIIU.js.map} +1 -1
- package/{multilight-wgsl-74aXpcJG.js → multilight-wgsl-I5SncF0q.js} +2 -2
- package/{multilight-wgsl-74aXpcJG.js.map → multilight-wgsl-I5SncF0q.js.map} +1 -1
- package/{node-env-B2bjGcMS.js → node-env-D7Aee08u.js} +2 -2
- package/{node-env-B2bjGcMS.js.map → node-env-D7Aee08u.js.map} +1 -1
- package/{node-geometry-view-CSXlEAhG.js → node-geometry-view-DfKXWNfV.js} +3 -3
- package/{node-geometry-view-CSXlEAhG.js.map → node-geometry-view-DfKXWNfV.js.map} +1 -1
- package/{node-registry-extra-compat-BEQH_ksg.js → node-registry-extra-compat-CDLeBR1P.js} +2 -2
- package/{node-registry-extra-compat-BEQH_ksg.js.map → node-registry-extra-compat-CDLeBR1P.js.map} +1 -1
- package/{node-registry-extra-math-Bm32WBAa.js → node-registry-extra-math-BA8_l4lB.js} +2 -2
- package/{node-registry-extra-math-Bm32WBAa.js.map → node-registry-extra-math-BA8_l4lB.js.map} +1 -1
- package/{node-renderable-BMHny4tC.js → node-renderable-EwLLnaL1.js} +2 -2
- package/{node-renderable-BMHny4tC.js.map → node-renderable-EwLLnaL1.js.map} +1 -1
- package/{node-shadow-BRiz7CT1.js → node-shadow-CeTmT6g4.js} +2 -2
- package/{node-shadow-BRiz7CT1.js.map → node-shadow-CeTmT6g4.js.map} +1 -1
- package/{normal-map-fragment-sE3TjF4U.js → normal-map-fragment-BHImLyM-.js} +2 -2
- package/{normal-map-fragment-sE3TjF4U.js.map → normal-map-fragment-BHImLyM-.js.map} +1 -1
- package/package.json +10 -3
- package/{parse-camera-CmZBS423.js → parse-camera-5IGdctAS.js} +2 -2
- package/{parse-camera-CmZBS423.js.map → parse-camera-5IGdctAS.js.map} +1 -1
- package/{pbr-geometry-view-T3vMABM8.js → pbr-geometry-view-Dthf9Aut.js} +3 -3
- package/{pbr-geometry-view-T3vMABM8.js.map → pbr-geometry-view-Dthf9Aut.js.map} +1 -1
- package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js → pbr-metallic-roughness-block-full-DD6zI_Lx.js} +2 -2
- package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js.map → pbr-metallic-roughness-block-full-DD6zI_Lx.js.map} +1 -1
- package/{pbr-metallic-roughness-block-DbozMlHU.js → pbr-metallic-roughness-block-g7wjzwN_.js} +2 -2
- package/{pbr-metallic-roughness-block-DbozMlHU.js.map → pbr-metallic-roughness-block-g7wjzwN_.js.map} +1 -1
- package/{pbr-mr-helper-core-DGRgbRXl.js → pbr-mr-helper-core-CWROQ7OA.js} +2 -2
- package/{pbr-mr-helper-core-DGRgbRXl.js.map → pbr-mr-helper-core-CWROQ7OA.js.map} +1 -1
- package/{pbr-refraction-CquDP9JO.js → pbr-refraction-Dxsm_gii.js} +2 -2
- package/{pbr-refraction-CquDP9JO.js.map → pbr-refraction-Dxsm_gii.js.map} +1 -1
- package/{pbr-renderable-CaHKHU0g.js → pbr-renderable-CuKWalEM.js} +22 -22
- package/{pbr-renderable-CaHKHU0g.js.map → pbr-renderable-CuKWalEM.js.map} +1 -1
- package/{pbr-shadow-fragment-DmnNe6yz.js → pbr-shadow-fragment-waeIBQUq.js} +2 -2
- package/{pbr-shadow-fragment-DmnNe6yz.js.map → pbr-shadow-fragment-waeIBQUq.js.map} +1 -1
- package/{pbr-tracking-Bo7RTANK.js → pbr-tracking-CdeqbBrh.js} +2 -2
- package/{pbr-tracking-Bo7RTANK.js.map → pbr-tracking-CdeqbBrh.js.map} +1 -1
- package/{pbr-transmission-ext-CoGcJBGE.js → pbr-transmission-ext-BNiXngZc.js} +2 -2
- package/{pbr-transmission-ext-CoGcJBGE.js.map → pbr-transmission-ext-BNiXngZc.js.map} +1 -1
- package/{recast-navigation.wasm-DG_0AFuk.js → recast-navigation.wasm-VC4lGlEe.js} +3 -3
- package/{recast-navigation.wasm-DG_0AFuk.js.map → recast-navigation.wasm-VC4lGlEe.js.map} +1 -1
- package/{recast-navigation.wasm-compat-C-Bf2ylB.js → recast-navigation.wasm-compat-CTwYOzRz.js} +3 -3
- package/{recast-navigation.wasm-compat-C-Bf2ylB.js.map → recast-navigation.wasm-compat-CTwYOzRz.js.map} +1 -1
- package/{reflectance-fragment-CExe6qDY.js → reflectance-fragment-BQFZ_pgy.js} +2 -2
- package/{reflectance-fragment-CExe6qDY.js.map → reflectance-fragment-BQFZ_pgy.js.map} +1 -1
- package/{rgbd-decode-DkiiiIlt.js → rgbd-decode-duTlXMWd.js} +2 -2
- package/{rgbd-decode-DkiiiIlt.js.map → rgbd-decode-duTlXMWd.js.map} +1 -1
- package/{screenshot-readback-avr_tYGZ.js → screenshot-readback-DnxR4rhp.js} +2 -2
- package/{screenshot-readback-avr_tYGZ.js.map → screenshot-readback-DnxR4rhp.js.map} +1 -1
- package/{shader-composer-CZagsJDS.js → shader-composer-CBy2i8nU.js} +2 -2
- package/{shader-composer-CZagsJDS.js.map → shader-composer-CBy2i8nU.js.map} +1 -1
- package/{shader-renderable-D5sbgzxt.js → shader-renderable-DVMVD6zP.js} +4 -4
- package/{shader-renderable-D5sbgzxt.js.map → shader-renderable-DVMVD6zP.js.map} +1 -1
- package/{shader-thin-instance-CkQ8rrfH.js → shader-thin-instance-CsDo3ULk.js} +2 -2
- package/{shader-thin-instance-CkQ8rrfH.js.map → shader-thin-instance-CsDo3ULk.js.map} +1 -1
- package/{sheen-fragment-BEigjpTX.js → sheen-fragment-B_Jd7wrr.js} +2 -2
- package/{sheen-fragment-BEigjpTX.js.map → sheen-fragment-B_Jd7wrr.js.map} +1 -1
- package/{singlelight-directional-wgsl-Ccsk-ys3.js → singlelight-directional-wgsl-Bw84txva.js} +2 -2
- package/{singlelight-directional-wgsl-Ccsk-ys3.js.map → singlelight-directional-wgsl-Bw84txva.js.map} +1 -1
- package/{singlelight-hemispheric-wgsl-DL-jpc97.js → singlelight-hemispheric-wgsl-DjxhgI8r.js} +2 -2
- package/{singlelight-hemispheric-wgsl-DL-jpc97.js.map → singlelight-hemispheric-wgsl-DjxhgI8r.js.map} +1 -1
- package/{singlelight-point-wgsl-hYmiP6ys.js → singlelight-point-wgsl-iA1aRkXA.js} +2 -2
- package/{singlelight-point-wgsl-hYmiP6ys.js.map → singlelight-point-wgsl-iA1aRkXA.js.map} +1 -1
- package/{singlelight-spot-wgsl-DSjp1p1C.js → singlelight-spot-wgsl-MDdTdstF.js} +2 -2
- package/{singlelight-spot-wgsl-DSjp1p1C.js.map → singlelight-spot-wgsl-MDdTdstF.js.map} +1 -1
- package/{skeleton-fragment-B__bUbPK.js → skeleton-fragment-COdHWFcK.js} +2 -2
- package/{skeleton-fragment-B__bUbPK.js.map → skeleton-fragment-COdHWFcK.js.map} +1 -1
- package/{skybox-renderable-BH6uUkal.js → skybox-renderable-DJYkfw32.js} +2 -2
- package/{skybox-renderable-BH6uUkal.js.map → skybox-renderable-DJYkfw32.js.map} +1 -1
- package/{splat-ply-compressed-BGNK6dnh.js → splat-ply-compressed-SxMlsKNK.js} +2 -2
- package/{splat-ply-compressed-BGNK6dnh.js.map → splat-ply-compressed-SxMlsKNK.js.map} +1 -1
- package/{standard-pipeline-BvFynkwL.js → standard-pipeline-DXFOUqU_.js} +3 -3
- package/{standard-pipeline-BvFynkwL.js.map → standard-pipeline-DXFOUqU_.js.map} +1 -1
- package/{standard-renderable-1Q3zemys.js → standard-renderable-BAc-i-ig.js} +3 -3
- package/{standard-renderable-1Q3zemys.js.map → standard-renderable-BAc-i-ig.js.map} +1 -1
- package/{std-ambient-fragment-__F1KTEu.js → std-ambient-fragment-P8dHZ4An.js} +2 -2
- package/{std-ambient-fragment-__F1KTEu.js.map → std-ambient-fragment-P8dHZ4An.js.map} +1 -1
- package/{std-cube-reflection-fragment-DidM0byH.js → std-cube-reflection-fragment-CF03MuQt.js} +2 -2
- package/{std-cube-reflection-fragment-DidM0byH.js.map → std-cube-reflection-fragment-CF03MuQt.js.map} +1 -1
- package/{std-emissive-fragment-Bj62X4Np.js → std-emissive-fragment-P8yJGclx.js} +2 -2
- package/{std-emissive-fragment-Bj62X4Np.js.map → std-emissive-fragment-P8yJGclx.js.map} +1 -1
- package/{std-lightmap-fragment-DXvfWvKc.js → std-lightmap-fragment-CymEG79z.js} +9 -6
- package/std-lightmap-fragment-CymEG79z.js.map +1 -0
- package/{std-opacity-fragment-BzMMb1K_.js → std-opacity-fragment-DLa1zV06.js} +2 -2
- package/{std-opacity-fragment-BzMMb1K_.js.map → std-opacity-fragment-DLa1zV06.js.map} +1 -1
- package/{std-reflection-fragment-DC9Kvu1C.js → std-reflection-fragment-BLySsYos.js} +2 -2
- package/{std-reflection-fragment-DC9Kvu1C.js.map → std-reflection-fragment-BLySsYos.js.map} +1 -1
- package/{std-shadow-fragment-BnMHeF1-.js → std-shadow-fragment-C_q27Mdi.js} +2 -2
- package/{std-shadow-fragment-BnMHeF1-.js.map → std-shadow-fragment-C_q27Mdi.js.map} +1 -1
- package/{std-specular-fragment-Bio681OG.js → std-specular-fragment-CaBXyAWY.js} +2 -2
- package/{std-specular-fragment-Bio681OG.js.map → std-specular-fragment-CaBXyAWY.js.map} +1 -1
- package/{std-tracking-BTcrry2o.js → std-tracking-Bw61Dv98.js} +2 -2
- package/{std-tracking-BTcrry2o.js.map → std-tracking-Bw61Dv98.js.map} +1 -1
- package/{subsurface-fragment-DpKib445.js → subsurface-fragment-BNQoG9gr.js} +2 -2
- package/{subsurface-fragment-DpKib445.js.map → subsurface-fragment-BNQoG9gr.js.map} +1 -1
- package/{thin-instance-cull-binding-DwZi7mlE.js → thin-instance-cull-binding-BNC5JiGw.js} +3 -3
- package/{thin-instance-cull-binding-DwZi7mlE.js.map → thin-instance-cull-binding-BNC5JiGw.js.map} +1 -1
- package/{thin-instance-gpu-uY2NOv0J.js → thin-instance-gpu-C1DGstap.js} +2 -2
- package/{thin-instance-gpu-uY2NOv0J.js.map → thin-instance-gpu-C1DGstap.js.map} +1 -1
- package/{tracking-primitives-Ck5bgCuo.js → tracking-primitives-CMBWLxGr.js} +2 -2
- package/{tracking-primitives-Ck5bgCuo.js.map → tracking-primitives-CMBWLxGr.js.map} +1 -1
- package/{unlit-fragment-nc6hu3Mw.js → unlit-fragment-BsHrS9XX.js} +2 -2
- package/{unlit-fragment-nc6hu3Mw.js.map → unlit-fragment-BsHrS9XX.js.map} +1 -1
- package/gltf-interleave-DWf27t-h.js.map +0 -1
- package/gltf-normals-b2h74380.js.map +0 -1
- package/index-C-tEgwbZ.js.map +0 -1
- package/std-lightmap-fragment-DXvfWvKc.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { aJ as WGSL } from "./index-BgY3QEzL.js";
|
|
2
2
|
function bjsTypeToNodeType(t) {
|
|
3
3
|
if (t === 1 || t === 2) {
|
|
4
4
|
return "f32";
|
|
@@ -106,4 +106,4 @@ const emitter = {
|
|
|
106
106
|
export {
|
|
107
107
|
emitter
|
|
108
108
|
};
|
|
109
|
-
//# sourceMappingURL=input-block-
|
|
109
|
+
//# sourceMappingURL=input-block-DjdlndCL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-block-
|
|
1
|
+
{"version":3,"file":"input-block-DjdlndCL.js","sources":["../src/material/node/blocks/input-block.ts"],"sourcesContent":["/** InputBlock emitter.\n *\n * Three modes (BJS NodeMaterialBlockConnectionPointMode):\n * 0 = Uniform — inline value becomes a field in the node UBO.\n * 1 = Attribute — bound to a vertex attribute (position/normal/uv/...).\n * 2 = Varying — interpolated from a system/pre-existing varying.\n *\n * For attributes we declare the vertex attribute (dedup by name) and, if the\n * value is consumed in fragment stage, a varying to carry it across.\n */\n\nimport type { BlockEmitter, NodeBuildState, NodeExpr, NodeValueType, Stage, NodeBlock } from \"../node-types.js\";\nimport { WGSL } from \"../node-types.js\";\n\ntype BjsType = number; // NodeMaterialBlockConnectionPointTypes\n\nfunction bjsTypeToNodeType(t: BjsType): NodeValueType {\n // bitflags: 0x1=Float, 0x4=Vec2, 0x8=Vec3, 0x10=Vec4, 0x20=Color3, 0x40=Color4\n if (t === 0x1 || t === 0x2) {\n return \"f32\";\n }\n if (t === 0x4) {\n return \"vec2f\";\n }\n if (t === 0x8 || t === 0x20) {\n return \"vec3f\";\n }\n if (t === 0x10 || t === 0x40) {\n return \"vec4f\";\n }\n if (t === 0x80) {\n return \"mat4f\";\n }\n throw new Error(`InputBlock: unsupported BJS connection point type 0x${t.toString(16)}`);\n}\n\nfunction wgslLiteral(value: unknown, type: NodeValueType): string {\n if (type === \"f32\") {\n const f = typeof value === \"number\" ? value : 0;\n return formatFloat(f);\n }\n if (Array.isArray(value)) {\n const parts = value.map((v) => formatFloat(typeof v === \"number\" ? v : 0)).join(\", \");\n return `${WGSL[type]}(${parts})`;\n }\n // Fallback to zero.\n if (type === \"vec2f\") {\n return \"vec2<f32>(0.0, 0.0)\";\n }\n if (type === \"vec3f\") {\n return \"vec3<f32>(0.0, 0.0, 0.0)\";\n }\n if (type === \"vec4f\") {\n return \"vec4<f32>(0.0, 0.0, 0.0, 0.0)\";\n }\n return \"0.0\";\n}\n\nfunction formatFloat(n: number): string {\n if (Number.isInteger(n)) {\n return `${n}.0`;\n }\n return `${n}`;\n}\n\n// Known mesh attributes — maps InputBlock.name → WGSL type.\nconst ATTRIBUTE_TYPES: Record<string, NodeValueType> = {\n position: \"vec3f\",\n normal: \"vec3f\",\n tangent: \"vec4f\",\n uv: \"vec2f\",\n uv2: \"vec2f\",\n color: \"vec4f\",\n matricesIndices: \"vec4f\",\n matricesWeights: \"vec4f\",\n matricesIndicesExtra: \"vec4f\",\n matricesWeightsExtra: \"vec4f\",\n};\n\nfunction emitAttribute(block: NodeBlock, stage: Stage, state: NodeBuildState): NodeExpr {\n const attrName = block.name;\n const type = ATTRIBUTE_TYPES[attrName];\n if (!type) {\n throw new Error(`InputBlock: unknown mesh attribute \"${attrName}\"`);\n }\n const wgslType = WGSL[type];\n // Dedup vertex attribute.\n if (!state.vertexAttributes.find((a) => a._name === attrName)) {\n state.vertexAttributes.push({\n _name: attrName,\n _type: wgslType,\n _gpuFormat: type === \"vec2f\" ? \"float32x2\" : type === \"vec3f\" ? \"float32x3\" : \"float32x4\",\n _arrayStride: (type === \"vec2f\" ? 2 : type === \"vec3f\" ? 3 : 4) * 4,\n });\n }\n if (stage === \"vertex\") {\n return { expr: `in.${attrName}`, type };\n }\n // In fragment stage — bridge through a varying (idempotent).\n const vname = `v_attr_${attrName}`;\n if (!state.varyings.find((v) => v._name === vname)) {\n state.varyings.push({ _name: vname, _type: wgslType });\n state.vertex.body.push(`out.${vname} = in.${attrName};`);\n }\n return { expr: `in.${vname}`, type };\n}\n\n// BJS NodeMaterialSystemValues enum (Babylon.js master).\n// We map the commonly used ones to WGSL expressions sourced from scene/mesh UBOs.\n// For matrices not present in Lite's scene UBO (`projection` alone), we fall\n// back to the closest valid expression (or throw — caller decides).\nfunction emitSystemValue(block: NodeBlock, stage: Stage, state: NodeBuildState): NodeExpr {\n const sv = block.serialized[\"systemValue\"] as number | undefined;\n // Only sensible in the vertex stage for matrix types; for CameraPosition/FogColor either stage is fine.\n switch (sv) {\n case 1: // World\n return { expr: \"meshU.world\", type: \"mat4f\" };\n case 2: // View\n return { expr: \"sceneU.view\", type: \"mat4f\" };\n case 3: // Projection\n return { expr: \"sceneU.projection\", type: \"mat4f\" };\n case 4: // ViewProjection\n return { expr: \"sceneU.viewProjection\", type: \"mat4f\" };\n case 5: // WorldView\n return { expr: \"(sceneU.view * meshU.world)\", type: \"mat4f\" };\n case 6: // WorldViewProjection\n return { expr: \"(sceneU.viewProjection * meshU.world)\", type: \"mat4f\" };\n case 7: // CameraPosition\n return { expr: \"sceneU.vEyePosition.xyz\", type: \"vec3f\" };\n case 8: // FogColor\n return { expr: \"sceneU.vFogColor.xyz\", type: \"vec3f\" };\n default:\n throw new Error(`InputBlock: unsupported systemValue ${sv} on block \"${block.name}\"`);\n }\n void stage;\n void state;\n}\n\nfunction emitUniform(block: NodeBlock, state: NodeBuildState): NodeExpr {\n // Determine the WGSL type. BJS serializes the port type under `type`.\n const portType = (block.serialized[\"type\"] as BjsType | undefined) ?? 0x10;\n const type = bjsTypeToNodeType(portType);\n // UBO field name — use block name (must be unique; parser enforces via namedInputs key).\n const fieldName = sanitize(block.name || `input${block.id}`);\n // Dedup.\n if (!state.nodeUboFields.find((f) => f._name === fieldName)) {\n state.nodeUboFields.push({ _name: fieldName, _type: WGSL[type] as any });\n // If this is a literal value (no override yet), it will be written into the\n // UBO at material-build time; for shader generation we just reference the field.\n // We ignore the inline literal here — the UBO write path handles that.\n }\n void wgslLiteral; // reserved for future default-literal constant-fold optimization\n return { expr: `nodeU.${fieldName}`, type };\n}\n\nfunction sanitize(name: string): string {\n return name.replace(/[^A-Za-z0-9_]/g, \"_\");\n}\n\nexport const emitter: BlockEmitter = {\n className: \"InputBlock\",\n emit(block, _outputName, stage, state, _ctx) {\n const mode = (block.serialized[\"mode\"] ?? block.serialized[\"_mode\"]) as number | undefined;\n if (mode === 1) {\n return emitAttribute(block, stage, state);\n }\n // System-value uniforms (World, WVP, CameraPosition, …) come from scene/mesh UBOs\n // rather than the material's node UBO, so they never appear in `nodeUboFields`.\n const sv = block.serialized[\"systemValue\"];\n if (typeof sv === \"number\") {\n return emitSystemValue(block, stage, state);\n }\n // Default to Uniform (mode 0 or unspecified).\n return emitUniform(block, state);\n },\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a_ as PBR2_HAS_IRIDESCENCE_MAP, a$ as PBR2_HAS_IRIDESCENCE_THICKNESS_MAP, b0 as PBR2_HAS_IRIDESCENCE, aM as PBR_HAS_METALLIC_REFLECTANCE_MAP, aN as PBR_HAS_REFLECTANCE_MAP, aO as PBR2_HAS_REFLECTANCE_FACTORS } from "./index-BgY3QEzL.js";
|
|
2
2
|
const STAGE_FRAGMENT = 2;
|
|
3
3
|
const PBR2_HAS_IRIDESCENCE_UV_TX = 1 << 20;
|
|
4
4
|
const PBR2_HAS_IRIDESCENCE_THICKNESS_UV_TX = 1 << 21;
|
|
@@ -240,4 +240,4 @@ export {
|
|
|
240
240
|
pbrExt,
|
|
241
241
|
writeIridescenceUBO
|
|
242
242
|
};
|
|
243
|
-
//# sourceMappingURL=iridescence-fragment-
|
|
243
|
+
//# sourceMappingURL=iridescence-fragment-kfsCs8lN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iridescence-fragment-S3Ko1jvC.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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"}
|
|
1
|
+
{"version":3,"file":"iridescence-fragment-kfsCs8lN.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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MAX_LIGHTS } from "./index-
|
|
1
|
+
import { M as MAX_LIGHTS } from "./index-BgY3QEzL.js";
|
|
2
2
|
const NME_LIGHTING_HELPER_KEY = "nme_lighting";
|
|
3
3
|
const NME_LIGHTING_HELPER_WGSL = `struct NmeLightResult {
|
|
4
4
|
diffuse: vec3<f32>,
|
|
@@ -120,4 +120,4 @@ const emitter = {
|
|
|
120
120
|
export {
|
|
121
121
|
emitter
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=light-block-
|
|
123
|
+
//# sourceMappingURL=light-block-qjCrz3de.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light-block-
|
|
1
|
+
{"version":3,"file":"light-block-qjCrz3de.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;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { aJ as WGSL } from "./index-BgY3QEzL.js";
|
|
2
2
|
function loopKey(stage, blockId) {
|
|
3
3
|
return `${stage}|${blockId}`;
|
|
4
4
|
}
|
|
@@ -68,4 +68,4 @@ const emitter = {
|
|
|
68
68
|
export {
|
|
69
69
|
emitter
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=loop-block-
|
|
71
|
+
//# sourceMappingURL=loop-block-C8vkQ2bz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-block-
|
|
1
|
+
{"version":3,"file":"loop-block-C8vkQ2bz.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;"}
|
|
@@ -847,8 +847,8 @@ var Module = (() => {
|
|
|
847
847
|
wasmBinaryFile ?? (wasmBinaryFile = findWasmBinary());
|
|
848
848
|
try {
|
|
849
849
|
var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);
|
|
850
|
-
var exports
|
|
851
|
-
return exports
|
|
850
|
+
var exports = receiveInstantiationResult(result);
|
|
851
|
+
return exports;
|
|
852
852
|
} catch (e) {
|
|
853
853
|
readyPromiseReject(e);
|
|
854
854
|
return Promise.reject(e);
|
|
@@ -3019,4 +3019,4 @@ const __viteBrowserExternal = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Obje
|
|
|
3019
3019
|
export {
|
|
3020
3020
|
Module as default
|
|
3021
3021
|
};
|
|
3022
|
-
//# sourceMappingURL=manifold-
|
|
3022
|
+
//# sourceMappingURL=manifold-DeXMNgxT.js.map
|