@babylonjs/lite 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +51 -0
  3. package/THIRD_PARTY_NOTICES.txt +318 -0
  4. package/{_mat4-storage-f64-BW9sTaVh.js → _mat4-storage-f64-WeexU-hd.js} +2 -2
  5. package/{_mat4-storage-f64-BW9sTaVh.js.map → _mat4-storage-f64-WeexU-hd.js.map} +1 -1
  6. package/{alpha-test-fragment-eUG971h3.js → alpha-test-fragment-x2mnjLgC.js} +2 -2
  7. package/{alpha-test-fragment-eUG971h3.js.map → alpha-test-fragment-x2mnjLgC.js.map} +1 -1
  8. package/{background-dds-skybox-BwG0kYQP.js → background-dds-skybox-BpcDr-9c.js} +3 -3
  9. package/{background-dds-skybox-BwG0kYQP.js.map → background-dds-skybox-BpcDr-9c.js.map} +1 -1
  10. package/{background-ground-DiFpKJzF.js → background-ground-Bm6gjWqx.js} +2 -2
  11. package/{background-ground-DiFpKJzF.js.map → background-ground-Bm6gjWqx.js.map} +1 -1
  12. package/{background-hdr-skybox-DIgJhvfj.js → background-hdr-skybox-CSFo8RX6.js} +3 -3
  13. package/{background-hdr-skybox-DIgJhvfj.js.map → background-hdr-skybox-CSFo8RX6.js.map} +1 -1
  14. package/{background-solid-skybox--fqHdan_.js → background-solid-skybox-DOOBeDIz.js} +2 -2
  15. package/{background-solid-skybox--fqHdan_.js.map → background-solid-skybox-DOOBeDIz.js.map} +1 -1
  16. package/{billboard-renderable-HY2XCd52.js → billboard-renderable-IJfCpeDS.js} +2 -2
  17. package/{billboard-renderable-HY2XCd52.js.map → billboard-renderable-IJfCpeDS.js.map} +1 -1
  18. package/{clamp-block-XHdUk2Va.js → clamp-block-BD_t8I89.js} +2 -2
  19. package/{clamp-block-XHdUk2Va.js.map → clamp-block-BD_t8I89.js.map} +1 -1
  20. package/{clearcoat-fragment-CHYw8MPB.js → clearcoat-fragment-Dj7vGX2u.js} +2 -2
  21. package/{clearcoat-fragment-CHYw8MPB.js.map → clearcoat-fragment-Dj7vGX2u.js.map} +1 -1
  22. package/{create-skeleton-9tdiUjRP.js → create-skeleton-s0hjrC3A.js} +2 -2
  23. package/{create-skeleton-9tdiUjRP.js.map → create-skeleton-s0hjrC3A.js.map} +1 -1
  24. package/{cubemap-skybox-material-DqQ0dyz8.js → cubemap-skybox-material-8lzbgi7K.js} +2 -2
  25. package/{cubemap-skybox-material-DqQ0dyz8.js.map → cubemap-skybox-material-8lzbgi7K.js.map} +1 -1
  26. package/{curve-block-S27sXrJQ.js → curve-block-Ditr4R7V.js} +2 -2
  27. package/{curve-block-S27sXrJQ.js.map → curve-block-Ditr4R7V.js.map} +1 -1
  28. package/{emissive-fragment-CZMQ0_bF.js → emissive-fragment-BOAezkfk.js} +2 -2
  29. package/{emissive-fragment-CZMQ0_bF.js.map → emissive-fragment-BOAezkfk.js.map} +1 -1
  30. package/{esm-shadow-view-Cl36rOrK.js → esm-shadow-view-DRpyRAfa.js} +2 -2
  31. package/{esm-shadow-view-Cl36rOrK.js.map → esm-shadow-view-DRpyRAfa.js.map} +1 -1
  32. package/{esm-shadow-view-CUwxbnMR.js → esm-shadow-view-DmIORQGZ.js} +2 -2
  33. package/{esm-shadow-view-CUwxbnMR.js.map → esm-shadow-view-DmIORQGZ.js.map} +1 -1
  34. package/{esm-shadow-view-DKQ-FSoV.js → esm-shadow-view-JCPaOOi7.js} +2 -2
  35. package/{esm-shadow-view-DKQ-FSoV.js.map → esm-shadow-view-JCPaOOi7.js.map} +1 -1
  36. package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js → gaussian-splatting-pipeline-sh-B30Mu56i.js} +2 -2
  37. package/{gaussian-splatting-pipeline-sh-DDo7QQ8l.js.map → gaussian-splatting-pipeline-sh-B30Mu56i.js.map} +1 -1
  38. package/{geometry-texture-output-BmuAquio.js → geometry-texture-output-DURiaJ_n.js} +2 -2
  39. package/{geometry-texture-output-BmuAquio.js.map → geometry-texture-output-DURiaJ_n.js.map} +1 -1
  40. package/{geometry-view-xWZmq799.js → geometry-view-DRrscyWU.js} +4 -4
  41. package/{geometry-view-xWZmq799.js.map → geometry-view-DRrscyWU.js.map} +1 -1
  42. package/{gltf-animation-Bq7k_5HA.js → gltf-animation-BjnXkop6.js} +2 -2
  43. package/{gltf-animation-Bq7k_5HA.js.map → gltf-animation-BjnXkop6.js.map} +1 -1
  44. package/{gltf-ext-basisu-C5teqxzQ.js → gltf-ext-basisu-DtzVV1Xx.js} +2 -2
  45. package/{gltf-ext-basisu-C5teqxzQ.js.map → gltf-ext-basisu-DtzVV1Xx.js.map} +1 -1
  46. package/{gltf-ext-node-visibility-DnGTKkMf.js → gltf-ext-node-visibility-BhX0DmiP.js} +2 -2
  47. package/{gltf-ext-node-visibility-DnGTKkMf.js.map → gltf-ext-node-visibility-BhX0DmiP.js.map} +1 -1
  48. package/{gltf-ext-quantization-DheC7FhB.js → gltf-ext-quantization-DaymajCR.js} +2 -2
  49. package/{gltf-ext-quantization-DheC7FhB.js.map → gltf-ext-quantization-DaymajCR.js.map} +1 -1
  50. package/{gltf-ext-uv-transform-DljdVllE.js → gltf-ext-uv-transform-DFmNJ8kA.js} +2 -2
  51. package/{gltf-ext-uv-transform-DljdVllE.js.map → gltf-ext-uv-transform-DFmNJ8kA.js.map} +1 -1
  52. package/{gltf-feature-animation-pointer-DVhymFLK.js → gltf-feature-animation-pointer-C40tqOhL.js} +3 -3
  53. package/{gltf-feature-animation-pointer-DVhymFLK.js.map → gltf-feature-animation-pointer-C40tqOhL.js.map} +1 -1
  54. package/{gltf-feature-animations-hxC3y3bJ.js → gltf-feature-animations-v0S_yb4T.js} +2 -2
  55. package/{gltf-feature-animations-hxC3y3bJ.js.map → gltf-feature-animations-v0S_yb4T.js.map} +1 -1
  56. package/{gltf-feature-draco-B7Q_cMUv.js → gltf-feature-draco-CljWrsna.js} +2 -2
  57. package/{gltf-feature-draco-B7Q_cMUv.js.map → gltf-feature-draco-CljWrsna.js.map} +1 -1
  58. package/{gltf-feature-gpu-instancing-C7sRzWv7.js → gltf-feature-gpu-instancing-BoeSm6Tn.js} +2 -2
  59. package/{gltf-feature-gpu-instancing-C7sRzWv7.js.map → gltf-feature-gpu-instancing-BoeSm6Tn.js.map} +1 -1
  60. package/{gltf-feature-lights-punctual-DF7kya14.js → gltf-feature-lights-punctual-BCTwgyi_.js} +5 -5
  61. package/{gltf-feature-lights-punctual-DF7kya14.js.map → gltf-feature-lights-punctual-BCTwgyi_.js.map} +1 -1
  62. package/{gltf-feature-meshopt-DRG9hEqT.js → gltf-feature-meshopt-DItMkOMt.js} +2 -2
  63. package/{gltf-feature-meshopt-DRG9hEqT.js.map → gltf-feature-meshopt-DItMkOMt.js.map} +1 -1
  64. package/{gltf-feature-morph-DZydYgWp.js → gltf-feature-morph-Cv0mEYIq.js} +3 -3
  65. package/{gltf-feature-morph-DZydYgWp.js.map → gltf-feature-morph-Cv0mEYIq.js.map} +1 -1
  66. package/{gltf-feature-registry-DeYdy3DV.js → gltf-feature-registry-wNbt6UC-.js} +15 -15
  67. package/{gltf-feature-registry-DeYdy3DV.js.map → gltf-feature-registry-wNbt6UC-.js.map} +1 -1
  68. package/{gltf-feature-skeleton-B9och1W0.js → gltf-feature-skeleton-Deh2UBAn.js} +3 -3
  69. package/{gltf-feature-skeleton-B9och1W0.js.map → gltf-feature-skeleton-Deh2UBAn.js.map} +1 -1
  70. package/{gltf-feature-variants-CY_Qft7f.js → gltf-feature-variants-DGSdFNJq.js} +2 -2
  71. package/{gltf-feature-variants-CY_Qft7f.js.map → gltf-feature-variants-DGSdFNJq.js.map} +1 -1
  72. package/{gltf-glb-parser-CqOeXFOz.js → gltf-glb-parser-DSQWsT4r.js} +2 -2
  73. package/{gltf-glb-parser-CqOeXFOz.js.map → gltf-glb-parser-DSQWsT4r.js.map} +1 -1
  74. package/{gltf-interleave-DWf27t-h.js → gltf-interleave-OBqmlu-h.js} +11 -4
  75. package/gltf-interleave-OBqmlu-h.js.map +1 -0
  76. package/{gltf-normals-b2h74380.js → gltf-normals-D_P0KA4b.js} +10 -2
  77. package/gltf-normals-D_P0KA4b.js.map +1 -0
  78. package/{gltf-pbr-builder-ext-DvFxuOqN.js → gltf-pbr-builder-ext-3imk8Tev.js} +2 -2
  79. package/{gltf-pbr-builder-ext-DvFxuOqN.js.map → gltf-pbr-builder-ext-3imk8Tev.js.map} +1 -1
  80. package/{gltf-variants-CUvzYGYX.js → gltf-variants-Dyr54wwg.js} +4 -4
  81. package/{gltf-variants-CUvzYGYX.js.map → gltf-variants-Dyr54wwg.js.map} +1 -1
  82. package/{gpu-task-timer-Dgkff80h.js → gpu-task-timer-DVBNZfq5.js} +2 -2
  83. package/{gpu-task-timer-Dgkff80h.js.map → gpu-task-timer-DVBNZfq5.js.map} +1 -1
  84. package/{gs-picking-pipeline-55sM5LzV.js → gs-picking-pipeline-CERN-Trj.js} +2 -2
  85. package/{gs-picking-pipeline-55sM5LzV.js.map → gs-picking-pipeline-CERN-Trj.js.map} +1 -1
  86. package/{havok-floating-origin-5xp32P-C.js → havok-floating-origin-VVdJRUYc.js} +2 -2
  87. package/{havok-floating-origin-5xp32P-C.js.map → havok-floating-origin-VVdJRUYc.js.map} +1 -1
  88. package/{index-CYZDclhF.js → index-7Bk-uLSM.js} +2 -2
  89. package/{index-CYZDclhF.js.map → index-7Bk-uLSM.js.map} +1 -1
  90. package/{index-C-tEgwbZ.js → index-BgY3QEzL.js} +2817 -1166
  91. package/index-BgY3QEzL.js.map +1 -0
  92. package/{index-SMJ67XwT.js → index-Dr5LK2tg.js} +2 -2
  93. package/{index-SMJ67XwT.js.map → index-Dr5LK2tg.js.map} +1 -1
  94. package/index.d.ts +572 -18
  95. package/index.js +499 -464
  96. package/{input-block-DbRYCnet.js → input-block-DjdlndCL.js} +2 -2
  97. package/{input-block-DbRYCnet.js.map → input-block-DjdlndCL.js.map} +1 -1
  98. package/{iridescence-fragment-S3Ko1jvC.js → iridescence-fragment-kfsCs8lN.js} +2 -2
  99. package/{iridescence-fragment-S3Ko1jvC.js.map → iridescence-fragment-kfsCs8lN.js.map} +1 -1
  100. package/{light-block-CAqWkucp.js → light-block-qjCrz3de.js} +2 -2
  101. package/{light-block-CAqWkucp.js.map → light-block-qjCrz3de.js.map} +1 -1
  102. package/{loop-block-ch-biPFY.js → loop-block-C8vkQ2bz.js} +2 -2
  103. package/{loop-block-ch-biPFY.js.map → loop-block-C8vkQ2bz.js.map} +1 -1
  104. package/{manifold-AS8POaOr.js → manifold-DeXMNgxT.js} +3 -3
  105. package/{manifold-AS8POaOr.js.map → manifold-DeXMNgxT.js.map} +1 -1
  106. package/{morph-fragment-D9he3Ksk.js → morph-fragment-NpZYyIIU.js} +2 -2
  107. package/{morph-fragment-D9he3Ksk.js.map → morph-fragment-NpZYyIIU.js.map} +1 -1
  108. package/{multilight-wgsl-74aXpcJG.js → multilight-wgsl-I5SncF0q.js} +2 -2
  109. package/{multilight-wgsl-74aXpcJG.js.map → multilight-wgsl-I5SncF0q.js.map} +1 -1
  110. package/{node-env-B2bjGcMS.js → node-env-D7Aee08u.js} +2 -2
  111. package/{node-env-B2bjGcMS.js.map → node-env-D7Aee08u.js.map} +1 -1
  112. package/{node-geometry-view-CSXlEAhG.js → node-geometry-view-DfKXWNfV.js} +3 -3
  113. package/{node-geometry-view-CSXlEAhG.js.map → node-geometry-view-DfKXWNfV.js.map} +1 -1
  114. package/{node-registry-extra-compat-BEQH_ksg.js → node-registry-extra-compat-CDLeBR1P.js} +2 -2
  115. package/{node-registry-extra-compat-BEQH_ksg.js.map → node-registry-extra-compat-CDLeBR1P.js.map} +1 -1
  116. package/{node-registry-extra-math-Bm32WBAa.js → node-registry-extra-math-BA8_l4lB.js} +2 -2
  117. package/{node-registry-extra-math-Bm32WBAa.js.map → node-registry-extra-math-BA8_l4lB.js.map} +1 -1
  118. package/{node-renderable-BMHny4tC.js → node-renderable-EwLLnaL1.js} +2 -2
  119. package/{node-renderable-BMHny4tC.js.map → node-renderable-EwLLnaL1.js.map} +1 -1
  120. package/{node-shadow-BRiz7CT1.js → node-shadow-CeTmT6g4.js} +2 -2
  121. package/{node-shadow-BRiz7CT1.js.map → node-shadow-CeTmT6g4.js.map} +1 -1
  122. package/{normal-map-fragment-sE3TjF4U.js → normal-map-fragment-BHImLyM-.js} +2 -2
  123. package/{normal-map-fragment-sE3TjF4U.js.map → normal-map-fragment-BHImLyM-.js.map} +1 -1
  124. package/package.json +10 -3
  125. package/{parse-camera-CmZBS423.js → parse-camera-5IGdctAS.js} +2 -2
  126. package/{parse-camera-CmZBS423.js.map → parse-camera-5IGdctAS.js.map} +1 -1
  127. package/{pbr-geometry-view-T3vMABM8.js → pbr-geometry-view-Dthf9Aut.js} +3 -3
  128. package/{pbr-geometry-view-T3vMABM8.js.map → pbr-geometry-view-Dthf9Aut.js.map} +1 -1
  129. package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js → pbr-metallic-roughness-block-full-DD6zI_Lx.js} +2 -2
  130. package/{pbr-metallic-roughness-block-full-CHC8w-Uv.js.map → pbr-metallic-roughness-block-full-DD6zI_Lx.js.map} +1 -1
  131. package/{pbr-metallic-roughness-block-DbozMlHU.js → pbr-metallic-roughness-block-g7wjzwN_.js} +2 -2
  132. package/{pbr-metallic-roughness-block-DbozMlHU.js.map → pbr-metallic-roughness-block-g7wjzwN_.js.map} +1 -1
  133. package/{pbr-mr-helper-core-DGRgbRXl.js → pbr-mr-helper-core-CWROQ7OA.js} +2 -2
  134. package/{pbr-mr-helper-core-DGRgbRXl.js.map → pbr-mr-helper-core-CWROQ7OA.js.map} +1 -1
  135. package/{pbr-refraction-CquDP9JO.js → pbr-refraction-Dxsm_gii.js} +2 -2
  136. package/{pbr-refraction-CquDP9JO.js.map → pbr-refraction-Dxsm_gii.js.map} +1 -1
  137. package/{pbr-renderable-CaHKHU0g.js → pbr-renderable-CuKWalEM.js} +22 -22
  138. package/{pbr-renderable-CaHKHU0g.js.map → pbr-renderable-CuKWalEM.js.map} +1 -1
  139. package/{pbr-shadow-fragment-DmnNe6yz.js → pbr-shadow-fragment-waeIBQUq.js} +2 -2
  140. package/{pbr-shadow-fragment-DmnNe6yz.js.map → pbr-shadow-fragment-waeIBQUq.js.map} +1 -1
  141. package/{pbr-tracking-Bo7RTANK.js → pbr-tracking-CdeqbBrh.js} +2 -2
  142. package/{pbr-tracking-Bo7RTANK.js.map → pbr-tracking-CdeqbBrh.js.map} +1 -1
  143. package/{pbr-transmission-ext-CoGcJBGE.js → pbr-transmission-ext-BNiXngZc.js} +2 -2
  144. package/{pbr-transmission-ext-CoGcJBGE.js.map → pbr-transmission-ext-BNiXngZc.js.map} +1 -1
  145. package/{recast-navigation.wasm-DG_0AFuk.js → recast-navigation.wasm-VC4lGlEe.js} +3 -3
  146. package/{recast-navigation.wasm-DG_0AFuk.js.map → recast-navigation.wasm-VC4lGlEe.js.map} +1 -1
  147. package/{recast-navigation.wasm-compat-C-Bf2ylB.js → recast-navigation.wasm-compat-CTwYOzRz.js} +3 -3
  148. package/{recast-navigation.wasm-compat-C-Bf2ylB.js.map → recast-navigation.wasm-compat-CTwYOzRz.js.map} +1 -1
  149. package/{reflectance-fragment-CExe6qDY.js → reflectance-fragment-BQFZ_pgy.js} +2 -2
  150. package/{reflectance-fragment-CExe6qDY.js.map → reflectance-fragment-BQFZ_pgy.js.map} +1 -1
  151. package/{rgbd-decode-DkiiiIlt.js → rgbd-decode-duTlXMWd.js} +2 -2
  152. package/{rgbd-decode-DkiiiIlt.js.map → rgbd-decode-duTlXMWd.js.map} +1 -1
  153. package/{screenshot-readback-avr_tYGZ.js → screenshot-readback-DnxR4rhp.js} +2 -2
  154. package/{screenshot-readback-avr_tYGZ.js.map → screenshot-readback-DnxR4rhp.js.map} +1 -1
  155. package/{shader-composer-CZagsJDS.js → shader-composer-CBy2i8nU.js} +2 -2
  156. package/{shader-composer-CZagsJDS.js.map → shader-composer-CBy2i8nU.js.map} +1 -1
  157. package/{shader-renderable-D5sbgzxt.js → shader-renderable-DVMVD6zP.js} +4 -4
  158. package/{shader-renderable-D5sbgzxt.js.map → shader-renderable-DVMVD6zP.js.map} +1 -1
  159. package/{shader-thin-instance-CkQ8rrfH.js → shader-thin-instance-CsDo3ULk.js} +2 -2
  160. package/{shader-thin-instance-CkQ8rrfH.js.map → shader-thin-instance-CsDo3ULk.js.map} +1 -1
  161. package/{sheen-fragment-BEigjpTX.js → sheen-fragment-B_Jd7wrr.js} +2 -2
  162. package/{sheen-fragment-BEigjpTX.js.map → sheen-fragment-B_Jd7wrr.js.map} +1 -1
  163. package/{singlelight-directional-wgsl-Ccsk-ys3.js → singlelight-directional-wgsl-Bw84txva.js} +2 -2
  164. package/{singlelight-directional-wgsl-Ccsk-ys3.js.map → singlelight-directional-wgsl-Bw84txva.js.map} +1 -1
  165. package/{singlelight-hemispheric-wgsl-DL-jpc97.js → singlelight-hemispheric-wgsl-DjxhgI8r.js} +2 -2
  166. package/{singlelight-hemispheric-wgsl-DL-jpc97.js.map → singlelight-hemispheric-wgsl-DjxhgI8r.js.map} +1 -1
  167. package/{singlelight-point-wgsl-hYmiP6ys.js → singlelight-point-wgsl-iA1aRkXA.js} +2 -2
  168. package/{singlelight-point-wgsl-hYmiP6ys.js.map → singlelight-point-wgsl-iA1aRkXA.js.map} +1 -1
  169. package/{singlelight-spot-wgsl-DSjp1p1C.js → singlelight-spot-wgsl-MDdTdstF.js} +2 -2
  170. package/{singlelight-spot-wgsl-DSjp1p1C.js.map → singlelight-spot-wgsl-MDdTdstF.js.map} +1 -1
  171. package/{skeleton-fragment-B__bUbPK.js → skeleton-fragment-COdHWFcK.js} +2 -2
  172. package/{skeleton-fragment-B__bUbPK.js.map → skeleton-fragment-COdHWFcK.js.map} +1 -1
  173. package/{skybox-renderable-BH6uUkal.js → skybox-renderable-DJYkfw32.js} +2 -2
  174. package/{skybox-renderable-BH6uUkal.js.map → skybox-renderable-DJYkfw32.js.map} +1 -1
  175. package/{splat-ply-compressed-BGNK6dnh.js → splat-ply-compressed-SxMlsKNK.js} +2 -2
  176. package/{splat-ply-compressed-BGNK6dnh.js.map → splat-ply-compressed-SxMlsKNK.js.map} +1 -1
  177. package/{standard-pipeline-BvFynkwL.js → standard-pipeline-DXFOUqU_.js} +3 -3
  178. package/{standard-pipeline-BvFynkwL.js.map → standard-pipeline-DXFOUqU_.js.map} +1 -1
  179. package/{standard-renderable-1Q3zemys.js → standard-renderable-BAc-i-ig.js} +3 -3
  180. package/{standard-renderable-1Q3zemys.js.map → standard-renderable-BAc-i-ig.js.map} +1 -1
  181. package/{std-ambient-fragment-__F1KTEu.js → std-ambient-fragment-P8dHZ4An.js} +2 -2
  182. package/{std-ambient-fragment-__F1KTEu.js.map → std-ambient-fragment-P8dHZ4An.js.map} +1 -1
  183. package/{std-cube-reflection-fragment-DidM0byH.js → std-cube-reflection-fragment-CF03MuQt.js} +2 -2
  184. package/{std-cube-reflection-fragment-DidM0byH.js.map → std-cube-reflection-fragment-CF03MuQt.js.map} +1 -1
  185. package/{std-emissive-fragment-Bj62X4Np.js → std-emissive-fragment-P8yJGclx.js} +2 -2
  186. package/{std-emissive-fragment-Bj62X4Np.js.map → std-emissive-fragment-P8yJGclx.js.map} +1 -1
  187. package/{std-lightmap-fragment-DXvfWvKc.js → std-lightmap-fragment-CymEG79z.js} +9 -6
  188. package/std-lightmap-fragment-CymEG79z.js.map +1 -0
  189. package/{std-opacity-fragment-BzMMb1K_.js → std-opacity-fragment-DLa1zV06.js} +2 -2
  190. package/{std-opacity-fragment-BzMMb1K_.js.map → std-opacity-fragment-DLa1zV06.js.map} +1 -1
  191. package/{std-reflection-fragment-DC9Kvu1C.js → std-reflection-fragment-BLySsYos.js} +2 -2
  192. package/{std-reflection-fragment-DC9Kvu1C.js.map → std-reflection-fragment-BLySsYos.js.map} +1 -1
  193. package/{std-shadow-fragment-BnMHeF1-.js → std-shadow-fragment-C_q27Mdi.js} +2 -2
  194. package/{std-shadow-fragment-BnMHeF1-.js.map → std-shadow-fragment-C_q27Mdi.js.map} +1 -1
  195. package/{std-specular-fragment-Bio681OG.js → std-specular-fragment-CaBXyAWY.js} +2 -2
  196. package/{std-specular-fragment-Bio681OG.js.map → std-specular-fragment-CaBXyAWY.js.map} +1 -1
  197. package/{std-tracking-BTcrry2o.js → std-tracking-Bw61Dv98.js} +2 -2
  198. package/{std-tracking-BTcrry2o.js.map → std-tracking-Bw61Dv98.js.map} +1 -1
  199. package/{subsurface-fragment-DpKib445.js → subsurface-fragment-BNQoG9gr.js} +2 -2
  200. package/{subsurface-fragment-DpKib445.js.map → subsurface-fragment-BNQoG9gr.js.map} +1 -1
  201. package/{thin-instance-cull-binding-DwZi7mlE.js → thin-instance-cull-binding-BNC5JiGw.js} +3 -3
  202. package/{thin-instance-cull-binding-DwZi7mlE.js.map → thin-instance-cull-binding-BNC5JiGw.js.map} +1 -1
  203. package/{thin-instance-gpu-uY2NOv0J.js → thin-instance-gpu-C1DGstap.js} +2 -2
  204. package/{thin-instance-gpu-uY2NOv0J.js.map → thin-instance-gpu-C1DGstap.js.map} +1 -1
  205. package/{tracking-primitives-Ck5bgCuo.js → tracking-primitives-CMBWLxGr.js} +2 -2
  206. package/{tracking-primitives-Ck5bgCuo.js.map → tracking-primitives-CMBWLxGr.js.map} +1 -1
  207. package/{unlit-fragment-nc6hu3Mw.js → unlit-fragment-BsHrS9XX.js} +2 -2
  208. package/{unlit-fragment-nc6hu3Mw.js.map → unlit-fragment-BsHrS9XX.js.map} +1 -1
  209. package/gltf-interleave-DWf27t-h.js.map +0 -1
  210. package/gltf-normals-b2h74380.js.map +0 -1
  211. package/index-C-tEgwbZ.js.map +0 -1
  212. package/std-lightmap-fragment-DXvfWvKc.js.map +0 -1
package/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ /** Axis-aligned bounding box represented as `[min, max]` XYZ tuples. */
2
+ export declare type Aabb = [min: [number, number, number], max: [number, number, number]];
3
+
1
4
  /** Increment ref count on a Texture2D. First acquire sets count to 1. */
2
5
  export declare function acquireTexture(tex: Texture2D): void;
3
6
 
@@ -82,6 +85,17 @@ export declare function addDepthHostedSpriteLayer(scene: SceneContext, layer: Sp
82
85
  */
83
86
  export declare function addFacingBillboardSystem(scene: SceneContext, system: FacingBillboardSpriteSystem): void;
84
87
 
88
+ /**
89
+ * Add one logical hierarchy instance and return its slot index.
90
+ *
91
+ * The same root matrix is expanded into each descendant mesh's thin-instance
92
+ * buffer so child offsets, rotations, and scales are preserved.
93
+ *
94
+ * @param pool - Pool created by {@link createHierarchyInstancePool}.
95
+ * @param matrix - Desired world matrix for the hierarchy root instance.
96
+ */
97
+ export declare function addHierarchyInstance(pool: HierarchyInstancePool, matrix: Mat4): number;
98
+
85
99
  /** Add one or more render-target dependencies to the pass. Idempotent
86
100
  * (Set semantics). Mirrors BJS `FrameGraphRenderPass.addDependencies`,
87
101
  * promoted onto the base `Pass` because every future pass type
@@ -172,6 +186,9 @@ export declare function addThinInstance(mesh: Mesh, matrix: Mat4): number;
172
186
  */
173
187
  export declare function addToScene(scene: SceneContext, entity: Mesh | LightBase | Camera | ShadowGenerator | TransformNode | AssetContainer): void;
174
188
 
189
+ /** Add two vectors component-wise. */
190
+ export declare function addVec3(a: Vec3, b: Vec3): Vec3;
191
+
175
192
  /** Request the agent to move toward a world target (constrained by navmesh). */
176
193
  export declare function agentGoto(crowd: NavCrowd, index: number, destination: Vec3): void;
177
194
 
@@ -888,7 +905,7 @@ export declare interface BoundingBoxGizmoOptions {
888
905
  * The view/projection matrix caches below are allocated by the camera factory
889
906
  * via the process-global `allocateMat4()` singleton — F32 by default, F64
890
907
  * after any HPM engine is constructed (see
891
- * `docs/architecture/33-high-precision-matrix.md`). The storage
908
+ * `docs/lite/architecture/36-high-precision-matrix.md`). The storage
892
909
  * type is fixed at construction and never changes. */
893
910
  export declare interface Camera {
894
911
  fov: number;
@@ -1000,6 +1017,64 @@ export declare interface CapsuleOptions {
1000
1017
  */
1001
1018
  export declare function captureScreenshot(surface: SurfaceContext): Promise<Screenshot>;
1002
1019
 
1020
+ /**
1021
+ * Collision event fired by {@link PhysicsCharacterController.onTriggerCollisionObservable}
1022
+ * for every dynamic body the character pushes during a step. Mirrors Babylon.js'
1023
+ * `onTriggerCollisionObservable` payload (minus its `colliderIndex`, which has no Lite equivalent).
1024
+ */
1025
+ export declare interface CharacterCollisionEvent {
1026
+ /** The dynamic physics body the character contacted. Its `.node.name` identifies the collider. */
1027
+ collider: PhysicsBody;
1028
+ /** Impulse (world space) the character applied to the collider at the contact point. */
1029
+ impulse: Vec3;
1030
+ /** World-space position of the contact at which the impulse was applied. */
1031
+ impulsePosition: Vec3;
1032
+ }
1033
+
1034
+ /**
1035
+ * Minimal single-event observable used by {@link PhysicsCharacterController} for collision
1036
+ * callbacks. Kept local to the physics module (no dependency on gizmo/observable code) so the
1037
+ * character-controller graph stays self-contained and tree-shakeable.
1038
+ */
1039
+ export declare class CharacterCollisionObservable {
1040
+ private _subs;
1041
+ /**
1042
+ * Subscribe to collision events.
1043
+ * @param cb - Callback invoked for each dynamic-body contact during a step.
1044
+ * @returns A disposer that removes the subscription when called.
1045
+ */
1046
+ add(cb: (event: CharacterCollisionEvent) => void): () => void;
1047
+ /**
1048
+ * Notify all subscribers of a collision event.
1049
+ * @param event - The collision event payload.
1050
+ */
1051
+ notify(event: CharacterCollisionEvent): void;
1052
+ }
1053
+
1054
+ /** Contact state of the character against the geometry beneath it. */
1055
+ export declare const enum CharacterSupportedState {
1056
+ /** No surface within reach. */
1057
+ UNSUPPORTED = 0,
1058
+ /** Touching a surface too steep to stand on; the character slides. */
1059
+ SLIDING = 1,
1060
+ /** Standing on a walkable surface. */
1061
+ SUPPORTED = 2
1062
+ }
1063
+
1064
+ /** Surface information returned by {@link PhysicsCharacterController.checkSupport}. */
1065
+ export declare interface CharacterSurfaceInfo {
1066
+ /** Whether the supporting surface belongs to a dynamic (simulated) body. */
1067
+ isSurfaceDynamic: boolean;
1068
+ /** Whether the character is unsupported, sliding, or supported. */
1069
+ supportedState: CharacterSupportedState;
1070
+ /** Average normal of the supporting surfaces (world space). */
1071
+ averageSurfaceNormal: Vec3;
1072
+ /** Average linear velocity induced by the supporting surfaces. */
1073
+ averageSurfaceVelocity: Vec3;
1074
+ /** Average angular velocity induced by the supporting surfaces. */
1075
+ averageAngularSurfaceVelocity: Vec3;
1076
+ }
1077
+
1003
1078
  /** A post-process task that offsets the red/green/blue channels to simulate lens chromatic aberration. */
1004
1079
  export declare interface ChromaticAberrationPostProcessTask extends PostProcessTask {
1005
1080
  aberrationAmount: number;
@@ -1185,6 +1260,31 @@ export declare interface ClusteredPointLightOptions {
1185
1260
  intensity?: number;
1186
1261
  }
1187
1262
 
1263
+ /** RGB color */
1264
+ export declare interface Color3 {
1265
+ r: number;
1266
+ g: number;
1267
+ b: number;
1268
+ }
1269
+
1270
+ /** RGBA color */
1271
+ export declare interface Color4 {
1272
+ r: number;
1273
+ g: number;
1274
+ b: number;
1275
+ a: number;
1276
+ }
1277
+
1278
+ /** Compute an AABB by folding XYZ min/max over a positions buffer.
1279
+ *
1280
+ * When `world` is provided each position is transformed by it before being
1281
+ * folded (column-major Mat4: m[col*4+row]). Otherwise the AABB is computed
1282
+ * in the positions' own space.
1283
+ *
1284
+ * Returns `[[+Inf,+Inf,+Inf],[-Inf,-Inf,-Inf]]` for empty input — callers
1285
+ * that care can check `isFinite(min[0])`. */
1286
+ export declare function computeAabb(positions: Float32Array, world?: Mat4): Aabb;
1287
+
1188
1288
  /**
1189
1289
  * Build the east/north/up orthonormal basis at a point on the globe (left-handed
1190
1290
  * convention). `up` is the geocentric normal (normalized position); `east` and
@@ -1657,6 +1757,22 @@ export declare function createHeightFieldShape(world: PhysicsWorld, options: Hei
1657
1757
  * Matches Babylon.js HemisphericLight behavior. */
1658
1758
  export declare function createHemisphericLight(direction?: [number, number, number], intensity?: number): HemisphericLight;
1659
1759
 
1760
+ /**
1761
+ * Build a fixed-capacity thin-instance pool from a template hierarchy.
1762
+ *
1763
+ * Call before `registerScene()`, after the hierarchy's parent links are
1764
+ * established. Fresh `loadGltf()` hierarchies are also supported: this helper
1765
+ * materializes child parent links from the `children` arrays before snapshotting
1766
+ * template world matrices.
1767
+ *
1768
+ * The template meshes are converted to thin-instanced meshes with an active
1769
+ * count of zero, so they do not draw until instances are added.
1770
+ *
1771
+ * @param root - Root transform node or mesh for the template hierarchy.
1772
+ * @param capacity - Maximum number of active logical hierarchy instances.
1773
+ */
1774
+ export declare function createHierarchyInstancePool(root: SceneNode, capacity: number): HierarchyInstancePool;
1775
+
1660
1776
  /**
1661
1777
  * Create a frame-graph task that applies the scene's image-processing settings
1662
1778
  * (exposure, contrast, tone mapping) to a color source and draws it to the swapchain.
@@ -1803,6 +1919,20 @@ export declare function createPhysicsAggregate(world: PhysicsWorld, node: Mesh,
1803
1919
  */
1804
1920
  export declare function createPhysicsBody(world: PhysicsWorld, node: SceneNode, motionType: PhysicsMotionType, startsAsleep?: boolean): PhysicsBody;
1805
1921
 
1922
+ /**
1923
+ * Create a Havok physics character controller.
1924
+ *
1925
+ * The controller adds a kinematic capsule body to `world` and resolves collisions by sweeping
1926
+ * that capsule each step. Drive it from a per-physics-step callback (e.g. `onPhysicsAfterStep`)
1927
+ * by calling {@link PhysicsCharacterController.moveWithCollisions} with the desired displacement,
1928
+ * then read {@link PhysicsCharacterController.getPosition} to update your display mesh.
1929
+ * @param world - The physics world to add the character to.
1930
+ * @param position - Initial world-space position of the character.
1931
+ * @param options - Capsule dimensions.
1932
+ * @returns The character controller instance.
1933
+ */
1934
+ export declare function createPhysicsCharacterController(world: PhysicsWorld, position: Vec3, options: PhysicsCharacterControllerOptions): PhysicsCharacterController;
1935
+
1806
1936
  /**
1807
1937
  * Creates and enables a Havok constraint between two physics bodies.
1808
1938
  * @param world - The physics world.
@@ -2136,6 +2266,9 @@ export declare interface CrossFadeAnimationGroupsOptions {
2136
2266
  readonly toWeight?: number;
2137
2267
  }
2138
2268
 
2269
+ /** Compute the right-handed cross product `a x b`. */
2270
+ export declare function crossVec3(a: Vec3, b: Vec3): Vec3;
2271
+
2139
2272
  /** Returns the boolean union (`a` ∪ `b`) of two solids as a new solid. */
2140
2273
  export declare function csg2Add(a: Csg2Solid, b: Csg2Solid): Csg2Solid;
2141
2274
 
@@ -2423,6 +2556,9 @@ export declare function disposeUniformEffectWrapper(wrapper: UniformEffectWrappe
2423
2556
  /** Dispose the utility layer's underlying scene. Idempotent. */
2424
2557
  export declare function disposeUtilityLayer(utility: UtilityLayer): void;
2425
2558
 
2559
+ /** Compute the dot product of two vectors. */
2560
+ export declare function dotVec3(a: Vec3, b: Vec3): number;
2561
+
2426
2562
  /**
2427
2563
  * A per-pass draw binding produced by `Renderable.bind(engine, target)`.
2428
2564
  *
@@ -3122,6 +3258,15 @@ export declare function getCameraPosition(camera: Camera): Vec3;
3122
3258
  /** Snap a position to the closest point on the navmesh. */
3123
3259
  export declare function getClosestPoint(plugin: NavigationPlugin, position: Vec3): Vec3;
3124
3260
 
3261
+ /**
3262
+ * Flatten a loaded asset container's entity tree to its renderable `Mesh` nodes
3263
+ * (those carrying GPU geometry), matching the flat `meshes` array Babylon.js
3264
+ * loaders return. Useful for camera-framing and per-mesh inspection after a load.
3265
+ *
3266
+ * Tree-shakeable: only callers that import this pull it into their bundle.
3267
+ */
3268
+ export declare function getContainerMeshes(container: AssetContainer): Mesh[];
3269
+
3125
3270
  /** Returns the render-target aspect ratio adjusted for the camera's normalized viewport, or the raw ratio if none. */
3126
3271
  export declare function getEffectiveAspectRatio(camera: Camera | null | undefined, targetWidth: number, targetHeight: number): number;
3127
3272
 
@@ -3471,6 +3616,27 @@ export declare interface HemisphericLight extends LightBase {
3471
3616
  /** Hides a body that was previously shown with {@link showPhysicsBody}. */
3472
3617
  export declare function hidePhysicsBody(viewer: PhysicsViewer, body: PhysicsBody): boolean;
3473
3618
 
3619
+ /**
3620
+ * A fixed-capacity thin-instance pool for a transform-node hierarchy.
3621
+ *
3622
+ * The source meshes become the render carriers for the pool: each descendant
3623
+ * mesh receives its own thin-instance matrix buffer, and one logical hierarchy
3624
+ * instance updates the matching slot in every buffer.
3625
+ */
3626
+ export declare interface HierarchyInstancePool {
3627
+ /** Template hierarchy root used to build the pool. */
3628
+ readonly root: SceneNode;
3629
+ /** Maximum number of logical hierarchy instances that can be active. */
3630
+ readonly capacity: number;
3631
+ /** Descendant meshes driven by this pool. */
3632
+ readonly meshes: readonly Mesh[];
3633
+ /**
3634
+ * Current active logical hierarchy instance count.
3635
+ * Prefer {@link addHierarchyInstance}, {@link removeHierarchyInstance}, and
3636
+ * {@link setHierarchyInstanceCount} over mutating this field directly.
3637
+ */
3638
+ count: number;
3639
+
3474
3640
  /** Image processing configuration. */
3475
3641
  export declare interface ImageProcessingConfig {
3476
3642
  exposure: number;
@@ -3508,7 +3674,7 @@ export declare interface IParentable {
3508
3674
  }
3509
3675
 
3510
3676
  /** Iridescence thin-film properties. Maps to BJS PBRMaterial.iridescence and KHR_materials_iridescence. */
3511
- declare interface IridescenceProps {
3677
+ export declare interface IridescenceProps {
3512
3678
  /** Whether iridescence is active. Default false. */
3513
3679
  isEnabled?: boolean;
3514
3680
  /** Iridescence blend intensity (0=off, 1=full). Default 1.0 for native PBR; glTF default is supplied by the loader. */
@@ -3578,6 +3744,12 @@ export declare interface IWorldMatrixProvider {
3578
3744
  readonly worldMatrixVersion: number;
3579
3745
  }
3580
3746
 
3747
+ /** Compute the Euclidean length of a vector. */
3748
+ export declare function lengthVec3(v: Vec3): number;
3749
+
3750
+ /** Linearly interpolate from vector `a` to vector `b` by factor `t`. */
3751
+ export declare function lerpVec3(a: Vec3, b: Vec3, t: number): Vec3;
3752
+
3581
3753
  /** Shared base for all light types.
3582
3754
  * Provides pipeline integration callbacks so render pipelines are light-agnostic. */
3583
3755
  export declare interface LightBase extends IWorldMatrixProvider, IParentable {
@@ -3672,6 +3844,17 @@ declare interface LoadBabylonOptions {
3672
3844
  */
3673
3845
  export declare function loadBasisTexture2D(engine: EngineContext, url: string, opts?: Texture2DOptions): Promise<Texture2D>;
3674
3846
 
3847
+ /**
3848
+ * Load a DDS cubemap environment for PBR IBL.
3849
+ * Uploads ALL mip levels (prefiltered data) and computes spherical harmonics
3850
+ * from mip 0 face data for irradiance lighting.
3851
+ */
3852
+ export declare function loadDdsEnvironment(scene: SceneContext, url: string, options: {
3853
+ brdfUrl: string;
3854
+ skipSkybox?: boolean;
3855
+ skipGround?: boolean;
3856
+ }): Promise<EnvironmentTextures>;
3857
+
3675
3858
  /**
3676
3859
  * Load a Babylon.js .env environment file and upload cubemap + BRDF LUT to GPU.
3677
3860
  * BRDF LUT is decoded from a pre-baked RGBD PNG (matching BJS's embedded
@@ -3809,12 +3992,24 @@ export declare interface Mat4 {
3809
3992
  readonly length: 16;
3810
3993
  /** Compose TRS (translation * rotation * scale) into a single Mat4. */
3811
3994
  export declare function mat4Compose(tx: number, ty: number, tz: number, qx: number, qy: number, qz: number, qw: number, sx: number, sy: number, sz: number): Mat4;
3812
3995
 
3996
+ /** Create a rotation matrix from a quaternion. */
3997
+ export declare function mat4FromQuat(qx: number, qy: number, qz: number, qw: number): Mat4;
3998
+
3813
3999
  /** Create a new identity Mat4. */
3814
4000
  export declare function mat4Identity(): Mat4;
3815
4001
 
3816
4002
  /** Compute inverse of a Mat4. Returns null if singular. */
3817
4003
  export declare function mat4Invert(input: Mat4): Mat4 | null;
3818
4004
 
4005
+ /** LookAt matrix (right-handed). Matches Babylon.js Matrix.LookAtLHToRef with LH convention. */
4006
+ export declare function mat4LookAtLH(eye: Vec3, target: Vec3, up: Vec3): Mat4;
4007
+
4008
+ /** Multiply two Mat4: out = a * b (column-major). */
4009
+ export declare function mat4Multiply(a: Mat4, b: Mat4): Mat4;
4010
+
4011
+ /** Reverse-Z perspective projection (left-handed, zero-to-one depth). */
4012
+ export declare function mat4PerspectiveLH(fov: number, aspect: number, near: number, far: number): Mat4;
4013
+
3819
4014
  /** Create a scaling matrix. */
3820
4015
  export declare function mat4Scale(x: number, y: number, z: number): Mat4;
3821
4016
 
@@ -3935,9 +4130,7 @@ export declare interface Mesh extends SceneNode {
3935
4130
  thinInstances?: ThinInstanceData | null;
3936
4131
  /** When `false`, the GPU picker skips this mesh. Defaults to `true`
3937
4132
  * (undefined behaves as pickable). Mirrors BJS `AbstractMesh.isPickable`. */
3938
- pickable?: boolean;
3939
- /** Optional per-mesh GPU-picking clip volumes. Fragments inside any volume are ignored by the GPU picker. */
3940
- pickingClipVolumes?: readonly PickingClipVolume[] | null;
4133
+ pickable?: boolean;
3941
4134
 
3942
4135
  /** Opaque GPU geometry handle (user never touches these). */
3943
4136
  export declare interface MeshGPU {
@@ -4026,6 +4219,9 @@ export declare interface NavMeshSource {
4026
4219
  indices: ArrayLike<number>;
4027
4220
  }
4028
4221
 
4222
+ /** Negate every vector component. */
4223
+ export declare function negateVec3(v: Vec3): Vec3;
4224
+
4029
4225
  /** Parsed block in the graph. */
4030
4226
  declare interface NodeBlock {
4031
4227
  readonly id: number;
@@ -4245,6 +4441,9 @@ export declare function normalizeRadians(angle: number): number;
4245
4441
  */
4246
4442
  export declare function normalizeVec3(x: number, y: number, z: number, epsilon?: number): Vec3Tuple;
4247
4443
 
4444
+ /** Normalize a `Vec3` object, returning `{ x: 0, y: 0, z: 0 }` for degenerate input. */
4445
+ export declare function normalizeVec3Object(v: Vec3): Vec3;
4446
+
4248
4447
  /**
4249
4448
  * A 4-component quaternion whose `x`/`y`/`z`/`w` setters fire an `onDirty` callback
4250
4449
  * when a component actually changes, letting the hierarchy system detect rotation updates.
@@ -4347,6 +4546,28 @@ export declare function onCsmReceiverUpdate(sg: ShadowGenerator, cb: (data: Floa
4347
4546
  */
4348
4547
  export declare function onPhysicsAfterStep(world: PhysicsWorld, cb: (timestep: number) => void): void;
4349
4548
 
4549
+ /**
4550
+ * Register a callback invoked once per collision event after each physics step.
4551
+ *
4552
+ * The events are produced by the Havok world step, so they are drained via the post-step hook
4553
+ * ({@link onPhysicsAfterStep}). Enable events on the participating bodies first with
4554
+ * {@link setPhysicsBodyCollisionEventsEnabled}, otherwise the stream is empty.
4555
+ * @param world - The physics world to listen on.
4556
+ * @param cb - Callback invoked with each {@link PhysicsCollisionInfo} as it is read.
4557
+ */
4558
+ export declare function onPhysicsCollision(world: PhysicsWorld, cb: (info: PhysicsCollisionInfo) => void): void;
4559
+
4560
+ /**
4561
+ * Register a callback invoked once per trigger event after each physics step.
4562
+ *
4563
+ * The events are produced by the Havok world step, so they are drained via the post-step
4564
+ * hook ({@link onPhysicsAfterStep}). Flag the participating shape with
4565
+ * {@link setPhysicsShapeIsTrigger} first, otherwise the stream is empty.
4566
+ * @param world - The physics world to listen on.
4567
+ * @param cb - Callback invoked with each {@link PhysicsTriggerInfo} as it is read.
4568
+ */
4569
+ export declare function onPhysicsTrigger(world: PhysicsWorld, cb: (info: PhysicsTriggerInfo) => void): void;
4570
+
4350
4571
  /** Register a callback to run when `disposeScene` is called. Used to tie
4351
4572
  * user-owned GPU resources (e.g. a `SpriteRenderer`) to the scene's lifetime. */
4352
4573
  export declare function onSceneDispose(scene: SceneContext, cb: () => void): void;
@@ -4561,6 +4782,156 @@ export declare interface PhysicsAggregateOptions {
4561
4782
  export declare interface PhysicsBody {
4562
4783
  readonly node: SceneNode;
4563
4784
  readonly motionType: PhysicsMotionType;
4564
4785
 
4786
+ /**
4787
+ * A physics-driven character controller. Create one with
4788
+ * {@link createPhysicsCharacterController}; drive it each physics step with
4789
+ * {@link PhysicsCharacterController.moveWithCollisions} and read back the resolved position
4790
+ * with {@link PhysicsCharacterController.getPosition}.
4791
+ */
4792
+ export declare class PhysicsCharacterController {
4793
+ /** Minimum separation kept from surfaces, in metres. Default `0.05`. */
4794
+ keepDistance: number;
4795
+ /** Extra distance over which a contact is still tracked. Default `0.1`. */
4796
+ keepContactTolerance: number;
4797
+ /** Maximum number of cast iterations per integration step. Default `10`. */
4798
+ maxCastIterations: number;
4799
+ /** Speed at which penetrations are pushed out. Default `1.0`. */
4800
+ penetrationRecoverySpeed: number;
4801
+ /** Static-friction coefficient against surfaces. Default `0`. */
4802
+ staticFriction: number;
4803
+ /** Dynamic-friction coefficient against surfaces. Default `1`. */
4804
+ dynamicFriction: number;
4805
+ /** Cosine of the steepest slope the character can stand on. Default `0.5` (60°). */
4806
+ maxSlopeCosine: number;
4807
+ /** Upper bound on per-solve character speed. Default `10`. */
4808
+ maxCharacterSpeedForSolver: number;
4809
+ /** World up vector. Default `(0, 1, 0)`. */
4810
+ up: Vec3;
4811
+ /** Push strength applied to dynamic bodies the character contacts. Default `1e38`. */
4812
+ characterStrength: number;
4813
+ /** Acceleration factor used by {@link calculateMovement}. Default `0.05`. */
4814
+ acceleration: number;
4815
+ /** Maximum world-space acceleration used by {@link calculateMovement}. Default `50`. */
4816
+ maxAcceleration: number;
4817
+ /** Character mass used when reacting to gravity against dynamic bodies. Default `0`. */
4818
+ characterMass: number;
4819
+ /**
4820
+ * Fires once per dynamic body the character pushes during a step, just before the reactive
4821
+ * impulse is applied. Mirrors Babylon.js' `onTriggerCollisionObservable`. Subscribe with
4822
+ * `.add(cb)`; the returned disposer removes the subscription.
4823
+ */
4824
+ readonly onTriggerCollisionObservable: CharacterCollisionObservable;
4825
+ private readonly _world;
4826
+ private readonly _shape;
4827
+ private readonly _node;
4828
+ private readonly _body;
4829
+ private readonly _startCollector;
4830
+ private readonly _castCollector;
4831
+ private _position;
4832
+ private _velocity;
4833
+ private _lastVelocity;
4834
+ private _lastDisplacement;
4835
+ private _orientation;
4836
+ private _manifold;
4837
+ private _lastInvDeltaTime;
4838
+ private _frameId;
4839
+ private readonly _contactAngleSensitivity;
4840
+ private readonly _displacementEps;
4841
+ private readonly _bodyTracking;
4842
+ /** Construct a controller. Prefer the {@link createPhysicsCharacterController} factory. */
4843
+ constructor(world: PhysicsWorld, position: Vec3, options: PhysicsCharacterControllerOptions);
4844
+ /** Release the controller's body, shape, and query collectors. */
4845
+ dispose(): void;
4846
+ /** Get the current character position (world space). The returned vector is owned by the controller. */
4847
+ getPosition(): Vec3;
4848
+ /** Teleport the character to a new position, clearing any swept motion. */
4849
+ setPosition(position: Vec3): void;
4850
+ /** Get the current character velocity (world space). The returned vector is owned by the controller. */
4851
+ getVelocity(): Vec3;
4852
+ /** Set the character velocity (world space). */
4853
+ setVelocity(velocity: Vec3): void;
4854
+ /**
4855
+ * Move the character by a displacement this physics step, sliding along any geometry it meets.
4856
+ * @param displacement - Requested world-space displacement for this step.
4857
+ */
4858
+ moveWithCollisions(displacement: Vec3): void;
4859
+ /**
4860
+ * Advance the controller using a velocity already chosen for this step (instead of a raw
4861
+ * displacement). Mirrors Babylon.js' `integrate`: it picks a cast direction from the current
4862
+ * velocity and surface info, then runs the collide-and-slide.
4863
+ * @param deltaTime - Step duration in seconds.
4864
+ * @param surfaceInfo - Surface info from a prior {@link checkSupport} call.
4865
+ * @param gravity - Gravity applied to the character this step.
4866
+ */
4867
+ integrate(deltaTime: number, surfaceInfo: CharacterSurfaceInfo, gravity: Vec3): void;
4868
+ /**
4869
+ * Probe the surface under the character along a direction (usually gravity) to classify support.
4870
+ * @param deltaTime - Step duration in seconds.
4871
+ * @param direction - Direction to probe, usually the gravity direction.
4872
+ * @returns Support classification and averaged surface motion/normal.
4873
+ */
4874
+ checkSupport(deltaTime: number, direction: Vec3): CharacterSurfaceInfo;
4875
+ /**
4876
+ * Compute a target velocity from the current state, a desired velocity, and surface info — a
4877
+ * helper for steering input into surface-aware motion.
4878
+ * @param deltaTime - Step duration in seconds.
4879
+ * @param forwardWorld - Character forward direction (world space).
4880
+ * @param surfaceNormal - Supporting surface normal.
4881
+ * @param currentVelocity - Current character velocity.
4882
+ * @param surfaceVelocity - Velocity induced by the surface.
4883
+ * @param desiredVelocity - Desired character velocity.
4884
+ * @param upWorld - Up vector (world space).
4885
+ * @returns The new velocity vector.
4886
+ */
4887
+ calculateMovement(deltaTime: number, forwardWorld: Vec3, surfaceNormal: Vec3, currentVelocity: Vec3, surfaceVelocity: Vec3, desiredVelocity: Vec3, upWorld: Vec3): Vec3;
4888
+ private _integrateManifolds;
4889
+ private _castWithCollectors;
4890
+ private _findBody;
4891
+ private _contactFromCast;
4892
+ private _validateManifold;
4893
+ private _updateManifold;
4894
+ private _compareContacts;
4895
+ private _findContact;
4896
+ private _getMassProperties;
4897
+ private _getComWorld;
4898
+ private _getPointVelocity;
4899
+ private _getInvMass;
4900
+ private _createSurfaceConstraint;
4901
+ private _addMaxSlopePlane;
4902
+ private _resolveConstraintPenetration;
4903
+ private _createConstraintsFromManifold;
4904
+ private _resolveContacts;
4905
+ private _getOutput;
4906
+ private _sortInfo;
4907
+ private _solve1d;
4908
+ private _solveTest1d;
4909
+ private _solve2d;
4910
+ private _solve3d;
4911
+ private _examineActivePlanes;
4912
+ private _copyPlane;
4913
+ private _simplexSolverSolve;
4914
+ }
4915
+
4916
+ /** Options describing the character's collision capsule. */
4917
+ export declare interface PhysicsCharacterControllerOptions {
4918
+ /** Total capsule height (tip to tip), in metres. Default `1.8`. */
4919
+ capsuleHeight: number;
4920
+ /** Capsule radius, in metres. Default `0.6`. */
4921
+ capsuleRadius: number;
4922
+ }
4923
+
4924
+ /** A single collision event reported by Havok after a physics step. */
4925
+ export declare interface PhysicsCollisionInfo {
4926
+ /** Phase of the contact: a new contact, an ongoing contact, or a contact that just ended. */
4927
+ type: "STARTED" | "CONTINUED" | "FINISHED";
4928
+ /** World-space contact point (closest point on the first body). */
4929
+ point: Vec3;
4930
+ /** World-space contact normal at the contact point. */
4931
+ normal: Vec3;
4932
+ /** Magnitude of the impulse applied to resolve the contact (0 for `FINISHED`). */
4933
+ impulse: number;
4934
+ }
4935
+
4565
4936
  /** Opaque handle to a Havok constraint between two bodies. */
4566
4937
  export declare interface PhysicsConstraint {
4567
4938
  readonly bodyA: PhysicsBody;
4568
4939
  readonly bodyB: PhysicsBody;
@@ -4640,6 +5011,32 @@ export declare const enum PhysicsMotionType {
4640
5011
  DYNAMIC = 2
4641
5012
  }
4642
5013
 
5014
+ /**
5015
+ * How a moved transform node is propagated to its physics body before each step.
5016
+ * `DISABLED` skips the sync, `TELEPORT` snaps the body to the node (`HP_Body_SetQTransform`),
5017
+ * and `ACTION` sets the body's velocity so it reaches the node (`HP_Body_SetTargetQTransform`,
5018
+ * dragging resting bodies via friction). Values match Babylon.js `PhysicsPrestepType`.
5019
+ */
5020
+ export declare const enum PhysicsPrestepType {
5021
+ DISABLED = 0,
5022
+ TELEPORT = 1,
5023
+ ACTION = 2
5024
+ }
5025
+
5026
+ /**
5027
+ * Cast a ray from `from` to `to` and return the first body it hits.
5028
+ *
5029
+ * `collideWith`/`membership` filter which bodies the ray can hit (by their shape filter masks).
5030
+ * For MESH shapes the hit triangle index is reported; non-mesh shapes report `-1`. Run at least
5031
+ * one physics step first so the broadphase exists.
5032
+ * @param world - The physics world to query.
5033
+ * @param from - World-space ray origin.
5034
+ * @param to - World-space ray end point.
5035
+ * @param query - Optional collision-filter masks and trigger behaviour.
5036
+ * @returns The raycast result; `hasHit` is `false` when the ray clears every matching body.
5037
+ */
5038
+ export declare function physicsRaycast(world: PhysicsWorld, from: Vec3, to: Vec3, query?: RaycastQuery): RaycastResult;
5039
+
4643
5040
  /** Opaque handle to a Havok collision shape. */
4644
5041
  export declare interface PhysicsShape {
4645
5042
 
@@ -4675,6 +5072,12 @@ export declare const enum PhysicsShapeType {
4675
5072
  HEIGHTFIELD = 7
4676
5073
  }
4677
5074
 
5075
+ /** A single trigger-volume event reported by Havok after a physics step. */
5076
+ export declare interface PhysicsTriggerInfo {
5077
+ /** `ENTERED` when a body enters the trigger volume, `EXITED` when it leaves. */
5078
+ type: "ENTERED" | "EXITED";
5079
+ }
5080
+
4678
5081
  /** Pure-state handle for Havok Physics V2 debug rendering. */
4679
5082
  export declare interface PhysicsViewer {
4680
5083
  readonly scene: SceneContext;
@@ -4692,13 +5095,30 @@ export declare interface PhysicsWorld {
4692
5095
  /** Pick the mesh at CSS-space canvas coordinates, matching Babylon.js Scene.pick. Returns a PickingInfo. */
4693
5096
  export declare function pickAsync(picker: GpuPicker, x: number, y: number, options?: PickOptions): Promise<PickingInfo>;
4694
5097
 
4695
- /** Optional GPU-picking discard volume. The picker clips fragments in a bounded local frame:
4696
- * `a=(origin.x, origin.z, tangent.x, tangent.z)`, `b=(baseY, halfWidth, springY, rise)`,
4697
- * `c=(ringT, depthHalf, flatFlag, _)`. */
4698
- declare interface PickingClipVolume {
4699
- readonly a: readonly [number, number, number, number];
4700
- readonly b: readonly [number, number, number, number];
4701
- readonly c: readonly [number, number, number, number];
5098
+ /**
5099
+ * Optional GPU-side discard rule for {@link pickAsync}.
5100
+ *
5101
+ * This lets apps remove pick hits with custom WGSL while keeping the main scene
5102
+ * render untouched. The WGSL must define
5103
+ * `fn shouldDiscardPick(input: PickDiscardInput) -> bool`.
5104
+ */
5105
+ export declare interface PickDiscardRule {
5106
+ /** Stable cache key for the generated picking pipeline set. Change it when the WGSL or layout changes. */
5107
+ readonly key: string;
5108
+ /** WGSL source that defines `shouldDiscardPick(input: PickDiscardInput) -> bool`. */
5109
+ readonly wgsl: string;
5110
+ /** Optional typed-array storage inputs exposed to the discard WGSL at group 2. */
5111
+ readonly storage?: readonly PickDiscardStorage[];
5112
+ }
5113
+
5114
+ /** Storage data for a pick discard rule. Lite injects the WGSL declaration and owns the GPU buffer upload. */
5115
+ declare interface PickDiscardStorage {
5116
+ /** WGSL variable name declared at `@group(2) @binding(index)`; must be unique within the rule. */
5117
+ readonly name: string;
5118
+ /** WGSL storage type, for example `array<vec4<f32>>`. */
5119
+ readonly type: string;
5120
+ /** Per-mesh data for the current pick. Return `null` to draw that mesh with the default picker. */
5121
+ readonly data: (mesh: Mesh) => ArrayBufferView | null | undefined;
4702
5122
  }
4703
5123
 
4704
5124
  /** Result of a GPU pick operation. */
@@ -4730,6 +5150,16 @@ export declare interface PickOptions {
4730
5150
  * structure behind/around them. When omitted, every mesh is pickable (previous behaviour). Applied
4731
5151
  * identically to the id-assignment and id-resolve passes so ids stay consistent. */
4732
5152
  filter?: (mesh: Mesh) => boolean;
5153
+ /** Optional GPU fragment-discard extension for app-specific pick removal.
5154
+ *
5155
+ * `wgsl` is injected into the regular and thin-instance picking shaders and must define:
5156
+ *
5157
+ * `fn shouldDiscardPick(input: PickDiscardInput) -> bool`
5158
+ *
5159
+ * The input exposes only generic picker data: `worldPos`, `pickId`, `thinInstanceIndex`,
5160
+ * `hasThinInstance`, and `instanceExtras` (the original thin-instance matrix w lanes, zero for
5161
+ * non-instanced meshes). Storage entries are uploaded and bound by Lite for the current pick only. */
5162
+ discard?: PickDiscardRule;
4733
5163
  /** Dev-only diagnostics: logs the pick ray, pixel, pick id/depth and resolved mesh. */
4734
5164
  debugLabel?: string;
4735
5165
  }
@@ -5107,7 +5537,7 @@ export declare type QuadCurve = {
5107
5537
  };
5108
5538
 
5109
5539
  /** Quaternion rotation */
5110
- declare interface Quat {
5540
+ export declare interface Quat {
5111
5541
  x: number;
5112
5542
  y: number;
5113
5543
  z: number;
@@ -5133,6 +5563,32 @@ export declare function raycast(plugin: NavigationPlugin, start: Vec3, end: Vec3
5133
5563
  hitPoint?: Vec3;
5134
5564
  };
5135
5565
 
5566
+ /** Query parameters for {@link physicsRaycast}. */
5567
+ export declare interface RaycastQuery {
5568
+ /** Bitmask describing which collision groups the ray belongs to. Default `~0` (all). */
5569
+ membership?: number;
5570
+ /** Bitmask describing which collision groups the ray collides with. Default `~0` (all). */
5571
+ collideWith?: number;
5572
+ /** Whether trigger volumes count as hits. Default `false`. */
5573
+ shouldHitTriggers?: boolean;
5574
+ }
5575
+
5576
+ /** Result of a {@link physicsRaycast} query. */
5577
+ export declare interface RaycastResult {
5578
+ /** Whether the ray hit a body. */
5579
+ hasHit: boolean;
5580
+ /** World-space contact point. */
5581
+ hitPoint: Vec3;
5582
+ /** Surface normal at the contact point. */
5583
+ hitNormal: Vec3;
5584
+ /** Distance from the ray origin (`from`) to the contact point. */
5585
+ hitDistance: number;
5586
+ /** Index of the triangle hit on a MESH shape, or `-1` for non-mesh shapes. */
5587
+ triangleIndex: number;
5588
+ /** The body that was hit, or `null` when nothing was hit (or the body is not tracked). */
5589
+ body: PhysicsBody | null;
5590
+ }
5591
+
5136
5592
  /** Rebuild renderables whose pipeline/bind-group feature state depends on a material.
5137
5593
  * Use after texture, sampler, bind-group layout, culling, or feature changes.
5138
5594
  * UBO-only scalar/vector changes should use markMaterialUboDirty instead. */
@@ -5242,6 +5698,17 @@ export declare function removeBillboardSpriteIndex(system: BillboardSpriteSystem
5242
5698
  * Standalone function for tree-shaking — only included when actually used. */
5243
5699
  export declare function removeFromScene(scene: SceneContext, mesh: Mesh): void;
5244
5700
 
5701
+ /**
5702
+ * Remove one logical hierarchy instance with O(1) swap-remove semantics.
5703
+ *
5704
+ * If `index` is not the last active slot, the last logical instance moves into
5705
+ * `index` in every descendant mesh buffer.
5706
+ *
5707
+ * @param pool - Pool created by {@link createHierarchyInstancePool}.
5708
+ * @param index - Active logical instance index to remove.
5709
+ */
5710
+ export declare function removeHierarchyInstance(pool: HierarchyInstancePool, index: number): void;
5711
+
5245
5712
  /** Remove a mesh from this task's renderable + binding lists. Idempotent. */
5246
5713
  export declare function removeMeshFromTask(task: RenderTask, mesh: object): void;
5247
5714
 
@@ -5547,6 +6014,9 @@ export declare interface ScaleGizmoOptions {
5547
6014
  thickness?: number;
5548
6015
  }
5549
6016
 
6017
+ /** Multiply every component of `v` by scalar `s`. */
6018
+ export declare function scaleVec3(v: Vec3, s: number): Vec3;
6019
+
5550
6020
  /** Scattering sub-feature. Presence enables screen-space subsurface scattering.
5551
6021
  * NOTE: PrePass/SSS pipeline is not yet implemented — this type is reserved. */
5552
6022
  declare interface ScatteringProps {
@@ -5782,6 +6252,28 @@ export declare function setGeospatialOrientation(camera: GeospatialCamera, orien
5782
6252
  * toggles are synchronous. */
5783
6253
  export declare function setGpuTimingEnabled(engine: EngineContext, enabled: boolean): void;
5784
6254
 
6255
+ /**
6256
+ * Set the active logical hierarchy instance count without reallocating buffers.
6257
+ *
6258
+ * This mirrors {@link setThinInstanceCount}: it only changes how many existing
6259
+ * slots draw. Newly exposed slots are not initialized here; use
6260
+ * {@link addHierarchyInstance} when growing with a new matrix, or immediately
6261
+ * call {@link setHierarchyInstanceMatrix} before the next frame.
6262
+ *
6263
+ * @param pool - Pool created by {@link createHierarchyInstancePool}.
6264
+ * @param count - New active logical instance count, from 0 to `pool.capacity`.
6265
+ */
6266
+ export declare function setHierarchyInstanceCount(pool: HierarchyInstancePool, count: number): void;
6267
+
6268
+ /**
6269
+ * Update one logical hierarchy instance's root matrix.
6270
+ *
6271
+ * @param pool - Pool created by {@link createHierarchyInstancePool}.
6272
+ * @param index - Active logical instance index to update.
6273
+ * @param matrix - Desired world matrix for the hierarchy root instance.
6274
+ */
6275
+ export declare function setHierarchyInstanceMatrix(pool: HierarchyInstancePool, index: number, matrix: Mat4): void;
6276
+
5785
6277
  /** Override the URL of the KTX2/Basis decoder script (and, optionally, the URLs of the WASM/JS transcoder
5786
6278
  * modules it pulls). Call before the first KHR_texture_basisu texture loads. */
5787
6279
  export declare function setKtx2DecoderUrl(url: string, wasmUrls?: Record<string, Record<string, string>>): void;
@@ -5815,19 +6307,34 @@ export declare function setParent(child: Mesh, parent: IWorldMatrixProvider | nu
5815
6307
  */
5816
6308
  export declare function setPhysicsBodyAngularVelocity(world: PhysicsWorld, body: PhysicsBody, velocity: Vec3): void;
5817
6309
 
6310
+ /**
6311
+ * Enable or disable collision-event reporting for a single body by setting its Havok event mask.
6312
+ *
6313
+ * Only bodies with events enabled contribute to the stream read by {@link onPhysicsCollision};
6314
+ * a collision is reported when at least one of the two touching bodies has events enabled.
6315
+ * @param world - The physics world owning the body.
6316
+ * @param body - The body to toggle collision events on.
6317
+ * @param enabled - `true` to report STARTED/CONTINUED/FINISHED events, `false` to silence the body.
6318
+ */
6319
+ export declare function setPhysicsBodyCollisionEventsEnabled(world: PhysicsWorld, body: PhysicsBody, enabled: boolean): void;
6320
+
5818
6321
  /**
5819
6322
  * Set a body's linear velocity (m/s) directly — e.g. to impart a throw velocity on release.
5820
6323
  */
5821
6324
  export declare function setPhysicsBodyLinearVelocity(world: PhysicsWorld, body: PhysicsBody, velocity: Vec3): void;
5822
6325
 
5823
6326
  /**
5824
- * Sets a body's mass and a matching diagonal inertia tensor.
6327
+ * Sets a body's mass, preserving the shape-derived inertia tensor, centre of mass, and inertia
6328
+ * orientation (matching Babylon.js `HavokPlugin` — only the mass scalar is overridden). A body with
6329
+ * no shape attached yet has no inertia tensor to derive, so it falls back to an isotropic inertia
6330
+ * proportional to the mass until a shape is set.
5825
6331
  * @param world - The physics world.
5826
6332
  * @param body - The body to update.
5827
6333
  * @param mass - Mass in kilograms.
5828
- * @param centerOfMass - Optional body-local centre of mass (defaults to the origin). Use this when the
5829
- * collision shape is offset from the body's reference frame (e.g. a prop whose body origin sits at
5830
- * its base but whose shape is centred on its middle) so it tumbles around its real centre.
6334
+ * @param centerOfMass - Optional body-local centre of mass override. When omitted, the shape-derived
6335
+ * centre of mass is preserved. Use this when the collision shape is offset from the body's reference
6336
+ * frame (e.g. a prop whose body origin sits at its base but whose shape is centred on its middle)
6337
+ * so it tumbles around its real centre.
5831
6338
  */
5832
6339
  export declare function setPhysicsBodyMass(world: PhysicsWorld, body: PhysicsBody, mass: number, centerOfMass?: Vec3): void;
5833
6340
 
@@ -5853,6 +6360,17 @@ export declare function setPhysicsBodyMotionType(world: PhysicsWorld, body: Phys
5853
6360
  */
5854
6361
  export declare function setPhysicsBodyPreStep(body: PhysicsBody, enabled: boolean): void;
5855
6362
 
6363
+ /**
6364
+ * Sets how a moved transform node is propagated to its physics body before each step.
6365
+ * `TELEPORT` snaps the body to the node, `ACTION` sets a velocity toward it (so resting bodies are
6366
+ * dragged along by friction), and `DISABLED` skips the pre-step sync entirely. Setting any type
6367
+ * other than `DISABLED` automatically enables prestep syncing for the body (equivalent to
6368
+ * {@link setPhysicsBodyPreStep}), so STATIC/DYNAMIC bodies are synced without an extra call.
6369
+ * @param body - The physics body to update.
6370
+ * @param type - The prestep behaviour to apply.
6371
+ */
6372
+ export declare function setPhysicsBodyPrestepType(body: PhysicsBody, type: PhysicsPrestepType): void;
6373
+
5856
6374
  /**
5857
6375
  * Assigns a collision shape to a body.
5858
6376
  * @param world - The physics world.
@@ -5893,6 +6411,18 @@ export declare function setPhysicsShapeFilterCollideMask(world: PhysicsWorld, sh
5893
6411
  */
5894
6412
  export declare function setPhysicsShapeFilterMembershipMask(world: PhysicsWorld, shape: PhysicsShape, membershipMask: number): void;
5895
6413
 
6414
+ /**
6415
+ * Flag a collision shape as a trigger volume (or clear the flag).
6416
+ *
6417
+ * A trigger shape detects overlaps and reports {@link PhysicsTriggerInfo} events but does
6418
+ * not produce a physical collision response — bodies pass through it. Attach the flagged
6419
+ * shape to a body in the world, then listen with {@link onPhysicsTrigger}.
6420
+ * @param world - The physics world owning the shape.
6421
+ * @param shape - The collision shape to flag.
6422
+ * @param isTrigger - `true` to make the shape a trigger volume, `false` for a solid shape.
6423
+ */
6424
+ export declare function setPhysicsShapeIsTrigger(world: PhysicsWorld, shape: PhysicsShape, isTrigger: boolean): void;
6425
+
5896
6426
  /**
5897
6427
  * Sets a shape's surface material properties.
5898
6428
  * @param world - The physics world.
@@ -6293,7 +6823,7 @@ export declare interface ShapeProximityResult {
6293
6823
  }
6294
6824
 
6295
6825
  /** Sheen layer properties. Maps to BJS PBRMaterial.sheen sub-object. */
6296
- declare interface SheenProps {
6826
+ export declare interface SheenProps {
6297
6827
  /** Whether sheen is active. Default false. */
6298
6828
  isEnabled: boolean;
6299
6829
  /** Sheen color (linear RGB). Default [1, 1, 1]. */
@@ -6758,6 +7288,10 @@ export declare interface StandardMaterialProps extends Material {
6758
7288
  lightmapLevel: number;
6759
7289
  /** Lightmap UV channel. 0=UV1, 1=UV2. Default 1 (BJS convention). */
6760
7290
  lightmapCoordIndex: 0 | 1;
7291
+ /** When true, the lightmap is a baked shadowmap that multiplies the final color
7292
+ * (`color *= lightmap * level`) instead of being added. Matches BJS
7293
+ * StandardMaterial.useLightmapAsShadowmap. Default false. */
7294
+ useLightmapAsShadowmap: boolean;
6761
7295
  /** Optional opacity texture. Multiplies alpha (.a channel). */
6762
7296
  opacityTexture: Texture2D | null;
6763
7297
  /** Opacity texture intensity. Default 1.0. */
@@ -6841,6 +7375,9 @@ export declare interface SubSurfaceProps {
6841
7375
  refraction?: RefractionProps;
6842
7376
  }
6843
7377
 
7378
+ /** Subtract vector `b` from vector `a` component-wise. */
7379
+ export declare function subVec3(a: Vec3, b: Vec3): Vec3;
7380
+
6844
7381
  /**
6845
7382
  * Per-canvas rendering surface — owns the GPU canvas context, swapchain format, MSAA
6846
7383
  * configuration, and the list of `RenderingContext`s (scenes, effect renderers,
@@ -7469,12 +8006,29 @@ export declare interface Vec3 {
7469
8006
  z: number;
7470
8007
  }
7471
8008
 
8009
+ /** Create a plain `{ x, y, z }` vector object. */
8010
+ export declare function vec3(x: number, y: number, z: number): Vec3;
8011
+
7472
8012
  /** 3-component vector as a fixed-length `[x, y, z]` tuple. */
7473
8013
  export declare type Vec3Tuple = [number, number, number];
7474
8014
 
8015
+ /** Unit vector pointing up on the positive Y axis. */
8016
+ export declare const Vec3Up: Readonly<Vec3>;
8017
+
8018
+ /** 4-component vector (homogeneous coords, quaternion, tangent) */
8019
+ export declare interface Vec4 {
8020
+ x: number;
8021
+ y: number;
8022
+ z: number;
8023
+ w: number;
8024
+ }
8025
+
7475
8026
  /** Babylon Lite version string. */
7476
8027
  export declare const VERSION = "0.1.0";
7477
8028
 
7478
8029
  declare interface VertexAttribute {
7479
8030
 
8031
+ /** Write Vec3 into a Float32Array at the given byte offset (for uniform buffers). */
8032
+ export declare function writeVec3(out: Float32Array, offset: number, v: Vec3): void;
8033
+
7480
8034
  export { }