@babylonjs/lite 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/{_mat4-storage-f64-CjDoht2w.js → _mat4-storage-f64-BW9sTaVh.js} +2 -2
  2. package/{_mat4-storage-f64-CjDoht2w.js.map → _mat4-storage-f64-BW9sTaVh.js.map} +1 -1
  3. package/{alpha-test-fragment-B7DjSnF7.js → alpha-test-fragment-eUG971h3.js} +2 -2
  4. package/{alpha-test-fragment-B7DjSnF7.js.map → alpha-test-fragment-eUG971h3.js.map} +1 -1
  5. package/{background-dds-skybox-BEX309u3.js → background-dds-skybox-BwG0kYQP.js} +3 -3
  6. package/{background-dds-skybox-BEX309u3.js.map → background-dds-skybox-BwG0kYQP.js.map} +1 -1
  7. package/{background-ground-BU0HOcM4.js → background-ground-DiFpKJzF.js} +2 -2
  8. package/{background-ground-BU0HOcM4.js.map → background-ground-DiFpKJzF.js.map} +1 -1
  9. package/{background-hdr-skybox--RRRic_K.js → background-hdr-skybox-DIgJhvfj.js} +3 -3
  10. package/{background-hdr-skybox--RRRic_K.js.map → background-hdr-skybox-DIgJhvfj.js.map} +1 -1
  11. package/{background-solid-skybox-BrH2fXSu.js → background-solid-skybox--fqHdan_.js} +2 -2
  12. package/{background-solid-skybox-BrH2fXSu.js.map → background-solid-skybox--fqHdan_.js.map} +1 -1
  13. package/{billboard-renderable-BHWryAeC.js → billboard-renderable-HY2XCd52.js} +2 -2
  14. package/{billboard-renderable-BHWryAeC.js.map → billboard-renderable-HY2XCd52.js.map} +1 -1
  15. package/{clamp-block-DqbwnQGW.js → clamp-block-XHdUk2Va.js} +2 -2
  16. package/{clamp-block-DqbwnQGW.js.map → clamp-block-XHdUk2Va.js.map} +1 -1
  17. package/{clearcoat-fragment-D6FSCie1.js → clearcoat-fragment-CHYw8MPB.js} +2 -2
  18. package/{clearcoat-fragment-D6FSCie1.js.map → clearcoat-fragment-CHYw8MPB.js.map} +1 -1
  19. package/{create-skeleton-D_uplboC.js → create-skeleton-9tdiUjRP.js} +2 -2
  20. package/{create-skeleton-D_uplboC.js.map → create-skeleton-9tdiUjRP.js.map} +1 -1
  21. package/{cubemap-skybox-material-DQcMMdf-.js → cubemap-skybox-material-DqQ0dyz8.js} +2 -2
  22. package/{cubemap-skybox-material-DQcMMdf-.js.map → cubemap-skybox-material-DqQ0dyz8.js.map} +1 -1
  23. package/{curve-block-21rT0JjG.js → curve-block-S27sXrJQ.js} +2 -2
  24. package/{curve-block-21rT0JjG.js.map → curve-block-S27sXrJQ.js.map} +1 -1
  25. package/{emissive-fragment-C5FtBs3y.js → emissive-fragment-CZMQ0_bF.js} +2 -2
  26. package/{emissive-fragment-C5FtBs3y.js.map → emissive-fragment-CZMQ0_bF.js.map} +1 -1
  27. package/{esm-shadow-view-Gtd1LWRP.js → esm-shadow-view-CUwxbnMR.js} +2 -2
  28. package/{esm-shadow-view-Gtd1LWRP.js.map → esm-shadow-view-CUwxbnMR.js.map} +1 -1
  29. package/{esm-shadow-view-c5YV4Eg9.js → esm-shadow-view-Cl36rOrK.js} +2 -2
  30. package/{esm-shadow-view-c5YV4Eg9.js.map → esm-shadow-view-Cl36rOrK.js.map} +1 -1
  31. package/{esm-shadow-view-Cl3rPGof.js → esm-shadow-view-DKQ-FSoV.js} +2 -2
  32. package/{esm-shadow-view-Cl3rPGof.js.map → esm-shadow-view-DKQ-FSoV.js.map} +1 -1
  33. package/{gaussian-splatting-pipeline-sh-7J31V23x.js → gaussian-splatting-pipeline-sh-DDo7QQ8l.js} +2 -2
  34. package/{gaussian-splatting-pipeline-sh-7J31V23x.js.map → gaussian-splatting-pipeline-sh-DDo7QQ8l.js.map} +1 -1
  35. package/{geometry-texture-output-dXk4E9uu.js → geometry-texture-output-BmuAquio.js} +2 -2
  36. package/{geometry-texture-output-dXk4E9uu.js.map → geometry-texture-output-BmuAquio.js.map} +1 -1
  37. package/{geometry-view-BsFJpBJa.js → geometry-view-xWZmq799.js} +4 -4
  38. package/{geometry-view-BsFJpBJa.js.map → geometry-view-xWZmq799.js.map} +1 -1
  39. package/{gltf-animation-K_zZxj_d.js → gltf-animation-Bq7k_5HA.js} +2 -2
  40. package/{gltf-animation-K_zZxj_d.js.map → gltf-animation-Bq7k_5HA.js.map} +1 -1
  41. package/{gltf-ext-basisu-CDbPclzZ.js → gltf-ext-basisu-C5teqxzQ.js} +2 -202
  42. package/gltf-ext-basisu-C5teqxzQ.js.map +1 -0
  43. package/{gltf-ext-node-visibility-DXCJEYr6.js → gltf-ext-node-visibility-DnGTKkMf.js} +2 -2
  44. package/{gltf-ext-node-visibility-DXCJEYr6.js.map → gltf-ext-node-visibility-DnGTKkMf.js.map} +1 -1
  45. package/{gltf-ext-quantization-CvHI_0Vg.js → gltf-ext-quantization-DheC7FhB.js} +2 -2
  46. package/{gltf-ext-quantization-CvHI_0Vg.js.map → gltf-ext-quantization-DheC7FhB.js.map} +1 -1
  47. package/{gltf-ext-uv-transform-DgYazJBs.js → gltf-ext-uv-transform-DljdVllE.js} +2 -2
  48. package/{gltf-ext-uv-transform-DgYazJBs.js.map → gltf-ext-uv-transform-DljdVllE.js.map} +1 -1
  49. package/{gltf-feature-animation-pointer-D1RJRFBw.js → gltf-feature-animation-pointer-DVhymFLK.js} +3 -3
  50. package/{gltf-feature-animation-pointer-D1RJRFBw.js.map → gltf-feature-animation-pointer-DVhymFLK.js.map} +1 -1
  51. package/{gltf-feature-animations-Cmc1uoIu.js → gltf-feature-animations-hxC3y3bJ.js} +2 -2
  52. package/{gltf-feature-animations-Cmc1uoIu.js.map → gltf-feature-animations-hxC3y3bJ.js.map} +1 -1
  53. package/{gltf-feature-draco-CKKzT5E3.js → gltf-feature-draco-B7Q_cMUv.js} +2 -2
  54. package/{gltf-feature-draco-CKKzT5E3.js.map → gltf-feature-draco-B7Q_cMUv.js.map} +1 -1
  55. package/{gltf-feature-gpu-instancing-n87SO6Vh.js → gltf-feature-gpu-instancing-C7sRzWv7.js} +2 -2
  56. package/{gltf-feature-gpu-instancing-n87SO6Vh.js.map → gltf-feature-gpu-instancing-C7sRzWv7.js.map} +1 -1
  57. package/{gltf-feature-lights-punctual-Ckm3ciL8.js → gltf-feature-lights-punctual-DF7kya14.js} +5 -5
  58. package/{gltf-feature-lights-punctual-Ckm3ciL8.js.map → gltf-feature-lights-punctual-DF7kya14.js.map} +1 -1
  59. package/{gltf-feature-meshopt-DLC4SF1E.js → gltf-feature-meshopt-DRG9hEqT.js} +2 -2
  60. package/{gltf-feature-meshopt-DLC4SF1E.js.map → gltf-feature-meshopt-DRG9hEqT.js.map} +1 -1
  61. package/{gltf-feature-morph-Cjtu7hYa.js → gltf-feature-morph-DZydYgWp.js} +3 -3
  62. package/{gltf-feature-morph-Cjtu7hYa.js.map → gltf-feature-morph-DZydYgWp.js.map} +1 -1
  63. package/{gltf-feature-registry-C63Hjp9w.js → gltf-feature-registry-DeYdy3DV.js} +15 -15
  64. package/{gltf-feature-registry-C63Hjp9w.js.map → gltf-feature-registry-DeYdy3DV.js.map} +1 -1
  65. package/{gltf-feature-skeleton-DKbOGidp.js → gltf-feature-skeleton-B9och1W0.js} +3 -3
  66. package/{gltf-feature-skeleton-DKbOGidp.js.map → gltf-feature-skeleton-B9och1W0.js.map} +1 -1
  67. package/{gltf-feature-variants-Cmzu0O0e.js → gltf-feature-variants-CY_Qft7f.js} +2 -2
  68. package/{gltf-feature-variants-Cmzu0O0e.js.map → gltf-feature-variants-CY_Qft7f.js.map} +1 -1
  69. package/{gltf-glb-parser-Cj5MHS-v.js → gltf-glb-parser-CqOeXFOz.js} +2 -2
  70. package/{gltf-glb-parser-Cj5MHS-v.js.map → gltf-glb-parser-CqOeXFOz.js.map} +1 -1
  71. package/{gltf-interleave-gHf9_t0i.js → gltf-interleave-DWf27t-h.js} +2 -3
  72. package/{gltf-interleave-gHf9_t0i.js.map → gltf-interleave-DWf27t-h.js.map} +1 -1
  73. package/{gltf-pbr-builder-ext-edNcjwPf.js → gltf-pbr-builder-ext-DvFxuOqN.js} +2 -2
  74. package/{gltf-pbr-builder-ext-edNcjwPf.js.map → gltf-pbr-builder-ext-DvFxuOqN.js.map} +1 -1
  75. package/{gltf-variants-CPxNdtP4.js → gltf-variants-CUvzYGYX.js} +4 -4
  76. package/{gltf-variants-CPxNdtP4.js.map → gltf-variants-CUvzYGYX.js.map} +1 -1
  77. package/gpu-task-timer-Dgkff80h.js +236 -0
  78. package/gpu-task-timer-Dgkff80h.js.map +1 -0
  79. package/gpu-timer-CUpqT_hK.js +55 -0
  80. package/gpu-timer-CUpqT_hK.js.map +1 -0
  81. package/{gs-picking-pipeline-DYaW_Lg3.js → gs-picking-pipeline-55sM5LzV.js} +2 -2
  82. package/{gs-picking-pipeline-DYaW_Lg3.js.map → gs-picking-pipeline-55sM5LzV.js.map} +1 -1
  83. package/{havok-floating-origin-Dr-18Nds.js → havok-floating-origin-5xp32P-C.js} +2 -2
  84. package/{havok-floating-origin-Dr-18Nds.js.map → havok-floating-origin-5xp32P-C.js.map} +1 -1
  85. package/{index-CLElg2Bo.js → index-C-tEgwbZ.js} +2712 -865
  86. package/index-C-tEgwbZ.js.map +1 -0
  87. package/index.d.ts +486 -6
  88. package/index.js +473 -444
  89. package/{input-block-DqEedWF2.js → input-block-DbRYCnet.js} +2 -2
  90. package/{input-block-DqEedWF2.js.map → input-block-DbRYCnet.js.map} +1 -1
  91. package/{iridescence-fragment-BHU59-gQ.js → iridescence-fragment-S3Ko1jvC.js} +2 -2
  92. package/{iridescence-fragment-BHU59-gQ.js.map → iridescence-fragment-S3Ko1jvC.js.map} +1 -1
  93. package/{light-block-Bv37V8vl.js → light-block-CAqWkucp.js} +2 -2
  94. package/{light-block-Bv37V8vl.js.map → light-block-CAqWkucp.js.map} +1 -1
  95. package/{loop-block-qTg8vb99.js → loop-block-ch-biPFY.js} +2 -2
  96. package/{loop-block-qTg8vb99.js.map → loop-block-ch-biPFY.js.map} +1 -1
  97. package/{morph-fragment-BRCUr2wQ.js → morph-fragment-D9he3Ksk.js} +2 -2
  98. package/{morph-fragment-BRCUr2wQ.js.map → morph-fragment-D9he3Ksk.js.map} +1 -1
  99. package/{multilight-wgsl-DMeppAdZ.js → multilight-wgsl-74aXpcJG.js} +2 -2
  100. package/{multilight-wgsl-DMeppAdZ.js.map → multilight-wgsl-74aXpcJG.js.map} +1 -1
  101. package/{node-env-Bc559GmY.js → node-env-B2bjGcMS.js} +2 -2
  102. package/{node-env-Bc559GmY.js.map → node-env-B2bjGcMS.js.map} +1 -1
  103. package/{node-geometry-view-COmWsRXK.js → node-geometry-view-CSXlEAhG.js} +3 -3
  104. package/{node-geometry-view-COmWsRXK.js.map → node-geometry-view-CSXlEAhG.js.map} +1 -1
  105. package/{node-registry-extra-compat-dWrv7gpS.js → node-registry-extra-compat-BEQH_ksg.js} +2 -2
  106. package/{node-registry-extra-compat-dWrv7gpS.js.map → node-registry-extra-compat-BEQH_ksg.js.map} +1 -1
  107. package/{node-registry-extra-math-Bn854sX9.js → node-registry-extra-math-Bm32WBAa.js} +2 -2
  108. package/{node-registry-extra-math-Bn854sX9.js.map → node-registry-extra-math-Bm32WBAa.js.map} +1 -1
  109. package/{node-renderable-B5G8WcdH.js → node-renderable-BMHny4tC.js} +2 -2
  110. package/{node-renderable-B5G8WcdH.js.map → node-renderable-BMHny4tC.js.map} +1 -1
  111. package/{node-shadow-CVIUlNf0.js → node-shadow-BRiz7CT1.js} +2 -2
  112. package/{node-shadow-CVIUlNf0.js.map → node-shadow-BRiz7CT1.js.map} +1 -1
  113. package/{normal-map-fragment-CQSxhjCy.js → normal-map-fragment-sE3TjF4U.js} +2 -2
  114. package/{normal-map-fragment-CQSxhjCy.js.map → normal-map-fragment-sE3TjF4U.js.map} +1 -1
  115. package/package.json +3 -3
  116. package/{parse-camera-pBRT_6i5.js → parse-camera-CmZBS423.js} +2 -2
  117. package/{parse-camera-pBRT_6i5.js.map → parse-camera-CmZBS423.js.map} +1 -1
  118. package/{pbr-geometry-view-NiZY_juX.js → pbr-geometry-view-T3vMABM8.js} +3 -3
  119. package/{pbr-geometry-view-NiZY_juX.js.map → pbr-geometry-view-T3vMABM8.js.map} +1 -1
  120. package/{pbr-metallic-roughness-block-JBSi-tQN.js → pbr-metallic-roughness-block-DbozMlHU.js} +2 -2
  121. package/{pbr-metallic-roughness-block-JBSi-tQN.js.map → pbr-metallic-roughness-block-DbozMlHU.js.map} +1 -1
  122. package/{pbr-metallic-roughness-block-full-Ta9lR2cz.js → pbr-metallic-roughness-block-full-CHC8w-Uv.js} +2 -2
  123. package/{pbr-metallic-roughness-block-full-Ta9lR2cz.js.map → pbr-metallic-roughness-block-full-CHC8w-Uv.js.map} +1 -1
  124. package/{pbr-mr-helper-core-BVWNR08D.js → pbr-mr-helper-core-DGRgbRXl.js} +2 -2
  125. package/{pbr-mr-helper-core-BVWNR08D.js.map → pbr-mr-helper-core-DGRgbRXl.js.map} +1 -1
  126. package/{pbr-refraction-C9FvFmAp.js → pbr-refraction-CquDP9JO.js} +2 -2
  127. package/{pbr-refraction-C9FvFmAp.js.map → pbr-refraction-CquDP9JO.js.map} +1 -1
  128. package/{pbr-renderable-DzUF2QIk.js → pbr-renderable-CaHKHU0g.js} +22 -22
  129. package/{pbr-renderable-DzUF2QIk.js.map → pbr-renderable-CaHKHU0g.js.map} +1 -1
  130. package/{pbr-shadow-fragment-CnqnbGYS.js → pbr-shadow-fragment-DmnNe6yz.js} +2 -2
  131. package/{pbr-shadow-fragment-CnqnbGYS.js.map → pbr-shadow-fragment-DmnNe6yz.js.map} +1 -1
  132. package/{pbr-tracking-3tU1kqea.js → pbr-tracking-Bo7RTANK.js} +2 -2
  133. package/{pbr-tracking-3tU1kqea.js.map → pbr-tracking-Bo7RTANK.js.map} +1 -1
  134. package/{pbr-transmission-ext-BcLjRxfB.js → pbr-transmission-ext-CoGcJBGE.js} +2 -2
  135. package/{pbr-transmission-ext-BcLjRxfB.js.map → pbr-transmission-ext-CoGcJBGE.js.map} +1 -1
  136. package/{reflectance-fragment-Dbpgw3Jt.js → reflectance-fragment-CExe6qDY.js} +2 -2
  137. package/{reflectance-fragment-Dbpgw3Jt.js.map → reflectance-fragment-CExe6qDY.js.map} +1 -1
  138. package/{rgbd-decode-DoyUquy3.js → rgbd-decode-DkiiiIlt.js} +2 -2
  139. package/{rgbd-decode-DoyUquy3.js.map → rgbd-decode-DkiiiIlt.js.map} +1 -1
  140. package/{scene-material-swap-nNUH4nGn.js → scene-material-swap-4qM0tpBK.js} +1 -2
  141. package/scene-material-swap-4qM0tpBK.js.map +1 -0
  142. package/{screenshot-readback-D0Sj9qq3.js → screenshot-readback-avr_tYGZ.js} +2 -2
  143. package/{screenshot-readback-D0Sj9qq3.js.map → screenshot-readback-avr_tYGZ.js.map} +1 -1
  144. package/{shader-composer-BUD_pSX4.js → shader-composer-CZagsJDS.js} +2 -2
  145. package/{shader-composer-BUD_pSX4.js.map → shader-composer-CZagsJDS.js.map} +1 -1
  146. package/{shader-renderable-D7-RyVxa.js → shader-renderable-D5sbgzxt.js} +41 -9
  147. package/shader-renderable-D5sbgzxt.js.map +1 -0
  148. package/{shader-thin-instance-DuBotxDO.js → shader-thin-instance-CkQ8rrfH.js} +2 -2
  149. package/{shader-thin-instance-DuBotxDO.js.map → shader-thin-instance-CkQ8rrfH.js.map} +1 -1
  150. package/{sheen-fragment-1MkEMcbc.js → sheen-fragment-BEigjpTX.js} +2 -2
  151. package/{sheen-fragment-1MkEMcbc.js.map → sheen-fragment-BEigjpTX.js.map} +1 -1
  152. package/{singlelight-directional-wgsl-BsV8G456.js → singlelight-directional-wgsl-Ccsk-ys3.js} +2 -2
  153. package/{singlelight-directional-wgsl-BsV8G456.js.map → singlelight-directional-wgsl-Ccsk-ys3.js.map} +1 -1
  154. package/{singlelight-hemispheric-wgsl-Bo0jKlW5.js → singlelight-hemispheric-wgsl-DL-jpc97.js} +2 -2
  155. package/{singlelight-hemispheric-wgsl-Bo0jKlW5.js.map → singlelight-hemispheric-wgsl-DL-jpc97.js.map} +1 -1
  156. package/{singlelight-point-wgsl-DV39UP5Y.js → singlelight-point-wgsl-hYmiP6ys.js} +2 -2
  157. package/{singlelight-point-wgsl-DV39UP5Y.js.map → singlelight-point-wgsl-hYmiP6ys.js.map} +1 -1
  158. package/{singlelight-spot-wgsl-yg3od6vL.js → singlelight-spot-wgsl-DSjp1p1C.js} +2 -2
  159. package/{singlelight-spot-wgsl-yg3od6vL.js.map → singlelight-spot-wgsl-DSjp1p1C.js.map} +1 -1
  160. package/{skeleton-fragment-DdxYG6kv.js → skeleton-fragment-B__bUbPK.js} +2 -2
  161. package/{skeleton-fragment-DdxYG6kv.js.map → skeleton-fragment-B__bUbPK.js.map} +1 -1
  162. package/{skybox-renderable-CJD4XmX5.js → skybox-renderable-BH6uUkal.js} +2 -2
  163. package/{skybox-renderable-CJD4XmX5.js.map → skybox-renderable-BH6uUkal.js.map} +1 -1
  164. package/{splat-ply-compressed-DHjyiVmI.js → splat-ply-compressed-BGNK6dnh.js} +2 -2
  165. package/{splat-ply-compressed-DHjyiVmI.js.map → splat-ply-compressed-BGNK6dnh.js.map} +1 -1
  166. package/{standard-pipeline-XTbHL7MY.js → standard-pipeline-BvFynkwL.js} +3 -3
  167. package/{standard-pipeline-XTbHL7MY.js.map → standard-pipeline-BvFynkwL.js.map} +1 -1
  168. package/{standard-renderable-CREWLNHI.js → standard-renderable-1Q3zemys.js} +3 -3
  169. package/{standard-renderable-CREWLNHI.js.map → standard-renderable-1Q3zemys.js.map} +1 -1
  170. package/{std-ambient-fragment-Bjx3VFrr.js → std-ambient-fragment-__F1KTEu.js} +2 -2
  171. package/{std-ambient-fragment-Bjx3VFrr.js.map → std-ambient-fragment-__F1KTEu.js.map} +1 -1
  172. package/{std-cube-reflection-fragment-y9WWdXUt.js → std-cube-reflection-fragment-DidM0byH.js} +2 -2
  173. package/{std-cube-reflection-fragment-y9WWdXUt.js.map → std-cube-reflection-fragment-DidM0byH.js.map} +1 -1
  174. package/{std-emissive-fragment-C8Lnmojh.js → std-emissive-fragment-Bj62X4Np.js} +2 -2
  175. package/{std-emissive-fragment-C8Lnmojh.js.map → std-emissive-fragment-Bj62X4Np.js.map} +1 -1
  176. package/{std-lightmap-fragment-DFxGcoA5.js → std-lightmap-fragment-DXvfWvKc.js} +2 -2
  177. package/{std-lightmap-fragment-DFxGcoA5.js.map → std-lightmap-fragment-DXvfWvKc.js.map} +1 -1
  178. package/{std-opacity-fragment-EXzFWiSp.js → std-opacity-fragment-BzMMb1K_.js} +2 -2
  179. package/{std-opacity-fragment-EXzFWiSp.js.map → std-opacity-fragment-BzMMb1K_.js.map} +1 -1
  180. package/{std-reflection-fragment-BoJORqpG.js → std-reflection-fragment-DC9Kvu1C.js} +2 -2
  181. package/{std-reflection-fragment-BoJORqpG.js.map → std-reflection-fragment-DC9Kvu1C.js.map} +1 -1
  182. package/{std-shadow-fragment-Bq-Wc8UJ.js → std-shadow-fragment-BnMHeF1-.js} +2 -2
  183. package/{std-shadow-fragment-Bq-Wc8UJ.js.map → std-shadow-fragment-BnMHeF1-.js.map} +1 -1
  184. package/{std-specular-fragment-CM5R5j2g.js → std-specular-fragment-Bio681OG.js} +2 -2
  185. package/{std-specular-fragment-CM5R5j2g.js.map → std-specular-fragment-Bio681OG.js.map} +1 -1
  186. package/{std-tracking-Cif_wXeT.js → std-tracking-BTcrry2o.js} +2 -2
  187. package/{std-tracking-Cif_wXeT.js.map → std-tracking-BTcrry2o.js.map} +1 -1
  188. package/{subsurface-fragment-BEaAXYXz.js → subsurface-fragment-DpKib445.js} +2 -2
  189. package/{subsurface-fragment-BEaAXYXz.js.map → subsurface-fragment-DpKib445.js.map} +1 -1
  190. package/{thin-instance-cull-binding-DWKUt5ZN.js → thin-instance-cull-binding-DwZi7mlE.js} +3 -3
  191. package/{thin-instance-cull-binding-DWKUt5ZN.js.map → thin-instance-cull-binding-DwZi7mlE.js.map} +1 -1
  192. package/{thin-instance-gpu-BDdRcNAh.js → thin-instance-gpu-uY2NOv0J.js} +2 -2
  193. package/{thin-instance-gpu-BDdRcNAh.js.map → thin-instance-gpu-uY2NOv0J.js.map} +1 -1
  194. package/{tracking-primitives-CglRNTlX.js → tracking-primitives-Ck5bgCuo.js} +2 -2
  195. package/{tracking-primitives-CglRNTlX.js.map → tracking-primitives-Ck5bgCuo.js.map} +1 -1
  196. package/{unlit-fragment-kxfZWlnp.js → unlit-fragment-nc6hu3Mw.js} +2 -2
  197. package/{unlit-fragment-kxfZWlnp.js.map → unlit-fragment-nc6hu3Mw.js.map} +1 -1
  198. package/gltf-ext-basisu-CDbPclzZ.js.map +0 -1
  199. package/index-CLElg2Bo.js.map +0 -1
  200. package/scene-material-swap-nNUH4nGn.js.map +0 -1
  201. package/shader-renderable-D7-RyVxa.js.map +0 -1
package/index.d.ts CHANGED
@@ -88,6 +88,27 @@ export declare function addFacingBillboardSystem(scene: SceneContext, system: Fa
88
88
  * (compute / copy / object-list) needs the same surface. */
89
89
  export declare function addPassDependencies(pass: Pass, deps: RenderTarget | readonly RenderTarget[]): void;
90
90
 
91
+ /**
92
+ * Adds a child shape to a container shape with an explicit local transform.
93
+ * @param world - The physics world.
94
+ * @param container - Parent container shape.
95
+ * @param child - Child shape to append.
96
+ * @param translation - Child translation in container space.
97
+ * @param rotation - Child rotation in container space.
98
+ * @param scale - Child scale in container space.
99
+ */
100
+ export declare function addPhysicsShapeChild(world: PhysicsWorld, container: PhysicsShape, child: PhysicsShape, translation?: Vec3, rotation?: Quat, scale?: Vec3): void;
101
+
102
+ /**
103
+ * Adds a child shape to a container, deriving its local transform from two scene nodes.
104
+ * @param world - The physics world.
105
+ * @param container - Parent container shape.
106
+ * @param parentNode - Scene node associated with the container shape.
107
+ * @param child - Child shape to append.
108
+ * @param childNode - Scene node associated with the child shape.
109
+ */
110
+ export declare function addPhysicsShapeChildFromParent(world: PhysicsWorld, container: PhysicsShape, parentNode: SceneNode, child: PhysicsShape, childNode: SceneNode): void;
111
+
91
112
  /** Create a `RenderPass`, wire it to the task currently recording, and return
92
113
  * it. Must be called from inside `Task.record()` so the FG can associate the
93
114
  * new pass with the right task (mirrors BJS `frameGraph.addRenderPass`).
@@ -347,6 +368,23 @@ declare type AnyMaterial = StandardMaterialProps | PbrMaterialProps;
347
368
  */
348
369
  export declare function appendSpriteAtlasFrames(engine: EngineContext, atlas: SpriteAtlas, sources: readonly SpriteAtlasFrameSource[]): number[];
349
370
 
371
+ /**
372
+ * Applies a force for one fixed physics timestep, matching Babylon.js PhysicsBody.applyForce.
373
+ * @param world - The physics world.
374
+ * @param body - The physics body to update.
375
+ * @param force - Force vector.
376
+ * @param location - World-space application point.
377
+ */
378
+ export declare function applyPhysicsBodyForce(world: PhysicsWorld, body: PhysicsBody, force: Vec3, location: Vec3): void;
379
+
380
+ /**
381
+ * Applies a world-space impulse to a physics body.
382
+ * @param body - The physics body to update.
383
+ * @param impulse - Impulse vector.
384
+ * @param location - World-space application point.
385
+ */
386
+ export declare function applyPhysicsBodyImpulse(body: PhysicsBody, impulse: Vec3, location: Vec3): void;
387
+
350
388
  /**
351
389
  * Apply a one-shot linear impulse (kg·m/s) to a body at a world `point` (defaults to the body's
352
390
  * current position / centre of mass), waking it if asleep. Used to shoot, throw, or shove a prop.
@@ -523,7 +561,9 @@ export declare function attachFreeControl(camera: FreeCamera, canvas: HTMLCanvas
523
561
  * - Left-drag: pan (the cursor stays anchored to the globe surface).
524
562
  * - Middle/right-drag: rotate (yaw + pitch / tilt).
525
563
  * - Wheel: zoom (toward the cursor by default).
526
- * - Keyboard: arrows = tilt, W/A/S/D = pan, +/- = zoom.
564
+ * - Touch: single-finger drag = pan; two-finger pinch = zoom toward the centroid,
565
+ * promoting to a pan once the centroid drifts ≥ 20 px.
566
+ * - Keyboard: arrows = pan, Ctrl+arrows = tilt (pitch/yaw), +/- = zoom along the look vector.
527
567
  *
528
568
  * Movement uses Babylon.js's framerate-independent physics model (velocity +
529
569
  * inertial decay). Globe picking is analytic ray-sphere against the planet
@@ -895,6 +935,45 @@ export declare const CAP_NONE = 0;
895
935
  /** Cap mode: close only the start of the tube/extrusion. */
896
936
  export declare const CAP_START = 1;
897
937
 
938
+ /**
939
+ * CreateCapsule — matches Babylon.js MeshBuilder.CreateCapsule default options.
940
+ *
941
+ * Generates a capsule (a cylinder capped by two hemispheres) or a "pill" when
942
+ * `radiusTop`/`radiusBottom` differ. Vertex/normal/UV generation and index
943
+ * winding are ported verbatim from `@babylonjs/core/Meshes/Builders/capsuleBuilder.js`
944
+ * to guarantee parity. The default Y-up orientation is used (the `orientation`
945
+ * remap of the Babylon builder is intentionally omitted to keep the API small).
946
+ */
947
+ /** Geometry buffers produced by {@link createCapsuleData}. */
948
+ export declare interface CapsuleData {
949
+ positions: Float32Array;
950
+ normals: Float32Array;
951
+ uvs: Float32Array;
952
+ indices: Uint32Array;
953
+ }
954
+
955
+ /** Options for `createCapsuleData`. Subset of Babylon's CreateCapsule. */
956
+ export declare interface CapsuleOptions {
957
+ /** Total height of the capsule including both caps. Default 1. */
958
+ height?: number;
959
+ /** Radius of the cylindrical body and both caps. Default 0.25. */
960
+ radius?: number;
961
+ /** Radius of the top cap; defaults to `radius`. */
962
+ radiusTop?: number;
963
+ /** Radius of the bottom cap; defaults to `radius`. */
964
+ radiusBottom?: number;
965
+ /** Number of radial segments around the capsule. Default 16. */
966
+ tessellation?: number;
967
+ /** Number of height segments along the cylindrical body. Default 2. */
968
+ subdivisions?: number;
969
+ /** Number of segments per cap; defaults applied to both caps. Default 6. */
970
+ capSubdivisions?: number;
971
+ /** Number of segments for the top cap; defaults to `capSubdivisions`. */
972
+ topCapSubdivisions?: number;
973
+ /** Number of segments for the bottom cap; defaults to `capSubdivisions`. */
974
+ bottomCapSubdivisions?: number;
975
+ }
976
+
898
977
  /**
899
978
  * Capture the current canvas backbuffer of a {@link SurfaceContext} — the final presented
900
979
  * frame (post-processing and all) with NO HTML/DOM overlay, since those are never drawn
@@ -1284,6 +1363,16 @@ export declare function createBox(engine: EngineContext, size?: number): Mesh;
1284
1363
  * Set the matching option to `false` to display only one of them. */
1285
1364
  export declare function createCameraGizmo(engine: EngineContext, layer: UtilityLayer, options?: CameraGizmoOptions): CameraGizmo;
1286
1365
 
1366
+ /** Create a capsule (cylinder capped by two hemispheres) mesh. Caller must assign material. */
1367
+ export declare function createCapsule(engine: EngineContext, options?: CapsuleOptions): Mesh;
1368
+
1369
+ /**
1370
+ * Build capsule geometry data.
1371
+ * @param options - Capsule dimensions and tessellation.
1372
+ * @returns Positions, normals, UVs, and indices for the capsule mesh.
1373
+ */
1374
+ export declare function createCapsuleData(options?: CapsuleOptions): CapsuleData;
1375
+
1287
1376
  /**
1288
1377
  * Create a post-process task that simulates chromatic aberration by shifting color channels outward from a center point.
1289
1378
  * @param config - Aberration parameters and source/target settings.
@@ -1555,6 +1644,15 @@ export declare function createGroundFromHeightMap(engine: EngineContext, url: st
1555
1644
  */
1556
1645
  export declare function createHavokWorld(scene: SceneContext, hknp: any, gravity?: Vec3): PhysicsWorld;
1557
1646
 
1647
+ /**
1648
+ * Create a Havok heightfield collision shape. Attach it to a STATIC body bound to the
1649
+ * ground mesh so the heightfield aligns with the visible terrain.
1650
+ * @param world - The physics world.
1651
+ * @param options - Ground mesh source or explicit heightfield parameters.
1652
+ * @returns The created shape handle.
1653
+ */
1654
+ export declare function createHeightFieldShape(world: PhysicsWorld, options: HeightFieldShapeOptions): PhysicsShape;
1655
+
1558
1656
  /** Create a hemispheric light. Returns plain data — caller adds to scene.
1559
1657
  * Matches Babylon.js HemisphericLight behavior. */
1560
1658
  export declare function createHemisphericLight(direction?: [number, number, number], intensity?: number): HemisphericLight;
@@ -1691,7 +1789,7 @@ export declare function createPcfSpotlightShadowGenerator(engine: EngineContext,
1691
1789
  /**
1692
1790
  * Create a physics aggregate: body + shape + material wired together.
1693
1791
  * `mass === 0` → STATIC, `mass > 0` → DYNAMIC.
1694
- * Shape geometry is auto-sized from the mesh bounding box when not specified.
1792
+ * Primitive shape geometry is auto-sized from the mesh bounding box when not specified.
1695
1793
  */
1696
1794
  export declare function createPhysicsAggregate(world: PhysicsWorld, node: Mesh, type: PhysicsShapeType, options: PhysicsAggregateOptions): PhysicsAggregate;
1697
1795
 
@@ -1706,13 +1804,27 @@ export declare function createPhysicsAggregate(world: PhysicsWorld, node: Mesh,
1706
1804
  export declare function createPhysicsBody(world: PhysicsWorld, node: SceneNode, motionType: PhysicsMotionType, startsAsleep?: boolean): PhysicsBody;
1707
1805
 
1708
1806
  /**
1709
- * Creates a collision shape (sphere, box, capsule, or cylinder) from the given options.
1807
+ * Creates and enables a Havok constraint between two physics bodies.
1808
+ * @param world - The physics world.
1809
+ * @param bodyA - Parent body.
1810
+ * @param bodyB - Child body.
1811
+ * @param type - Constraint type.
1812
+ * @param options - Pivot and axis options.
1813
+ * @param limits - Optional 6DoF limits.
1814
+ */
1815
+ export declare function createPhysicsConstraint(world: PhysicsWorld, bodyA: PhysicsBody, bodyB: PhysicsBody, type: PhysicsConstraintType, options?: PhysicsConstraintOptions, limits?: readonly PhysicsConstraintLimit[]): PhysicsConstraint;
1816
+
1817
+ /**
1818
+ * Creates a collision shape from the given options.
1710
1819
  * @param world - The physics world.
1711
1820
  * @param options - The shape type and its geometry parameters.
1712
1821
  * @returns The created shape handle.
1713
1822
  */
1714
1823
  export declare function createPhysicsShape(world: PhysicsWorld, options: PhysicsShapeOptions): PhysicsShape;
1715
1824
 
1825
+ /** Creates a tree-shakable Physics V2 debug viewer for a scene/world pair. */
1826
+ export declare function createPhysicsViewer(scene: SceneContext, world: PhysicsWorld, options?: PhysicsViewerOptions): PhysicsViewer;
1827
+
1716
1828
  /** Create a plane (unit quad facing -Z). Caller must assign material. */
1717
1829
  export declare function createPlane(engine: EngineContext, options?: PlaneOptions): Mesh;
1718
1830
 
@@ -2254,6 +2366,9 @@ export declare function disposeLightGizmo(gizmo: LightGizmo, layer: UtilityLayer
2254
2366
  */
2255
2367
  export declare function disposePhysics(world: PhysicsWorld): void;
2256
2368
 
2369
+ /** Disposes all physics debug meshes and unregisters the viewer update hook. */
2370
+ export declare function disposePhysicsViewer(viewer: PhysicsViewer): void;
2371
+
2257
2372
  /** Dispose GPU resources owned by this picker. */
2258
2373
  export declare function disposePicker(picker: GpuPicker): void;
2259
2374
 
@@ -2495,7 +2610,11 @@ export declare interface EngineContext extends SurfaceContext {
2495
2610
  * `createSurface(engine, canvas, ...)` to append more. */
2496
2611
  readonly surfaces: readonly [SurfaceContext, ...SurfaceContext[]];
2497
2612
  /** Number of GPU draw calls in the last rendered frame, summed across all surfaces. */
2498
2613
  drawCallCount: number;
2499
- /**
2614
+ /** GPU time spent on the last measured frame, in milliseconds — 0 until the first measured frame and
2615
+ * while GPU timing is disabled (the default). Enable with {@link setGpuTimingEnabled}; query device
2616
+ * capability with {@link isGpuTimingSupported}. Updates a frame or two behind, since the timestamp
2617
+ * readback is async and off the render critical path, so reading it does not perturb the value. */
2618
+ gpuFrameTimeMs: number;
2500
2619
  /**
2501
2620
  * When true, world matrices are computed using Float64 intermediate precision
2502
2621
  * and downcast to Float32 at GPU upload time. Defaults to false.
2503
2622
  */
@@ -3075,6 +3194,9 @@ export declare function getPickedUV(info: PickingInfo): [number, number] | null;
3075
3194
  /** Compute the projection matrix for a camera. Cached per worldMatrixVersion + aspect. */
3076
3195
  export declare function getProjectionMatrix(camera: Camera, aspectRatio: number): Mat4;
3077
3196
 
3197
+ /** Return the latest task GPU timing snapshot without stalling the GPU or CPU. */
3198
+ export declare function getRenderTaskGpuTimings(engine: EngineContext): RenderTaskGpuTimings;
3199
+
3078
3200
  /**
3079
3201
  * Resolves the current instance index of the sprite referenced by `handle`.
3080
3202
  * @param handle - Handle of the sprite to resolve.
@@ -3316,6 +3438,27 @@ declare interface HdrLoadOptions {
3316
3438
  skyboxSize?: number;
3317
3439
  }
3318
3440
 
3441
+ /** Options for {@link createHeightFieldShape}. */
3442
+ export declare interface HeightFieldShapeOptions {
3443
+ /**
3444
+ * Ground mesh whose world-space vertex grid defines the heightfield. When set, the
3445
+ * sample count, world size, and height data are derived from the mesh (the explicit
3446
+ * fields below are ignored). The mesh must be a regular `(N+1)×(N+1)` grid such as the
3447
+ * one produced by `createGroundFromHeightMap`.
3448
+ */
3449
+ groundMesh?: Mesh;
3450
+ /** Explicit: number of height samples along X. */
3451
+ numHeightFieldSamplesX?: number;
3452
+ /** Explicit: number of height samples along Z. */
3453
+ numHeightFieldSamplesZ?: number;
3454
+ /** Explicit: world-space size along X. */
3455
+ heightFieldSizeX?: number;
3456
+ /** Explicit: world-space size along Z. */
3457
+ heightFieldSizeZ?: number;
3458
+ /** Explicit: row-major height samples (`numHeightFieldSamplesX * numHeightFieldSamplesZ`). */
3459
+ heightFieldData?: Float32Array;
3460
+ }
3461
+
3319
3462
  export declare interface HemisphericLight extends LightBase {
3320
3463
  readonly lightType: "hemispheric";
3321
3464
  direction: ObservableVec3;
@@ -3325,6 +3468,9 @@ export declare interface HemisphericLight extends LightBase {
3325
3468
  groundColor: [number, number, number];
3326
3469
  }
3327
3470
 
3471
+ /** Hides a body that was previously shown with {@link showPhysicsBody}. */
3472
+ export declare function hidePhysicsBody(viewer: PhysicsViewer, body: PhysicsBody): boolean;
3473
+
3328
3474
  /** Image processing configuration. */
3329
3475
  export declare interface ImageProcessingConfig {
3330
3476
  exposure: number;
@@ -3408,6 +3554,14 @@ export declare function isGizmoInteracting(canvas: HTMLCanvasElement): boolean;
3408
3554
  * produces a stray orbit even if the async pick is slow. */
3409
3555
  export declare function isGizmoPickPending(canvas: HTMLCanvasElement): boolean;
3410
3556
 
3557
+ /** Whether GPU frame-time measurement is available on this engine's device — i.e. the adapter offered
3558
+ * the WebGPU `timestamp-query` feature (requested opportunistically by {@link createEngine}). When false,
3559
+ * {@link setGpuTimingEnabled} is a no-op and {@link EngineContext.gpuFrameTimeMs} stays 0. */
3560
+ export declare function isGpuTimingSupported(engine: EngineContext): boolean;
3561
+
3562
+ /** Whether per-render-task GPU timing can run on this engine's WebGPU device. */
3563
+ export declare function isRenderTaskGpuTimingSupported(engine: EngineContext): boolean;
3564
+
3411
3565
  /**
3412
3566
  * Returns `true` if the sprite referenced by `handle` is still present in its layer.
3413
3567
  * @param handle - Handle to test.
@@ -3781,7 +3935,9 @@ export declare interface Mesh extends SceneNode {
3781
3935
  thinInstances?: ThinInstanceData | null;
3782
3936
  /** When `false`, the GPU picker skips this mesh. Defaults to `true`
3783
3937
  * (undefined behaves as pickable). Mirrors BJS `AbstractMesh.isPickable`. */
3784
- pickable?: boolean;
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;
3785
3941
 
3786
3942
  /** Opaque GPU geometry handle (user never touches these). */
3787
3943
  export declare interface MeshGPU {
@@ -4181,6 +4337,16 @@ export declare function onBeforeRender(scene: SceneContext, cb: (deltaMs: number
4181
4337
  */
4182
4338
  export declare function onCsmReceiverUpdate(sg: ShadowGenerator, cb: (data: Float32Array) => void): () => void;
4183
4339
 
4340
+ /**
4341
+ * Registers a callback to run after each physics step, once dynamic body transforms have been
4342
+ * synced back to their nodes and before the frame is rendered. Use this for per-step logic that
4343
+ * must observe (or react to) the freshly-integrated state — e.g. tracking a marker to a body's
4344
+ * post-step pose, or applying a force whose effect should integrate on the next step.
4345
+ * @param world - The physics world to hook.
4346
+ * @param cb - Callback invoked with the world timestep (seconds) after each step.
4347
+ */
4348
+ export declare function onPhysicsAfterStep(world: PhysicsWorld, cb: (timestep: number) => void): void;
4349
+
4184
4350
  /** Register a callback to run when `disposeScene` is called. Used to tie
4185
4351
  * user-owned GPU resources (e.g. a `SpriteRenderer`) to the scene's lifetime. */
4186
4352
  export declare function onSceneDispose(scene: SceneContext, cb: () => void): void;
@@ -4382,12 +4548,91 @@ export declare interface PhysicsAggregateOptions {
4382
4548
  center?: Vec3;
4383
4549
  startAsleep?: boolean;
4384
4550
  isTriggerShape?: boolean;
4551
+ /**
4552
+ * Optional pre-built shape. When provided, it is used directly and the
4553
+ * primitive-shape build path is skipped. This lets callers supply
4554
+ * mesh/convex-hull shapes (built via `createPhysicsShape`) without pulling
4555
+ * the mesh-shape code into `createPhysicsAggregate` itself.
4556
+ */
4557
+ shape?: PhysicsShape;
4385
4558
  }
4386
4559
 
4387
4560
  /** Opaque handle to a Havok rigid body, bound to a scene node and a motion type. */
4388
4561
  export declare interface PhysicsBody {
4389
4562
  readonly node: SceneNode;
4390
4563
  readonly motionType: PhysicsMotionType;
4391
4564
 
4565
+ /** Opaque handle to a Havok constraint between two bodies. */
4566
+ export declare interface PhysicsConstraint {
4392
4567
  readonly bodyA: PhysicsBody;
4568
+ readonly bodyB: PhysicsBody;
4569
+ readonly type: PhysicsConstraintType;
4570
+ readonly options: PhysicsConstraintOptions;
4571
+ readonly limits?: readonly PhysicsConstraintLimit[];
4572
+ }
4573
+
4574
+ /** Axis addressed by a Physics V2 constraint limit. */
4575
+ export declare const enum PhysicsConstraintAxis {
4576
+ LINEAR_X = 0,
4577
+ LINEAR_Y = 1,
4578
+ LINEAR_Z = 2,
4579
+ ANGULAR_X = 3,
4580
+ ANGULAR_Y = 4,
4581
+ ANGULAR_Z = 5,
4582
+ LINEAR_DISTANCE = 6
4583
+ }
4584
+
4585
+ /** Minimal constraint debug data consumed by the Lite PhysicsViewer. */
4586
+ export declare interface PhysicsConstraintDebug {
4587
+ readonly bodyA: PhysicsBody;
4588
+ readonly bodyB: PhysicsBody;
4589
+ readonly pivotA: Vec3;
4590
+ readonly pivotB: Vec3;
4591
+ readonly axisA?: Vec3;
4592
+ readonly axisB?: Vec3;
4593
+ readonly perpAxisA?: Vec3;
4594
+ readonly perpAxisB?: Vec3;
4595
+ readonly type?: number;
4596
+ }
4597
+
4598
+ /** Limit options used by 6DoF constraints. */
4599
+ export declare interface PhysicsConstraintLimit {
4600
+ axis: PhysicsConstraintAxis;
4601
+ minLimit?: number;
4602
+ maxLimit?: number;
4603
+ stiffness?: number;
4604
+ damping?: number;
4605
+ }
4606
+
4607
+ /** Pivot/axis options used to create a physics constraint. */
4608
+ export declare interface PhysicsConstraintOptions {
4609
+ pivotA?: Vec3;
4610
+ pivotB?: Vec3;
4611
+ axisA?: Vec3;
4612
+ axisB?: Vec3;
4613
+ perpAxisA?: Vec3;
4614
+ perpAxisB?: Vec3;
4615
+ maxDistance?: number;
4616
+ collision?: boolean;
4617
+ }
4618
+
4619
+ /** Type of Havok Physics V2 constraint. */
4620
+ export declare const enum PhysicsConstraintType {
4621
+ BALL_AND_SOCKET = 1,
4622
+ DISTANCE = 2,
4623
+ HINGE = 3,
4624
+ SLIDER = 4,
4625
+ LOCK = 5,
4626
+ PRISMATIC = 6,
4627
+ SIX_DOF = 7
4628
+ }
4629
+
4630
+ /** Mass properties applied to a physics body. Omitted fields keep Havok's shape-derived values. */
4631
+ export declare interface PhysicsMassProperties {
4632
+ centerOfMass?: Vec3;
4633
+ mass?: number;
4634
+ inertia?: Vec3;
4635
+ inertiaOrientation?: Quat;
4636
+ }
4637
+
4393
4638
  /** How a body moves: `STATIC` (immovable), `ANIMATED` (driven by the node transform), or `DYNAMIC` (simulated). */
4394
4639
  export declare const enum PhysicsMotionType {
4395
4640
  STATIC = 0,
@@ -4402,6 +4647,10 @@ export declare interface PhysicsShape {
4402
4647
  export declare interface PhysicsShapeOptions {
4403
4648
  type: PhysicsShapeType;
4404
4649
  parameters?: PhysicsShapeParameters;
4650
+ /** Mesh or transform hierarchy used when `type` is `MESH` or `CONVEX_HULL`. */
4651
+ mesh?: SceneNode;
4652
+ /** When true, mesh and convex-hull shapes accumulate descendant meshes under `mesh`. */
4653
+ includeChildMeshes?: boolean;
4405
4654
  }
4406
4655
 
4407
4656
  /** Geometry parameters describing a collision shape; which fields apply depends on the shape type. */
@@ -4426,12 +4675,32 @@ export declare const enum PhysicsShapeType {
4426
4675
  HEIGHTFIELD = 7
4427
4676
  }
4428
4677
 
4678
+ /** Pure-state handle for Havok Physics V2 debug rendering. */
4679
+ export declare interface PhysicsViewer {
4680
+ readonly scene: SceneContext;
4681
+ readonly world: PhysicsWorld;
4682
+
4683
+ /** Options used when creating a physics debug viewer. */
4684
+ export declare interface PhysicsViewerOptions {
4685
+ /** RGBA debug line color. Defaults to opaque white, matching Babylon.js PhysicsViewer. */
4686
+ color?: readonly [number, number, number, number];
4687
+ }
4688
+
4429
4689
  /** Pure-state handle to a Havok physics world: the WASM module, the native world, its bodies, and the timestep. */
4430
4690
  export declare interface PhysicsWorld {
4431
4691
 
4432
4692
  /** Pick the mesh at CSS-space canvas coordinates, matching Babylon.js Scene.pick. Returns a PickingInfo. */
4433
4693
  export declare function pickAsync(picker: GpuPicker, x: number, y: number, options?: PickOptions): Promise<PickingInfo>;
4434
4694
 
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];
4702
+ }
4703
+
4435
4704
  /** Result of a GPU pick operation. */
4436
4705
  export declare interface PickingInfo {
4437
4706
  hit: boolean;
@@ -4461,6 +4730,8 @@ export declare interface PickOptions {
4461
4730
  * structure behind/around them. When omitted, every mesh is pickable (previous behaviour). Applied
4462
4731
  * identically to the id-assignment and id-resolve passes so ids stay consistent. */
4463
4732
  filter?: (mesh: Mesh) => boolean;
4733
+ /** Dev-only diagnostics: logs the pick ray, pixel, pick id/depth and resolved mesh. */
4734
+ debugLabel?: string;
4464
4735
  }
4465
4736
 
4466
4737
  /** Sampler and format overrides for `createTexture2DFromPixels()`. */
@@ -5145,13 +5416,46 @@ export declare interface RenderTaskConfig {
5145
5416
  /** Use canvas dimensions, not render-target dimensions, for this pass's scene UBO aspect. */
5146
5417
  cs?: boolean;
5147
5418
  /** Scene-texture transmission settings. `copyCount: 0` copies before every transmissive draw.
5148
- * `generateMipmaps: false` allocates only mip 0 for the refraction texture and skips mip generation. */
5419
+ * `generateMipmaps: false` allocates only mip 0 for the refraction texture and skips mip generation.
5420
+ * `mipLevelCount` caps the generated chain when a material only samples low explicit LODs. */
5149
5421
  transmission?: {
5150
5422
  copyCount?: number;
5151
5423
  generateMipmaps?: boolean;
5424
+ mipLevelCount?: number;
5152
5425
  };
5153
5426
  }
5154
5427
 
5428
+ /** GPU time measured for one frame-graph task in one rendered frame. */
5429
+ export declare interface RenderTaskGpuTiming {
5430
+ /** Execution-order index within the measured frame. Useful when several tasks share the same name. */
5431
+ readonly index: number;
5432
+ /** The task's existing frame-graph label (`Task.name`, e.g. `"shadow"`, `"scene"`, `"post-process"`). */
5433
+ readonly name: string;
5434
+ /** GPU duration for this task in milliseconds. */
5435
+ readonly durationMs: number;
5436
+ }
5437
+
5438
+ /** Latest per-task GPU timing snapshot for an engine. */
5439
+ export declare interface RenderTaskGpuTimings {
5440
+ /** `unsupported` when the WebGPU device lacks `timestamp-query`; `pending` until the first readback lands. */
5441
+ readonly status: RenderTaskGpuTimingStatus;
5442
+ /** Whether this engine's device exposes WebGPU timestamp queries. */
5443
+ readonly supported: boolean;
5444
+ /** Whether task timing is currently enabled and recording future frames. */
5445
+ readonly enabled: boolean;
5446
+ /** Monotonic profiler frame index for the snapshot. `0` means no measured frame has completed yet. */
5447
+ readonly frameIndex: number;
5448
+ /** Measured tasks in frame execution order. Empty until `status === "available"`. */
5449
+ readonly tasks: readonly RenderTaskGpuTiming[];
5450
+ /** Number of tasks skipped in that frame because the profiler's query-set capacity was exceeded. */
5451
+ readonly droppedTaskCount: number;
5452
+ /** Readback failure message when `status === "error"`. */
5453
+ readonly error?: string;
5454
+ }
5455
+
5456
+ /** Availability / lifecycle state for per-frame-graph-task GPU timings. */
5457
+ export declare type RenderTaskGpuTimingStatus = "unsupported" | "disabled" | "pending" | "available" | "error";
5458
+
5155
5459
  /** Sampler / format overrides for `createRenderTexture2D()`. */
5156
5460
  export declare interface RenderTexture2DOptions {
5157
5461
  /** Address mode U. Default 'clamp-to-edge'. */
@@ -5464,6 +5768,24 @@ export declare function setFog(scene: SceneContext, config: FogConfig): void;
5464
5768
  /** Set one or more orientation fields at once (single recompute). Omitted fields keep their value. */
5465
5769
  export declare function setGeospatialOrientation(camera: GeospatialCamera, orientation: GeospatialOrientation): void;
5466
5770
 
5771
+ /** Enable or disable per-frame GPU timing. Disabled by default and a no-op on devices where
5772
+ * {@link isGpuTimingSupported} is false. While on, {@link EngineContext.gpuFrameTimeMs} is updated each
5773
+ * frame with the measured GPU time — the time the GPU spends on that frame's work, not CPU/wall-clock
5774
+ * time — a frame or two behind via an async, non-blocking readback.
5775
+ *
5776
+ * Implementation: the timer module is dynamic-imported on the first enable, so engines that never call
5777
+ * this ship none of it. Once loaded, three tiny per-frame hooks are installed on the engine; while timing
5778
+ * is off they are undefined and {@link renderFrame} only optional-chains them (a no-op short-circuit), so
5779
+ * scenes that never enable timing pay effectively nothing. The opening/closing timestamps are written into
5780
+ * the frame's command encoder so the GPU runs them contiguously around just that frame's passes. The first
5781
+ * enable takes effect a microtask later (the GPU resources are created lazily, then reused); subsequent
5782
+ * toggles are synchronous. */
5783
+ export declare function setGpuTimingEnabled(engine: EngineContext, enabled: boolean): void;
5784
+
5785
+ /** Override the URL of the KTX2/Basis decoder script (and, optionally, the URLs of the WASM/JS transcoder
5786
+ * modules it pulls). Call before the first KHR_texture_basisu texture loads. */
5787
+ export declare function setKtx2DecoderUrl(url: string, wasmUrls?: Record<string, Record<string, string>>): void;
5788
+
5467
5789
  /** Raise (or lower) the maximum number of scene lights in the shared lights UBO.
5468
5790
  * Must be called BEFORE scene pipelines are compiled — existing pipelines
5469
5791
  * and UBOs bake the cap into their WGSL/layout. */
@@ -5509,6 +5831,14 @@ export declare function setPhysicsBodyLinearVelocity(world: PhysicsWorld, body:
5509
5831
  */
5510
5832
  export declare function setPhysicsBodyMass(world: PhysicsWorld, body: PhysicsBody, mass: number, centerOfMass?: Vec3): void;
5511
5833
 
5834
+ /**
5835
+ * Sets a body's mass properties, preserving Havok's shape-derived values for omitted fields.
5836
+ * @param world - The physics world.
5837
+ * @param body - The body to update.
5838
+ * @param properties - Mass-property overrides.
5839
+ */
5840
+ export declare function setPhysicsBodyMassProperties(world: PhysicsWorld, body: PhysicsBody, properties: PhysicsMassProperties): void;
5841
+
5512
5842
  /**
5513
5843
  * Switch a body's motion type at runtime (e.g. ANIMATED/kinematic while a prop is grabbed, then
5514
5844
  * DYNAMIC on release). Mutates `body.motionType` so the per-frame step syncs it the right way
@@ -5516,6 +5846,13 @@ export declare function setPhysicsBodyMass(world: PhysicsWorld, body: PhysicsBod
5516
5846
  */
5517
5847
  export declare function setPhysicsBodyMotionType(world: PhysicsWorld, body: PhysicsBody, motionType: PhysicsMotionType): void;
5518
5848
 
5849
+ /**
5850
+ * Enable or disable pre-step synchronization from a node transform to its Havok body.
5851
+ * @param body - The physics body to update.
5852
+ * @param enabled - When true, the node transform is written to Havok before each physics step.
5853
+ */
5854
+ export declare function setPhysicsBodyPreStep(body: PhysicsBody, enabled: boolean): void;
5855
+
5519
5856
  /**
5520
5857
  * Assigns a collision shape to a body.
5521
5858
  * @param world - The physics world.
@@ -5540,6 +5877,22 @@ export declare function setPhysicsBodyTransform(world: PhysicsWorld, body: Physi
5540
5877
  */
5541
5878
  export declare function setPhysicsGravity(world: PhysicsWorld, gravity: Vec3, worldPosition?: Vec3): void;
5542
5879
 
5880
+ /**
5881
+ * Sets the Havok filter collide mask for a collision shape.
5882
+ * @param world - The physics world.
5883
+ * @param shape - The shape to update.
5884
+ * @param collideMask - Bitmask describing which collision groups this shape collides with.
5885
+ */
5886
+ export declare function setPhysicsShapeFilterCollideMask(world: PhysicsWorld, shape: PhysicsShape, collideMask: number): void;
5887
+
5888
+ /**
5889
+ * Sets the Havok filter membership mask for a collision shape.
5890
+ * @param world - The physics world.
5891
+ * @param shape - The shape to update.
5892
+ * @param membershipMask - Bitmask describing which collision group this shape belongs to.
5893
+ */
5894
+ export declare function setPhysicsShapeFilterMembershipMask(world: PhysicsWorld, shape: PhysicsShape, membershipMask: number): void;
5895
+
5543
5896
  /**
5544
5897
  * Sets a shape's surface material properties.
5545
5898
  * @param world - The physics world.
@@ -5566,6 +5919,15 @@ export declare function setPhysicsVelocityLimits(world: PhysicsWorld, maxLinear:
5566
5919
 
5567
5920
  export declare function setPositionGizmoLocalCoordinates(gizmo: PositionGizmo, useLocal: boolean): void;
5568
5921
 
5922
+ /** Enable or disable per-frame-graph-task GPU timing.
5923
+ *
5924
+ * The profiling implementation is loaded with a dynamic import on first enable. Engines that never call this
5925
+ * function do not fetch the profiler chunk or carry task-timing code in the always-fetched frame graph.
5926
+ * The returned snapshot is `unsupported` if the device lacks WebGPU `timestamp-query`, `pending` immediately
5927
+ * after enable, and `available` once a later frame's async timestamp readback completes.
5928
+ */
5929
+ export declare function setRenderTaskGpuTimingEnabled(engine: EngineContext, enabled: boolean): Promise<RenderTaskGpuTimings>;
5930
+
5569
5931
  export declare function setRotationGizmoLocalCoordinates(gizmo: RotationGizmo, useLocal: boolean): void;
5570
5932
 
5571
5933
  /** Toggle local-coord mode on the per-axis scale arrows. The uniform-scale
@@ -5581,6 +5943,9 @@ export declare function setShaderFloat(material: ShaderMaterial, name: string, v
5581
5943
  * straight into a matrix uniform without laundering through a typed array. */
5582
5944
  export declare function setShaderMatrix(material: ShaderMaterial, name: string, value: Float32Array | Mat4): void;
5583
5945
 
5946
+ /** Bind (or clear) a declared read-only storage buffer. */
5947
+ export declare function setShaderStorageBuffer(material: ShaderMaterial, name: string, buffer: GPUBuffer | null): void;
5948
+
5584
5949
  /** Bind (or clear) the texture for a declared sampler, enforcing that depth and
5585
5950
  * non-depth samplers receive a matching `Texture2D`.
5586
5951
  * @param material - Target material.
@@ -5721,6 +6086,7 @@ export declare interface ShaderMaterial extends Material {
5721
6086
  readonly attributes: readonly ShaderAttributeName[];
5722
6087
  readonly uniformDecls: readonly ShaderUniformDecl[];
5723
6088
  readonly samplerDecls: readonly ShaderSamplerDecl[];
6089
+ readonly storageBufferDecls: readonly ShaderStorageBufferDecl[];
5724
6090
  readonly defines: readonly ShaderDefine[];
5725
6091
  readonly needAlphaBlending: boolean;
5726
6092
  readonly blendMode: "alpha" | "additive";
@@ -5730,6 +6096,7 @@ export declare interface ShaderMaterial extends Material {
5730
6096
  readonly backFaceCulling: boolean;
5731
6097
  readonly depthWrite: boolean;
5732
6098
  readonly depthCompare: GPUCompareFunction;
6099
+ readonly depthOnlyFragment: boolean;
5733
6100
  readonly depthBias: number;
5734
6101
  readonly depthBiasSlopeScale: number;
5735
6102
 
@@ -5742,6 +6109,7 @@ export declare interface ShaderMaterialOptions {
5742
6109
  readonly attributes: readonly ShaderAttributeName[];
5743
6110
  readonly uniforms?: readonly ShaderUniformOption[];
5744
6111
  readonly samplers?: readonly ShaderSamplerOption[];
6112
+ readonly storageBuffers?: readonly ShaderStorageBufferOption[];
5745
6113
  readonly defines?: ShaderDefineMap;
5746
6114
  readonly needAlphaBlending?: boolean;
5747
6115
  /** Blend equation used when `needAlphaBlending` is set. "alpha" (default) is
@@ -5759,6 +6127,10 @@ export declare interface ShaderMaterialOptions {
5759
6127
  readonly backFaceCulling?: boolean;
5760
6128
  readonly depthWrite?: boolean;
5761
6129
  readonly depthCompare?: GPUCompareFunction;
6130
+ /** Compile/run the fragment stage even for depth-only render targets (no colour attachments).
6131
+ * Use for depth-only casters that need `discard` (alpha/clip masks). The fragment shader must not
6132
+ * declare colour outputs when drawn into a depth-only target. Default false. */
6133
+ readonly depthOnlyFragment?: boolean;
5762
6134
  /** Constant depth-bias added in the pipeline's depth-stencil state (units of the depth format's minimum
5763
6135
  * representable value). Lets a surface that hugs another (e.g. tiles overlapping a cone, decals) win the
5764
6136
  * depth test consistently and avoid z-fighting. Default 0 (no bias). */
@@ -5798,6 +6170,15 @@ export declare interface ShaderSamplerDecl {
5798
6170
  /** A sampler entry: either a bare sampler name or an explicit declaration. */
5799
6171
  export declare type ShaderSamplerOption = string | ShaderSamplerDecl;
5800
6172
 
6173
+ /** A storage buffer declaration. `type` is the WGSL variable type, e.g. `array<vec4<f32>>`. */
6174
+ declare interface ShaderStorageBufferDecl {
6175
+ readonly name: string;
6176
+ readonly type: string;
6177
+ }
6178
+
6179
+ /** A storage-buffer entry: a read-only WGSL storage binding declaration. */
6180
+ declare type ShaderStorageBufferOption = ShaderStorageBufferDecl;
6181
+
5801
6182
  /** Built-in uniform names automatically populated by the renderer each frame
5802
6183
  * (transforms, camera position, screen size, alpha cutoff). */
5803
6184
  export declare type ShaderSystemUniformName = "world" | "view" | "projection" | "viewProjection" | "worldView" | "worldViewProjection" | "cameraPosition" | "screenSize" | "alphaCutoff";
@@ -5826,6 +6207,91 @@ export declare interface ShadowTask extends Task {
5826
6207
  readonly name: "shadow";
5827
6208
  }
5828
6209
 
6210
+ /**
6211
+ * Sweep a shape from `startPosition` to `endPosition` (orientation fixed) and return the
6212
+ * first body it hits.
6213
+ *
6214
+ * `hitPoint` is the world-space contact point on the hit body; `fraction` is where along
6215
+ * the sweep contact first occurs. Run at least one physics step first so the broadphase exists.
6216
+ * @param world - The physics world to query.
6217
+ * @param query - Swept shape, orientation, and start/end positions.
6218
+ * @returns The cast result; `hasHit` is `false` when the sweep clears every body.
6219
+ */
6220
+ export declare function shapeCast(world: PhysicsWorld, query: ShapeCastQuery): ShapeCastResult;
6221
+
6222
+ /** Query parameters for {@link shapeCast}. */
6223
+ export declare interface ShapeCastQuery {
6224
+ /** Shape to sweep through the world. */
6225
+ shape: PhysicsShape;
6226
+ /** World-space orientation held constant during the sweep. */
6227
+ rotation: Quat;
6228
+ /** World-space sweep start position. */
6229
+ startPosition: Vec3;
6230
+ /** World-space sweep end position. */
6231
+ endPosition: Vec3;
6232
+ /** Whether trigger volumes count as hits. Default `false`. */
6233
+ shouldHitTriggers?: boolean;
6234
+ }
6235
+
6236
+ /** Result of a {@link shapeCast} query. */
6237
+ export declare interface ShapeCastResult {
6238
+ /** Whether the swept shape hit a body. */
6239
+ hasHit: boolean;
6240
+ /** Fraction along the sweep (`startPosition`→`endPosition`) where contact first occurs. */
6241
+ fraction: number;
6242
+ /** Contact point on the swept shape (query-shape space). */
6243
+ inputHitPoint: Vec3;
6244
+ /** Contact point on the hit body (world space). */
6245
+ hitPoint: Vec3;
6246
+ /** Surface normal at the swept-shape contact. */
6247
+ inputHitNormal: Vec3;
6248
+ /** Surface normal at the hit-body contact. */
6249
+ hitNormal: Vec3;
6250
+ }
6251
+
6252
+ /**
6253
+ * Find the closest point between a query shape and the nearest body in the world.
6254
+ *
6255
+ * The query shape is positioned at `position`/`rotation` and tested against the world's
6256
+ * broadphase. When a body is found within `maxDistance`, `inputHitPoint` is the closest
6257
+ * point on the query shape and `hitPoint` is the closest point on the hit body (world
6258
+ * space). Run at least one physics step first so the broadphase exists.
6259
+ * @param world - The physics world to query.
6260
+ * @param query - Query shape, transform, and search distance.
6261
+ * @returns The proximity result; `hasHit` is `false` when nothing is within range.
6262
+ */
6263
+ export declare function shapeProximity(world: PhysicsWorld, query: ShapeProximityQuery): ShapeProximityResult;
6264
+
6265
+ /** Query parameters for {@link shapeProximity}. */
6266
+ export declare interface ShapeProximityQuery {
6267
+ /** Shape to test for proximity. */
6268
+ shape: PhysicsShape;
6269
+ /** World-space position of the query shape. */
6270
+ position: Vec3;
6271
+ /** World-space orientation of the query shape. */
6272
+ rotation: Quat;
6273
+ /** Maximum distance to search for a nearby body. */
6274
+ maxDistance: number;
6275
+ /** Whether trigger volumes count as hits. Default `false`. */
6276
+ shouldHitTriggers?: boolean;
6277
+ }
6278
+
6279
+ /** Result of a {@link shapeProximity} query. */
6280
+ export declare interface ShapeProximityResult {
6281
+ /** Whether a body was found within `maxDistance`. */
6282
+ hasHit: boolean;
6283
+ /** Distance between the closest points. */
6284
+ distance: number;
6285
+ /** Closest point on the query shape (query-shape local space in a zero-offset world). */
6286
+ inputHitPoint: Vec3;
6287
+ /** Closest point on the hit body (world space). */
6288
+ hitPoint: Vec3;
6289
+ /** Surface normal at the query-shape closest point. */
6290
+ inputHitNormal: Vec3;
6291
+ /** Surface normal at the hit-body closest point. */
6292
+ hitNormal: Vec3;
6293
+ }
6294
+
5829
6295
  /** Sheen layer properties. Maps to BJS PBRMaterial.sheen sub-object. */
5830
6296
  declare interface SheenProps {
5831
6297
  /** Whether sheen is active. Default false. */
@@ -5845,6 +6311,12 @@ declare interface SheenProps {
5845
6311
  albedoScaling?: boolean;
5846
6312
  }
5847
6313
 
6314
+ /** Shows a Havok Physics V2 body as a wireframe debug mesh. */
6315
+ export declare function showPhysicsBody(viewer: PhysicsViewer, body: PhysicsBody): Mesh | null;
6316
+
6317
+ /** Shows a simplified Physics V2 constraint overlay: local axes (with arrowheads) plus angular-limit disks. */
6318
+ export declare function showPhysicsConstraint(viewer: PhysicsViewer, constraint: PhysicsConstraintDebug): Mesh[];
6319
+
5848
6320
  /** Connects a skeleton to its GPU bone texture for per-frame updates. */
5849
6321
  declare interface SkeletonBinding {
5850
6322
  readonly jointNodes: readonly number[];
@@ -6720,6 +7192,14 @@ export declare interface TransmissionOptions {
6720
7192
  * stack) and just need the opaque scene color exposed to a custom transmissive
6721
7193
  * `ShaderMaterial`. */
6722
7194
  linear?: boolean;
7195
+ /** Override how many times the scene-colour grab is refreshed per frame. `0` means before every
7196
+ * transmissive draw; the default is once before the first transmissive draw. */
7197
+ copyCount?: number;
7198
+ /** Set false when the transmissive material never samples the scene-colour grab above mip 0. */
7199
+ generateMipmaps?: boolean;
7200
+ /** Cap the scene-colour grab mip chain. Use this when the material samples explicit low LODs only, so
7201
+ * unused tiny mips are not regenerated every frame. Ignored when `generateMipmaps` is false. */
7202
+ mipLevelCount?: number;
6723
7203
  }
6724
7204
 
6725
7205
  /** Options for `createTubeData`: a circular cross-section swept along a path. */