@babylonjs/lite 1.0.0 → 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-CjDoht2w.js → _mat4-storage-f64-WeexU-hd.js} +2 -2
- package/{_mat4-storage-f64-CjDoht2w.js.map → _mat4-storage-f64-WeexU-hd.js.map} +1 -1
- package/{alpha-test-fragment-B7DjSnF7.js → alpha-test-fragment-x2mnjLgC.js} +2 -2
- package/{alpha-test-fragment-B7DjSnF7.js.map → alpha-test-fragment-x2mnjLgC.js.map} +1 -1
- package/{background-dds-skybox-BEX309u3.js → background-dds-skybox-BpcDr-9c.js} +3 -3
- package/{background-dds-skybox-BEX309u3.js.map → background-dds-skybox-BpcDr-9c.js.map} +1 -1
- package/{background-ground-BU0HOcM4.js → background-ground-Bm6gjWqx.js} +2 -2
- package/{background-ground-BU0HOcM4.js.map → background-ground-Bm6gjWqx.js.map} +1 -1
- package/{background-hdr-skybox--RRRic_K.js → background-hdr-skybox-CSFo8RX6.js} +3 -3
- package/{background-hdr-skybox--RRRic_K.js.map → background-hdr-skybox-CSFo8RX6.js.map} +1 -1
- package/{background-solid-skybox-BrH2fXSu.js → background-solid-skybox-DOOBeDIz.js} +2 -2
- package/{background-solid-skybox-BrH2fXSu.js.map → background-solid-skybox-DOOBeDIz.js.map} +1 -1
- package/{billboard-renderable-BHWryAeC.js → billboard-renderable-IJfCpeDS.js} +2 -2
- package/{billboard-renderable-BHWryAeC.js.map → billboard-renderable-IJfCpeDS.js.map} +1 -1
- package/{clamp-block-DqbwnQGW.js → clamp-block-BD_t8I89.js} +2 -2
- package/{clamp-block-DqbwnQGW.js.map → clamp-block-BD_t8I89.js.map} +1 -1
- package/{clearcoat-fragment-D6FSCie1.js → clearcoat-fragment-Dj7vGX2u.js} +2 -2
- package/{clearcoat-fragment-D6FSCie1.js.map → clearcoat-fragment-Dj7vGX2u.js.map} +1 -1
- package/{create-skeleton-D_uplboC.js → create-skeleton-s0hjrC3A.js} +2 -2
- package/{create-skeleton-D_uplboC.js.map → create-skeleton-s0hjrC3A.js.map} +1 -1
- package/{cubemap-skybox-material-DQcMMdf-.js → cubemap-skybox-material-8lzbgi7K.js} +2 -2
- package/{cubemap-skybox-material-DQcMMdf-.js.map → cubemap-skybox-material-8lzbgi7K.js.map} +1 -1
- package/{curve-block-21rT0JjG.js → curve-block-Ditr4R7V.js} +2 -2
- package/{curve-block-21rT0JjG.js.map → curve-block-Ditr4R7V.js.map} +1 -1
- package/{emissive-fragment-C5FtBs3y.js → emissive-fragment-BOAezkfk.js} +2 -2
- package/{emissive-fragment-C5FtBs3y.js.map → emissive-fragment-BOAezkfk.js.map} +1 -1
- package/{esm-shadow-view-c5YV4Eg9.js → esm-shadow-view-DRpyRAfa.js} +2 -2
- package/{esm-shadow-view-c5YV4Eg9.js.map → esm-shadow-view-DRpyRAfa.js.map} +1 -1
- package/{esm-shadow-view-Gtd1LWRP.js → esm-shadow-view-DmIORQGZ.js} +2 -2
- package/{esm-shadow-view-Gtd1LWRP.js.map → esm-shadow-view-DmIORQGZ.js.map} +1 -1
- package/{esm-shadow-view-Cl3rPGof.js → esm-shadow-view-JCPaOOi7.js} +2 -2
- package/{esm-shadow-view-Cl3rPGof.js.map → esm-shadow-view-JCPaOOi7.js.map} +1 -1
- package/{gaussian-splatting-pipeline-sh-7J31V23x.js → gaussian-splatting-pipeline-sh-B30Mu56i.js} +2 -2
- package/{gaussian-splatting-pipeline-sh-7J31V23x.js.map → gaussian-splatting-pipeline-sh-B30Mu56i.js.map} +1 -1
- package/{geometry-texture-output-dXk4E9uu.js → geometry-texture-output-DURiaJ_n.js} +2 -2
- package/{geometry-texture-output-dXk4E9uu.js.map → geometry-texture-output-DURiaJ_n.js.map} +1 -1
- package/{geometry-view-BsFJpBJa.js → geometry-view-DRrscyWU.js} +4 -4
- package/{geometry-view-BsFJpBJa.js.map → geometry-view-DRrscyWU.js.map} +1 -1
- package/{gltf-animation-K_zZxj_d.js → gltf-animation-BjnXkop6.js} +2 -2
- package/{gltf-animation-K_zZxj_d.js.map → gltf-animation-BjnXkop6.js.map} +1 -1
- package/{gltf-ext-basisu-CDbPclzZ.js → gltf-ext-basisu-DtzVV1Xx.js} +2 -202
- package/gltf-ext-basisu-DtzVV1Xx.js.map +1 -0
- package/{gltf-ext-node-visibility-DXCJEYr6.js → gltf-ext-node-visibility-BhX0DmiP.js} +2 -2
- package/{gltf-ext-node-visibility-DXCJEYr6.js.map → gltf-ext-node-visibility-BhX0DmiP.js.map} +1 -1
- package/{gltf-ext-quantization-CvHI_0Vg.js → gltf-ext-quantization-DaymajCR.js} +2 -2
- package/{gltf-ext-quantization-CvHI_0Vg.js.map → gltf-ext-quantization-DaymajCR.js.map} +1 -1
- package/{gltf-ext-uv-transform-DgYazJBs.js → gltf-ext-uv-transform-DFmNJ8kA.js} +2 -2
- package/{gltf-ext-uv-transform-DgYazJBs.js.map → gltf-ext-uv-transform-DFmNJ8kA.js.map} +1 -1
- package/{gltf-feature-animation-pointer-D1RJRFBw.js → gltf-feature-animation-pointer-C40tqOhL.js} +3 -3
- package/{gltf-feature-animation-pointer-D1RJRFBw.js.map → gltf-feature-animation-pointer-C40tqOhL.js.map} +1 -1
- package/{gltf-feature-animations-Cmc1uoIu.js → gltf-feature-animations-v0S_yb4T.js} +2 -2
- package/{gltf-feature-animations-Cmc1uoIu.js.map → gltf-feature-animations-v0S_yb4T.js.map} +1 -1
- package/{gltf-feature-draco-CKKzT5E3.js → gltf-feature-draco-CljWrsna.js} +2 -2
- package/{gltf-feature-draco-CKKzT5E3.js.map → gltf-feature-draco-CljWrsna.js.map} +1 -1
- package/{gltf-feature-gpu-instancing-n87SO6Vh.js → gltf-feature-gpu-instancing-BoeSm6Tn.js} +2 -2
- package/{gltf-feature-gpu-instancing-n87SO6Vh.js.map → gltf-feature-gpu-instancing-BoeSm6Tn.js.map} +1 -1
- package/{gltf-feature-lights-punctual-Ckm3ciL8.js → gltf-feature-lights-punctual-BCTwgyi_.js} +5 -5
- package/{gltf-feature-lights-punctual-Ckm3ciL8.js.map → gltf-feature-lights-punctual-BCTwgyi_.js.map} +1 -1
- package/{gltf-feature-meshopt-DLC4SF1E.js → gltf-feature-meshopt-DItMkOMt.js} +2 -2
- package/{gltf-feature-meshopt-DLC4SF1E.js.map → gltf-feature-meshopt-DItMkOMt.js.map} +1 -1
- package/{gltf-feature-morph-Cjtu7hYa.js → gltf-feature-morph-Cv0mEYIq.js} +3 -3
- package/{gltf-feature-morph-Cjtu7hYa.js.map → gltf-feature-morph-Cv0mEYIq.js.map} +1 -1
- package/{gltf-feature-registry-C63Hjp9w.js → gltf-feature-registry-wNbt6UC-.js} +15 -15
- package/{gltf-feature-registry-C63Hjp9w.js.map → gltf-feature-registry-wNbt6UC-.js.map} +1 -1
- package/{gltf-feature-skeleton-DKbOGidp.js → gltf-feature-skeleton-Deh2UBAn.js} +3 -3
- package/{gltf-feature-skeleton-DKbOGidp.js.map → gltf-feature-skeleton-Deh2UBAn.js.map} +1 -1
- package/{gltf-feature-variants-Cmzu0O0e.js → gltf-feature-variants-DGSdFNJq.js} +2 -2
- package/{gltf-feature-variants-Cmzu0O0e.js.map → gltf-feature-variants-DGSdFNJq.js.map} +1 -1
- package/{gltf-glb-parser-Cj5MHS-v.js → gltf-glb-parser-DSQWsT4r.js} +2 -2
- package/{gltf-glb-parser-Cj5MHS-v.js.map → gltf-glb-parser-DSQWsT4r.js.map} +1 -1
- package/{gltf-interleave-gHf9_t0i.js → gltf-interleave-OBqmlu-h.js} +11 -5
- 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-edNcjwPf.js → gltf-pbr-builder-ext-3imk8Tev.js} +2 -2
- package/{gltf-pbr-builder-ext-edNcjwPf.js.map → gltf-pbr-builder-ext-3imk8Tev.js.map} +1 -1
- package/{gltf-variants-CPxNdtP4.js → gltf-variants-Dyr54wwg.js} +4 -4
- package/{gltf-variants-CPxNdtP4.js.map → gltf-variants-Dyr54wwg.js.map} +1 -1
- package/gpu-task-timer-DVBNZfq5.js +236 -0
- package/gpu-task-timer-DVBNZfq5.js.map +1 -0
- package/gpu-timer-CUpqT_hK.js +55 -0
- package/gpu-timer-CUpqT_hK.js.map +1 -0
- package/{gs-picking-pipeline-DYaW_Lg3.js → gs-picking-pipeline-CERN-Trj.js} +2 -2
- package/{gs-picking-pipeline-DYaW_Lg3.js.map → gs-picking-pipeline-CERN-Trj.js.map} +1 -1
- package/{havok-floating-origin-Dr-18Nds.js → havok-floating-origin-VVdJRUYc.js} +2 -2
- package/{havok-floating-origin-Dr-18Nds.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-CLElg2Bo.js → index-BgY3QEzL.js} +4774 -1276
- 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 +1047 -13
- package/index.js +508 -444
- package/{input-block-DqEedWF2.js → input-block-DjdlndCL.js} +2 -2
- package/{input-block-DqEedWF2.js.map → input-block-DjdlndCL.js.map} +1 -1
- package/{iridescence-fragment-BHU59-gQ.js → iridescence-fragment-kfsCs8lN.js} +2 -2
- package/{iridescence-fragment-BHU59-gQ.js.map → iridescence-fragment-kfsCs8lN.js.map} +1 -1
- package/{light-block-Bv37V8vl.js → light-block-qjCrz3de.js} +2 -2
- package/{light-block-Bv37V8vl.js.map → light-block-qjCrz3de.js.map} +1 -1
- package/{loop-block-qTg8vb99.js → loop-block-C8vkQ2bz.js} +2 -2
- package/{loop-block-qTg8vb99.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-BRCUr2wQ.js → morph-fragment-NpZYyIIU.js} +2 -2
- package/{morph-fragment-BRCUr2wQ.js.map → morph-fragment-NpZYyIIU.js.map} +1 -1
- package/{multilight-wgsl-DMeppAdZ.js → multilight-wgsl-I5SncF0q.js} +2 -2
- package/{multilight-wgsl-DMeppAdZ.js.map → multilight-wgsl-I5SncF0q.js.map} +1 -1
- package/{node-env-Bc559GmY.js → node-env-D7Aee08u.js} +2 -2
- package/{node-env-Bc559GmY.js.map → node-env-D7Aee08u.js.map} +1 -1
- package/{node-geometry-view-COmWsRXK.js → node-geometry-view-DfKXWNfV.js} +3 -3
- package/{node-geometry-view-COmWsRXK.js.map → node-geometry-view-DfKXWNfV.js.map} +1 -1
- package/{node-registry-extra-compat-dWrv7gpS.js → node-registry-extra-compat-CDLeBR1P.js} +2 -2
- package/{node-registry-extra-compat-dWrv7gpS.js.map → node-registry-extra-compat-CDLeBR1P.js.map} +1 -1
- package/{node-registry-extra-math-Bn854sX9.js → node-registry-extra-math-BA8_l4lB.js} +2 -2
- package/{node-registry-extra-math-Bn854sX9.js.map → node-registry-extra-math-BA8_l4lB.js.map} +1 -1
- package/{node-renderable-B5G8WcdH.js → node-renderable-EwLLnaL1.js} +2 -2
- package/{node-renderable-B5G8WcdH.js.map → node-renderable-EwLLnaL1.js.map} +1 -1
- package/{node-shadow-CVIUlNf0.js → node-shadow-CeTmT6g4.js} +2 -2
- package/{node-shadow-CVIUlNf0.js.map → node-shadow-CeTmT6g4.js.map} +1 -1
- package/{normal-map-fragment-CQSxhjCy.js → normal-map-fragment-BHImLyM-.js} +2 -2
- package/{normal-map-fragment-CQSxhjCy.js.map → normal-map-fragment-BHImLyM-.js.map} +1 -1
- package/package.json +10 -3
- package/{parse-camera-pBRT_6i5.js → parse-camera-5IGdctAS.js} +2 -2
- package/{parse-camera-pBRT_6i5.js.map → parse-camera-5IGdctAS.js.map} +1 -1
- package/{pbr-geometry-view-NiZY_juX.js → pbr-geometry-view-Dthf9Aut.js} +3 -3
- package/{pbr-geometry-view-NiZY_juX.js.map → pbr-geometry-view-Dthf9Aut.js.map} +1 -1
- package/{pbr-metallic-roughness-block-full-Ta9lR2cz.js → pbr-metallic-roughness-block-full-DD6zI_Lx.js} +2 -2
- package/{pbr-metallic-roughness-block-full-Ta9lR2cz.js.map → pbr-metallic-roughness-block-full-DD6zI_Lx.js.map} +1 -1
- package/{pbr-metallic-roughness-block-JBSi-tQN.js → pbr-metallic-roughness-block-g7wjzwN_.js} +2 -2
- package/{pbr-metallic-roughness-block-JBSi-tQN.js.map → pbr-metallic-roughness-block-g7wjzwN_.js.map} +1 -1
- package/{pbr-mr-helper-core-BVWNR08D.js → pbr-mr-helper-core-CWROQ7OA.js} +2 -2
- package/{pbr-mr-helper-core-BVWNR08D.js.map → pbr-mr-helper-core-CWROQ7OA.js.map} +1 -1
- package/{pbr-refraction-C9FvFmAp.js → pbr-refraction-Dxsm_gii.js} +2 -2
- package/{pbr-refraction-C9FvFmAp.js.map → pbr-refraction-Dxsm_gii.js.map} +1 -1
- package/{pbr-renderable-DzUF2QIk.js → pbr-renderable-CuKWalEM.js} +22 -22
- package/{pbr-renderable-DzUF2QIk.js.map → pbr-renderable-CuKWalEM.js.map} +1 -1
- package/{pbr-shadow-fragment-CnqnbGYS.js → pbr-shadow-fragment-waeIBQUq.js} +2 -2
- package/{pbr-shadow-fragment-CnqnbGYS.js.map → pbr-shadow-fragment-waeIBQUq.js.map} +1 -1
- package/{pbr-tracking-3tU1kqea.js → pbr-tracking-CdeqbBrh.js} +2 -2
- package/{pbr-tracking-3tU1kqea.js.map → pbr-tracking-CdeqbBrh.js.map} +1 -1
- package/{pbr-transmission-ext-BcLjRxfB.js → pbr-transmission-ext-BNiXngZc.js} +2 -2
- package/{pbr-transmission-ext-BcLjRxfB.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-Dbpgw3Jt.js → reflectance-fragment-BQFZ_pgy.js} +2 -2
- package/{reflectance-fragment-Dbpgw3Jt.js.map → reflectance-fragment-BQFZ_pgy.js.map} +1 -1
- package/{rgbd-decode-DoyUquy3.js → rgbd-decode-duTlXMWd.js} +2 -2
- package/{rgbd-decode-DoyUquy3.js.map → rgbd-decode-duTlXMWd.js.map} +1 -1
- package/{scene-material-swap-nNUH4nGn.js → scene-material-swap-4qM0tpBK.js} +1 -2
- package/scene-material-swap-4qM0tpBK.js.map +1 -0
- package/{screenshot-readback-D0Sj9qq3.js → screenshot-readback-DnxR4rhp.js} +2 -2
- package/{screenshot-readback-D0Sj9qq3.js.map → screenshot-readback-DnxR4rhp.js.map} +1 -1
- package/{shader-composer-BUD_pSX4.js → shader-composer-CBy2i8nU.js} +2 -2
- package/{shader-composer-BUD_pSX4.js.map → shader-composer-CBy2i8nU.js.map} +1 -1
- package/{shader-renderable-D7-RyVxa.js → shader-renderable-DVMVD6zP.js} +41 -9
- package/shader-renderable-DVMVD6zP.js.map +1 -0
- package/{shader-thin-instance-DuBotxDO.js → shader-thin-instance-CsDo3ULk.js} +2 -2
- package/{shader-thin-instance-DuBotxDO.js.map → shader-thin-instance-CsDo3ULk.js.map} +1 -1
- package/{sheen-fragment-1MkEMcbc.js → sheen-fragment-B_Jd7wrr.js} +2 -2
- package/{sheen-fragment-1MkEMcbc.js.map → sheen-fragment-B_Jd7wrr.js.map} +1 -1
- package/{singlelight-directional-wgsl-BsV8G456.js → singlelight-directional-wgsl-Bw84txva.js} +2 -2
- package/{singlelight-directional-wgsl-BsV8G456.js.map → singlelight-directional-wgsl-Bw84txva.js.map} +1 -1
- package/{singlelight-hemispheric-wgsl-Bo0jKlW5.js → singlelight-hemispheric-wgsl-DjxhgI8r.js} +2 -2
- package/{singlelight-hemispheric-wgsl-Bo0jKlW5.js.map → singlelight-hemispheric-wgsl-DjxhgI8r.js.map} +1 -1
- package/{singlelight-point-wgsl-DV39UP5Y.js → singlelight-point-wgsl-iA1aRkXA.js} +2 -2
- package/{singlelight-point-wgsl-DV39UP5Y.js.map → singlelight-point-wgsl-iA1aRkXA.js.map} +1 -1
- package/{singlelight-spot-wgsl-yg3od6vL.js → singlelight-spot-wgsl-MDdTdstF.js} +2 -2
- package/{singlelight-spot-wgsl-yg3od6vL.js.map → singlelight-spot-wgsl-MDdTdstF.js.map} +1 -1
- package/{skeleton-fragment-DdxYG6kv.js → skeleton-fragment-COdHWFcK.js} +2 -2
- package/{skeleton-fragment-DdxYG6kv.js.map → skeleton-fragment-COdHWFcK.js.map} +1 -1
- package/{skybox-renderable-CJD4XmX5.js → skybox-renderable-DJYkfw32.js} +2 -2
- package/{skybox-renderable-CJD4XmX5.js.map → skybox-renderable-DJYkfw32.js.map} +1 -1
- package/{splat-ply-compressed-DHjyiVmI.js → splat-ply-compressed-SxMlsKNK.js} +2 -2
- package/{splat-ply-compressed-DHjyiVmI.js.map → splat-ply-compressed-SxMlsKNK.js.map} +1 -1
- package/{standard-pipeline-XTbHL7MY.js → standard-pipeline-DXFOUqU_.js} +3 -3
- package/{standard-pipeline-XTbHL7MY.js.map → standard-pipeline-DXFOUqU_.js.map} +1 -1
- package/{standard-renderable-CREWLNHI.js → standard-renderable-BAc-i-ig.js} +3 -3
- package/{standard-renderable-CREWLNHI.js.map → standard-renderable-BAc-i-ig.js.map} +1 -1
- package/{std-ambient-fragment-Bjx3VFrr.js → std-ambient-fragment-P8dHZ4An.js} +2 -2
- package/{std-ambient-fragment-Bjx3VFrr.js.map → std-ambient-fragment-P8dHZ4An.js.map} +1 -1
- package/{std-cube-reflection-fragment-y9WWdXUt.js → std-cube-reflection-fragment-CF03MuQt.js} +2 -2
- package/{std-cube-reflection-fragment-y9WWdXUt.js.map → std-cube-reflection-fragment-CF03MuQt.js.map} +1 -1
- package/{std-emissive-fragment-C8Lnmojh.js → std-emissive-fragment-P8yJGclx.js} +2 -2
- package/{std-emissive-fragment-C8Lnmojh.js.map → std-emissive-fragment-P8yJGclx.js.map} +1 -1
- package/{std-lightmap-fragment-DFxGcoA5.js → std-lightmap-fragment-CymEG79z.js} +9 -6
- package/std-lightmap-fragment-CymEG79z.js.map +1 -0
- package/{std-opacity-fragment-EXzFWiSp.js → std-opacity-fragment-DLa1zV06.js} +2 -2
- package/{std-opacity-fragment-EXzFWiSp.js.map → std-opacity-fragment-DLa1zV06.js.map} +1 -1
- package/{std-reflection-fragment-BoJORqpG.js → std-reflection-fragment-BLySsYos.js} +2 -2
- package/{std-reflection-fragment-BoJORqpG.js.map → std-reflection-fragment-BLySsYos.js.map} +1 -1
- package/{std-shadow-fragment-Bq-Wc8UJ.js → std-shadow-fragment-C_q27Mdi.js} +2 -2
- package/{std-shadow-fragment-Bq-Wc8UJ.js.map → std-shadow-fragment-C_q27Mdi.js.map} +1 -1
- package/{std-specular-fragment-CM5R5j2g.js → std-specular-fragment-CaBXyAWY.js} +2 -2
- package/{std-specular-fragment-CM5R5j2g.js.map → std-specular-fragment-CaBXyAWY.js.map} +1 -1
- package/{std-tracking-Cif_wXeT.js → std-tracking-Bw61Dv98.js} +2 -2
- package/{std-tracking-Cif_wXeT.js.map → std-tracking-Bw61Dv98.js.map} +1 -1
- package/{subsurface-fragment-BEaAXYXz.js → subsurface-fragment-BNQoG9gr.js} +2 -2
- package/{subsurface-fragment-BEaAXYXz.js.map → subsurface-fragment-BNQoG9gr.js.map} +1 -1
- package/{thin-instance-cull-binding-DWKUt5ZN.js → thin-instance-cull-binding-BNC5JiGw.js} +3 -3
- package/{thin-instance-cull-binding-DWKUt5ZN.js.map → thin-instance-cull-binding-BNC5JiGw.js.map} +1 -1
- package/{thin-instance-gpu-BDdRcNAh.js → thin-instance-gpu-C1DGstap.js} +2 -2
- package/{thin-instance-gpu-BDdRcNAh.js.map → thin-instance-gpu-C1DGstap.js.map} +1 -1
- package/{tracking-primitives-CglRNTlX.js → tracking-primitives-CMBWLxGr.js} +2 -2
- package/{tracking-primitives-CglRNTlX.js.map → tracking-primitives-CMBWLxGr.js.map} +1 -1
- package/{unlit-fragment-kxfZWlnp.js → unlit-fragment-BsHrS9XX.js} +2 -2
- package/{unlit-fragment-kxfZWlnp.js.map → unlit-fragment-BsHrS9XX.js.map} +1 -1
- package/gltf-ext-basisu-CDbPclzZ.js.map +0 -1
- package/gltf-interleave-gHf9_t0i.js.map +0 -1
- package/gltf-normals-b2h74380.js.map +0 -1
- package/index-CLElg2Bo.js.map +0 -1
- package/scene-material-swap-nNUH4nGn.js.map +0 -1
- package/shader-renderable-D7-RyVxa.js.map +0 -1
- package/std-lightmap-fragment-DFxGcoA5.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CYZDclhF.js","sources":["../../../node_modules/.pnpm/@recast-navigation+generators@0.43.0/node_modules/@recast-navigation/generators/dist/index.mjs"],"sourcesContent":["import { vec3, recastConfigDefaults, RecastBuildContext, VerticesArray, TrianglesArray, createRcConfig, calcGridSize, allocHeightfield, createHeightfield, TriangleAreasArray, markWalkableTriangles, rasterizeTriangles, filterLowHangingWalkableObstacles, filterLedgeSpans, filterWalkableLowHeightSpans, allocCompactHeightfield, buildCompactHeightfield, freeHeightfield, erodeWalkableArea, buildDistanceField, buildRegions, allocContourSet, buildContours, Recast, allocPolyMesh, buildPolyMesh, allocPolyMeshDetail, buildPolyMeshDetail, freeCompactHeightfield, freeContourSet, NavMeshCreateParams, createNavMeshData, Raw, NavMesh, freePolyMesh, freePolyMeshDetail, TileCacheMeshProcess, TileCache, DetourTileCacheParams, NavMeshParams, RecastChunkyTriMesh, statusFailed, cloneRcConfig, ChunkIdsArray, allocHeightfieldLayerSet, buildHeightfieldLayers, TileCacheData, Detour, getHeightfieldLayerHeights, getHeightfieldLayerAreas, getHeightfieldLayerCons, buildTileCacheLayer, freeHeightfieldLayerSet, statusToReadableString } from '@recast-navigation/core';\n\nconst getBoundingBox = (positions, indices) => {\n const bbMin = {\n x: Infinity,\n y: Infinity,\n z: Infinity\n };\n const bbMax = {\n x: -Infinity,\n y: -Infinity,\n z: -Infinity\n };\n for (let i = 0; i < indices.length; i++) {\n const ind = indices[i];\n const x = positions[ind * 3];\n const y = positions[ind * 3 + 1];\n const z = positions[ind * 3 + 2];\n bbMin.x = Math.min(bbMin.x, x);\n bbMin.y = Math.min(bbMin.y, y);\n bbMin.z = Math.min(bbMin.z, z);\n bbMax.x = Math.max(bbMax.x, x);\n bbMax.y = Math.max(bbMax.y, y);\n bbMax.z = Math.max(bbMax.z, z);\n }\n return {\n bbMin: vec3.toArray(bbMin),\n bbMax: vec3.toArray(bbMax)\n };\n};\nconst dtIlog2 = v => {\n let r = 0;\n let shift = 0;\n r = Number(v > 0xffff) << 4;\n v >>= r;\n shift = Number(v > 0xff) << 3;\n v >>= shift;\n r |= shift;\n shift = Number(v > 0xf) << 2;\n v >>= shift;\n r |= shift;\n shift = Number(v > 0x3) << 1;\n v >>= shift;\n r |= shift;\n r |= v >> 1;\n return r;\n};\nconst dtNextPow2 = v => {\n v--;\n v |= v >> 1;\n v |= v >> 2;\n v |= v >> 4;\n v |= v >> 8;\n v |= v >> 16;\n v++;\n return v;\n};\n\nconst soloNavMeshGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n buildBvTree: true\n};\n/**\n * Builds Solo NavMesh data from the given positions and indices.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateSoloNavMeshData = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'solo',\n buildContext\n };\n const cleanup = () => {\n if (keepIntermediates) return;\n if (intermediates.heightfield) {\n freeHeightfield(intermediates.heightfield);\n intermediates.heightfield = undefined;\n }\n if (intermediates.compactHeightfield) {\n freeCompactHeightfield(intermediates.compactHeightfield);\n intermediates.compactHeightfield = undefined;\n }\n if (intermediates.contourSet) {\n freeContourSet(intermediates.contourSet);\n intermediates.contourSet = undefined;\n }\n if (intermediates.polyMesh) {\n freePolyMesh(intermediates.polyMesh);\n intermediates.polyMesh = undefined;\n }\n if (intermediates.polyMeshDetail) {\n freePolyMeshDetail(intermediates.polyMeshDetail);\n intermediates.polyMeshDetail = undefined;\n }\n };\n const fail = error => {\n cleanup();\n return {\n navMeshData: undefined,\n success: false,\n intermediates,\n error\n };\n };\n /* input geometry */\n const vertices = positions;\n const numVertices = indices.length;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n //\n // Step 1. Initialize build config.\n //\n const config = {\n ...soloNavMeshGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n const rcConfig = createRcConfig(config);\n rcConfig.minRegionArea = rcConfig.minRegionArea * rcConfig.minRegionArea; // Note: area = size*size\n rcConfig.mergeRegionArea = rcConfig.mergeRegionArea * rcConfig.mergeRegionArea; // Note: area = size*size\n rcConfig.detailSampleDist = rcConfig.detailSampleDist < 0.9 ? 0 : rcConfig.cs * rcConfig.detailSampleDist;\n rcConfig.detailSampleMaxError = rcConfig.ch * rcConfig.detailSampleMaxError;\n const gridSize = calcGridSize(bbMin, bbMax, rcConfig.cs);\n rcConfig.width = gridSize.width;\n rcConfig.height = gridSize.height;\n //\n // Step 2. Rasterize input polygon soup.\n //\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n intermediates.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, rcConfig.width, rcConfig.height, bbMin, bbMax, rcConfig.cs, rcConfig.ch)) {\n return fail('Could not create heightfield');\n }\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(numTriangles);\n markWalkableTriangles(buildContext, rcConfig.walkableSlopeAngle, verticesArray, numVertices, trianglesArray, numTriangles, triangleAreasArray);\n if (!rasterizeTriangles(buildContext, verticesArray, numVertices, trianglesArray, triangleAreasArray, numTriangles, heightfield, rcConfig.walkableClimb)) {\n return fail('Could not rasterize triangles');\n }\n triangleAreasArray.destroy();\n verticesArray.destroy();\n trianglesArray.destroy();\n //\n // Step 3. Filter walkables surfaces.\n //\n // Once all geoemtry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, rcConfig.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, rcConfig.walkableHeight, rcConfig.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, rcConfig.walkableHeight, heightfield);\n //\n // Step 4. Partition walkable surface to simple regions.\n //\n // Compact the heightfield so that it is faster to handle from now on.\n // This will result more cache coherent data as well as the neighbours\n // between walkable cells will be calculated.\n const compactHeightfield = allocCompactHeightfield();\n intermediates.compactHeightfield = compactHeightfield;\n if (!buildCompactHeightfield(buildContext, rcConfig.walkableHeight, rcConfig.walkableClimb, heightfield, compactHeightfield)) {\n return fail('Failed to build compact data');\n }\n if (!keepIntermediates) {\n freeHeightfield(heightfield);\n intermediates.heightfield = undefined;\n }\n // Erode the walkable area by agent radius.\n if (!erodeWalkableArea(buildContext, rcConfig.walkableRadius, compactHeightfield)) {\n return fail('Failed to erode walkable area');\n }\n // (Optional) Mark areas\n // markConvexPolyArea(...)\n // Prepare for region partitioning, by calculating Distance field along the walkable surface.\n if (!buildDistanceField(buildContext, compactHeightfield)) {\n return fail('Failed to build distance field');\n }\n // Partition the walkable surface into simple regions without holes.\n if (!buildRegions(buildContext, compactHeightfield, rcConfig.borderSize, rcConfig.minRegionArea, rcConfig.mergeRegionArea)) {\n return fail('Failed to build regions');\n }\n //\n // Step 5. Trace and simplify region contours.\n //\n const contourSet = allocContourSet();\n intermediates.contourSet = contourSet;\n if (!buildContours(buildContext, compactHeightfield, rcConfig.maxSimplificationError, rcConfig.maxEdgeLen, contourSet, Recast.RC_CONTOUR_TESS_WALL_EDGES)) {\n return fail('Failed to create contours');\n }\n //\n // Step 6. Build polygons mesh from contours.\n //\n const polyMesh = allocPolyMesh();\n intermediates.polyMesh = polyMesh;\n if (!buildPolyMesh(buildContext, contourSet, rcConfig.maxVertsPerPoly, polyMesh)) {\n return fail('Failed to triangulate contours');\n }\n //\n // Step 7. Create detail mesh which allows to access approximate height on each polygon.\n //\n const polyMeshDetail = allocPolyMeshDetail();\n intermediates.polyMeshDetail = polyMeshDetail;\n if (!buildPolyMeshDetail(buildContext, polyMesh, compactHeightfield, rcConfig.detailSampleDist, rcConfig.detailSampleMaxError, polyMeshDetail)) {\n return fail('Failed to build detail mesh');\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n intermediates.compactHeightfield = undefined;\n freeContourSet(contourSet);\n intermediates.contourSet = undefined;\n }\n //\n // Step 8. Create Detour data from Recast poly mesh.\n //\n for (let i = 0; i < polyMesh.npolys(); i++) {\n if (polyMesh.areas(i) === Recast.RC_WALKABLE_AREA) {\n polyMesh.setAreas(i, 0);\n }\n if (polyMesh.areas(i) === 0) {\n polyMesh.setFlags(i, 1);\n }\n }\n const navMeshCreateParams = new NavMeshCreateParams();\n navMeshCreateParams.setPolyMeshCreateParams(polyMesh);\n navMeshCreateParams.setPolyMeshDetailCreateParams(polyMeshDetail);\n navMeshCreateParams.setWalkableHeight(rcConfig.walkableHeight * rcConfig.ch);\n navMeshCreateParams.setWalkableRadius(rcConfig.walkableRadius * rcConfig.cs);\n navMeshCreateParams.setWalkableClimb(rcConfig.walkableClimb * rcConfig.ch);\n navMeshCreateParams.setCellSize(rcConfig.cs);\n navMeshCreateParams.setCellHeight(rcConfig.ch);\n navMeshCreateParams.setBuildBvTree(config.buildBvTree);\n if (navMeshGeneratorConfig.offMeshConnections) {\n navMeshCreateParams.setOffMeshConnections(navMeshGeneratorConfig.offMeshConnections);\n }\n const createNavMeshDataResult = createNavMeshData(navMeshCreateParams);\n if (!createNavMeshDataResult.success) {\n return fail('Failed to create Detour navmesh data');\n }\n cleanup();\n return {\n navMeshData: createNavMeshDataResult.navMeshData,\n success: true,\n intermediates\n };\n};\n/**\n * Builds a Solo NavMesh from the given positions and indices.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateSoloNavMesh = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const createNavMeshDataResult = generateSoloNavMeshData(positions, indices, navMeshGeneratorConfig, keepIntermediates);\n if (!createNavMeshDataResult.success) {\n return {\n navMesh: undefined,\n success: false,\n intermediates: createNavMeshDataResult.intermediates,\n error: createNavMeshDataResult.error\n };\n }\n const {\n navMeshData\n } = createNavMeshDataResult;\n const navMesh = new NavMesh();\n if (!navMesh.initSolo(navMeshData)) {\n navMeshData.destroy();\n return {\n navMesh: undefined,\n success: false,\n intermediates: createNavMeshDataResult.intermediates,\n error: 'Failed to initialize solo NavMesh'\n };\n }\n return {\n success: true,\n navMesh,\n intermediates: createNavMeshDataResult.intermediates\n };\n};\n\nconst tileCacheGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n tileSize: 32,\n expectedLayersPerTile: 4,\n maxObstacles: 128\n};\nconst createDefaultTileCacheMeshProcess = () => new TileCacheMeshProcess((navMeshCreateParams, polyAreas, polyFlags) => {\n for (let i = 0; i < navMeshCreateParams.polyCount(); ++i) {\n polyAreas.set(i, 0);\n polyFlags.set(i, 1);\n }\n});\n/**\n * Builds a TileCache and NavMesh from the given positions and indices.\n * TileCache assumes small tiles (around 32-64 squared) and does some tricks to make the update fast.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshConfig optional configuration for the NavMesh\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateTileCache = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'tilecache',\n buildContext,\n chunkyTriMesh: undefined,\n tileIntermediates: []\n };\n const tileCache = new TileCache();\n const navMesh = new NavMesh();\n /* input geometry */\n const vertices = positions;\n const numVertices = indices.length;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n const {\n expectedLayersPerTile,\n maxObstacles,\n ...recastConfig\n } = {\n ...tileCacheGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n const cleanup = () => {\n verticesArray.destroy();\n trianglesArray.destroy();\n if (!keepIntermediates) {\n for (let i = 0; i < intermediates.tileIntermediates.length; i++) {\n const tileIntermediate = intermediates.tileIntermediates[i];\n if (tileIntermediate.heightfield) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n if (tileIntermediate.compactHeightfield) {\n freeCompactHeightfield(tileIntermediate.compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n }\n if (tileIntermediate.heightfieldLayerSet) {\n freeHeightfieldLayerSet(tileIntermediate.heightfieldLayerSet);\n tileIntermediate.heightfieldLayerSet = undefined;\n }\n }\n }\n };\n const fail = error => {\n cleanup();\n tileCache.destroy();\n navMesh.destroy();\n return {\n success: false,\n navMesh: undefined,\n tileCache: undefined,\n intermediates,\n error\n };\n };\n //\n // Step 1. Initialize build config.\n //\n const config = createRcConfig(recastConfig);\n const gridSize = calcGridSize(bbMin, bbMax, config.cs);\n config.width = gridSize.width;\n config.height = gridSize.height;\n config.minRegionArea = config.minRegionArea * config.minRegionArea; // Note: area = size*size\n config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea; // Note: area = size*size\n config.detailSampleDist = config.detailSampleDist < 0.9 ? 0 : config.cs * config.detailSampleDist;\n config.detailSampleMaxError = config.ch * config.detailSampleMaxError;\n const tileSize = Math.floor(config.tileSize);\n const tileWidth = Math.floor((config.width + tileSize - 1) / tileSize);\n const tileHeight = Math.floor((config.height + tileSize - 1) / tileSize);\n // Generation params\n config.borderSize = config.walkableRadius + 3; // Reserve enough padding.\n config.width = config.tileSize + config.borderSize * 2;\n config.height = config.tileSize + config.borderSize * 2;\n // Tile cache params\n const tileCacheParams = DetourTileCacheParams.create({\n orig: bbMin,\n cs: config.cs,\n ch: config.ch,\n width: config.tileSize,\n height: config.tileSize,\n walkableHeight: config.walkableHeight * config.ch,\n walkableRadius: config.walkableRadius * config.cs,\n walkableClimb: config.walkableClimb * config.ch,\n maxSimplificationError: config.maxSimplificationError,\n maxTiles: tileWidth * tileHeight * expectedLayersPerTile,\n maxObstacles\n });\n const allocator = new Raw.RecastLinearAllocator(32000);\n const compressor = new Raw.RecastFastLZCompressor();\n const tileCacheMeshProcess = navMeshGeneratorConfig.tileCacheMeshProcess ?? createDefaultTileCacheMeshProcess();\n if (!tileCache.init(tileCacheParams, allocator, compressor, tileCacheMeshProcess)) {\n return fail('Failed to initialize tile cache');\n }\n const orig = vec3.fromArray(bbMin);\n // Max tiles and max polys affect how the tile IDs are caculated.\n // There are 22 bits available for identifying a tile and a polygon.\n let tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight * expectedLayersPerTile))), 14);\n if (tileBits > 14) {\n tileBits = 14;\n }\n const polyBits = 22 - tileBits;\n const maxTiles = 1 << tileBits;\n const maxPolysPerTile = 1 << polyBits;\n const navMeshParams = NavMeshParams.create({\n orig,\n tileWidth: config.tileSize * config.cs,\n tileHeight: config.tileSize * config.cs,\n maxTiles,\n maxPolys: maxPolysPerTile\n });\n if (!navMesh.initTiled(navMeshParams)) {\n return fail('Failed to initialize tiled navmesh');\n }\n const chunkyTriMesh = new RecastChunkyTriMesh();\n intermediates.chunkyTriMesh = chunkyTriMesh;\n if (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, 256)) {\n return fail('Failed to build chunky triangle mesh');\n }\n const rasterizeTileLayers = (tileX, tileY) => {\n // Tile intermediates\n const tileIntermediates = {\n tileX,\n tileY\n };\n // Tile bounds\n const tcs = config.tileSize * config.cs;\n const tileConfig = cloneRcConfig(config);\n const tileBoundsMin = [bbMin[0] + tileX * tcs, bbMin[1], bbMin[2] + tileY * tcs];\n const tileBoundsMax = [bbMin[0] + (tileX + 1) * tcs, bbMax[1], bbMin[2] + (tileY + 1) * tcs];\n tileBoundsMin[0] -= tileConfig.borderSize * tileConfig.cs;\n tileBoundsMin[2] -= tileConfig.borderSize * tileConfig.cs;\n tileBoundsMax[0] += tileConfig.borderSize * tileConfig.cs;\n tileBoundsMax[2] += tileConfig.borderSize * tileConfig.cs;\n tileConfig.set_bmin(0, tileBoundsMin[0]);\n tileConfig.set_bmin(1, tileBoundsMin[1]);\n tileConfig.set_bmin(2, tileBoundsMin[2]);\n tileConfig.set_bmax(0, tileBoundsMax[0]);\n tileConfig.set_bmax(1, tileBoundsMax[1]);\n tileConfig.set_bmax(2, tileBoundsMax[2]);\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n tileIntermediates.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, tileBoundsMin, tileBoundsMax, tileConfig.cs, tileConfig.ch)) {\n return {\n n: 0\n };\n }\n const tbmin = [tileBoundsMin[0], tileBoundsMin[2]];\n const tbmax = [tileBoundsMax[0], tileBoundsMax[2]];\n // TODO: Make grow when returning too many items.\n const maxChunkIds = 512;\n const chunkIdsArray = new ChunkIdsArray();\n chunkIdsArray.resize(maxChunkIds);\n const nChunksOverlapping = chunkyTriMesh.getChunksOverlappingRect(tbmin, tbmax, chunkIdsArray, maxChunkIds);\n if (nChunksOverlapping === 0) {\n return {\n n: 0\n };\n }\n for (let i = 0; i < nChunksOverlapping; ++i) {\n const nodeId = chunkIdsArray.get(i);\n const node = chunkyTriMesh.nodes(nodeId);\n const nNodeTris = node.n;\n const nodeTrianglesArray = chunkyTriMesh.getNodeTris(nodeId);\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(nNodeTris);\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, nodeTrianglesArray, nNodeTris, triangleAreasArray);\n const success = rasterizeTriangles(buildContext, verticesArray, numVertices, nodeTrianglesArray, triangleAreasArray, nNodeTris, heightfield, tileConfig.walkableClimb);\n triangleAreasArray.destroy();\n if (!success) {\n return {\n n: 0\n };\n }\n }\n // Once all geometry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, config.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, config.walkableHeight, config.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, config.walkableHeight, heightfield);\n const compactHeightfield = allocCompactHeightfield();\n if (!buildCompactHeightfield(buildContext, config.walkableHeight, config.walkableClimb, heightfield, compactHeightfield)) {\n return {\n n: 0\n };\n }\n if (!keepIntermediates) {\n freeHeightfield(tileIntermediates.heightfield);\n tileIntermediates.heightfield = undefined;\n }\n // Erode the walkable area by agent radius\n if (!erodeWalkableArea(buildContext, config.walkableRadius, compactHeightfield)) {\n return {\n n: 0\n };\n }\n const heightfieldLayerSet = allocHeightfieldLayerSet();\n if (!buildHeightfieldLayers(buildContext, compactHeightfield, config.borderSize, config.walkableHeight, heightfieldLayerSet)) {\n return {\n n: 0\n };\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n tileIntermediates.compactHeightfield = undefined;\n }\n const tiles = [];\n for (let i = 0; i < heightfieldLayerSet.nlayers(); i++) {\n const tile = new TileCacheData();\n const heightfieldLayer = heightfieldLayerSet.layers(i);\n // Store header\n const header = new Raw.dtTileCacheLayerHeader();\n header.magic = Detour.DT_TILECACHE_MAGIC;\n header.version = Detour.DT_TILECACHE_VERSION;\n // Tile layer location in the navmesh\n header.tx = tileX;\n header.ty = tileY;\n header.tlayer = i;\n const heightfieldLayerBin = heightfieldLayer.bmin();\n const heightfieldLayerBmax = heightfieldLayer.bmax();\n header.set_bmin(0, heightfieldLayerBin.x);\n header.set_bmin(1, heightfieldLayerBin.y);\n header.set_bmin(2, heightfieldLayerBin.z);\n header.set_bmax(0, heightfieldLayerBmax.x);\n header.set_bmax(1, heightfieldLayerBmax.y);\n header.set_bmax(2, heightfieldLayerBmax.z);\n // Tile info\n header.width = heightfieldLayer.width();\n header.height = heightfieldLayer.height();\n header.minx = heightfieldLayer.minx();\n header.maxx = heightfieldLayer.maxx();\n header.miny = heightfieldLayer.miny();\n header.maxy = heightfieldLayer.maxy();\n header.hmin = heightfieldLayer.hmin();\n header.hmax = heightfieldLayer.hmax();\n const heights = getHeightfieldLayerHeights(heightfieldLayer);\n const areas = getHeightfieldLayerAreas(heightfieldLayer);\n const cons = getHeightfieldLayerCons(heightfieldLayer);\n const status = buildTileCacheLayer(compressor, header, heights, areas, cons, tile);\n if (statusFailed(status)) {\n return {\n n: 0\n };\n }\n tiles.push(tile);\n }\n if (!keepIntermediates) {\n freeHeightfieldLayerSet(heightfieldLayerSet);\n tileIntermediates.heightfieldLayerSet = undefined;\n }\n intermediates.tileIntermediates.push(tileIntermediates);\n return {\n n: tiles.length,\n tiles\n };\n };\n // Preprocess tiles\n for (let y = 0; y < tileHeight; ++y) {\n for (let x = 0; x < tileWidth; ++x) {\n const {\n n,\n tiles: newTiles\n } = rasterizeTileLayers(x, y);\n if (n > 0 && newTiles) {\n for (let i = 0; i < n; i++) {\n const tileCacheData = newTiles[i];\n const addResult = tileCache.addTile(tileCacheData);\n if (statusFailed(addResult.status)) {\n buildContext.log(Recast.RC_LOG_WARNING, `Failed to add tile to tile cache - tx: ${x}, ty: ${y}`);\n }\n }\n }\n }\n }\n // Build initial meshes\n for (let y = 0; y < tileHeight; y++) {\n for (let x = 0; x < tileWidth; x++) {\n const dtStatus = tileCache.buildNavMeshTilesAt(x, y, navMesh);\n if (statusFailed(dtStatus)) {\n return fail(`Failed to build nav mesh tiles at ${x}, ${y}`);\n }\n }\n }\n cleanup();\n return {\n success: true,\n tileCache,\n navMesh,\n intermediates\n };\n};\n\nconst buildTiledNavMeshRcConfig = ({\n recastConfig,\n navMeshBounds: [navMeshBoundsMin, navMeshBoundsMax]\n}) => {\n //\n // Initialize build config.\n //\n const config = createRcConfig(recastConfig);\n /* grid size */\n const gridSize = calcGridSize(navMeshBoundsMin, navMeshBoundsMax, config.cs);\n config.width = gridSize.width;\n config.height = gridSize.height;\n config.minRegionArea = config.minRegionArea * config.minRegionArea; // Note: area = size*size\n config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea; // Note: area = size*size\n config.tileSize = Math.floor(config.tileSize);\n config.borderSize = config.walkableRadius + 3; // Reserve enough padding.\n config.width = config.tileSize + config.borderSize * 2;\n config.height = config.tileSize + config.borderSize * 2;\n config.detailSampleDist = config.detailSampleDist < 0.9 ? 0 : config.cs * config.detailSampleDist;\n config.detailSampleMaxError = config.ch * config.detailSampleMaxError;\n // tile size\n const tileSize = Math.floor(config.tileSize);\n const tileWidth = Math.floor((gridSize.width + tileSize - 1) / tileSize);\n const tileHeight = Math.floor((gridSize.height + tileSize - 1) / tileSize);\n const tcs = config.tileSize * config.cs;\n /* Create dtNavMeshParams, initialise nav mesh for tiled use */\n const orig = vec3.fromArray(navMeshBoundsMin);\n // Max tiles and max polys affect how the tile IDs are caculated.\n // There are 22 bits available for identifying a tile and a polygon.\n let tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight))), 14);\n if (tileBits > 14) tileBits = 14;\n const polyBits = 22 - tileBits;\n const maxTiles = 1 << tileBits;\n const maxPolysPerTile = 1 << polyBits;\n return {\n config,\n gridSize,\n tileSize,\n tileWidth,\n tileHeight,\n tcs,\n orig,\n maxTiles,\n maxPolysPerTile\n };\n};\nconst tiledNavMeshGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n chunkyTriMeshTrisPerChunk: 256,\n buildBvTree: true\n};\nconst generateTileNavMeshData = (positions, indices, rcConfig, chunkyTriMesh, tile, options = {}, keepIntermediates = false, buildContext = new RecastBuildContext()) => {\n const tileIntermediate = {\n x: tile.x,\n y: tile.y\n };\n const cleanup = () => {\n if (keepIntermediates) return;\n if (tileIntermediate.compactHeightfield) {\n freeCompactHeightfield(tileIntermediate.compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n }\n if (tileIntermediate.heightfield) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n if (tileIntermediate.contourSet) {\n freeContourSet(tileIntermediate.contourSet);\n tileIntermediate.contourSet = undefined;\n }\n if (tileIntermediate.polyMesh) {\n freePolyMesh(tileIntermediate.polyMesh);\n tileIntermediate.polyMesh = undefined;\n }\n if (tileIntermediate.polyMeshDetail) {\n freePolyMeshDetail(tileIntermediate.polyMeshDetail);\n tileIntermediate.polyMeshDetail = undefined;\n }\n };\n const failTileMesh = error => {\n buildContext.log(Recast.RC_LOG_ERROR, error);\n cleanup();\n return {\n success: false,\n error,\n intermediates: tileIntermediate\n };\n };\n const tileConfig = cloneRcConfig(rcConfig);\n // Expand the heightfield bounding box by border size to find the extents of geometry we need to build this tile.\n //\n // This is done in order to make sure that the navmesh tiles connect correctly at the borders,\n // and the obstacles close to the border work correctly with the dilation process.\n // No polygons (or contours) will be created on the border area.\n //\n // IMPORTANT!\n //\n // :''''''''':\n // : +-----+ :\n // : | | :\n // : | |<--- tile to build\n // : | | :\n // : +-----+ :<-- geometry needed\n // :.........:\n //\n // You should use this bounding box to query your input geometry.\n //\n // For example if you build a navmesh for terrain, and want the navmesh tiles to match the terrain tile size\n // you will need to pass in data from neighbour terrain tiles too! In a simple case, just pass in all the 8 neighbours,\n // or use the bounding box below to only pass in a sliver of each of the 8 neighbours.\n const expandedTileBoundsMin = [...tile.bmin];\n const expandedTileBoundsMax = [...tile.bmax];\n expandedTileBoundsMin[0] -= tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMin[2] -= tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMax[0] += tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMax[2] += tileConfig.borderSize * tileConfig.cs;\n tileConfig.set_bmin(0, expandedTileBoundsMin[0]);\n tileConfig.set_bmin(1, expandedTileBoundsMin[1]);\n tileConfig.set_bmin(2, expandedTileBoundsMin[2]);\n tileConfig.set_bmax(0, expandedTileBoundsMax[0]);\n tileConfig.set_bmax(1, expandedTileBoundsMax[1]);\n tileConfig.set_bmax(2, expandedTileBoundsMax[2]);\n // Reset build timer\n buildContext.resetTimers();\n // Start the build process\n buildContext.startTimer(Recast.RC_TIMER_TOTAL);\n buildContext.log(Recast.RC_LOG_PROGRESS, `Building tile at x: ${tile.x}, y: ${tile.y}`);\n buildContext.log(Recast.RC_LOG_PROGRESS, ` - ${tileConfig.width} x ${tileConfig.height} cells`);\n buildContext.log(Recast.RC_LOG_PROGRESS, ` - ${positions.size / 3 / 1000}K verts, ${indices.size / 3 / 1000}K tris`);\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n tileIntermediate.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, expandedTileBoundsMin, expandedTileBoundsMax, tileConfig.cs, tileConfig.ch)) {\n return failTileMesh('Could not create heightfield');\n }\n // Allocate array that can hold triangle flags.\n // If you have multiple meshes you need to process, allocate\n // and array which can hold the max number of triangles you need to process.\n const triAreas = new TriangleAreasArray();\n triAreas.resize(chunkyTriMesh.maxTrisPerChunk());\n const tbmin = [expandedTileBoundsMin[0], expandedTileBoundsMin[2]];\n const tbmax = [expandedTileBoundsMax[0], expandedTileBoundsMax[2]];\n // TODO: Make grow when returning too many items.\n const maxChunkIds = 512;\n const chunkIdsArray = new ChunkIdsArray();\n chunkIdsArray.resize(maxChunkIds);\n const nChunksOverlapping = chunkyTriMesh.getChunksOverlappingRect(tbmin, tbmax, chunkIdsArray, maxChunkIds);\n if (nChunksOverlapping === 0) {\n return {\n success: true,\n intermediates: tileIntermediate\n };\n }\n for (let i = 0; i < nChunksOverlapping; ++i) {\n const nodeId = chunkIdsArray.get(i);\n const node = chunkyTriMesh.nodes(nodeId);\n const nNodeTris = node.n;\n const nodeTrianglesArray = chunkyTriMesh.getNodeTris(nodeId);\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(nNodeTris);\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, positions, indices.size, nodeTrianglesArray, nNodeTris, triangleAreasArray);\n const success = rasterizeTriangles(buildContext, positions, indices.size, nodeTrianglesArray, triangleAreasArray, nNodeTris, heightfield, tileConfig.walkableClimb);\n triangleAreasArray.destroy();\n if (!success) {\n return failTileMesh('Could not rasterize triangles');\n }\n }\n // Once all geometry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, tileConfig.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, tileConfig.walkableHeight, tileConfig.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, tileConfig.walkableHeight, heightfield);\n // Compact the heightfield so that it is faster to handle from now on.\n // This will result more cache coherent data as well as the neighbours\n // between walkable cells will be calculated.\n const compactHeightfield = allocCompactHeightfield();\n tileIntermediate.compactHeightfield = compactHeightfield;\n if (!buildCompactHeightfield(buildContext, tileConfig.walkableHeight, tileConfig.walkableClimb, heightfield, compactHeightfield)) {\n return failTileMesh('Could not build compact heightfield');\n }\n if (!keepIntermediates) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n // Erode the walkable area by agent radius\n if (!erodeWalkableArea(buildContext, tileConfig.walkableRadius, compactHeightfield)) {\n return failTileMesh('Could not erode walkable area');\n }\n // (Optional) Mark areas\n // markConvexPolyArea(...)\n // Prepare for region partitioning, by calculating Distance field along the walkable surface.\n if (!buildDistanceField(buildContext, compactHeightfield)) {\n return failTileMesh('Failed to build distance field');\n }\n // Partition the walkable surface into simple regions without holes.\n if (!buildRegions(buildContext, compactHeightfield, tileConfig.borderSize, tileConfig.minRegionArea, tileConfig.mergeRegionArea)) {\n return failTileMesh('Failed to build regions');\n }\n //\n // Trace and simplify region contours.\n //\n const contourSet = allocContourSet();\n tileIntermediate.contourSet = contourSet;\n if (!buildContours(buildContext, compactHeightfield, tileConfig.maxSimplificationError, tileConfig.maxEdgeLen, contourSet, Recast.RC_CONTOUR_TESS_WALL_EDGES)) {\n return failTileMesh('Failed to create contours');\n }\n //\n // Build polygons mesh from contours.\n //\n const polyMesh = allocPolyMesh();\n tileIntermediate.polyMesh = polyMesh;\n if (!buildPolyMesh(buildContext, contourSet, tileConfig.maxVertsPerPoly, polyMesh)) {\n return failTileMesh('Failed to triangulate contours');\n }\n //\n // Create detail mesh which allows to access approximate height on each polygon.\n //\n const polyMeshDetail = allocPolyMeshDetail();\n tileIntermediate.polyMeshDetail = polyMeshDetail;\n if (!buildPolyMeshDetail(buildContext, polyMesh, compactHeightfield, tileConfig.detailSampleDist, tileConfig.detailSampleMaxError, polyMeshDetail)) {\n return failTileMesh('Failed to build detail mesh');\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n freeContourSet(contourSet);\n tileIntermediate.contourSet = undefined;\n }\n // Update poly flags from areas.\n for (let i = 0; i < polyMesh.npolys(); i++) {\n if (polyMesh.areas(i) === Recast.RC_WALKABLE_AREA) {\n polyMesh.setAreas(i, 0);\n }\n if (polyMesh.areas(i) === 0) {\n polyMesh.setFlags(i, 1);\n }\n }\n const navMeshCreateParams = new NavMeshCreateParams();\n navMeshCreateParams.setPolyMeshCreateParams(polyMesh);\n navMeshCreateParams.setPolyMeshDetailCreateParams(polyMeshDetail);\n navMeshCreateParams.setWalkableHeight(tileConfig.walkableHeight * tileConfig.ch);\n navMeshCreateParams.setWalkableRadius(tileConfig.walkableRadius * tileConfig.cs);\n navMeshCreateParams.setWalkableClimb(tileConfig.walkableClimb * tileConfig.ch);\n navMeshCreateParams.setCellSize(tileConfig.cs);\n navMeshCreateParams.setCellHeight(tileConfig.ch);\n navMeshCreateParams.setBuildBvTree(options.buildBvTree ?? tiledNavMeshGeneratorConfigDefaults.buildBvTree);\n if (options.offMeshConnections) {\n navMeshCreateParams.setOffMeshConnections(options.offMeshConnections);\n }\n navMeshCreateParams.setTileX(tile.x);\n navMeshCreateParams.setTileY(tile.y);\n const createNavMeshDataResult = createNavMeshData(navMeshCreateParams);\n if (!createNavMeshDataResult.success) {\n return failTileMesh('Failed to create Detour navmesh data');\n }\n buildContext.log(Recast.RC_LOG_PROGRESS, `>> Polymesh: ${polyMesh.nverts()} vertices ${polyMesh.npolys()} polygons`);\n return {\n success: true,\n data: createNavMeshDataResult.navMeshData,\n intermediates: tileIntermediate\n };\n};\n/**\n * Builds a Tiled NavMesh\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateTiledNavMesh = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'tiled',\n buildContext,\n chunkyTriMesh: undefined,\n tileIntermediates: []\n };\n const navMesh = new NavMesh();\n /* input geometry */\n const vertices = positions;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n const cleanup = () => {\n verticesArray.destroy();\n trianglesArray.destroy();\n if (keepIntermediates) return;\n if (intermediates.chunkyTriMesh) {\n intermediates.chunkyTriMesh = undefined;\n }\n };\n const fail = error => {\n cleanup();\n navMesh.destroy();\n return {\n success: false,\n navMesh: undefined,\n intermediates,\n error\n };\n };\n //\n // Initialize build config.\n //\n const generatorConfig = {\n ...tiledNavMeshGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n const {\n config: rcConfig,\n tileWidth,\n tileHeight,\n tcs,\n orig,\n maxTiles,\n maxPolysPerTile\n } = buildTiledNavMeshRcConfig({\n recastConfig: generatorConfig,\n navMeshBounds: [bbMin, bbMax]\n });\n const navMeshParams = NavMeshParams.create({\n orig,\n tileWidth: generatorConfig.tileSize * generatorConfig.cs,\n tileHeight: generatorConfig.tileSize * generatorConfig.cs,\n maxTiles,\n maxPolys: maxPolysPerTile\n });\n if (!navMesh.initTiled(navMeshParams)) {\n return fail('Could not init nav mesh for tiled use');\n }\n /* create chunky tri mesh */\n const chunkyTriMesh = new RecastChunkyTriMesh();\n intermediates.chunkyTriMesh = chunkyTriMesh;\n if (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, generatorConfig.chunkyTriMeshTrisPerChunk)) {\n return fail('Failed to build chunky triangle mesh');\n }\n buildContext.startTimer(Recast.RC_TIMER_TEMP);\n const lastBuiltTileBmin = [0, 0, 0];\n const lastBuiltTileBmax = [0, 0, 0];\n for (let y = 0; y < tileHeight; y++) {\n for (let x = 0; x < tileWidth; x++) {\n lastBuiltTileBmin[0] = bbMin[0] + x * tcs;\n lastBuiltTileBmin[1] = bbMin[1];\n lastBuiltTileBmin[2] = bbMin[2] + y * tcs;\n lastBuiltTileBmax[0] = bbMin[0] + (x + 1) * tcs;\n lastBuiltTileBmax[1] = bbMax[1];\n lastBuiltTileBmax[2] = bbMin[2] + (y + 1) * tcs;\n const tile = {\n x,\n y,\n bmin: lastBuiltTileBmin,\n bmax: lastBuiltTileBmax\n };\n const generatorOptions = {\n offMeshConnections: generatorConfig.offMeshConnections,\n buildBvTree: generatorConfig.buildBvTree\n };\n const result = generateTileNavMeshData(verticesArray, trianglesArray, rcConfig, chunkyTriMesh, tile, generatorOptions, keepIntermediates, buildContext);\n intermediates.tileIntermediates.push(result.intermediates);\n if (result.success && result.data) {\n navMesh.removeTile(navMesh.getTileRefAt(x, y, 0));\n const addTileResult = navMesh.addTile(result.data, Detour.DT_TILE_FREE_DATA, 0);\n if (statusFailed(addTileResult.status)) {\n buildContext.log(Recast.RC_LOG_WARNING, `Failed to add tile to nav mesh tx: ${x}, ty: ${y}, status: ${statusToReadableString(addTileResult.status)} (${addTileResult.status})`);\n result.data.destroy();\n }\n }\n }\n }\n buildContext.stopTimer(Recast.RC_TIMER_TEMP);\n if (!keepIntermediates) {\n cleanup();\n }\n return {\n success: true,\n navMesh,\n intermediates\n };\n};\n\nconst mergePositionsAndIndices = meshes => {\n const mergedPositions = [];\n const mergedIndices = [];\n const positionToIndex = {};\n let indexCounter = 0;\n for (const {\n positions,\n indices\n } of meshes) {\n for (let i = 0; i < indices.length; i++) {\n const pt = indices[i] * 3;\n const x = positions[pt];\n const y = positions[pt + 1];\n const z = positions[pt + 2];\n const key = `${x}_${y}_${z}`;\n let idx = positionToIndex[key];\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(x, y, z);\n indexCounter++;\n }\n mergedIndices.push(idx);\n }\n }\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n\nexport { buildTiledNavMeshRcConfig, createDefaultTileCacheMeshProcess, dtIlog2, dtNextPow2, generateSoloNavMesh, generateSoloNavMeshData, generateTileCache, generateTileNavMeshData, generateTiledNavMesh, getBoundingBox, mergePositionsAndIndices, soloNavMeshGeneratorConfigDefaults, tileCacheGeneratorConfigDefaults, tiledNavMeshGeneratorConfigDefaults };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index-7Bk-uLSM.js","sources":["../../../node_modules/.pnpm/@recast-navigation+generators@0.43.0/node_modules/@recast-navigation/generators/dist/index.mjs"],"sourcesContent":["import { vec3, recastConfigDefaults, RecastBuildContext, VerticesArray, TrianglesArray, createRcConfig, calcGridSize, allocHeightfield, createHeightfield, TriangleAreasArray, markWalkableTriangles, rasterizeTriangles, filterLowHangingWalkableObstacles, filterLedgeSpans, filterWalkableLowHeightSpans, allocCompactHeightfield, buildCompactHeightfield, freeHeightfield, erodeWalkableArea, buildDistanceField, buildRegions, allocContourSet, buildContours, Recast, allocPolyMesh, buildPolyMesh, allocPolyMeshDetail, buildPolyMeshDetail, freeCompactHeightfield, freeContourSet, NavMeshCreateParams, createNavMeshData, Raw, NavMesh, freePolyMesh, freePolyMeshDetail, TileCacheMeshProcess, TileCache, DetourTileCacheParams, NavMeshParams, RecastChunkyTriMesh, statusFailed, cloneRcConfig, ChunkIdsArray, allocHeightfieldLayerSet, buildHeightfieldLayers, TileCacheData, Detour, getHeightfieldLayerHeights, getHeightfieldLayerAreas, getHeightfieldLayerCons, buildTileCacheLayer, freeHeightfieldLayerSet, statusToReadableString } from '@recast-navigation/core';\n\nconst getBoundingBox = (positions, indices) => {\n const bbMin = {\n x: Infinity,\n y: Infinity,\n z: Infinity\n };\n const bbMax = {\n x: -Infinity,\n y: -Infinity,\n z: -Infinity\n };\n for (let i = 0; i < indices.length; i++) {\n const ind = indices[i];\n const x = positions[ind * 3];\n const y = positions[ind * 3 + 1];\n const z = positions[ind * 3 + 2];\n bbMin.x = Math.min(bbMin.x, x);\n bbMin.y = Math.min(bbMin.y, y);\n bbMin.z = Math.min(bbMin.z, z);\n bbMax.x = Math.max(bbMax.x, x);\n bbMax.y = Math.max(bbMax.y, y);\n bbMax.z = Math.max(bbMax.z, z);\n }\n return {\n bbMin: vec3.toArray(bbMin),\n bbMax: vec3.toArray(bbMax)\n };\n};\nconst dtIlog2 = v => {\n let r = 0;\n let shift = 0;\n r = Number(v > 0xffff) << 4;\n v >>= r;\n shift = Number(v > 0xff) << 3;\n v >>= shift;\n r |= shift;\n shift = Number(v > 0xf) << 2;\n v >>= shift;\n r |= shift;\n shift = Number(v > 0x3) << 1;\n v >>= shift;\n r |= shift;\n r |= v >> 1;\n return r;\n};\nconst dtNextPow2 = v => {\n v--;\n v |= v >> 1;\n v |= v >> 2;\n v |= v >> 4;\n v |= v >> 8;\n v |= v >> 16;\n v++;\n return v;\n};\n\nconst soloNavMeshGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n buildBvTree: true\n};\n/**\n * Builds Solo NavMesh data from the given positions and indices.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateSoloNavMeshData = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'solo',\n buildContext\n };\n const cleanup = () => {\n if (keepIntermediates) return;\n if (intermediates.heightfield) {\n freeHeightfield(intermediates.heightfield);\n intermediates.heightfield = undefined;\n }\n if (intermediates.compactHeightfield) {\n freeCompactHeightfield(intermediates.compactHeightfield);\n intermediates.compactHeightfield = undefined;\n }\n if (intermediates.contourSet) {\n freeContourSet(intermediates.contourSet);\n intermediates.contourSet = undefined;\n }\n if (intermediates.polyMesh) {\n freePolyMesh(intermediates.polyMesh);\n intermediates.polyMesh = undefined;\n }\n if (intermediates.polyMeshDetail) {\n freePolyMeshDetail(intermediates.polyMeshDetail);\n intermediates.polyMeshDetail = undefined;\n }\n };\n const fail = error => {\n cleanup();\n return {\n navMeshData: undefined,\n success: false,\n intermediates,\n error\n };\n };\n /* input geometry */\n const vertices = positions;\n const numVertices = indices.length;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n //\n // Step 1. Initialize build config.\n //\n const config = {\n ...soloNavMeshGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n const rcConfig = createRcConfig(config);\n rcConfig.minRegionArea = rcConfig.minRegionArea * rcConfig.minRegionArea; // Note: area = size*size\n rcConfig.mergeRegionArea = rcConfig.mergeRegionArea * rcConfig.mergeRegionArea; // Note: area = size*size\n rcConfig.detailSampleDist = rcConfig.detailSampleDist < 0.9 ? 0 : rcConfig.cs * rcConfig.detailSampleDist;\n rcConfig.detailSampleMaxError = rcConfig.ch * rcConfig.detailSampleMaxError;\n const gridSize = calcGridSize(bbMin, bbMax, rcConfig.cs);\n rcConfig.width = gridSize.width;\n rcConfig.height = gridSize.height;\n //\n // Step 2. Rasterize input polygon soup.\n //\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n intermediates.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, rcConfig.width, rcConfig.height, bbMin, bbMax, rcConfig.cs, rcConfig.ch)) {\n return fail('Could not create heightfield');\n }\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(numTriangles);\n markWalkableTriangles(buildContext, rcConfig.walkableSlopeAngle, verticesArray, numVertices, trianglesArray, numTriangles, triangleAreasArray);\n if (!rasterizeTriangles(buildContext, verticesArray, numVertices, trianglesArray, triangleAreasArray, numTriangles, heightfield, rcConfig.walkableClimb)) {\n return fail('Could not rasterize triangles');\n }\n triangleAreasArray.destroy();\n verticesArray.destroy();\n trianglesArray.destroy();\n //\n // Step 3. Filter walkables surfaces.\n //\n // Once all geoemtry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, rcConfig.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, rcConfig.walkableHeight, rcConfig.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, rcConfig.walkableHeight, heightfield);\n //\n // Step 4. Partition walkable surface to simple regions.\n //\n // Compact the heightfield so that it is faster to handle from now on.\n // This will result more cache coherent data as well as the neighbours\n // between walkable cells will be calculated.\n const compactHeightfield = allocCompactHeightfield();\n intermediates.compactHeightfield = compactHeightfield;\n if (!buildCompactHeightfield(buildContext, rcConfig.walkableHeight, rcConfig.walkableClimb, heightfield, compactHeightfield)) {\n return fail('Failed to build compact data');\n }\n if (!keepIntermediates) {\n freeHeightfield(heightfield);\n intermediates.heightfield = undefined;\n }\n // Erode the walkable area by agent radius.\n if (!erodeWalkableArea(buildContext, rcConfig.walkableRadius, compactHeightfield)) {\n return fail('Failed to erode walkable area');\n }\n // (Optional) Mark areas\n // markConvexPolyArea(...)\n // Prepare for region partitioning, by calculating Distance field along the walkable surface.\n if (!buildDistanceField(buildContext, compactHeightfield)) {\n return fail('Failed to build distance field');\n }\n // Partition the walkable surface into simple regions without holes.\n if (!buildRegions(buildContext, compactHeightfield, rcConfig.borderSize, rcConfig.minRegionArea, rcConfig.mergeRegionArea)) {\n return fail('Failed to build regions');\n }\n //\n // Step 5. Trace and simplify region contours.\n //\n const contourSet = allocContourSet();\n intermediates.contourSet = contourSet;\n if (!buildContours(buildContext, compactHeightfield, rcConfig.maxSimplificationError, rcConfig.maxEdgeLen, contourSet, Recast.RC_CONTOUR_TESS_WALL_EDGES)) {\n return fail('Failed to create contours');\n }\n //\n // Step 6. Build polygons mesh from contours.\n //\n const polyMesh = allocPolyMesh();\n intermediates.polyMesh = polyMesh;\n if (!buildPolyMesh(buildContext, contourSet, rcConfig.maxVertsPerPoly, polyMesh)) {\n return fail('Failed to triangulate contours');\n }\n //\n // Step 7. Create detail mesh which allows to access approximate height on each polygon.\n //\n const polyMeshDetail = allocPolyMeshDetail();\n intermediates.polyMeshDetail = polyMeshDetail;\n if (!buildPolyMeshDetail(buildContext, polyMesh, compactHeightfield, rcConfig.detailSampleDist, rcConfig.detailSampleMaxError, polyMeshDetail)) {\n return fail('Failed to build detail mesh');\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n intermediates.compactHeightfield = undefined;\n freeContourSet(contourSet);\n intermediates.contourSet = undefined;\n }\n //\n // Step 8. Create Detour data from Recast poly mesh.\n //\n for (let i = 0; i < polyMesh.npolys(); i++) {\n if (polyMesh.areas(i) === Recast.RC_WALKABLE_AREA) {\n polyMesh.setAreas(i, 0);\n }\n if (polyMesh.areas(i) === 0) {\n polyMesh.setFlags(i, 1);\n }\n }\n const navMeshCreateParams = new NavMeshCreateParams();\n navMeshCreateParams.setPolyMeshCreateParams(polyMesh);\n navMeshCreateParams.setPolyMeshDetailCreateParams(polyMeshDetail);\n navMeshCreateParams.setWalkableHeight(rcConfig.walkableHeight * rcConfig.ch);\n navMeshCreateParams.setWalkableRadius(rcConfig.walkableRadius * rcConfig.cs);\n navMeshCreateParams.setWalkableClimb(rcConfig.walkableClimb * rcConfig.ch);\n navMeshCreateParams.setCellSize(rcConfig.cs);\n navMeshCreateParams.setCellHeight(rcConfig.ch);\n navMeshCreateParams.setBuildBvTree(config.buildBvTree);\n if (navMeshGeneratorConfig.offMeshConnections) {\n navMeshCreateParams.setOffMeshConnections(navMeshGeneratorConfig.offMeshConnections);\n }\n const createNavMeshDataResult = createNavMeshData(navMeshCreateParams);\n if (!createNavMeshDataResult.success) {\n return fail('Failed to create Detour navmesh data');\n }\n cleanup();\n return {\n navMeshData: createNavMeshDataResult.navMeshData,\n success: true,\n intermediates\n };\n};\n/**\n * Builds a Solo NavMesh from the given positions and indices.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateSoloNavMesh = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const createNavMeshDataResult = generateSoloNavMeshData(positions, indices, navMeshGeneratorConfig, keepIntermediates);\n if (!createNavMeshDataResult.success) {\n return {\n navMesh: undefined,\n success: false,\n intermediates: createNavMeshDataResult.intermediates,\n error: createNavMeshDataResult.error\n };\n }\n const {\n navMeshData\n } = createNavMeshDataResult;\n const navMesh = new NavMesh();\n if (!navMesh.initSolo(navMeshData)) {\n navMeshData.destroy();\n return {\n navMesh: undefined,\n success: false,\n intermediates: createNavMeshDataResult.intermediates,\n error: 'Failed to initialize solo NavMesh'\n };\n }\n return {\n success: true,\n navMesh,\n intermediates: createNavMeshDataResult.intermediates\n };\n};\n\nconst tileCacheGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n tileSize: 32,\n expectedLayersPerTile: 4,\n maxObstacles: 128\n};\nconst createDefaultTileCacheMeshProcess = () => new TileCacheMeshProcess((navMeshCreateParams, polyAreas, polyFlags) => {\n for (let i = 0; i < navMeshCreateParams.polyCount(); ++i) {\n polyAreas.set(i, 0);\n polyFlags.set(i, 1);\n }\n});\n/**\n * Builds a TileCache and NavMesh from the given positions and indices.\n * TileCache assumes small tiles (around 32-64 squared) and does some tricks to make the update fast.\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshConfig optional configuration for the NavMesh\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateTileCache = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'tilecache',\n buildContext,\n chunkyTriMesh: undefined,\n tileIntermediates: []\n };\n const tileCache = new TileCache();\n const navMesh = new NavMesh();\n /* input geometry */\n const vertices = positions;\n const numVertices = indices.length;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n const {\n expectedLayersPerTile,\n maxObstacles,\n ...recastConfig\n } = {\n ...tileCacheGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n const cleanup = () => {\n verticesArray.destroy();\n trianglesArray.destroy();\n if (!keepIntermediates) {\n for (let i = 0; i < intermediates.tileIntermediates.length; i++) {\n const tileIntermediate = intermediates.tileIntermediates[i];\n if (tileIntermediate.heightfield) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n if (tileIntermediate.compactHeightfield) {\n freeCompactHeightfield(tileIntermediate.compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n }\n if (tileIntermediate.heightfieldLayerSet) {\n freeHeightfieldLayerSet(tileIntermediate.heightfieldLayerSet);\n tileIntermediate.heightfieldLayerSet = undefined;\n }\n }\n }\n };\n const fail = error => {\n cleanup();\n tileCache.destroy();\n navMesh.destroy();\n return {\n success: false,\n navMesh: undefined,\n tileCache: undefined,\n intermediates,\n error\n };\n };\n //\n // Step 1. Initialize build config.\n //\n const config = createRcConfig(recastConfig);\n const gridSize = calcGridSize(bbMin, bbMax, config.cs);\n config.width = gridSize.width;\n config.height = gridSize.height;\n config.minRegionArea = config.minRegionArea * config.minRegionArea; // Note: area = size*size\n config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea; // Note: area = size*size\n config.detailSampleDist = config.detailSampleDist < 0.9 ? 0 : config.cs * config.detailSampleDist;\n config.detailSampleMaxError = config.ch * config.detailSampleMaxError;\n const tileSize = Math.floor(config.tileSize);\n const tileWidth = Math.floor((config.width + tileSize - 1) / tileSize);\n const tileHeight = Math.floor((config.height + tileSize - 1) / tileSize);\n // Generation params\n config.borderSize = config.walkableRadius + 3; // Reserve enough padding.\n config.width = config.tileSize + config.borderSize * 2;\n config.height = config.tileSize + config.borderSize * 2;\n // Tile cache params\n const tileCacheParams = DetourTileCacheParams.create({\n orig: bbMin,\n cs: config.cs,\n ch: config.ch,\n width: config.tileSize,\n height: config.tileSize,\n walkableHeight: config.walkableHeight * config.ch,\n walkableRadius: config.walkableRadius * config.cs,\n walkableClimb: config.walkableClimb * config.ch,\n maxSimplificationError: config.maxSimplificationError,\n maxTiles: tileWidth * tileHeight * expectedLayersPerTile,\n maxObstacles\n });\n const allocator = new Raw.RecastLinearAllocator(32000);\n const compressor = new Raw.RecastFastLZCompressor();\n const tileCacheMeshProcess = navMeshGeneratorConfig.tileCacheMeshProcess ?? createDefaultTileCacheMeshProcess();\n if (!tileCache.init(tileCacheParams, allocator, compressor, tileCacheMeshProcess)) {\n return fail('Failed to initialize tile cache');\n }\n const orig = vec3.fromArray(bbMin);\n // Max tiles and max polys affect how the tile IDs are caculated.\n // There are 22 bits available for identifying a tile and a polygon.\n let tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight * expectedLayersPerTile))), 14);\n if (tileBits > 14) {\n tileBits = 14;\n }\n const polyBits = 22 - tileBits;\n const maxTiles = 1 << tileBits;\n const maxPolysPerTile = 1 << polyBits;\n const navMeshParams = NavMeshParams.create({\n orig,\n tileWidth: config.tileSize * config.cs,\n tileHeight: config.tileSize * config.cs,\n maxTiles,\n maxPolys: maxPolysPerTile\n });\n if (!navMesh.initTiled(navMeshParams)) {\n return fail('Failed to initialize tiled navmesh');\n }\n const chunkyTriMesh = new RecastChunkyTriMesh();\n intermediates.chunkyTriMesh = chunkyTriMesh;\n if (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, 256)) {\n return fail('Failed to build chunky triangle mesh');\n }\n const rasterizeTileLayers = (tileX, tileY) => {\n // Tile intermediates\n const tileIntermediates = {\n tileX,\n tileY\n };\n // Tile bounds\n const tcs = config.tileSize * config.cs;\n const tileConfig = cloneRcConfig(config);\n const tileBoundsMin = [bbMin[0] + tileX * tcs, bbMin[1], bbMin[2] + tileY * tcs];\n const tileBoundsMax = [bbMin[0] + (tileX + 1) * tcs, bbMax[1], bbMin[2] + (tileY + 1) * tcs];\n tileBoundsMin[0] -= tileConfig.borderSize * tileConfig.cs;\n tileBoundsMin[2] -= tileConfig.borderSize * tileConfig.cs;\n tileBoundsMax[0] += tileConfig.borderSize * tileConfig.cs;\n tileBoundsMax[2] += tileConfig.borderSize * tileConfig.cs;\n tileConfig.set_bmin(0, tileBoundsMin[0]);\n tileConfig.set_bmin(1, tileBoundsMin[1]);\n tileConfig.set_bmin(2, tileBoundsMin[2]);\n tileConfig.set_bmax(0, tileBoundsMax[0]);\n tileConfig.set_bmax(1, tileBoundsMax[1]);\n tileConfig.set_bmax(2, tileBoundsMax[2]);\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n tileIntermediates.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, tileBoundsMin, tileBoundsMax, tileConfig.cs, tileConfig.ch)) {\n return {\n n: 0\n };\n }\n const tbmin = [tileBoundsMin[0], tileBoundsMin[2]];\n const tbmax = [tileBoundsMax[0], tileBoundsMax[2]];\n // TODO: Make grow when returning too many items.\n const maxChunkIds = 512;\n const chunkIdsArray = new ChunkIdsArray();\n chunkIdsArray.resize(maxChunkIds);\n const nChunksOverlapping = chunkyTriMesh.getChunksOverlappingRect(tbmin, tbmax, chunkIdsArray, maxChunkIds);\n if (nChunksOverlapping === 0) {\n return {\n n: 0\n };\n }\n for (let i = 0; i < nChunksOverlapping; ++i) {\n const nodeId = chunkIdsArray.get(i);\n const node = chunkyTriMesh.nodes(nodeId);\n const nNodeTris = node.n;\n const nodeTrianglesArray = chunkyTriMesh.getNodeTris(nodeId);\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(nNodeTris);\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, verticesArray, numVertices, nodeTrianglesArray, nNodeTris, triangleAreasArray);\n const success = rasterizeTriangles(buildContext, verticesArray, numVertices, nodeTrianglesArray, triangleAreasArray, nNodeTris, heightfield, tileConfig.walkableClimb);\n triangleAreasArray.destroy();\n if (!success) {\n return {\n n: 0\n };\n }\n }\n // Once all geometry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, config.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, config.walkableHeight, config.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, config.walkableHeight, heightfield);\n const compactHeightfield = allocCompactHeightfield();\n if (!buildCompactHeightfield(buildContext, config.walkableHeight, config.walkableClimb, heightfield, compactHeightfield)) {\n return {\n n: 0\n };\n }\n if (!keepIntermediates) {\n freeHeightfield(tileIntermediates.heightfield);\n tileIntermediates.heightfield = undefined;\n }\n // Erode the walkable area by agent radius\n if (!erodeWalkableArea(buildContext, config.walkableRadius, compactHeightfield)) {\n return {\n n: 0\n };\n }\n const heightfieldLayerSet = allocHeightfieldLayerSet();\n if (!buildHeightfieldLayers(buildContext, compactHeightfield, config.borderSize, config.walkableHeight, heightfieldLayerSet)) {\n return {\n n: 0\n };\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n tileIntermediates.compactHeightfield = undefined;\n }\n const tiles = [];\n for (let i = 0; i < heightfieldLayerSet.nlayers(); i++) {\n const tile = new TileCacheData();\n const heightfieldLayer = heightfieldLayerSet.layers(i);\n // Store header\n const header = new Raw.dtTileCacheLayerHeader();\n header.magic = Detour.DT_TILECACHE_MAGIC;\n header.version = Detour.DT_TILECACHE_VERSION;\n // Tile layer location in the navmesh\n header.tx = tileX;\n header.ty = tileY;\n header.tlayer = i;\n const heightfieldLayerBin = heightfieldLayer.bmin();\n const heightfieldLayerBmax = heightfieldLayer.bmax();\n header.set_bmin(0, heightfieldLayerBin.x);\n header.set_bmin(1, heightfieldLayerBin.y);\n header.set_bmin(2, heightfieldLayerBin.z);\n header.set_bmax(0, heightfieldLayerBmax.x);\n header.set_bmax(1, heightfieldLayerBmax.y);\n header.set_bmax(2, heightfieldLayerBmax.z);\n // Tile info\n header.width = heightfieldLayer.width();\n header.height = heightfieldLayer.height();\n header.minx = heightfieldLayer.minx();\n header.maxx = heightfieldLayer.maxx();\n header.miny = heightfieldLayer.miny();\n header.maxy = heightfieldLayer.maxy();\n header.hmin = heightfieldLayer.hmin();\n header.hmax = heightfieldLayer.hmax();\n const heights = getHeightfieldLayerHeights(heightfieldLayer);\n const areas = getHeightfieldLayerAreas(heightfieldLayer);\n const cons = getHeightfieldLayerCons(heightfieldLayer);\n const status = buildTileCacheLayer(compressor, header, heights, areas, cons, tile);\n if (statusFailed(status)) {\n return {\n n: 0\n };\n }\n tiles.push(tile);\n }\n if (!keepIntermediates) {\n freeHeightfieldLayerSet(heightfieldLayerSet);\n tileIntermediates.heightfieldLayerSet = undefined;\n }\n intermediates.tileIntermediates.push(tileIntermediates);\n return {\n n: tiles.length,\n tiles\n };\n };\n // Preprocess tiles\n for (let y = 0; y < tileHeight; ++y) {\n for (let x = 0; x < tileWidth; ++x) {\n const {\n n,\n tiles: newTiles\n } = rasterizeTileLayers(x, y);\n if (n > 0 && newTiles) {\n for (let i = 0; i < n; i++) {\n const tileCacheData = newTiles[i];\n const addResult = tileCache.addTile(tileCacheData);\n if (statusFailed(addResult.status)) {\n buildContext.log(Recast.RC_LOG_WARNING, `Failed to add tile to tile cache - tx: ${x}, ty: ${y}`);\n }\n }\n }\n }\n }\n // Build initial meshes\n for (let y = 0; y < tileHeight; y++) {\n for (let x = 0; x < tileWidth; x++) {\n const dtStatus = tileCache.buildNavMeshTilesAt(x, y, navMesh);\n if (statusFailed(dtStatus)) {\n return fail(`Failed to build nav mesh tiles at ${x}, ${y}`);\n }\n }\n }\n cleanup();\n return {\n success: true,\n tileCache,\n navMesh,\n intermediates\n };\n};\n\nconst buildTiledNavMeshRcConfig = ({\n recastConfig,\n navMeshBounds: [navMeshBoundsMin, navMeshBoundsMax]\n}) => {\n //\n // Initialize build config.\n //\n const config = createRcConfig(recastConfig);\n /* grid size */\n const gridSize = calcGridSize(navMeshBoundsMin, navMeshBoundsMax, config.cs);\n config.width = gridSize.width;\n config.height = gridSize.height;\n config.minRegionArea = config.minRegionArea * config.minRegionArea; // Note: area = size*size\n config.mergeRegionArea = config.mergeRegionArea * config.mergeRegionArea; // Note: area = size*size\n config.tileSize = Math.floor(config.tileSize);\n config.borderSize = config.walkableRadius + 3; // Reserve enough padding.\n config.width = config.tileSize + config.borderSize * 2;\n config.height = config.tileSize + config.borderSize * 2;\n config.detailSampleDist = config.detailSampleDist < 0.9 ? 0 : config.cs * config.detailSampleDist;\n config.detailSampleMaxError = config.ch * config.detailSampleMaxError;\n // tile size\n const tileSize = Math.floor(config.tileSize);\n const tileWidth = Math.floor((gridSize.width + tileSize - 1) / tileSize);\n const tileHeight = Math.floor((gridSize.height + tileSize - 1) / tileSize);\n const tcs = config.tileSize * config.cs;\n /* Create dtNavMeshParams, initialise nav mesh for tiled use */\n const orig = vec3.fromArray(navMeshBoundsMin);\n // Max tiles and max polys affect how the tile IDs are caculated.\n // There are 22 bits available for identifying a tile and a polygon.\n let tileBits = Math.min(Math.floor(dtIlog2(dtNextPow2(tileWidth * tileHeight))), 14);\n if (tileBits > 14) tileBits = 14;\n const polyBits = 22 - tileBits;\n const maxTiles = 1 << tileBits;\n const maxPolysPerTile = 1 << polyBits;\n return {\n config,\n gridSize,\n tileSize,\n tileWidth,\n tileHeight,\n tcs,\n orig,\n maxTiles,\n maxPolysPerTile\n };\n};\nconst tiledNavMeshGeneratorConfigDefaults = {\n ...recastConfigDefaults,\n chunkyTriMeshTrisPerChunk: 256,\n buildBvTree: true\n};\nconst generateTileNavMeshData = (positions, indices, rcConfig, chunkyTriMesh, tile, options = {}, keepIntermediates = false, buildContext = new RecastBuildContext()) => {\n const tileIntermediate = {\n x: tile.x,\n y: tile.y\n };\n const cleanup = () => {\n if (keepIntermediates) return;\n if (tileIntermediate.compactHeightfield) {\n freeCompactHeightfield(tileIntermediate.compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n }\n if (tileIntermediate.heightfield) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n if (tileIntermediate.contourSet) {\n freeContourSet(tileIntermediate.contourSet);\n tileIntermediate.contourSet = undefined;\n }\n if (tileIntermediate.polyMesh) {\n freePolyMesh(tileIntermediate.polyMesh);\n tileIntermediate.polyMesh = undefined;\n }\n if (tileIntermediate.polyMeshDetail) {\n freePolyMeshDetail(tileIntermediate.polyMeshDetail);\n tileIntermediate.polyMeshDetail = undefined;\n }\n };\n const failTileMesh = error => {\n buildContext.log(Recast.RC_LOG_ERROR, error);\n cleanup();\n return {\n success: false,\n error,\n intermediates: tileIntermediate\n };\n };\n const tileConfig = cloneRcConfig(rcConfig);\n // Expand the heightfield bounding box by border size to find the extents of geometry we need to build this tile.\n //\n // This is done in order to make sure that the navmesh tiles connect correctly at the borders,\n // and the obstacles close to the border work correctly with the dilation process.\n // No polygons (or contours) will be created on the border area.\n //\n // IMPORTANT!\n //\n // :''''''''':\n // : +-----+ :\n // : | | :\n // : | |<--- tile to build\n // : | | :\n // : +-----+ :<-- geometry needed\n // :.........:\n //\n // You should use this bounding box to query your input geometry.\n //\n // For example if you build a navmesh for terrain, and want the navmesh tiles to match the terrain tile size\n // you will need to pass in data from neighbour terrain tiles too! In a simple case, just pass in all the 8 neighbours,\n // or use the bounding box below to only pass in a sliver of each of the 8 neighbours.\n const expandedTileBoundsMin = [...tile.bmin];\n const expandedTileBoundsMax = [...tile.bmax];\n expandedTileBoundsMin[0] -= tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMin[2] -= tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMax[0] += tileConfig.borderSize * tileConfig.cs;\n expandedTileBoundsMax[2] += tileConfig.borderSize * tileConfig.cs;\n tileConfig.set_bmin(0, expandedTileBoundsMin[0]);\n tileConfig.set_bmin(1, expandedTileBoundsMin[1]);\n tileConfig.set_bmin(2, expandedTileBoundsMin[2]);\n tileConfig.set_bmax(0, expandedTileBoundsMax[0]);\n tileConfig.set_bmax(1, expandedTileBoundsMax[1]);\n tileConfig.set_bmax(2, expandedTileBoundsMax[2]);\n // Reset build timer\n buildContext.resetTimers();\n // Start the build process\n buildContext.startTimer(Recast.RC_TIMER_TOTAL);\n buildContext.log(Recast.RC_LOG_PROGRESS, `Building tile at x: ${tile.x}, y: ${tile.y}`);\n buildContext.log(Recast.RC_LOG_PROGRESS, ` - ${tileConfig.width} x ${tileConfig.height} cells`);\n buildContext.log(Recast.RC_LOG_PROGRESS, ` - ${positions.size / 3 / 1000}K verts, ${indices.size / 3 / 1000}K tris`);\n // Allocate voxel heightfield where we rasterize our input data to.\n const heightfield = allocHeightfield();\n tileIntermediate.heightfield = heightfield;\n if (!createHeightfield(buildContext, heightfield, tileConfig.width, tileConfig.height, expandedTileBoundsMin, expandedTileBoundsMax, tileConfig.cs, tileConfig.ch)) {\n return failTileMesh('Could not create heightfield');\n }\n // Allocate array that can hold triangle flags.\n // If you have multiple meshes you need to process, allocate\n // and array which can hold the max number of triangles you need to process.\n const triAreas = new TriangleAreasArray();\n triAreas.resize(chunkyTriMesh.maxTrisPerChunk());\n const tbmin = [expandedTileBoundsMin[0], expandedTileBoundsMin[2]];\n const tbmax = [expandedTileBoundsMax[0], expandedTileBoundsMax[2]];\n // TODO: Make grow when returning too many items.\n const maxChunkIds = 512;\n const chunkIdsArray = new ChunkIdsArray();\n chunkIdsArray.resize(maxChunkIds);\n const nChunksOverlapping = chunkyTriMesh.getChunksOverlappingRect(tbmin, tbmax, chunkIdsArray, maxChunkIds);\n if (nChunksOverlapping === 0) {\n return {\n success: true,\n intermediates: tileIntermediate\n };\n }\n for (let i = 0; i < nChunksOverlapping; ++i) {\n const nodeId = chunkIdsArray.get(i);\n const node = chunkyTriMesh.nodes(nodeId);\n const nNodeTris = node.n;\n const nodeTrianglesArray = chunkyTriMesh.getNodeTris(nodeId);\n const triangleAreasArray = new TriangleAreasArray();\n triangleAreasArray.resize(nNodeTris);\n // Find triangles which are walkable based on their slope and rasterize them.\n // If your input data is multiple meshes, you can transform them here, calculate\n // the are type for each of the meshes and rasterize them.\n markWalkableTriangles(buildContext, tileConfig.walkableSlopeAngle, positions, indices.size, nodeTrianglesArray, nNodeTris, triangleAreasArray);\n const success = rasterizeTriangles(buildContext, positions, indices.size, nodeTrianglesArray, triangleAreasArray, nNodeTris, heightfield, tileConfig.walkableClimb);\n triangleAreasArray.destroy();\n if (!success) {\n return failTileMesh('Could not rasterize triangles');\n }\n }\n // Once all geometry is rasterized, we do initial pass of filtering to\n // remove unwanted overhangs caused by the conservative rasterization\n // as well as filter spans where the character cannot possibly stand.\n filterLowHangingWalkableObstacles(buildContext, tileConfig.walkableClimb, heightfield);\n filterLedgeSpans(buildContext, tileConfig.walkableHeight, tileConfig.walkableClimb, heightfield);\n filterWalkableLowHeightSpans(buildContext, tileConfig.walkableHeight, heightfield);\n // Compact the heightfield so that it is faster to handle from now on.\n // This will result more cache coherent data as well as the neighbours\n // between walkable cells will be calculated.\n const compactHeightfield = allocCompactHeightfield();\n tileIntermediate.compactHeightfield = compactHeightfield;\n if (!buildCompactHeightfield(buildContext, tileConfig.walkableHeight, tileConfig.walkableClimb, heightfield, compactHeightfield)) {\n return failTileMesh('Could not build compact heightfield');\n }\n if (!keepIntermediates) {\n freeHeightfield(tileIntermediate.heightfield);\n tileIntermediate.heightfield = undefined;\n }\n // Erode the walkable area by agent radius\n if (!erodeWalkableArea(buildContext, tileConfig.walkableRadius, compactHeightfield)) {\n return failTileMesh('Could not erode walkable area');\n }\n // (Optional) Mark areas\n // markConvexPolyArea(...)\n // Prepare for region partitioning, by calculating Distance field along the walkable surface.\n if (!buildDistanceField(buildContext, compactHeightfield)) {\n return failTileMesh('Failed to build distance field');\n }\n // Partition the walkable surface into simple regions without holes.\n if (!buildRegions(buildContext, compactHeightfield, tileConfig.borderSize, tileConfig.minRegionArea, tileConfig.mergeRegionArea)) {\n return failTileMesh('Failed to build regions');\n }\n //\n // Trace and simplify region contours.\n //\n const contourSet = allocContourSet();\n tileIntermediate.contourSet = contourSet;\n if (!buildContours(buildContext, compactHeightfield, tileConfig.maxSimplificationError, tileConfig.maxEdgeLen, contourSet, Recast.RC_CONTOUR_TESS_WALL_EDGES)) {\n return failTileMesh('Failed to create contours');\n }\n //\n // Build polygons mesh from contours.\n //\n const polyMesh = allocPolyMesh();\n tileIntermediate.polyMesh = polyMesh;\n if (!buildPolyMesh(buildContext, contourSet, tileConfig.maxVertsPerPoly, polyMesh)) {\n return failTileMesh('Failed to triangulate contours');\n }\n //\n // Create detail mesh which allows to access approximate height on each polygon.\n //\n const polyMeshDetail = allocPolyMeshDetail();\n tileIntermediate.polyMeshDetail = polyMeshDetail;\n if (!buildPolyMeshDetail(buildContext, polyMesh, compactHeightfield, tileConfig.detailSampleDist, tileConfig.detailSampleMaxError, polyMeshDetail)) {\n return failTileMesh('Failed to build detail mesh');\n }\n if (!keepIntermediates) {\n freeCompactHeightfield(compactHeightfield);\n tileIntermediate.compactHeightfield = undefined;\n freeContourSet(contourSet);\n tileIntermediate.contourSet = undefined;\n }\n // Update poly flags from areas.\n for (let i = 0; i < polyMesh.npolys(); i++) {\n if (polyMesh.areas(i) === Recast.RC_WALKABLE_AREA) {\n polyMesh.setAreas(i, 0);\n }\n if (polyMesh.areas(i) === 0) {\n polyMesh.setFlags(i, 1);\n }\n }\n const navMeshCreateParams = new NavMeshCreateParams();\n navMeshCreateParams.setPolyMeshCreateParams(polyMesh);\n navMeshCreateParams.setPolyMeshDetailCreateParams(polyMeshDetail);\n navMeshCreateParams.setWalkableHeight(tileConfig.walkableHeight * tileConfig.ch);\n navMeshCreateParams.setWalkableRadius(tileConfig.walkableRadius * tileConfig.cs);\n navMeshCreateParams.setWalkableClimb(tileConfig.walkableClimb * tileConfig.ch);\n navMeshCreateParams.setCellSize(tileConfig.cs);\n navMeshCreateParams.setCellHeight(tileConfig.ch);\n navMeshCreateParams.setBuildBvTree(options.buildBvTree ?? tiledNavMeshGeneratorConfigDefaults.buildBvTree);\n if (options.offMeshConnections) {\n navMeshCreateParams.setOffMeshConnections(options.offMeshConnections);\n }\n navMeshCreateParams.setTileX(tile.x);\n navMeshCreateParams.setTileY(tile.y);\n const createNavMeshDataResult = createNavMeshData(navMeshCreateParams);\n if (!createNavMeshDataResult.success) {\n return failTileMesh('Failed to create Detour navmesh data');\n }\n buildContext.log(Recast.RC_LOG_PROGRESS, `>> Polymesh: ${polyMesh.nverts()} vertices ${polyMesh.npolys()} polygons`);\n return {\n success: true,\n data: createNavMeshDataResult.navMeshData,\n intermediates: tileIntermediate\n };\n};\n/**\n * Builds a Tiled NavMesh\n * @param positions a flat array of positions\n * @param indices a flat array of indices\n * @param navMeshGeneratorConfig optional configuration for the NavMesh generator\n * @param keepIntermediates if true intermediates will be returned\n */\nconst generateTiledNavMesh = (positions, indices, navMeshGeneratorConfig = {}, keepIntermediates = false) => {\n if (!Raw.Module) {\n throw new Error('\"init\" must be called before using any recast-navigation-js APIs. See: https://github.com/isaac-mason/recast-navigation-js?tab=readme-ov-file#initialization');\n }\n const buildContext = new RecastBuildContext();\n const intermediates = {\n type: 'tiled',\n buildContext,\n chunkyTriMesh: undefined,\n tileIntermediates: []\n };\n const navMesh = new NavMesh();\n /* input geometry */\n const vertices = positions;\n const verticesArray = new VerticesArray();\n verticesArray.copy(vertices);\n const triangles = indices;\n const numTriangles = indices.length / 3;\n const trianglesArray = new TrianglesArray();\n trianglesArray.copy(triangles);\n const cleanup = () => {\n verticesArray.destroy();\n trianglesArray.destroy();\n if (keepIntermediates) return;\n if (intermediates.chunkyTriMesh) {\n intermediates.chunkyTriMesh = undefined;\n }\n };\n const fail = error => {\n cleanup();\n navMesh.destroy();\n return {\n success: false,\n navMesh: undefined,\n intermediates,\n error\n };\n };\n //\n // Initialize build config.\n //\n const generatorConfig = {\n ...tiledNavMeshGeneratorConfigDefaults,\n ...navMeshGeneratorConfig\n };\n let bbMin;\n let bbMax;\n if (navMeshGeneratorConfig.bounds) {\n bbMin = navMeshGeneratorConfig.bounds[0];\n bbMax = navMeshGeneratorConfig.bounds[1];\n } else {\n const boundingBox = getBoundingBox(positions, indices);\n bbMin = boundingBox.bbMin;\n bbMax = boundingBox.bbMax;\n }\n const {\n config: rcConfig,\n tileWidth,\n tileHeight,\n tcs,\n orig,\n maxTiles,\n maxPolysPerTile\n } = buildTiledNavMeshRcConfig({\n recastConfig: generatorConfig,\n navMeshBounds: [bbMin, bbMax]\n });\n const navMeshParams = NavMeshParams.create({\n orig,\n tileWidth: generatorConfig.tileSize * generatorConfig.cs,\n tileHeight: generatorConfig.tileSize * generatorConfig.cs,\n maxTiles,\n maxPolys: maxPolysPerTile\n });\n if (!navMesh.initTiled(navMeshParams)) {\n return fail('Could not init nav mesh for tiled use');\n }\n /* create chunky tri mesh */\n const chunkyTriMesh = new RecastChunkyTriMesh();\n intermediates.chunkyTriMesh = chunkyTriMesh;\n if (!chunkyTriMesh.init(verticesArray, trianglesArray, numTriangles, generatorConfig.chunkyTriMeshTrisPerChunk)) {\n return fail('Failed to build chunky triangle mesh');\n }\n buildContext.startTimer(Recast.RC_TIMER_TEMP);\n const lastBuiltTileBmin = [0, 0, 0];\n const lastBuiltTileBmax = [0, 0, 0];\n for (let y = 0; y < tileHeight; y++) {\n for (let x = 0; x < tileWidth; x++) {\n lastBuiltTileBmin[0] = bbMin[0] + x * tcs;\n lastBuiltTileBmin[1] = bbMin[1];\n lastBuiltTileBmin[2] = bbMin[2] + y * tcs;\n lastBuiltTileBmax[0] = bbMin[0] + (x + 1) * tcs;\n lastBuiltTileBmax[1] = bbMax[1];\n lastBuiltTileBmax[2] = bbMin[2] + (y + 1) * tcs;\n const tile = {\n x,\n y,\n bmin: lastBuiltTileBmin,\n bmax: lastBuiltTileBmax\n };\n const generatorOptions = {\n offMeshConnections: generatorConfig.offMeshConnections,\n buildBvTree: generatorConfig.buildBvTree\n };\n const result = generateTileNavMeshData(verticesArray, trianglesArray, rcConfig, chunkyTriMesh, tile, generatorOptions, keepIntermediates, buildContext);\n intermediates.tileIntermediates.push(result.intermediates);\n if (result.success && result.data) {\n navMesh.removeTile(navMesh.getTileRefAt(x, y, 0));\n const addTileResult = navMesh.addTile(result.data, Detour.DT_TILE_FREE_DATA, 0);\n if (statusFailed(addTileResult.status)) {\n buildContext.log(Recast.RC_LOG_WARNING, `Failed to add tile to nav mesh tx: ${x}, ty: ${y}, status: ${statusToReadableString(addTileResult.status)} (${addTileResult.status})`);\n result.data.destroy();\n }\n }\n }\n }\n buildContext.stopTimer(Recast.RC_TIMER_TEMP);\n if (!keepIntermediates) {\n cleanup();\n }\n return {\n success: true,\n navMesh,\n intermediates\n };\n};\n\nconst mergePositionsAndIndices = meshes => {\n const mergedPositions = [];\n const mergedIndices = [];\n const positionToIndex = {};\n let indexCounter = 0;\n for (const {\n positions,\n indices\n } of meshes) {\n for (let i = 0; i < indices.length; i++) {\n const pt = indices[i] * 3;\n const x = positions[pt];\n const y = positions[pt + 1];\n const z = positions[pt + 2];\n const key = `${x}_${y}_${z}`;\n let idx = positionToIndex[key];\n if (!idx) {\n positionToIndex[key] = idx = indexCounter;\n mergedPositions.push(x, y, z);\n indexCounter++;\n }\n mergedIndices.push(idx);\n }\n }\n return [Float32Array.from(mergedPositions), Uint32Array.from(mergedIndices)];\n};\n\nexport { buildTiledNavMeshRcConfig, createDefaultTileCacheMeshProcess, dtIlog2, dtNextPow2, generateSoloNavMesh, generateSoloNavMeshData, generateTileCache, generateTileNavMeshData, generateTiledNavMesh, getBoundingBox, mergePositionsAndIndices, soloNavMeshGeneratorConfigDefaults, tileCacheGeneratorConfigDefaults, tiledNavMeshGeneratorConfigDefaults };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|