@babylonjs/lite 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{_mat4-storage-f64-WeexU-hd.js → _mat4-storage-f64-BqqOLkos.js} +2 -2
- package/{_mat4-storage-f64-WeexU-hd.js.map → _mat4-storage-f64-BqqOLkos.js.map} +1 -1
- package/{alpha-test-fragment-x2mnjLgC.js → alpha-test-fragment-D8oeUpvv.js} +2 -2
- package/{alpha-test-fragment-x2mnjLgC.js.map → alpha-test-fragment-D8oeUpvv.js.map} +1 -1
- package/{background-dds-skybox-BpcDr-9c.js → background-dds-skybox-Cv92mmdC.js} +3 -4
- package/{background-dds-skybox-BpcDr-9c.js.map → background-dds-skybox-Cv92mmdC.js.map} +1 -1
- package/{background-ground-Bm6gjWqx.js → background-ground-ClcWiDuF.js} +2 -3
- package/{background-ground-Bm6gjWqx.js.map → background-ground-ClcWiDuF.js.map} +1 -1
- package/{background-hdr-skybox-CSFo8RX6.js → background-hdr-skybox-MfAwLhVx.js} +3 -3
- package/{background-hdr-skybox-CSFo8RX6.js.map → background-hdr-skybox-MfAwLhVx.js.map} +1 -1
- package/{background-solid-skybox-DOOBeDIz.js → background-solid-skybox-CkmGuOn5.js} +2 -3
- package/{background-solid-skybox-DOOBeDIz.js.map → background-solid-skybox-CkmGuOn5.js.map} +1 -1
- package/{billboard-renderable-IJfCpeDS.js → billboard-renderable-CmIfD7IP.js} +2 -2
- package/{billboard-renderable-IJfCpeDS.js.map → billboard-renderable-CmIfD7IP.js.map} +1 -1
- package/{clamp-block-BD_t8I89.js → clamp-block-Bupvx5sX.js} +2 -2
- package/{clamp-block-BD_t8I89.js.map → clamp-block-Bupvx5sX.js.map} +1 -1
- package/{clearcoat-fragment-Dj7vGX2u.js → clearcoat-fragment-wfkXOHHZ.js} +2 -2
- package/{clearcoat-fragment-Dj7vGX2u.js.map → clearcoat-fragment-wfkXOHHZ.js.map} +1 -1
- package/{create-skeleton-s0hjrC3A.js → create-skeleton-41NqPV9u.js} +2 -2
- package/{create-skeleton-s0hjrC3A.js.map → create-skeleton-41NqPV9u.js.map} +1 -1
- package/{cubemap-skybox-material-8lzbgi7K.js → cubemap-skybox-material-BWGdKMLi.js} +2 -2
- package/{cubemap-skybox-material-8lzbgi7K.js.map → cubemap-skybox-material-BWGdKMLi.js.map} +1 -1
- package/{curve-block-Ditr4R7V.js → curve-block-CeLMJE2N.js} +2 -2
- package/{curve-block-Ditr4R7V.js.map → curve-block-CeLMJE2N.js.map} +1 -1
- package/{emissive-fragment-BOAezkfk.js → emissive-fragment-CDJhX8ad.js} +2 -2
- package/{emissive-fragment-BOAezkfk.js.map → emissive-fragment-CDJhX8ad.js.map} +1 -1
- package/{esm-shadow-view-JCPaOOi7.js → esm-shadow-view-CcX1jdrL.js} +2 -2
- package/{esm-shadow-view-JCPaOOi7.js.map → esm-shadow-view-CcX1jdrL.js.map} +1 -1
- package/{esm-shadow-view-DRpyRAfa.js → esm-shadow-view-Cf2PwVNs.js} +2 -2
- package/{esm-shadow-view-DRpyRAfa.js.map → esm-shadow-view-Cf2PwVNs.js.map} +1 -1
- package/{esm-shadow-view-DmIORQGZ.js → esm-shadow-view-KyVyZnKZ.js} +2 -2
- package/{esm-shadow-view-DmIORQGZ.js.map → esm-shadow-view-KyVyZnKZ.js.map} +1 -1
- package/{gaussian-splatting-pipeline-sh-B30Mu56i.js → gaussian-splatting-pipeline-sh-lM48JDca.js} +2 -2
- package/{gaussian-splatting-pipeline-sh-B30Mu56i.js.map → gaussian-splatting-pipeline-sh-lM48JDca.js.map} +1 -1
- package/{geometry-texture-output-DURiaJ_n.js → geometry-texture-output-DSeH_3G_.js} +2 -2
- package/{geometry-texture-output-DURiaJ_n.js.map → geometry-texture-output-DSeH_3G_.js.map} +1 -1
- package/{geometry-view-DRrscyWU.js → geometry-view-L27hzPQF.js} +3 -4
- package/{geometry-view-DRrscyWU.js.map → geometry-view-L27hzPQF.js.map} +1 -1
- package/{gltf-animation-BjnXkop6.js → gltf-animation-Db8PwXmY.js} +6 -5
- package/gltf-animation-Db8PwXmY.js.map +1 -0
- package/{gltf-ext-basisu-DtzVV1Xx.js → gltf-ext-basisu-BARpgeiU.js} +2 -2
- package/{gltf-ext-basisu-DtzVV1Xx.js.map → gltf-ext-basisu-BARpgeiU.js.map} +1 -1
- package/{gltf-ext-node-visibility-BhX0DmiP.js → gltf-ext-node-visibility-Cv7HyWR_.js} +2 -2
- package/{gltf-ext-node-visibility-BhX0DmiP.js.map → gltf-ext-node-visibility-Cv7HyWR_.js.map} +1 -1
- package/{gltf-ext-quantization-DaymajCR.js → gltf-ext-quantization-DIYKR7_3.js} +2 -2
- package/{gltf-ext-quantization-DaymajCR.js.map → gltf-ext-quantization-DIYKR7_3.js.map} +1 -1
- package/{gltf-ext-uv-transform-DFmNJ8kA.js → gltf-ext-uv-transform-qU-LScDy.js} +2 -2
- package/{gltf-ext-uv-transform-DFmNJ8kA.js.map → gltf-ext-uv-transform-qU-LScDy.js.map} +1 -1
- package/gltf-feature-animation-pointer-nDf6dGpL.js +161 -0
- package/gltf-feature-animation-pointer-nDf6dGpL.js.map +1 -0
- package/{gltf-feature-animations-v0S_yb4T.js → gltf-feature-animations-Dr9AsgIN.js} +3 -3
- package/{gltf-feature-animations-v0S_yb4T.js.map → gltf-feature-animations-Dr9AsgIN.js.map} +1 -1
- package/gltf-feature-draco-CRgxNaK1.js +33 -0
- package/gltf-feature-draco-CRgxNaK1.js.map +1 -0
- package/{gltf-feature-gpu-instancing-BoeSm6Tn.js → gltf-feature-gpu-instancing-QfJNFW1R.js} +2 -2
- package/{gltf-feature-gpu-instancing-BoeSm6Tn.js.map → gltf-feature-gpu-instancing-QfJNFW1R.js.map} +1 -1
- package/{gltf-feature-lights-punctual-BCTwgyi_.js → gltf-feature-lights-punctual-B3xbCshn.js} +5 -5
- package/{gltf-feature-lights-punctual-BCTwgyi_.js.map → gltf-feature-lights-punctual-B3xbCshn.js.map} +1 -1
- package/{gltf-feature-meshopt-DItMkOMt.js → gltf-feature-meshopt-DBvtC2n2.js} +2 -34
- package/gltf-feature-meshopt-DBvtC2n2.js.map +1 -0
- package/{gltf-feature-morph-Cv0mEYIq.js → gltf-feature-morph-DE63vfIE.js} +3 -3
- package/{gltf-feature-morph-Cv0mEYIq.js.map → gltf-feature-morph-DE63vfIE.js.map} +1 -1
- package/{gltf-feature-registry-wNbt6UC-.js → gltf-feature-registry-DfOiNmhR.js} +15 -15
- package/{gltf-feature-registry-wNbt6UC-.js.map → gltf-feature-registry-DfOiNmhR.js.map} +1 -1
- package/{gltf-feature-skeleton-Deh2UBAn.js → gltf-feature-skeleton-IHj-DuKx.js} +12 -3
- package/gltf-feature-skeleton-IHj-DuKx.js.map +1 -0
- package/{gltf-feature-variants-DGSdFNJq.js → gltf-feature-variants-C-eyBru5.js} +2 -2
- package/{gltf-feature-variants-DGSdFNJq.js.map → gltf-feature-variants-C-eyBru5.js.map} +1 -1
- package/{gltf-glb-parser-DSQWsT4r.js → gltf-glb-parser-DXMAJA8e.js} +2 -2
- package/{gltf-glb-parser-DSQWsT4r.js.map → gltf-glb-parser-DXMAJA8e.js.map} +1 -1
- package/{gltf-interleave-OBqmlu-h.js → gltf-interleave-BdKrRH3j.js} +4 -4
- package/gltf-interleave-BdKrRH3j.js.map +1 -0
- package/{gltf-pbr-builder-ext-3imk8Tev.js → gltf-pbr-builder-ext-DJ8Jm7jo.js} +2 -2
- package/{gltf-pbr-builder-ext-3imk8Tev.js.map → gltf-pbr-builder-ext-DJ8Jm7jo.js.map} +1 -1
- package/{gltf-variants-Dyr54wwg.js → gltf-variants-C0HetOre.js} +4 -4
- package/{gltf-variants-Dyr54wwg.js.map → gltf-variants-C0HetOre.js.map} +1 -1
- package/{gpu-task-timer-DVBNZfq5.js → gpu-task-timer-C-3sLTxO.js} +2 -2
- package/{gpu-task-timer-DVBNZfq5.js.map → gpu-task-timer-C-3sLTxO.js.map} +1 -1
- package/{gs-picking-pipeline-CERN-Trj.js → gs-picking-pipeline-DlogO8fI.js} +2 -2
- package/{gs-picking-pipeline-CERN-Trj.js.map → gs-picking-pipeline-DlogO8fI.js.map} +1 -1
- package/{havok-floating-origin-VVdJRUYc.js → havok-floating-origin-CQ7yE-XD.js} +2 -2
- package/{havok-floating-origin-VVdJRUYc.js.map → havok-floating-origin-CQ7yE-XD.js.map} +1 -1
- package/{index-BgY3QEzL.js → index-C2sM8ERH.js} +2697 -932
- package/index-C2sM8ERH.js.map +1 -0
- package/index.d.ts +443 -12
- package/index.js +525 -507
- package/{input-block-DjdlndCL.js → input-block-DfFVJB-8.js} +2 -2
- package/{input-block-DjdlndCL.js.map → input-block-DfFVJB-8.js.map} +1 -1
- package/{iridescence-fragment-kfsCs8lN.js → iridescence-fragment-CQwzyZ3W.js} +2 -2
- package/{iridescence-fragment-kfsCs8lN.js.map → iridescence-fragment-CQwzyZ3W.js.map} +1 -1
- package/{light-block-qjCrz3de.js → light-block-othUHIHC.js} +2 -2
- package/{light-block-qjCrz3de.js.map → light-block-othUHIHC.js.map} +1 -1
- package/{loop-block-C8vkQ2bz.js → loop-block-DgHyTx97.js} +2 -2
- package/{loop-block-C8vkQ2bz.js.map → loop-block-DgHyTx97.js.map} +1 -1
- package/{morph-fragment-NpZYyIIU.js → morph-fragment-D_rgysrc.js} +2 -2
- package/{morph-fragment-NpZYyIIU.js.map → morph-fragment-D_rgysrc.js.map} +1 -1
- package/{multilight-wgsl-I5SncF0q.js → multilight-wgsl-DRmyM3cC.js} +2 -2
- package/{multilight-wgsl-I5SncF0q.js.map → multilight-wgsl-DRmyM3cC.js.map} +1 -1
- package/{node-env-D7Aee08u.js → node-env-B-Ca2DL0.js} +2 -2
- package/{node-env-D7Aee08u.js.map → node-env-B-Ca2DL0.js.map} +1 -1
- package/{node-geometry-view-DfKXWNfV.js → node-geometry-view-BJDB-lrf.js} +3 -3
- package/{node-geometry-view-DfKXWNfV.js.map → node-geometry-view-BJDB-lrf.js.map} +1 -1
- package/{node-registry-extra-compat-CDLeBR1P.js → node-registry-extra-compat-SwS962Ax.js} +2 -2
- package/{node-registry-extra-compat-CDLeBR1P.js.map → node-registry-extra-compat-SwS962Ax.js.map} +1 -1
- package/{node-registry-extra-math-BA8_l4lB.js → node-registry-extra-math-Bsj4UAE5.js} +2 -2
- package/{node-registry-extra-math-BA8_l4lB.js.map → node-registry-extra-math-Bsj4UAE5.js.map} +1 -1
- package/{node-renderable-EwLLnaL1.js → node-renderable-BOIc3hM1.js} +2 -2
- package/{node-renderable-EwLLnaL1.js.map → node-renderable-BOIc3hM1.js.map} +1 -1
- package/{node-shadow-CeTmT6g4.js → node-shadow-DE--Q2V1.js} +2 -2
- package/{node-shadow-CeTmT6g4.js.map → node-shadow-DE--Q2V1.js.map} +1 -1
- package/{normal-map-fragment-BHImLyM-.js → normal-map-fragment-Cjm-v9uq.js} +2 -3
- package/{normal-map-fragment-BHImLyM-.js.map → normal-map-fragment-Cjm-v9uq.js.map} +1 -1
- package/package.json +3 -3
- package/{parse-camera-5IGdctAS.js → parse-camera-uQ8oKgeH.js} +2 -2
- package/{parse-camera-5IGdctAS.js.map → parse-camera-uQ8oKgeH.js.map} +1 -1
- package/{pbr-fog-wgsl-BqdCid6r.js → pbr-fog-wgsl-B5LrMToX.js} +2 -2
- package/{pbr-fog-wgsl-BqdCid6r.js.map → pbr-fog-wgsl-B5LrMToX.js.map} +1 -1
- package/{pbr-geometry-view-Dthf9Aut.js → pbr-geometry-view-BI52zgUI.js} +9 -11
- package/pbr-geometry-view-BI52zgUI.js.map +1 -0
- package/{pbr-metallic-roughness-block-g7wjzwN_.js → pbr-metallic-roughness-block-C7s1jL4q.js} +2 -2
- package/{pbr-metallic-roughness-block-g7wjzwN_.js.map → pbr-metallic-roughness-block-C7s1jL4q.js.map} +1 -1
- package/{pbr-metallic-roughness-block-full-DD6zI_Lx.js → pbr-metallic-roughness-block-full-BuhhVBFO.js} +2 -2
- package/{pbr-metallic-roughness-block-full-DD6zI_Lx.js.map → pbr-metallic-roughness-block-full-BuhhVBFO.js.map} +1 -1
- package/{pbr-mr-helper-core-CWROQ7OA.js → pbr-mr-helper-core-XeyKg-g6.js} +2 -2
- package/{pbr-mr-helper-core-CWROQ7OA.js.map → pbr-mr-helper-core-XeyKg-g6.js.map} +1 -1
- package/{pbr-refraction-Dxsm_gii.js → pbr-refraction-Bxz4GDeh.js} +2 -2
- package/{pbr-refraction-Dxsm_gii.js.map → pbr-refraction-Bxz4GDeh.js.map} +1 -1
- package/{pbr-renderable-CuKWalEM.js → pbr-renderable-B0elfRlX.js} +41 -189
- package/pbr-renderable-B0elfRlX.js.map +1 -0
- package/{pbr-shadow-fragment-waeIBQUq.js → pbr-shadow-fragment-QHbgqVlc.js} +2 -2
- package/{pbr-shadow-fragment-waeIBQUq.js.map → pbr-shadow-fragment-QHbgqVlc.js.map} +1 -1
- package/{pbr-tracking-CdeqbBrh.js → pbr-tracking-BWWSjls_.js} +2 -2
- package/{pbr-tracking-CdeqbBrh.js.map → pbr-tracking-BWWSjls_.js.map} +1 -1
- package/{pbr-transmission-ext-BNiXngZc.js → pbr-transmission-ext-DiEBLim-.js} +2 -2
- package/{pbr-transmission-ext-BNiXngZc.js.map → pbr-transmission-ext-DiEBLim-.js.map} +1 -1
- package/{reflectance-fragment-BQFZ_pgy.js → reflectance-fragment-wBk8UtBP.js} +2 -2
- package/{reflectance-fragment-BQFZ_pgy.js.map → reflectance-fragment-wBk8UtBP.js.map} +1 -1
- package/{rgbd-decode-duTlXMWd.js → rgbd-decode-CAQ7XSwl.js} +2 -2
- package/{rgbd-decode-duTlXMWd.js.map → rgbd-decode-CAQ7XSwl.js.map} +1 -1
- package/{screenshot-readback-DnxR4rhp.js → screenshot-readback-NxsFpnE4.js} +2 -2
- package/{screenshot-readback-DnxR4rhp.js.map → screenshot-readback-NxsFpnE4.js.map} +1 -1
- package/{shader-renderable-DVMVD6zP.js → shader-renderable-CUlJSove.js} +4 -196
- package/shader-renderable-CUlJSove.js.map +1 -0
- package/{shader-thin-instance-CsDo3ULk.js → shader-thin-instance-BjIbuYdv.js} +2 -2
- package/{shader-thin-instance-CsDo3ULk.js.map → shader-thin-instance-BjIbuYdv.js.map} +1 -1
- package/{sheen-fragment-B_Jd7wrr.js → sheen-fragment-ef8myYaq.js} +2 -2
- package/{sheen-fragment-B_Jd7wrr.js.map → sheen-fragment-ef8myYaq.js.map} +1 -1
- package/{singlelight-directional-wgsl-Bw84txva.js → singlelight-directional-wgsl-BvFBA1MO.js} +2 -2
- package/{singlelight-directional-wgsl-Bw84txva.js.map → singlelight-directional-wgsl-BvFBA1MO.js.map} +1 -1
- package/{singlelight-hemispheric-wgsl-DjxhgI8r.js → singlelight-hemispheric-wgsl-BEsGCqSN.js} +2 -2
- package/{singlelight-hemispheric-wgsl-DjxhgI8r.js.map → singlelight-hemispheric-wgsl-BEsGCqSN.js.map} +1 -1
- package/{singlelight-point-wgsl-iA1aRkXA.js → singlelight-point-wgsl-CvMr18Zf.js} +2 -2
- package/{singlelight-point-wgsl-iA1aRkXA.js.map → singlelight-point-wgsl-CvMr18Zf.js.map} +1 -1
- package/{singlelight-spot-wgsl-MDdTdstF.js → singlelight-spot-wgsl-jYIr13wU.js} +2 -2
- package/{singlelight-spot-wgsl-MDdTdstF.js.map → singlelight-spot-wgsl-jYIr13wU.js.map} +1 -1
- package/{skeleton-fragment-COdHWFcK.js → skeleton-fragment-B9M_ddNC.js} +2 -2
- package/{skeleton-fragment-COdHWFcK.js.map → skeleton-fragment-B9M_ddNC.js.map} +1 -1
- package/{skybox-renderable-DJYkfw32.js → skybox-renderable-lbMC32aI.js} +2 -3
- package/{skybox-renderable-DJYkfw32.js.map → skybox-renderable-lbMC32aI.js.map} +1 -1
- package/{splat-ply-compressed-SxMlsKNK.js → splat-ply-compressed-B_w2N_V7.js} +2 -2
- package/{splat-ply-compressed-SxMlsKNK.js.map → splat-ply-compressed-B_w2N_V7.js.map} +1 -1
- package/{standard-renderable-BAc-i-ig.js → standard-renderable-AYZ-Pdcm.js} +3 -4
- package/standard-renderable-AYZ-Pdcm.js.map +1 -0
- package/{std-ambient-fragment-P8dHZ4An.js → std-ambient-fragment-BXl-88sn.js} +2 -2
- package/{std-ambient-fragment-P8dHZ4An.js.map → std-ambient-fragment-BXl-88sn.js.map} +1 -1
- package/{std-cube-reflection-fragment-CF03MuQt.js → std-cube-reflection-fragment-Dn34WuMa.js} +2 -2
- package/{std-cube-reflection-fragment-CF03MuQt.js.map → std-cube-reflection-fragment-Dn34WuMa.js.map} +1 -1
- package/{std-emissive-fragment-P8yJGclx.js → std-emissive-fragment-CK7TwRAt.js} +2 -2
- package/{std-emissive-fragment-P8yJGclx.js.map → std-emissive-fragment-CK7TwRAt.js.map} +1 -1
- package/{std-lightmap-fragment-CymEG79z.js → std-lightmap-fragment-BSeS8K-4.js} +2 -2
- package/{std-lightmap-fragment-CymEG79z.js.map → std-lightmap-fragment-BSeS8K-4.js.map} +1 -1
- package/{std-opacity-fragment-DLa1zV06.js → std-opacity-fragment-DnLaWH9w.js} +2 -2
- package/{std-opacity-fragment-DLa1zV06.js.map → std-opacity-fragment-DnLaWH9w.js.map} +1 -1
- package/{std-reflection-fragment-BLySsYos.js → std-reflection-fragment-BToYPemd.js} +2 -2
- package/{std-reflection-fragment-BLySsYos.js.map → std-reflection-fragment-BToYPemd.js.map} +1 -1
- package/{std-shadow-fragment-C_q27Mdi.js → std-shadow-fragment-9b0rFY7F.js} +2 -2
- package/{std-shadow-fragment-C_q27Mdi.js.map → std-shadow-fragment-9b0rFY7F.js.map} +1 -1
- package/{std-specular-fragment-CaBXyAWY.js → std-specular-fragment-OBO-zxGh.js} +2 -2
- package/{std-specular-fragment-CaBXyAWY.js.map → std-specular-fragment-OBO-zxGh.js.map} +1 -1
- package/{std-tracking-Bw61Dv98.js → std-tracking-4SHTntWt.js} +2 -2
- package/{std-tracking-Bw61Dv98.js.map → std-tracking-4SHTntWt.js.map} +1 -1
- package/{subsurface-fragment-BNQoG9gr.js → subsurface-fragment-D7QRWN_d.js} +2 -2
- package/{subsurface-fragment-BNQoG9gr.js.map → subsurface-fragment-D7QRWN_d.js.map} +1 -1
- package/{thin-instance-cull-binding-BNC5JiGw.js → thin-instance-cull-binding-D-p2Yxfg.js} +3 -3
- package/{thin-instance-cull-binding-BNC5JiGw.js.map → thin-instance-cull-binding-D-p2Yxfg.js.map} +1 -1
- package/{thin-instance-gpu-C1DGstap.js → thin-instance-gpu-QETC_NyQ.js} +2 -2
- package/{thin-instance-gpu-C1DGstap.js.map → thin-instance-gpu-QETC_NyQ.js.map} +1 -1
- package/{tracking-primitives-CMBWLxGr.js → tracking-primitives-CqIIi7Ej.js} +2 -2
- package/{tracking-primitives-CMBWLxGr.js.map → tracking-primitives-CqIIi7Ej.js.map} +1 -1
- package/{unlit-fragment-BsHrS9XX.js → unlit-fragment-DPWDQLxo.js} +2 -2
- package/{unlit-fragment-BsHrS9XX.js.map → unlit-fragment-DPWDQLxo.js.map} +1 -1
- package/gltf-animation-BjnXkop6.js.map +0 -1
- package/gltf-feature-animation-pointer-C40tqOhL.js +0 -88
- package/gltf-feature-animation-pointer-C40tqOhL.js.map +0 -1
- package/gltf-feature-draco-CljWrsna.js +0 -125
- package/gltf-feature-draco-CljWrsna.js.map +0 -1
- package/gltf-feature-meshopt-DItMkOMt.js.map +0 -1
- package/gltf-feature-skeleton-Deh2UBAn.js.map +0 -1
- package/gltf-interleave-OBqmlu-h.js.map +0 -1
- package/index-BgY3QEzL.js.map +0 -1
- package/pbr-geometry-view-Dthf9Aut.js.map +0 -1
- package/pbr-renderable-CuKWalEM.js.map +0 -1
- package/shader-composer-CBy2i8nU.js +0 -293
- package/shader-composer-CBy2i8nU.js.map +0 -1
- package/shader-renderable-DVMVD6zP.js.map +0 -1
- package/standard-pipeline-DXFOUqU_.js +0 -391
- package/standard-pipeline-DXFOUqU_.js.map +0 -1
- package/standard-renderable-BAc-i-ig.js.map +0 -1
- package/wgsl-helpers-D8sl1VVA.js +0 -48
- package/wgsl-helpers-D8sl1VVA.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"havok-floating-origin-VVdJRUYc.js","sources":["../src/physics/havok-floating-origin.ts"],"sourcesContent":["/**\n * Havok multi-region floating origin (Large World Rendering).\n *\n * This module is **dynamic-imported only when the engine has `useFloatingOrigin: true`**\n * (from `createHavokWorld`), so non-floating-origin physics scenes never pull this code into\n * their bundle.\n *\n * Under floating origin, bodies far apart in world space are simulated in separate regions —\n * each a native Havok world with a fixed `origin`. Bodies are stored in region-local coordinates\n * (`worldPos - origin`, near zero), so the float32 Havok solver keeps full precision at large\n * world coordinates. Node transforms remain true world coordinates; the eye-relative render path\n * is handled independently.\n *\n * Mirrors Babylon.js's `scene.floatingOriginMode` + Havok plugin `floatingOriginWorldRadius`.\n */\n\nimport type { Vec3 } from \"../math/types.js\";\nimport type { PhysicsBody, PhysicsWorld } from \"./havok.js\";\nimport { PhysicsMotionType } from \"./havok.js\";\n\n/**\n * A simulation region: a native Havok world whose bodies are simulated relative to a fixed\n * `origin`. `_regions[0]` is the default region (origin at the world origin).\n */\nexport interface WorldRegion {\n /** @internal */ _world: any;\n /** Floating origin (world-space centre) this region's bodies are stored relative to. */\n origin: Vec3;\n /** This region's gravity vector `[x, y, z]`. */\n gravity: number[];\n}\n\n/**\n * Floating-origin runtime stored on `PhysicsWorld._fo` (present only when floating origin is on).\n * Holds region state plus the standalone hooks the core physics module calls in place of its\n * single-world fast path.\n */\nexport interface HavokFloatingOriginContext {\n /** All simulation regions; `regions[0]` is the default (origin-centred) region. */\n regions: WorldRegion[];\n /** Region capture radius (metres). */\n radius: number;\n /** Most recently set world-wide gravity `[x, y, z]`; seeds newly created regions. */\n gravity: number[];\n placeBody(world: PhysicsWorld, body: PhysicsBody, startsAsleep: boolean): void;\n step(world: PhysicsWorld): void;\n setGravity(world: PhysicsWorld, gravity: number[], worldPosition?: Vec3): void;\n getRegionGravity(world: PhysicsWorld, worldPosition: Vec3): number[];\n setVelocityLimits(world: PhysicsWorld, maxLinear: number, maxAngular: number): void;\n dispose(world: PhysicsWorld): void;\n}\n\n/**\n * Builds the floating-origin context, seeding it with the world's default region (the native world\n * already created by `createHavokWorld`, centred at the origin).\n */\nexport function createHavokFloatingOriginContext(hkWorld: any, gravity: number[], radius: number): HavokFloatingOriginContext {\n return {\n regions: [{ _world: hkWorld, origin: { x: 0, y: 0, z: 0 }, gravity: [...gravity] }],\n radius,\n gravity: [...gravity],\n placeBody: _placeBody,\n step: _step,\n setGravity: _setGravity,\n getRegionGravity: _getRegionGravity,\n setVelocityLimits: _setVelocityLimits,\n dispose: _dispose,\n };\n}\n\n// ─── Region lookup / creation ────────────────────────────────────────\n\n/** Returns the region whose origin is within the capture radius of `pos`, or null. */\nfunction _findRegion(fo: HavokFloatingOriginContext, pos: Vec3): WorldRegion | null {\n const r2 = fo.radius * fo.radius;\n for (const region of fo.regions) {\n const dx = pos.x - region.origin.x;\n const dy = pos.y - region.origin.y;\n const dz = pos.z - region.origin.z;\n if (dx * dx + dy * dy + dz * dz <= r2) {\n return region;\n }\n }\n return null;\n}\n\n/** Returns an existing region containing `pos`, or creates a new one centred at `pos`. */\nfunction _getOrCreateRegion(world: PhysicsWorld, pos: Vec3): WorldRegion {\n const fo = world._fo!;\n const found = _findRegion(fo, pos);\n if (found) {\n return found;\n }\n const hknp = world._hknp;\n const newWorld = hknp.HP_World_Create()[1];\n hknp.HP_World_SetGravity(newWorld, fo.gravity);\n const limits = hknp.HP_World_GetSpeedLimit(world._hkWorld);\n hknp.HP_World_SetSpeedLimit(newWorld, limits[1], limits[2]);\n const region: WorldRegion = {\n _world: newWorld,\n origin: { x: pos.x, y: pos.y, z: pos.z },\n gravity: [...fo.gravity],\n };\n fo.regions.push(region);\n return region;\n}\n\n// ─── Hooks ───────────────────────────────────────────────────────────\n\nfunction _placeBody(world: PhysicsWorld, body: PhysicsBody, startsAsleep: boolean): void {\n const hknp = world._hknp;\n const node = body.node;\n const region = _getOrCreateRegion(world, node.position);\n hknp.HP_World_AddBody(region._world, body._hkBody, startsAsleep);\n const p = node.position;\n const q = node.rotationQuaternion;\n const o = region.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [\n [p.x - o.x, p.y - o.y, p.z - o.z],\n [q.x, q.y, q.z, q.w],\n ]);\n body._region = region;\n}\n\nfunction _step(world: PhysicsWorld): void {\n const hknp = world._hknp;\n const bodies = world._bodies;\n const regions = world._fo!.regions;\n\n // Re-region bodies that drifted out of their region BEFORE stepping.\n for (let i = 0; i < bodies.length; i++) {\n _reRegionBody(world, bodies[i]!);\n }\n\n // Pre-step: sync ANIMATED bodies from node → Havok.\n for (let i = 0; i < bodies.length; i++) {\n const b = bodies[i]!;\n if (b.motionType === (PhysicsMotionType.ANIMATED as number)) {\n _syncNodeToBody(hknp, b);\n }\n }\n\n // Step every region world.\n for (let i = 0; i < regions.length; i++) {\n hknp.HP_World_Step(regions[i]!._world, world._timestep);\n }\n\n // Post-step: sync DYNAMIC bodies from Havok → node.\n for (let i = 0; i < bodies.length; i++) {\n const b = bodies[i]!;\n if (b.motionType === (PhysicsMotionType.DYNAMIC as number)) {\n _syncBodyToNode(hknp, b);\n }\n }\n\n // Reclaim regions emptied by migration.\n _gcRegions(world);\n}\n\nfunction _setGravity(world: PhysicsWorld, gravity: number[], worldPosition?: Vec3): void {\n const fo = world._fo!;\n const hknp = world._hknp;\n if (worldPosition) {\n const region = _getOrCreateRegion(world, worldPosition);\n region.gravity = gravity;\n hknp.HP_World_SetGravity(region._world, gravity);\n return;\n }\n fo.gravity = gravity;\n for (const region of fo.regions) {\n region.gravity = gravity;\n hknp.HP_World_SetGravity(region._world, gravity);\n }\n}\n\nfunction _getRegionGravity(world: PhysicsWorld, worldPosition: Vec3): number[] {\n return _getOrCreateRegion(world, worldPosition).gravity;\n}\n\nfunction _setVelocityLimits(world: PhysicsWorld, maxLinear: number, maxAngular: number): void {\n for (const region of world._fo!.regions) {\n world._hknp.HP_World_SetSpeedLimit(region._world, maxLinear, maxAngular);\n }\n}\n\nfunction _dispose(world: PhysicsWorld): void {\n const hknp = world._hknp;\n const bodies = world._bodies;\n for (let i = bodies.length - 1; i >= 0; i--) {\n const b = bodies[i]!;\n hknp.HP_World_RemoveBody(b._region!._world, b._hkBody);\n hknp.HP_Body_Release(b._hkBody);\n }\n bodies.length = 0;\n const regions = world._fo!.regions;\n for (const region of regions) {\n hknp.HP_World_Release(region._world);\n }\n regions.length = 0;\n}\n\n// ─── Migration & sync ────────────────────────────────────────────────\n\n/**\n * Moves a body to the correct region if it has drifted past `radius * 1.2` (hysteresis) from its\n * current region's origin, preserving linear and angular velocity. Uses a one-second velocity\n * look-ahead to prefer joining an existing target region over spawning a throwaway one.\n */\nfunction _reRegionBody(world: PhysicsWorld, body: PhysicsBody): void {\n const hknp = world._hknp;\n const fo = world._fo!;\n const current = body._region!;\n\n const t = hknp.HP_Body_GetQTransform(body._hkBody)[1];\n const localPos = t[0];\n const orientation = t[1];\n\n // Distance from region origin == magnitude of the local position.\n const margin = fo.radius * 1.2;\n if (localPos[0] * localPos[0] + localPos[1] * localPos[1] + localPos[2] * localPos[2] <= margin * margin) {\n return;\n }\n\n const wx = localPos[0] + current.origin.x;\n const wy = localPos[1] + current.origin.y;\n const wz = localPos[2] + current.origin.z;\n\n const linVel = hknp.HP_Body_GetLinearVelocity(body._hkBody)[1];\n const angVel = hknp.HP_Body_GetAngularVelocity(body._hkBody)[1];\n\n const worldPos: Vec3 = { x: wx, y: wy, z: wz };\n const lookAhead: Vec3 = { x: wx + linVel[0], y: wy + linVel[1], z: wz + linVel[2] };\n\n let next = _findRegion(fo, lookAhead);\n if (!next || next === current) {\n next = _findRegion(fo, worldPos);\n }\n if (!next || next === current) {\n next = _getOrCreateRegion(world, worldPos);\n }\n if (next === current) {\n return;\n }\n\n hknp.HP_World_RemoveBody(current._world, body._hkBody);\n const o = next.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [[wx - o.x, wy - o.y, wz - o.z], orientation]);\n hknp.HP_World_AddBody(next._world, body._hkBody, false);\n hknp.HP_Body_SetLinearVelocity(body._hkBody, linVel);\n hknp.HP_Body_SetAngularVelocity(body._hkBody, angVel);\n body._region = next;\n}\n\n/** Releases any non-default region that no longer holds any bodies. */\nfunction _gcRegions(world: PhysicsWorld): void {\n const regions = world._fo!.regions;\n if (regions.length <= 1) {\n return;\n }\n const hknp = world._hknp;\n const used = new Set<WorldRegion>();\n for (let i = 0; i < world._bodies.length; i++) {\n used.add(world._bodies[i]!._region!);\n }\n for (let i = regions.length - 1; i >= 1; i--) {\n const region = regions[i]!;\n if (!used.has(region)) {\n hknp.HP_World_Release(region._world);\n regions.splice(i, 1);\n }\n }\n}\n\nfunction _syncBodyToNode(hknp: any, body: PhysicsBody): void {\n const t = hknp.HP_Body_GetQTransform(body._hkBody)[1];\n const pos = t[0]; // [x, y, z] in region-local space\n const rot = t[1]; // [x, y, z, w]\n const o = body._region!.origin;\n const node = body.node;\n node.position.set(pos[0] + o.x, pos[1] + o.y, pos[2] + o.z);\n node.rotationQuaternion.set(rot[0], rot[1], rot[2], rot[3]);\n}\n\nfunction _syncNodeToBody(hknp: any, body: PhysicsBody): void {\n const node = body.node;\n const p = node.position;\n const q = node.rotationQuaternion;\n const o = body._region!.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [\n [p.x - o.x, p.y - o.y, p.z - o.z],\n [q.x, q.y, q.z, q.w],\n ]);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"havok-floating-origin-CQ7yE-XD.js","sources":["../src/physics/havok-floating-origin.ts"],"sourcesContent":["/**\n * Havok multi-region floating origin (Large World Rendering).\n *\n * This module is **dynamic-imported only when the engine has `useFloatingOrigin: true`**\n * (from `createHavokWorld`), so non-floating-origin physics scenes never pull this code into\n * their bundle.\n *\n * Under floating origin, bodies far apart in world space are simulated in separate regions —\n * each a native Havok world with a fixed `origin`. Bodies are stored in region-local coordinates\n * (`worldPos - origin`, near zero), so the float32 Havok solver keeps full precision at large\n * world coordinates. Node transforms remain true world coordinates; the eye-relative render path\n * is handled independently.\n *\n * Mirrors Babylon.js's `scene.floatingOriginMode` + Havok plugin `floatingOriginWorldRadius`.\n */\n\nimport type { Vec3 } from \"../math/types.js\";\nimport type { PhysicsBody, PhysicsWorld } from \"./havok.js\";\nimport { PhysicsMotionType } from \"./havok.js\";\n\n/**\n * A simulation region: a native Havok world whose bodies are simulated relative to a fixed\n * `origin`. `_regions[0]` is the default region (origin at the world origin).\n */\nexport interface WorldRegion {\n /** @internal */ _world: any;\n /** Floating origin (world-space centre) this region's bodies are stored relative to. */\n origin: Vec3;\n /** This region's gravity vector `[x, y, z]`. */\n gravity: number[];\n}\n\n/**\n * Floating-origin runtime stored on `PhysicsWorld._fo` (present only when floating origin is on).\n * Holds region state plus the standalone hooks the core physics module calls in place of its\n * single-world fast path.\n */\nexport interface HavokFloatingOriginContext {\n /** All simulation regions; `regions[0]` is the default (origin-centred) region. */\n regions: WorldRegion[];\n /** Region capture radius (metres). */\n radius: number;\n /** Most recently set world-wide gravity `[x, y, z]`; seeds newly created regions. */\n gravity: number[];\n placeBody(world: PhysicsWorld, body: PhysicsBody, startsAsleep: boolean): void;\n step(world: PhysicsWorld): void;\n setGravity(world: PhysicsWorld, gravity: number[], worldPosition?: Vec3): void;\n getRegionGravity(world: PhysicsWorld, worldPosition: Vec3): number[];\n setVelocityLimits(world: PhysicsWorld, maxLinear: number, maxAngular: number): void;\n dispose(world: PhysicsWorld): void;\n}\n\n/**\n * Builds the floating-origin context, seeding it with the world's default region (the native world\n * already created by `createHavokWorld`, centred at the origin).\n */\nexport function createHavokFloatingOriginContext(hkWorld: any, gravity: number[], radius: number): HavokFloatingOriginContext {\n return {\n regions: [{ _world: hkWorld, origin: { x: 0, y: 0, z: 0 }, gravity: [...gravity] }],\n radius,\n gravity: [...gravity],\n placeBody: _placeBody,\n step: _step,\n setGravity: _setGravity,\n getRegionGravity: _getRegionGravity,\n setVelocityLimits: _setVelocityLimits,\n dispose: _dispose,\n };\n}\n\n// ─── Region lookup / creation ────────────────────────────────────────\n\n/** Returns the region whose origin is within the capture radius of `pos`, or null. */\nfunction _findRegion(fo: HavokFloatingOriginContext, pos: Vec3): WorldRegion | null {\n const r2 = fo.radius * fo.radius;\n for (const region of fo.regions) {\n const dx = pos.x - region.origin.x;\n const dy = pos.y - region.origin.y;\n const dz = pos.z - region.origin.z;\n if (dx * dx + dy * dy + dz * dz <= r2) {\n return region;\n }\n }\n return null;\n}\n\n/** Returns an existing region containing `pos`, or creates a new one centred at `pos`. */\nfunction _getOrCreateRegion(world: PhysicsWorld, pos: Vec3): WorldRegion {\n const fo = world._fo!;\n const found = _findRegion(fo, pos);\n if (found) {\n return found;\n }\n const hknp = world._hknp;\n const newWorld = hknp.HP_World_Create()[1];\n hknp.HP_World_SetGravity(newWorld, fo.gravity);\n const limits = hknp.HP_World_GetSpeedLimit(world._hkWorld);\n hknp.HP_World_SetSpeedLimit(newWorld, limits[1], limits[2]);\n const region: WorldRegion = {\n _world: newWorld,\n origin: { x: pos.x, y: pos.y, z: pos.z },\n gravity: [...fo.gravity],\n };\n fo.regions.push(region);\n return region;\n}\n\n// ─── Hooks ───────────────────────────────────────────────────────────\n\nfunction _placeBody(world: PhysicsWorld, body: PhysicsBody, startsAsleep: boolean): void {\n const hknp = world._hknp;\n const node = body.node;\n const region = _getOrCreateRegion(world, node.position);\n hknp.HP_World_AddBody(region._world, body._hkBody, startsAsleep);\n const p = node.position;\n const q = node.rotationQuaternion;\n const o = region.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [\n [p.x - o.x, p.y - o.y, p.z - o.z],\n [q.x, q.y, q.z, q.w],\n ]);\n body._region = region;\n}\n\nfunction _step(world: PhysicsWorld): void {\n const hknp = world._hknp;\n const bodies = world._bodies;\n const regions = world._fo!.regions;\n\n // Re-region bodies that drifted out of their region BEFORE stepping.\n for (let i = 0; i < bodies.length; i++) {\n _reRegionBody(world, bodies[i]!);\n }\n\n // Pre-step: sync ANIMATED bodies from node → Havok.\n for (let i = 0; i < bodies.length; i++) {\n const b = bodies[i]!;\n if (b.motionType === (PhysicsMotionType.ANIMATED as number)) {\n _syncNodeToBody(hknp, b);\n }\n }\n\n // Step every region world.\n for (let i = 0; i < regions.length; i++) {\n hknp.HP_World_Step(regions[i]!._world, world._timestep);\n }\n\n // Post-step: sync DYNAMIC bodies from Havok → node.\n for (let i = 0; i < bodies.length; i++) {\n const b = bodies[i]!;\n if (b.motionType === (PhysicsMotionType.DYNAMIC as number)) {\n _syncBodyToNode(hknp, b);\n }\n }\n\n // Reclaim regions emptied by migration.\n _gcRegions(world);\n}\n\nfunction _setGravity(world: PhysicsWorld, gravity: number[], worldPosition?: Vec3): void {\n const fo = world._fo!;\n const hknp = world._hknp;\n if (worldPosition) {\n const region = _getOrCreateRegion(world, worldPosition);\n region.gravity = gravity;\n hknp.HP_World_SetGravity(region._world, gravity);\n return;\n }\n fo.gravity = gravity;\n for (const region of fo.regions) {\n region.gravity = gravity;\n hknp.HP_World_SetGravity(region._world, gravity);\n }\n}\n\nfunction _getRegionGravity(world: PhysicsWorld, worldPosition: Vec3): number[] {\n return _getOrCreateRegion(world, worldPosition).gravity;\n}\n\nfunction _setVelocityLimits(world: PhysicsWorld, maxLinear: number, maxAngular: number): void {\n for (const region of world._fo!.regions) {\n world._hknp.HP_World_SetSpeedLimit(region._world, maxLinear, maxAngular);\n }\n}\n\nfunction _dispose(world: PhysicsWorld): void {\n const hknp = world._hknp;\n const bodies = world._bodies;\n for (let i = bodies.length - 1; i >= 0; i--) {\n const b = bodies[i]!;\n hknp.HP_World_RemoveBody(b._region!._world, b._hkBody);\n hknp.HP_Body_Release(b._hkBody);\n }\n bodies.length = 0;\n const regions = world._fo!.regions;\n for (const region of regions) {\n hknp.HP_World_Release(region._world);\n }\n regions.length = 0;\n}\n\n// ─── Migration & sync ────────────────────────────────────────────────\n\n/**\n * Moves a body to the correct region if it has drifted past `radius * 1.2` (hysteresis) from its\n * current region's origin, preserving linear and angular velocity. Uses a one-second velocity\n * look-ahead to prefer joining an existing target region over spawning a throwaway one.\n */\nfunction _reRegionBody(world: PhysicsWorld, body: PhysicsBody): void {\n const hknp = world._hknp;\n const fo = world._fo!;\n const current = body._region!;\n\n const t = hknp.HP_Body_GetQTransform(body._hkBody)[1];\n const localPos = t[0];\n const orientation = t[1];\n\n // Distance from region origin == magnitude of the local position.\n const margin = fo.radius * 1.2;\n if (localPos[0] * localPos[0] + localPos[1] * localPos[1] + localPos[2] * localPos[2] <= margin * margin) {\n return;\n }\n\n const wx = localPos[0] + current.origin.x;\n const wy = localPos[1] + current.origin.y;\n const wz = localPos[2] + current.origin.z;\n\n const linVel = hknp.HP_Body_GetLinearVelocity(body._hkBody)[1];\n const angVel = hknp.HP_Body_GetAngularVelocity(body._hkBody)[1];\n\n const worldPos: Vec3 = { x: wx, y: wy, z: wz };\n const lookAhead: Vec3 = { x: wx + linVel[0], y: wy + linVel[1], z: wz + linVel[2] };\n\n let next = _findRegion(fo, lookAhead);\n if (!next || next === current) {\n next = _findRegion(fo, worldPos);\n }\n if (!next || next === current) {\n next = _getOrCreateRegion(world, worldPos);\n }\n if (next === current) {\n return;\n }\n\n hknp.HP_World_RemoveBody(current._world, body._hkBody);\n const o = next.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [[wx - o.x, wy - o.y, wz - o.z], orientation]);\n hknp.HP_World_AddBody(next._world, body._hkBody, false);\n hknp.HP_Body_SetLinearVelocity(body._hkBody, linVel);\n hknp.HP_Body_SetAngularVelocity(body._hkBody, angVel);\n body._region = next;\n}\n\n/** Releases any non-default region that no longer holds any bodies. */\nfunction _gcRegions(world: PhysicsWorld): void {\n const regions = world._fo!.regions;\n if (regions.length <= 1) {\n return;\n }\n const hknp = world._hknp;\n const used = new Set<WorldRegion>();\n for (let i = 0; i < world._bodies.length; i++) {\n used.add(world._bodies[i]!._region!);\n }\n for (let i = regions.length - 1; i >= 1; i--) {\n const region = regions[i]!;\n if (!used.has(region)) {\n hknp.HP_World_Release(region._world);\n regions.splice(i, 1);\n }\n }\n}\n\nfunction _syncBodyToNode(hknp: any, body: PhysicsBody): void {\n const t = hknp.HP_Body_GetQTransform(body._hkBody)[1];\n const pos = t[0]; // [x, y, z] in region-local space\n const rot = t[1]; // [x, y, z, w]\n const o = body._region!.origin;\n const node = body.node;\n node.position.set(pos[0] + o.x, pos[1] + o.y, pos[2] + o.z);\n node.rotationQuaternion.set(rot[0], rot[1], rot[2], rot[3]);\n}\n\nfunction _syncNodeToBody(hknp: any, body: PhysicsBody): void {\n const node = body.node;\n const p = node.position;\n const q = node.rotationQuaternion;\n const o = body._region!.origin;\n hknp.HP_Body_SetQTransform(body._hkBody, [\n [p.x - o.x, p.y - o.y, p.z - o.z],\n [q.x, q.y, q.z, q.w],\n ]);\n}\n"],"names":[],"mappings":"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"}
|