@woosh/meep-engine 3.38.0 → 3.39.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 (962) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/binary/BinaryBuffer.d.ts +11 -0
  5. package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
  6. package/src/core/binary/BinaryBuffer.js +30 -0
  7. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts.map +1 -1
  8. package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js +28 -7
  9. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +15 -0
  10. package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
  11. package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +41 -0
  12. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts +12 -0
  13. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -1
  14. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +27 -0
  15. package/src/core/geom/3d/gjk/gjk.js +3 -3
  16. package/src/core/geom/3d/gjk/gjk_distance.d.ts +94 -0
  17. package/src/core/geom/3d/gjk/gjk_distance.d.ts.map +1 -0
  18. package/src/core/geom/3d/gjk/gjk_distance.js +782 -0
  19. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts +5 -4
  20. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  21. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +14 -9
  22. package/src/core/geom/3d/gjk/minkowski_support.d.ts +11 -7
  23. package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -1
  24. package/src/core/geom/3d/gjk/minkowski_support.js +33 -9
  25. package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -1
  26. package/src/core/geom/3d/gjk/mpr.js +26 -5
  27. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +15 -0
  28. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts.map +1 -1
  29. package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +106 -33
  30. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts +2 -1
  31. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts.map +1 -1
  32. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +4 -8
  33. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts +32 -0
  34. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts.map +1 -0
  35. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.js +85 -0
  36. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts +3 -3
  37. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts.map +1 -1
  38. package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +24 -34
  39. package/src/core/geom/3d/quaternion/quat3_integrate.d.ts +17 -0
  40. package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -1
  41. package/src/core/geom/3d/quaternion/quat3_integrate.js +45 -4
  42. package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +16 -0
  43. package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
  44. package/src/core/geom/3d/quaternion/quat3_multiply.js +25 -0
  45. package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts +18 -0
  46. package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts.map +1 -1
  47. package/src/core/geom/3d/quaternion/quat3_nlerp.js +45 -0
  48. package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts +17 -0
  49. package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts.map +1 -1
  50. package/src/core/geom/3d/quaternion/quat3_shortest_arc.js +155 -94
  51. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +12 -0
  52. package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -1
  53. package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +31 -0
  54. package/src/core/geom/3d/shape/AbstractShape3D.d.ts +20 -6
  55. package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
  56. package/src/core/geom/3d/shape/AbstractShape3D.js +20 -6
  57. package/src/core/geom/3d/shape/BoxShape3D.d.ts +1 -1
  58. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
  59. package/src/core/geom/3d/shape/BoxShape3D.js +5 -1
  60. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +1 -1
  61. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  62. package/src/core/geom/3d/shape/CapsuleShape3D.js +5 -1
  63. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +25 -11
  64. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  65. package/src/core/geom/3d/shape/ConvexHullShape3D.js +392 -22
  66. package/src/core/geom/3d/shape/CylinderShape3D.d.ts +8 -7
  67. package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
  68. package/src/core/geom/3d/shape/CylinderShape3D.js +12 -7
  69. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +51 -8
  70. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  71. package/src/core/geom/3d/shape/HeightMapShape3D.js +260 -14
  72. package/src/core/geom/3d/shape/MeshShape3D.d.ts +61 -7
  73. package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
  74. package/src/core/geom/3d/shape/MeshShape3D.js +111 -20
  75. package/src/core/geom/3d/shape/PointShape3D.d.ts +1 -1
  76. package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -1
  77. package/src/core/geom/3d/shape/PointShape3D.js +1 -1
  78. package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
  79. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  80. package/src/core/geom/3d/shape/PosedShape3D.js +36 -6
  81. package/src/core/geom/3d/shape/SphereShape3D.d.ts +1 -1
  82. package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
  83. package/src/core/geom/3d/shape/SphereShape3D.js +5 -1
  84. package/src/core/geom/3d/shape/TransformedShape3D.d.ts +12 -10
  85. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  86. package/src/core/geom/3d/shape/TransformedShape3D.js +53 -19
  87. package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
  88. package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
  89. package/src/core/geom/3d/shape/Triangle3D.js +5 -1
  90. package/src/core/geom/3d/shape/UnionShape3D.d.ts +1 -1
  91. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  92. package/src/core/geom/3d/shape/UnionShape3D.js +19 -2
  93. package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts +14 -0
  94. package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts.map +1 -1
  95. package/src/core/geom/3d/shape/sdf/sdf3_box.js +67 -5
  96. package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts +14 -0
  97. package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts.map +1 -1
  98. package/src/core/geom/3d/shape/sdf/sdf3_capsule.js +61 -3
  99. package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts +14 -0
  100. package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts.map +1 -1
  101. package/src/core/geom/3d/shape/sdf/sdf3_cylinder.js +63 -4
  102. package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts +15 -0
  103. package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts.map +1 -1
  104. package/src/core/geom/3d/shape/sdf/sdf3_plane.js +64 -2
  105. package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts +21 -0
  106. package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts.map +1 -1
  107. package/src/core/geom/3d/shape/sdf/sdf3_sphere.js +66 -3
  108. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts +2 -0
  109. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts.map +1 -1
  110. package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +7 -0
  111. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts +41 -0
  112. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -0
  113. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +538 -0
  114. package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts +31 -0
  115. package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts.map +1 -0
  116. package/src/core/geom/3d/sphere/harmonics/sh_basis_at.js +85 -0
  117. package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts +18 -0
  118. package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts.map +1 -0
  119. package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.js +19 -0
  120. package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts +49 -0
  121. package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts.map +1 -0
  122. package/src/core/geom/3d/triangle/TriangleEdgeFlags.js +55 -0
  123. package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts +42 -0
  124. package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts.map +1 -0
  125. package/src/core/geom/3d/triangle/tri3_classify_shared_edge.js +85 -0
  126. package/src/core/geom/3d/triangle/tri3_closest_point.d.ts +13 -0
  127. package/src/core/geom/3d/triangle/tri3_closest_point.d.ts.map +1 -1
  128. package/src/core/geom/3d/triangle/tri3_closest_point.js +36 -1
  129. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts +14 -0
  130. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -1
  131. package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +40 -0
  132. package/src/core/geom/vec3/v3_quaternion_apply.d.ts +19 -0
  133. package/src/core/geom/vec3/v3_quaternion_apply.d.ts.map +1 -1
  134. package/src/core/geom/vec3/v3_quaternion_apply.js +32 -0
  135. package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +19 -0
  136. package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts.map +1 -1
  137. package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +32 -0
  138. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +135 -10
  139. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  140. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +338 -105
  141. package/src/engine/control/first-person/abilities/Ability.d.ts +14 -5
  142. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -1
  143. package/src/engine/control/first-person/abilities/Ability.js +14 -5
  144. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  145. package/src/engine/control/first-person/abilities/LedgeGrab.js +16 -12
  146. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
  147. package/src/engine/control/first-person/abilities/Mantle.js +5 -1
  148. package/src/engine/control/first-person/abilities/Slide.js +1 -1
  149. package/src/engine/control/first-person/collision/KinematicMover.d.ts +92 -14
  150. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  151. package/src/engine/control/first-person/collision/KinematicMover.js +218 -37
  152. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +5 -0
  153. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  154. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +17 -10
  155. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  156. package/src/engine/ecs/EntityComponentDataset.js +27 -13
  157. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  158. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
  159. package/src/engine/ecs/transform/Transform64.d.ts +4 -2
  160. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  161. package/src/engine/ecs/transform/Transform64.js +10 -16
  162. package/src/engine/graphics/ecs/water/Water.d.ts +25 -63
  163. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  164. package/src/engine/graphics/ecs/water/Water.js +110 -125
  165. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  166. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -74
  167. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +1 -1
  168. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -1
  169. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -18
  170. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
  171. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
  172. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
  173. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +33 -0
  174. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -0
  175. package/src/engine/graphics/ecs/water/WaterWaves.js +46 -0
  176. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts +17 -0
  177. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -0
  178. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +26 -0
  179. package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts +22 -0
  180. package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts.map +1 -1
  181. package/src/engine/graphics/texture/3d/scs3d_sample_linear.js +43 -1
  182. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +29 -3
  183. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  184. package/src/engine/graphics/texture/sampler/Sampler2D.js +102 -14
  185. package/src/engine/graphics3/WaterSystem.d.ts +39 -3
  186. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  187. package/src/engine/graphics3/WaterSystem.js +134 -25
  188. package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
  189. package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
  190. package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
  191. package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
  192. package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
  193. package/src/engine/interpolation/InterpolationLog.js +12 -6
  194. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  195. package/src/engine/interpolation/InterpolationSystem.js +39 -8
  196. package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
  197. package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
  198. package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
  199. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
  200. package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
  201. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
  202. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
  203. package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
  204. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
  205. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
  206. package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
  207. package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
  208. package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
  209. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  210. package/src/engine/physics/body/SolverBodyState.js +4 -5
  211. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
  212. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  213. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
  214. package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
  215. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  216. package/src/engine/physics/ccd/linear_sweep.js +1131 -97
  217. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -0
  218. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  219. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +90 -22
  220. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +84 -24
  221. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
  222. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
  224. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  225. package/src/engine/physics/cloth/ecs/ClothWorld.js +59 -47
  226. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  227. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +62 -55
  228. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  229. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
  230. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  231. package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
  232. package/src/engine/physics/cloth/playground/garment_build.js +6 -6
  233. package/src/engine/physics/cloth/playground/garment_main.js +18 -14
  234. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
  236. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
  238. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  239. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
  240. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
  241. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
  242. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
  243. package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
  244. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  245. package/src/engine/physics/constraint/solve_constraints.js +703 -429
  246. package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
  247. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  248. package/src/engine/physics/contact/ManifoldStore.js +32 -0
  249. package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
  250. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
  251. package/src/engine/physics/ecs/BodyKind.js +16 -8
  252. package/src/engine/physics/ecs/Collider.d.ts +7 -2
  253. package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
  254. package/src/engine/physics/ecs/Collider.js +7 -2
  255. package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
  256. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
  257. package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
  258. package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
  259. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  260. package/src/engine/physics/ecs/PhysicsSystem.js +779 -81
  261. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  262. package/src/engine/physics/fluid/FluidField.js +5 -1
  263. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
  264. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  265. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
  266. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
  267. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
  268. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  269. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
  270. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  271. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
  272. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
  273. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
  274. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
  275. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
  276. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
  277. package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
  278. package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
  279. package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
  280. package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
  281. package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
  282. package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
  283. package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
  284. package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
  285. package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
  286. package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
  287. package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
  288. package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
  289. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
  290. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
  291. package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
  292. package/src/engine/physics/integration/integrate_position.d.ts +18 -19
  293. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
  294. package/src/engine/physics/integration/integrate_position.js +40 -37
  295. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
  296. package/src/engine/physics/integration/integrate_velocity.js +13 -4
  297. package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
  298. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  299. package/src/engine/physics/island/IslandBuilder.js +322 -19
  300. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
  301. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  302. package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
  303. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
  304. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  305. package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
  306. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
  307. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  308. package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
  309. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
  310. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
  311. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
  312. package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
  313. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
  314. package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
  315. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
  316. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  317. package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
  318. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
  319. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
  320. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
  321. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
  322. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
  323. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
  324. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
  325. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
  326. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
  327. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
  328. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  329. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
  330. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
  331. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
  332. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
  333. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
  334. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
  335. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
  336. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
  337. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
  338. package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
  339. package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
  340. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
  341. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
  342. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
  343. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
  344. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  345. package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
  346. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
  347. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
  348. package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
  349. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
  350. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  351. package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
  352. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
  353. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  354. package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
  355. package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
  356. package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
  357. package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
  358. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
  359. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  360. package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
  361. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
  362. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
  363. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
  364. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
  365. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
  366. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
  367. package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
  368. package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
  369. package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
  370. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
  371. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
  372. package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
  373. package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
  374. package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
  375. package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
  376. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  377. package/src/engine/physics/queries/overlap_shape.js +57 -79
  378. package/src/engine/physics/queries/raycast.d.ts +10 -4
  379. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  380. package/src/engine/physics/queries/raycast.js +133 -9
  381. package/src/engine/physics/queries/shape_cast.d.ts +55 -24
  382. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  383. package/src/engine/physics/queries/shape_cast.js +2061 -245
  384. package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
  385. package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
  386. package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
  387. package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
  388. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  389. package/src/engine/physics/solver/solve_contacts.js +458 -234
  390. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  391. package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
  392. package/src/shade/assets/textures/split_sum.bin +0 -0
  393. package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
  394. package/src/shade/device/mock/SoftwareGPUQueue.js +2 -1
  395. package/src/shade/playground/path_traced_media/README.md +78 -0
  396. package/src/shade/playground/path_traced_media/capture_radiance.d.ts +33 -0
  397. package/src/shade/playground/path_traced_media/capture_radiance.d.ts.map +1 -0
  398. package/src/shade/playground/path_traced_media/capture_radiance.js +174 -0
  399. package/src/shade/playground/path_traced_media/checks.d.ts +160 -0
  400. package/src/shade/playground/path_traced_media/checks.d.ts.map +1 -0
  401. package/src/shade/playground/path_traced_media/checks.js +921 -0
  402. package/src/shade/playground/path_traced_media/index.html +71 -0
  403. package/src/shade/playground/path_traced_media/main.d.ts +2 -0
  404. package/src/shade/playground/path_traced_media/main.d.ts.map +1 -0
  405. package/src/shade/playground/path_traced_media/main.js +440 -0
  406. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts +26 -0
  407. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts.map +1 -0
  408. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.js +117 -0
  409. package/src/shade/playground/path_traced_media/views.d.ts +21 -0
  410. package/src/shade/playground/path_traced_media/views.d.ts.map +1 -0
  411. package/src/shade/playground/path_traced_media/views.js +161 -0
  412. package/src/shade/playground/sh_exponential/README.md +43 -0
  413. package/src/shade/playground/sh_exponential/index.html +59 -0
  414. package/src/shade/playground/sh_exponential/main.d.ts +2 -0
  415. package/src/shade/playground/sh_exponential/main.d.ts.map +1 -0
  416. package/src/shade/playground/sh_exponential/main.js +571 -0
  417. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts +46 -0
  418. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -0
  419. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +270 -0
  420. package/src/shade/playground/water_refraction/README.md +24 -15
  421. package/src/shade/playground/water_refraction/index.html +6 -8
  422. package/src/shade/playground/water_refraction/main.js +12 -11
  423. package/src/shade/playground/water_refraction/world.d.ts +2 -0
  424. package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
  425. package/src/shade/playground/water_refraction/world.js +8 -4
  426. package/src/shade/renderer/Renderer.d.ts +2 -0
  427. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  428. package/src/shade/renderer/Renderer.js +23 -0
  429. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  430. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +9 -1
  431. package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.d.ts.map +1 -1
  432. package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.js +6 -4
  433. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  434. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  435. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts +7 -0
  436. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts.map +1 -1
  437. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.js +12 -12
  438. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts +4 -0
  439. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts.map +1 -1
  440. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.js +13 -9
  441. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  442. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +2 -0
  443. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  444. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
  445. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  446. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -9
  447. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  448. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +20 -10
  449. package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts +2 -1
  450. package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts.map +1 -1
  451. package/src/shade/renderer/light/environment/rgbe/load_environment_map.js +2 -1
  452. package/src/shade/renderer/light/environment/sh_exponential/README.md +171 -0
  453. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts +170 -0
  454. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts.map +1 -0
  455. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.js +377 -0
  456. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts +16 -0
  457. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts.map +1 -0
  458. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.js +27 -0
  459. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts +21 -0
  460. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -0
  461. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +53 -0
  462. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts +33 -0
  463. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts.map +1 -0
  464. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.js +90 -0
  465. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts +28 -0
  466. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts.map +1 -0
  467. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.js +92 -0
  468. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts +39 -0
  469. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts.map +1 -0
  470. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.js +44 -0
  471. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts +42 -0
  472. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts.map +1 -0
  473. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.js +123 -0
  474. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +30 -0
  475. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -0
  476. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +147 -0
  477. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts +24 -0
  478. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -0
  479. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +79 -0
  480. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts +17 -0
  481. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -0
  482. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +99 -0
  483. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts +24 -0
  484. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -0
  485. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +104 -0
  486. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts +12 -0
  487. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -0
  488. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +93 -0
  489. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  490. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  491. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  492. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
  493. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  494. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
  495. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  496. package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts +1 -1
  497. package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts.map +1 -1
  498. package/src/shade/renderer/material/StandardShadeMaterial.d.ts +15 -0
  499. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  500. package/src/shade/renderer/material/StandardShadeMaterial.js +17 -0
  501. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +36 -2
  502. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  503. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +218 -18
  504. package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.d.ts.map +1 -1
  505. package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.js +10 -0
  506. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts +17 -0
  507. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts.map +1 -0
  508. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.js +24 -0
  509. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts +24 -0
  510. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts.map +1 -0
  511. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.js +18 -0
  512. package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts +20 -0
  513. package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts.map +1 -0
  514. package/src/shade/renderer/medium/MEDIUM_STRUCT.js +43 -0
  515. package/src/shade/renderer/medium/ParticipatingMedium.d.ts +108 -0
  516. package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
  517. package/src/shade/renderer/medium/ParticipatingMedium.js +204 -0
  518. package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
  519. package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
  520. package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
  521. package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
  522. package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
  523. package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
  524. package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
  525. package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
  526. package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
  527. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
  528. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
  529. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
  530. package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
  531. package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
  532. package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
  533. package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
  534. package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
  535. package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
  536. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
  537. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
  538. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
  539. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
  540. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
  541. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
  542. package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
  543. package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
  544. package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
  545. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
  546. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
  547. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
  548. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
  549. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
  550. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
  551. package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
  552. package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
  553. package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
  554. package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
  555. package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
  556. package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
  557. package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
  558. package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
  559. package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
  560. package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
  561. package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
  562. package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
  563. package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
  564. package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
  565. package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
  566. package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
  567. package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
  568. package/src/shade/renderer/medium/water/water_presets.js +119 -0
  569. package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
  570. package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
  571. package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
  572. package/src/shade/renderer/particles/DESIGN.md +4 -2
  573. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
  574. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
  575. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
  576. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  577. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
  578. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
  579. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
  580. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
  581. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  582. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  583. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  584. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
  585. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  586. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
  587. package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
  588. package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
  589. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
  590. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
  591. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
  592. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
  593. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  594. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
  595. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  596. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
  597. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
  598. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
  599. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
  600. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
  601. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
  602. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
  603. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
  604. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
  605. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
  606. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
  607. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
  608. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
  609. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
  610. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
  611. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
  612. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
  613. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
  614. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
  615. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
  616. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
  617. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
  618. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
  619. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
  620. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
  621. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
  622. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
  623. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
  624. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
  625. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
  626. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
  627. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
  628. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
  629. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
  630. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
  631. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
  632. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
  633. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
  634. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
  635. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
  636. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
  637. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
  638. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
  639. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  640. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
  641. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +85 -84
  642. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +8 -0
  643. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -1
  644. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +9 -0
  645. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +12 -2
  646. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  647. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +12 -3
  648. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
  649. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
  650. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
  651. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
  652. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
  653. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  654. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
  655. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
  656. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
  657. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
  658. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
  659. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
  660. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
  661. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
  662. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
  663. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
  664. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
  665. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
  666. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
  667. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
  668. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
  669. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
  670. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
  671. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
  672. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
  673. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
  674. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
  675. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
  676. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  677. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -1
  678. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
  679. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
  680. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  681. package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
  682. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
  683. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +5 -0
  684. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
  685. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
  686. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
  687. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
  688. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
  689. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
  690. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
  691. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
  692. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
  693. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
  694. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
  695. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
  696. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
  697. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
  698. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
  699. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
  700. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
  701. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
  702. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
  703. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
  704. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
  705. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
  706. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
  707. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
  708. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
  709. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
  710. package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
  711. package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
  712. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
  713. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
  714. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
  715. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
  716. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
  717. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
  718. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
  719. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
  720. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
  721. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
  722. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
  723. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
  724. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
  725. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
  726. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
  727. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
  728. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
  729. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
  730. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
  731. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
  732. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
  733. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -1
  734. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +71 -37
  735. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
  736. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
  737. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
  738. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
  739. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
  740. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
  741. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
  742. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
  743. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
  744. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
  745. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
  746. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
  747. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
  748. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
  749. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
  750. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
  751. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
  752. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
  753. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
  754. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
  755. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
  756. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
  757. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
  758. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
  759. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
  760. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
  761. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
  762. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
  763. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
  764. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
  765. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
  766. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
  767. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
  768. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
  769. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
  770. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
  771. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
  772. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
  773. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
  774. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
  775. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
  776. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
  777. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
  778. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
  779. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
  780. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
  781. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
  782. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
  783. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
  784. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
  785. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
  786. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
  787. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
  788. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
  789. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
  790. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
  791. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
  792. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
  793. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
  794. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
  795. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
  796. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
  797. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
  798. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
  799. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
  800. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
  801. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
  802. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
  803. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
  804. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +7 -7
  805. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +7 -7
  806. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +42 -10
  807. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  808. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +104 -48
  809. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +20 -4
  810. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  811. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +186 -74
  812. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +2 -1
  813. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  814. package/src/shade/renderer/shadow/map/Shadowmap.js +2 -1
  815. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts +30 -0
  816. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts.map +1 -0
  817. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.js +52 -0
  818. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +14 -0
  819. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +1 -0
  820. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +20 -0
  821. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts +8 -0
  822. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts.map +1 -0
  823. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js +7 -0
  824. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +8 -6
  825. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
  826. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +28 -34
  827. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts +3 -2
  828. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts.map +1 -1
  829. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.js +19 -14
  830. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +4 -3
  831. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  832. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +12 -7
  833. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +4 -4
  834. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +4 -4
  835. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
  836. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +39 -17
  837. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +1 -1
  838. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +5 -36
  839. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +1 -1
  840. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +3 -2
  841. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +1 -1
  842. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  843. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +49 -35
  844. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +4 -1
  845. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +1 -1
  846. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +8 -9
  847. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +2 -2
  848. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +1 -1
  849. package/src/shade/renderer/shadow/vsm/decode_tile_address.js +15 -23
  850. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +1 -1
  851. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +6 -9
  852. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +1 -1
  853. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +19 -9
  854. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +1 -1
  855. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +18 -6
  856. package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts +1 -1
  857. package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts.map +1 -1
  858. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts +18 -1
  859. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts.map +1 -1
  860. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.js +24 -3
  861. package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts +1 -1
  862. package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts.map +1 -1
  863. package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts +0 -1
  864. package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts.map +1 -1
  865. package/src/shade/renderer/texture/util/get_single_pixel_texture.js +2 -23
  866. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts +11 -0
  867. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts.map +1 -0
  868. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.js +34 -0
  869. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +17 -8
  870. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  871. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +35 -64
  872. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +21 -0
  873. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -0
  874. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +70 -0
  875. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts +31 -0
  876. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts.map +1 -0
  877. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.js +86 -0
  878. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  879. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  880. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  881. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +6 -7
  882. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +7 -7
  883. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +13 -1
  884. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  885. package/src/shade/renderer/water/GPUWaterRenderer.js +74 -25
  886. package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
  887. package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
  888. package/src/shade/renderer/water/chunk_water_gi.js +56 -0
  889. package/src/shade/renderer/water/chunk_water_transport.d.ts +2 -0
  890. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
  891. package/src/shade/renderer/water/chunk_water_transport.js +51 -40
  892. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +29 -0
  893. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
  894. package/src/shade/renderer/water/medium/GPUWaterBodies.js +116 -0
  895. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +23 -0
  896. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -0
  897. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +42 -0
  898. package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts +9 -0
  899. package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts.map +1 -0
  900. package/src/shade/renderer/water/medium/chunk_water_medium_derived.js +55 -0
  901. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts +8 -0
  902. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts.map +1 -0
  903. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.js +17 -0
  904. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +8 -0
  905. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -0
  906. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +30 -0
  907. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts +28 -0
  908. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -0
  909. package/src/shade/renderer/water/optics/chunk_water_inscatter.js +123 -0
  910. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +23 -0
  911. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +1 -0
  912. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +18 -0
  913. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +1 -0
  914. package/src/shade/renderer/water/optics/chunk_water_optics.d.ts +12 -0
  915. package/src/shade/renderer/water/optics/chunk_water_optics.d.ts.map +1 -0
  916. package/src/shade/renderer/water/optics/chunk_water_optics.js +75 -0
  917. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +27 -0
  918. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -0
  919. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +74 -0
  920. package/src/shade/renderer/water/shader_water.d.ts +10 -4
  921. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  922. package/src/shade/renderer/water/shader_water.js +406 -384
  923. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  924. package/src/shade/renderer/water/shader_water_avboit.js +19 -9
  925. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +98 -0
  926. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
  927. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +408 -0
  928. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +12 -0
  929. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +1 -0
  930. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +27 -0
  931. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +14 -0
  932. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +1 -0
  933. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +49 -0
  934. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +15 -0
  935. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -0
  936. package/src/shade/renderer/water/surface/chunk_water_wave.js +48 -0
  937. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +9 -0
  938. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +1 -0
  939. package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +47 -0
  940. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +10 -0
  941. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +1 -0
  942. package/src/shade/renderer/water/surface/shader_water_surface_write.js +51 -0
  943. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +12 -0
  944. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +1 -0
  945. package/src/shade/renderer/water/surface/shader_water_wave_step.js +54 -0
  946. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +13 -0
  947. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +1 -0
  948. package/src/shade/renderer/water/surface/water_surface_grid_indices.js +39 -0
  949. package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
  950. package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
  951. package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
  952. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  953. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
  954. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
  955. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  956. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +48 -6
  957. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +0 -29
  958. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +0 -1
  959. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +0 -43
  960. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts +0 -7
  961. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts.map +0 -1
  962. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.js +0 -6
@@ -1,5 +1,5 @@
1
1
  import { line3_compute_segment_segment_closest_points } from "../../../core/geom/3d/line/line3_compute_segment_segment_closest_points.js";
2
- import { quat3_to_matrix3 } from "../../../core/geom/3d/quaternion/quat3_to_matrix3.js";
2
+ import { quat3_to_matrix3_array } from "../../../core/geom/3d/quaternion/quat3_to_matrix3.js";
3
3
  import { polygon2_clip_axis_halfplane } from "../../../core/geom/2d/polygon/polygon2_clip_axis_halfplane.js";
4
4
  import { reduce_manifold_contacts } from "./reduce_manifold_contacts.js";
5
5
  import { box3_projected_half_extent } from "../../../core/geom/3d/box/box3_projected_half_extent.js";
@@ -51,6 +51,10 @@ import { box3_projected_half_extent } from "../../../core/geom/3d/box/box3_proje
51
51
  * out[4 + k*7 + 0..2] : world contact on triangle surface
52
52
  * out[4 + k*7 + 3..5] : world contact on box surface
53
53
  * out[4 + k*7 + 6] : penetration depth (positive)
54
+ * out[BOX_TRIANGLE_AXIS_OFFSET] : which kind of axis won —
55
+ * {@link BOX_TRIANGLE_AXIS_BOX_FACE},
56
+ * {@link BOX_TRIANGLE_AXIS_TRIANGLE_FACE} or
57
+ * {@link BOX_TRIANGLE_AXIS_EDGES}
54
58
  *
55
59
  * @author Alex Goldring
56
60
  * @copyright Company Named Limited (c) 2026
@@ -75,11 +79,60 @@ const PARALLEL_EPS_SQR = 1e-8;
75
79
  */
76
80
  const PARALLEL_COS_EPS = 1e-4;
77
81
 
82
+ /**
83
+ * How far to the outside of the reference plane a recovered point may lie and still be taken as on it.
84
+ * A point on the plane is a contact, at no depth: a box set down exactly on a triangle touches it with
85
+ * its whole base, as a box floor holds it at the base's four corners. Taken for none, every such point
86
+ * went to the single-contact fallback, and a 0.2 m box set down on a triangulated floor came to rest
87
+ * tipped up to 10 mrad, where on a box floor it stays within 0.03 mrad. Rounding puts a point lying on
88
+ * the plane a hair to either side of it.
89
+ * @type {number}
90
+ */
91
+ const ON_PLANE_EPS = 1e-9;
92
+
93
+ /**
94
+ * Index in `out` of the kind of axis the contact was built on (written on overlap only).
95
+ *
96
+ * The kind is the axis's, not the SAT test's that found it: an edge pair whose cross product lies
97
+ * within {@link AXIS_FACE_ALIGNMENT} of a face normal is that face's axis met a second time — a box
98
+ * edge lying in the plane of a triangle crossed with a triangle edge is the triangle's normal — and
99
+ * which copy wins is rounding. The contacts are then that face's too: its clipped manifold, on its
100
+ * normal.
101
+ * @type {number}
102
+ */
103
+ export const BOX_TRIANGLE_AXIS_OFFSET = 4 + MAX_CONTACTS * CONTACT_STRIDE;
104
+
105
+ /**
106
+ * A face of the box is the axis.
107
+ * @type {number}
108
+ */
109
+ export const BOX_TRIANGLE_AXIS_BOX_FACE = 0;
110
+
111
+ /**
112
+ * The triangle's face is the axis.
113
+ * @type {number}
114
+ */
115
+ export const BOX_TRIANGLE_AXIS_TRIANGLE_FACE = 1;
116
+
117
+ /**
118
+ * An edge of the box crossed with an edge of the triangle, along no face's normal, is the axis: one
119
+ * contact, between the two edges.
120
+ * @type {number}
121
+ */
122
+ export const BOX_TRIANGLE_AXIS_EDGES = 2;
123
+
124
+ /**
125
+ * Cosine within which an edge-pair axis counts as a face's: about 3.6°, the face alignment the support
126
+ * features use (support_feature_manifold.js).
127
+ * @type {number}
128
+ */
129
+ const AXIS_FACE_ALIGNMENT = 0.998;
130
+
78
131
  /**
79
132
  * Length of `out` required by {@link box_triangle_contact}.
80
133
  * @type {number}
81
134
  */
82
- export const BOX_TRIANGLE_OUT_LENGTH = 4 + MAX_CONTACTS * CONTACT_STRIDE;
135
+ export const BOX_TRIANGLE_OUT_LENGTH = BOX_TRIANGLE_AXIS_OFFSET + 1;
83
136
 
84
137
  // --- scratch storage (allocation-free across calls) ----------------------------
85
138
 
@@ -90,6 +143,10 @@ const scratch_axes = new Float64Array(9);
90
143
  const tri_uv_in = new Float64Array(8 * 2);
91
144
  const tri_uv_out = new Float64Array(8 * 2);
92
145
 
146
+ // The same, with each point's depth past the face as a third coordinate: (u, v, w).
147
+ const tri_uvw_in = new Float64Array(8 * 3);
148
+ const tri_uvw_out = new Float64Array(8 * 3);
149
+
93
150
  // Box face corners (for the triangle-axis-winner branch).
94
151
  const box_face_corners_uv_in = new Float64Array(8 * 2);
95
152
  const box_face_corners_uv_out = new Float64Array(8 * 2);
@@ -143,6 +200,53 @@ function clip_against_half_plane_uv(points_in, point_count, points_out, line_ox,
143
200
  return out_count;
144
201
  }
145
202
 
203
+ /**
204
+ * {@link polygon2_clip_axis_halfplane} over points of three coordinates (u, v, w), the third carried
205
+ * along: clipped against `coord_idx ≤ bound` (`≥` when `keep_below` is false), `coord_idx` 0 or 1. The u
206
+ * and v of every point are computed as that function computes them, so the same points survive.
207
+ *
208
+ * @param {Float64Array} points_in stride 3
209
+ * @param {number} point_count
210
+ * @param {Float64Array} points_out stride 3
211
+ * @param {number} coord_idx 0 = u, 1 = v
212
+ * @param {number} bound
213
+ * @param {boolean} keep_below
214
+ * @returns {number} surviving point count
215
+ */
216
+ function clip_uvw_axis_halfplane(points_in, point_count, points_out, coord_idx, bound, keep_below) {
217
+ let out_count = 0;
218
+
219
+ for (let i = 0; i < point_count; i++) {
220
+ const a = i * 3;
221
+ const b = ((i + 1) % point_count) * 3;
222
+
223
+ const av = points_in[a + coord_idx];
224
+ const bv = points_in[b + coord_idx];
225
+
226
+ const a_inside = keep_below ? (av <= bound) : (av >= bound);
227
+ const b_inside = keep_below ? (bv <= bound) : (bv >= bound);
228
+
229
+ if (a_inside) {
230
+ const o = out_count * 3;
231
+ points_out[o] = points_in[a];
232
+ points_out[o + 1] = points_in[a + 1];
233
+ points_out[o + 2] = points_in[a + 2];
234
+ out_count++;
235
+ }
236
+
237
+ if (a_inside !== b_inside) {
238
+ const t = (bound - av) / (bv - av);
239
+ const o = out_count * 3;
240
+ points_out[o] = points_in[a] + (points_in[b] - points_in[a]) * t;
241
+ points_out[o + 1] = points_in[a + 1] + (points_in[b + 1] - points_in[a + 1]) * t;
242
+ points_out[o + 2] = points_in[a + 2] + (points_in[b + 2] - points_in[a + 2]) * t;
243
+ out_count++;
244
+ }
245
+ }
246
+
247
+ return out_count;
248
+ }
249
+
146
250
  /**
147
251
  * In-place reduction of `candidates` (stride 7: x, y, z on triangle,
148
252
  * x, y, z on box, depth) to at most {@link MAX_CONTACTS} entries.
@@ -163,48 +267,70 @@ function reduce_contacts(n) {
163
267
  // `test_axis` used to be a per-call closure — allocated for every
164
268
  // box-triangle candidate because it captures and MUTATES the running
165
269
  // best-axis accumulator. Hoisted to module scope; the per-call inputs are
166
- // staged in the g_bt_* slots (written once per call, read by all 13 axis
167
- // tests). Same arithmetic, same order — bit-identical results.
168
-
169
- let g_bt_bcx = 0, g_bt_bcy = 0, g_bt_bcz = 0;
170
- let g_bt_bhx = 0, g_bt_bhy = 0, g_bt_bhz = 0;
171
- let g_bt_ax = 0, g_bt_ay = 0, g_bt_az = 0;
172
- let g_bt_bx = 0, g_bt_by = 0, g_bt_bz = 0;
173
- let g_bt_cx = 0, g_bt_cy = 0, g_bt_cz = 0;
174
- let g_bt_d_t2b_x = 0, g_bt_d_t2b_y = 0, g_bt_d_t2b_z = 0;
175
- let g_bt_best_overlap = Infinity;
176
- let g_bt_best_nx = 0, g_bt_best_ny = 0, g_bt_best_nz = 0;
270
+ // staged in `bt` (written once per call, read by all 13 axis tests). Same
271
+ // arithmetic, same order — bit-identical results.
272
+ //
273
+ // Staged in a Float64Array, not in module `let`s: a number written to a module
274
+ // `let` is boxed into a new heap object on every write, 21 of them per call.
275
+ // The manifold builders read the same staging, rather than being passed two
276
+ // dozen numbers each: none of them is inlined, and a call that is not inlined
277
+ // boxes every number passed to it.
278
+
279
+ const BT_BOX_CENTRE = 0; // x, y, z (world)
280
+ const BT_BOX_HALF = 3; // x, y, z (body frame)
281
+ const BT_TRI_A = 6; // x, y, z (world)
282
+ const BT_TRI_B = 9;
283
+ const BT_TRI_C = 12;
284
+ const BT_D_T2B = 15; // triangle centroid → box centre
285
+ const BT_TRI_NORMAL = 18; // unit
286
+ const BT_BEST_OVERLAP = 21;
287
+ const BT_BEST_NORMAL = 24; // unit, triangle → box
288
+ const BT_EDGE_AXIS = 27; // an edge-pair candidate axis for test_axis
289
+ const BT_FACE_NORMAL = 30; // the manifold builders' normal, triangle → box
290
+ const BT_FACE_OVERLAP = 33; // and the overlap along it
291
+ const BT_LENGTH = 34;
292
+
293
+ const bt = new Float64Array(BT_LENGTH);
294
+
177
295
  let g_bt_best_source = -1;
178
296
  let g_bt_best_box_edge_idx = -1;
179
297
  let g_bt_best_tri_edge_idx = -1;
180
298
 
181
299
  /**
182
- * Test a candidate separating axis `(lx, ly, lz)` (need not be unit-length).
300
+ * Test a candidate separating axis, `axis[axis_offset ..+2]` (need not be unit-length).
183
301
  * Returns true if a separating axis is found (overlap < 0); otherwise
184
- * updates the g_bt_best_* slots if this axis has the smallest overlap so far.
302
+ * updates the best-axis slots if this axis has the smallest overlap so far.
185
303
  *
186
304
  * Source:
187
305
  * 0..2 : box face normal (axis index 0..2)
188
306
  * 3 : triangle face normal
189
307
  * 4..12 : edge-cross (box_edge_idx * 3 + tri_edge_idx, offset +4)
308
+ *
309
+ * @param {Float64Array} axis
310
+ * @param {number} axis_offset
311
+ * @param {number} source
312
+ * @param {number} box_e_idx
313
+ * @param {number} tri_e_idx
314
+ * @returns {boolean}
190
315
  */
191
- function test_axis(lx, ly, lz, source, box_e_idx, tri_e_idx) {
316
+ function test_axis(axis, axis_offset, source, box_e_idx, tri_e_idx) {
317
+ const lx = axis[axis_offset], ly = axis[axis_offset + 1], lz = axis[axis_offset + 2];
192
318
  const len_sqr = lx * lx + ly * ly + lz * lz;
193
319
  if (len_sqr <= PARALLEL_EPS_SQR) return false;
194
320
  const inv_len = 1 / Math.sqrt(len_sqr);
195
321
  const ux = lx * inv_len, uy = ly * inv_len, uz = lz * inv_len;
196
322
 
197
323
  // Box projection.
198
- const box_centre_proj = ux * g_bt_bcx + uy * g_bt_bcy + uz * g_bt_bcz;
199
- const r_box = box3_projected_half_extent(scratch_axes, 0, g_bt_bhx, g_bt_bhy, g_bt_bhz, ux, uy, uz);
324
+ const box_centre_proj = ux * bt[BT_BOX_CENTRE] + uy * bt[BT_BOX_CENTRE + 1] + uz * bt[BT_BOX_CENTRE + 2];
325
+ const r_box = box3_projected_half_extent(scratch_axes, 0, bt[BT_BOX_HALF], bt[BT_BOX_HALF + 1], bt[BT_BOX_HALF + 2], ux, uy, uz);
200
326
  const bmin = box_centre_proj - r_box;
201
327
  const bmax = box_centre_proj + r_box;
202
328
 
203
329
  // Triangle projection — NOT symmetric around centroid, so we take
204
330
  // the per-vertex extreme values.
205
- const da = ux * g_bt_ax + uy * g_bt_ay + uz * g_bt_az;
206
- const db = ux * g_bt_bx + uy * g_bt_by + uz * g_bt_bz;
207
- const dc = ux * g_bt_cx + uy * g_bt_cy + uz * g_bt_cz;
331
+ const da = ux * bt[BT_TRI_A] + uy * bt[BT_TRI_A + 1] + uz * bt[BT_TRI_A + 2];
332
+ const db = ux * bt[BT_TRI_B] + uy * bt[BT_TRI_B + 1] + uz * bt[BT_TRI_B + 2];
333
+ const dc = ux * bt[BT_TRI_C] + uy * bt[BT_TRI_C + 1] + uz * bt[BT_TRI_C + 2];
208
334
  const tmin = da < db ? (da < dc ? da : dc) : (db < dc ? db : dc);
209
335
  const tmax = da > db ? (da > dc ? da : dc) : (db > dc ? db : dc);
210
336
 
@@ -219,16 +345,16 @@ function test_axis(lx, ly, lz, source, box_e_idx, tri_e_idx) {
219
345
  const push_neg = tmax - bmin;
220
346
  const overlap = push_pos < push_neg ? push_pos : push_neg;
221
347
 
222
- if (overlap < g_bt_best_overlap) {
223
- g_bt_best_overlap = overlap;
348
+ if (overlap < bt[BT_BEST_OVERLAP]) {
349
+ bt[BT_BEST_OVERLAP] = overlap;
224
350
  // Canonical normal direction: triangle -> box. Use the
225
351
  // box-centre-vs-triangle-centroid sign as the tiebreaker so
226
352
  // the SAT axis is canonically oriented before we negate.
227
- const center_dot = g_bt_d_t2b_x * ux + g_bt_d_t2b_y * uy + g_bt_d_t2b_z * uz;
353
+ const center_dot = bt[BT_D_T2B] * ux + bt[BT_D_T2B + 1] * uy + bt[BT_D_T2B + 2] * uz;
228
354
  const sign = center_dot >= 0 ? 1 : -1;
229
- g_bt_best_nx = ux * sign;
230
- g_bt_best_ny = uy * sign;
231
- g_bt_best_nz = uz * sign;
355
+ bt[BT_BEST_NORMAL] = ux * sign;
356
+ bt[BT_BEST_NORMAL + 1] = uy * sign;
357
+ bt[BT_BEST_NORMAL + 2] = uz * sign;
232
358
  g_bt_best_source = source;
233
359
  g_bt_best_box_edge_idx = box_e_idx;
234
360
  g_bt_best_tri_edge_idx = tri_e_idx;
@@ -264,7 +390,45 @@ export function box_triangle_contact(
264
390
  bcx, bcy, bcz, bqx, bqy, bqz, bqw, bhx, bhy, bhz,
265
391
  ax, ay, az, bx, by, bz, cx, cy, cz
266
392
  ) {
267
- quat3_to_matrix3(scratch_axes, 0, bqx, bqy, bqz, bqw);
393
+ const box = scratch_box;
394
+ const triangle = scratch_triangle;
395
+
396
+ box[0] = bcx; box[1] = bcy; box[2] = bcz;
397
+ box[3] = bqx; box[4] = bqy; box[5] = bqz; box[6] = bqw;
398
+ box[7] = bhx; box[8] = bhy; box[9] = bhz;
399
+
400
+ triangle[0] = ax; triangle[1] = ay; triangle[2] = az;
401
+ triangle[3] = bx; triangle[4] = by; triangle[5] = bz;
402
+ triangle[6] = cx; triangle[7] = cy; triangle[8] = cz;
403
+
404
+ return box_triangle_contact_array(out, box, 0, triangle, 0);
405
+ }
406
+
407
+ /** Where {@link box_triangle_contact} packs its box and its triangle. */
408
+ const scratch_box = new Float64Array(10);
409
+ const scratch_triangle = new Float64Array(9);
410
+
411
+ /**
412
+ * {@link box_triangle_contact} with the box and the triangle read from arrays: a call V8 does not
413
+ * inline boxes each number passed to it, nineteen here, once per triangle under a box.
414
+ *
415
+ * @param {number[]|Float64Array} out length >= {@link BOX_TRIANGLE_OUT_LENGTH}
416
+ * @param {Float64Array} box the box: centre (world), orientation (unit quaternion), half-extents (body
417
+ * frame) — ten numbers
418
+ * @param {number} box_offset
419
+ * @param {Float64Array} triangle vertices A, B, C (world) — nine numbers
420
+ * @param {number} triangle_offset
421
+ * @returns {boolean} true if box and triangle overlap
422
+ */
423
+ export function box_triangle_contact_array(out, box, box_offset, triangle, triangle_offset) {
424
+ const bcx = box[box_offset], bcy = box[box_offset + 1], bcz = box[box_offset + 2];
425
+ const bhx = box[box_offset + 7], bhy = box[box_offset + 8], bhz = box[box_offset + 9];
426
+
427
+ const ax = triangle[triangle_offset], ay = triangle[triangle_offset + 1], az = triangle[triangle_offset + 2];
428
+ const bx = triangle[triangle_offset + 3], by = triangle[triangle_offset + 4], bz = triangle[triangle_offset + 5];
429
+ const cx = triangle[triangle_offset + 6], cy = triangle[triangle_offset + 7], cz = triangle[triangle_offset + 8];
430
+
431
+ quat3_to_matrix3_array(scratch_axes, 0, box, box_offset + 3);
268
432
  const axes = scratch_axes;
269
433
 
270
434
  // Triangle edges in world.
@@ -300,25 +464,26 @@ export function box_triangle_contact(
300
464
 
301
465
  // Stage the per-call inputs + reset the best-axis accumulator for the
302
466
  // hoisted test_axis (see the D3 note above it).
303
- g_bt_bcx = bcx; g_bt_bcy = bcy; g_bt_bcz = bcz;
304
- g_bt_bhx = bhx; g_bt_bhy = bhy; g_bt_bhz = bhz;
305
- g_bt_ax = ax; g_bt_ay = ay; g_bt_az = az;
306
- g_bt_bx = bx; g_bt_by = by; g_bt_bz = bz;
307
- g_bt_cx = cx; g_bt_cy = cy; g_bt_cz = cz;
308
- g_bt_d_t2b_x = d_t2b_x; g_bt_d_t2b_y = d_t2b_y; g_bt_d_t2b_z = d_t2b_z;
309
- g_bt_best_overlap = Infinity;
310
- g_bt_best_nx = 0; g_bt_best_ny = 0; g_bt_best_nz = 0;
467
+ bt[BT_BOX_CENTRE] = bcx; bt[BT_BOX_CENTRE + 1] = bcy; bt[BT_BOX_CENTRE + 2] = bcz;
468
+ bt[BT_BOX_HALF] = bhx; bt[BT_BOX_HALF + 1] = bhy; bt[BT_BOX_HALF + 2] = bhz;
469
+ bt[BT_TRI_A] = ax; bt[BT_TRI_A + 1] = ay; bt[BT_TRI_A + 2] = az;
470
+ bt[BT_TRI_B] = bx; bt[BT_TRI_B + 1] = by; bt[BT_TRI_B + 2] = bz;
471
+ bt[BT_TRI_C] = cx; bt[BT_TRI_C + 1] = cy; bt[BT_TRI_C + 2] = cz;
472
+ bt[BT_D_T2B] = d_t2b_x; bt[BT_D_T2B + 1] = d_t2b_y; bt[BT_D_T2B + 2] = d_t2b_z;
473
+ bt[BT_TRI_NORMAL] = tnx; bt[BT_TRI_NORMAL + 1] = tny; bt[BT_TRI_NORMAL + 2] = tnz;
474
+ bt[BT_BEST_OVERLAP] = Infinity;
475
+ bt[BT_BEST_NORMAL] = 0; bt[BT_BEST_NORMAL + 1] = 0; bt[BT_BEST_NORMAL + 2] = 0;
311
476
  g_bt_best_source = -1;
312
477
  g_bt_best_box_edge_idx = -1;
313
478
  g_bt_best_tri_edge_idx = -1;
314
479
 
315
480
  // 1. Box face normals (3 axes).
316
- if (test_axis(axes[0], axes[1], axes[2], 0, -1, -1)) { out[3] = 0; return false; }
317
- if (test_axis(axes[3], axes[4], axes[5], 1, -1, -1)) { out[3] = 0; return false; }
318
- if (test_axis(axes[6], axes[7], axes[8], 2, -1, -1)) { out[3] = 0; return false; }
481
+ if (test_axis(axes, 0, 0, -1, -1)) { out[3] = 0; return false; }
482
+ if (test_axis(axes, 3, 1, -1, -1)) { out[3] = 0; return false; }
483
+ if (test_axis(axes, 6, 2, -1, -1)) { out[3] = 0; return false; }
319
484
 
320
485
  // 2. Triangle face normal (1 axis).
321
- if (test_axis(tnx, tny, tnz, 3, -1, -1)) { out[3] = 0; return false; }
486
+ if (test_axis(bt, BT_TRI_NORMAL, 3, -1, -1)) { out[3] = 0; return false; }
322
487
 
323
488
  // 3. Edge-edge cross products (9 axes).
324
489
  for (let i = 0; i < 3; i++) {
@@ -328,38 +493,129 @@ export function box_triangle_contact(
328
493
  if (j === 0) { ex = ab_x; ey = ab_y; ez = ab_z; }
329
494
  else if (j === 1) { ex = bc_x; ey = bc_y; ez = bc_z; }
330
495
  else { ex = ca_x; ey = ca_y; ez = ca_z; }
331
- const cx_ax = aiy * ez - aiz * ey;
332
- const cy_ax = aiz * ex - aix * ez;
333
- const cz_ax = aix * ey - aiy * ex;
334
- if (test_axis(cx_ax, cy_ax, cz_ax, 4 + i * 3 + j, i, j)) { out[3] = 0; return false; }
496
+ bt[BT_EDGE_AXIS] = aiy * ez - aiz * ey;
497
+ bt[BT_EDGE_AXIS + 1] = aiz * ex - aix * ez;
498
+ bt[BT_EDGE_AXIS + 2] = aix * ey - aiy * ex;
499
+ if (test_axis(bt, BT_EDGE_AXIS, 4 + i * 3 + j, i, j)) { out[3] = 0; return false; }
335
500
  }
336
501
  }
337
502
 
338
503
  // We have overlap. Output the contact normal (triangle → box).
339
- const best_overlap = g_bt_best_overlap;
504
+ const best_overlap = bt[BT_BEST_OVERLAP];
340
505
  const best_source = g_bt_best_source;
341
506
  const best_box_edge_idx = g_bt_best_box_edge_idx;
342
507
  const best_tri_edge_idx = g_bt_best_tri_edge_idx;
343
- const nx = g_bt_best_nx, ny = g_bt_best_ny, nz = g_bt_best_nz;
508
+ const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
344
509
  out[0] = nx; out[1] = ny; out[2] = nz;
345
510
 
511
+ // Built on the face the axis is, whichever copy of it won: an edge pair that is a face's axis
512
+ // again comes out a hair shallower by rounding (or within the alignment), and its two edges'
513
+ // closest points need not be anywhere near the overlap — a long box's short edge and the
514
+ // triangle's far edge, metres apart, made one contact that bounced and spun the box.
515
+ const manifold_source = face_source(best_source, axes);
516
+
517
+ out[BOX_TRIANGLE_AXIS_OFFSET] = axis_kind(manifold_source);
518
+
346
519
  // --- Contact manifold construction ---
347
520
 
348
- if (best_source < 3) {
349
- // Box face axis winner: reference = box face, incident = triangle.
350
- return emit_box_face_manifold(out, best_source, axes, bcx, bcy, bcz, bhx, bhy, bhz,
351
- ax, ay, az, bx, by, bz, cx, cy, cz, tnx, tny, tnz, nx, ny, nz, best_overlap);
352
- } else if (best_source === 3) {
521
+ if (manifold_source < 4) {
522
+ // On that face's own normal, turned toward the box, and with its own overlap: an edge pair
523
+ // standing in for it has a normal up to 3.6° off the face's, and a box resting or sliding on a
524
+ // flat triangulated floor kept landing on that copy — tilted contacts that rocked and kicked it.
525
+ if (manifold_source !== best_source) {
526
+ const ux = manifold_source === 3 ? tnx : axes[manifold_source * 3];
527
+ const uy = manifold_source === 3 ? tny : axes[manifold_source * 3 + 1];
528
+ const uz = manifold_source === 3 ? tnz : axes[manifold_source * 3 + 2];
529
+ const s = d_t2b_x * ux + d_t2b_y * uy + d_t2b_z * uz >= 0 ? 1 : -1;
530
+
531
+ const fx = ux * s, fy = uy * s, fz = uz * s;
532
+
533
+ bt[BT_FACE_NORMAL] = fx; bt[BT_FACE_NORMAL + 1] = fy; bt[BT_FACE_NORMAL + 2] = fz;
534
+ stage_face_overlap();
535
+
536
+ out[0] = fx; out[1] = fy; out[2] = fz;
537
+ } else {
538
+ bt[BT_FACE_NORMAL] = nx; bt[BT_FACE_NORMAL + 1] = ny; bt[BT_FACE_NORMAL + 2] = nz;
539
+ bt[BT_FACE_OVERLAP] = best_overlap;
540
+ }
541
+
542
+ if (manifold_source < 3) {
543
+ // Box face axis winner: reference = box face, incident = triangle.
544
+ return emit_box_face_manifold(out, manifold_source, axes);
545
+ }
546
+
353
547
  // Triangle face axis winner: reference = triangle, incident = box face.
354
- return emit_triangle_face_manifold(out, axes, bcx, bcy, bcz, bhx, bhy, bhz,
355
- ax, ay, az, bx, by, bz, cx, cy, cz, tnx, tny, tnz, nx, ny, nz, best_overlap);
548
+ return emit_triangle_face_manifold(out, axes);
356
549
  } else {
357
550
  // Edge-cross winner: single contact at closest pair on the two edges.
358
- return emit_edge_cross_contact(out, axes, bcx, bcy, bcz, bhx, bhy, bhz,
359
- ax, ay, az, bx, by, bz, cx, cy, cz,
360
- best_box_edge_idx, best_tri_edge_idx,
361
- nx, ny, nz, best_overlap);
551
+ return emit_edge_cross_contact(out, axes, best_box_edge_idx, best_tri_edge_idx);
552
+ }
553
+ }
554
+
555
+ /**
556
+ * Overlap of the staged box and triangle along the unit axis staged at BT_FACE_NORMAL — the amount
557
+ * {@link test_axis} measures, without touching the running best — written to BT_FACE_OVERLAP. Read
558
+ * and written there rather than passed and returned: the call is not inlined, and the three numbers
559
+ * passed and the one returned were each boxed into a new heap object.
560
+ */
561
+ function stage_face_overlap() {
562
+ const ux = bt[BT_FACE_NORMAL], uy = bt[BT_FACE_NORMAL + 1], uz = bt[BT_FACE_NORMAL + 2];
563
+ const box_centre_proj = ux * bt[BT_BOX_CENTRE] + uy * bt[BT_BOX_CENTRE + 1] + uz * bt[BT_BOX_CENTRE + 2];
564
+ const r_box = box3_projected_half_extent(scratch_axes, 0, bt[BT_BOX_HALF], bt[BT_BOX_HALF + 1], bt[BT_BOX_HALF + 2], ux, uy, uz);
565
+
566
+ const da = ux * bt[BT_TRI_A] + uy * bt[BT_TRI_A + 1] + uz * bt[BT_TRI_A + 2];
567
+ const db = ux * bt[BT_TRI_B] + uy * bt[BT_TRI_B + 1] + uz * bt[BT_TRI_B + 2];
568
+ const dc = ux * bt[BT_TRI_C] + uy * bt[BT_TRI_C + 1] + uz * bt[BT_TRI_C + 2];
569
+ const tmin = da < db ? (da < dc ? da : dc) : (db < dc ? db : dc);
570
+ const tmax = da > db ? (da > dc ? da : dc) : (db > dc ? db : dc);
571
+
572
+ const push_pos = box_centre_proj + r_box - tmin;
573
+ const push_neg = tmax - (box_centre_proj - r_box);
574
+
575
+ bt[BT_FACE_OVERLAP] = push_pos < push_neg ? push_pos : push_neg;
576
+ }
577
+
578
+ /**
579
+ * Kind of the winning axis, for {@link BOX_TRIANGLE_AXIS_OFFSET}, from the face it is ({@link face_source}).
580
+ *
581
+ * @param {number} face SAT source the winning axis really is: 0..2 box face, 3 triangle face, 4..12 edge pair
582
+ * @returns {number}
583
+ */
584
+ function axis_kind(face) {
585
+ if (face < 3) return BOX_TRIANGLE_AXIS_BOX_FACE;
586
+ if (face === 3) return BOX_TRIANGLE_AXIS_TRIANGLE_FACE;
587
+
588
+ return BOX_TRIANGLE_AXIS_EDGES;
589
+ }
590
+
591
+ /**
592
+ * The SAT source the winning axis really is. An edge pair (sources 4..12) whose cross product lies
593
+ * within {@link AXIS_FACE_ALIGNMENT} of the triangle's normal or of a box face's is that face's axis
594
+ * met a second time: source 3, or the box axis 0..2. Any other source is returned as it is.
595
+ *
596
+ * The winning axis and the triangle's normal are the staged ones (`bt`).
597
+ *
598
+ * @param {number} source SAT source: 0..2 box face, 3 triangle face, 4..12 edge pair
599
+ * @param {Float64Array} axes the box's axes, rows
600
+ * @returns {number}
601
+ */
602
+ function face_source(source, axes) {
603
+ if (source < 4) return source;
604
+
605
+ const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
606
+ const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
607
+
608
+ if (Math.abs(nx * tnx + ny * tny + nz * tnz) >= AXIS_FACE_ALIGNMENT) {
609
+ return 3;
610
+ }
611
+
612
+ for (let k = 0; k < 3; k++) {
613
+ if (Math.abs(nx * axes[k * 3] + ny * axes[k * 3 + 1] + nz * axes[k * 3 + 2]) >= AXIS_FACE_ALIGNMENT) {
614
+ return k;
615
+ }
362
616
  }
617
+
618
+ return source;
363
619
  }
364
620
 
365
621
  // --- Manifold builders ------------------------------------------------------
@@ -368,15 +624,19 @@ export function box_triangle_contact(
368
624
  * Box-face SAT winner: clip the triangle against the box's reference face
369
625
  * rectangle, then for each surviving (u, v) recover the world contact on
370
626
  * the triangle plane.
627
+ *
628
+ * Box, triangle, triangle normal, and the face's normal and overlap are the staged ones (`bt`).
371
629
  */
372
- function emit_box_face_manifold(
373
- out, ref_axis_idx, axes,
374
- bcx, bcy, bcz, bhx, bhy, bhz,
375
- ax, ay, az, bx, by, bz, cx, cy, cz,
376
- tnx, tny, tnz,
377
- nx, ny, nz,
378
- best_overlap
379
- ) {
630
+ function emit_box_face_manifold(out, ref_axis_idx, axes) {
631
+ const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
632
+ const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
633
+ const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
634
+ const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
635
+ const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
636
+ const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
637
+ const nx = bt[BT_FACE_NORMAL], ny = bt[BT_FACE_NORMAL + 1], nz = bt[BT_FACE_NORMAL + 2];
638
+ const best_overlap = bt[BT_FACE_OVERLAP];
639
+
380
640
  // The contact normal `n` points triangle → box. The box's outward
381
641
  // face normal at the reference face points box → triangle = -n.
382
642
  const face_out_nx = -nx;
@@ -441,17 +701,16 @@ function emit_box_face_manifold(
441
701
  // along the WINNING SAT axis no contact can be deeper than the SAT
442
702
  // overlap itself, so candidates past that cap are rejected, and a
443
703
  // near-parallel plane (or an emptied candidate set) falls back to the
444
- // deepest triangle vertex with the exact SAT depth - a SAT-proven
445
- // overlap must never be dropped.
704
+ // deepest point of the triangle over the face - a SAT-proven overlap
705
+ // must never be dropped.
446
706
  const depth_cap = best_overlap * 1.0001 + 1e-9;
447
707
  const denom = face_out_nx * tnx + face_out_ny * tny + face_out_nz * tnz;
448
708
  if (Math.abs(denom) < PARALLEL_COS_EPS) {
449
- return emit_box_face_deepest_vertex(out,
709
+ return emit_box_face_deepest_point(out,
450
710
  ref_face_ox, ref_face_oy, ref_face_oz,
451
711
  face_out_nx, face_out_ny, face_out_nz,
452
712
  ux, uy, uz, vx, vy, vz, half_u, half_v,
453
- ax, ay, az, bx, by, bz, cx, cy, cz,
454
- best_overlap);
713
+ ax, ay, az, bx, by, bz, cx, cy, cz);
455
714
  }
456
715
  const clipped_uv = tri_uv_in;
457
716
 
@@ -468,7 +727,7 @@ function emit_box_face_manifold(
468
727
  const world_tri_y = xpy + face_out_ny * t;
469
728
  const world_tri_z = xpz + face_out_nz * t;
470
729
  const depth = -t;
471
- if (depth <= 0 || depth > depth_cap) continue;
730
+ if (depth < -ON_PLANE_EPS || depth > depth_cap) continue;
472
731
 
473
732
  const off = cand_count * 7;
474
733
  candidates[off] = world_tri_x;
@@ -478,17 +737,16 @@ function emit_box_face_manifold(
478
737
  candidates[off + 3] = xpx;
479
738
  candidates[off + 4] = xpy;
480
739
  candidates[off + 5] = xpz;
481
- candidates[off + 6] = depth;
740
+ candidates[off + 6] = depth > 0 ? depth : 0;
482
741
  cand_count++;
483
742
  }
484
743
 
485
744
  if (cand_count === 0) {
486
- return emit_box_face_deepest_vertex(out,
745
+ return emit_box_face_deepest_point(out,
487
746
  ref_face_ox, ref_face_oy, ref_face_oz,
488
747
  face_out_nx, face_out_ny, face_out_nz,
489
748
  ux, uy, uz, vx, vy, vz, half_u, half_v,
490
- ax, ay, az, bx, by, bz, cx, cy, cz,
491
- best_overlap);
749
+ ax, ay, az, bx, by, bz, cx, cy, cz);
492
750
  }
493
751
  const kept = reduce_contacts(cand_count);
494
752
  out[3] = kept;
@@ -507,41 +765,72 @@ function emit_box_face_manifold(
507
765
  }
508
766
 
509
767
  /**
510
- * Box-face fallback for configurations the plane recovery cannot serve (the
511
- * triangle plane near-parallel to the projection direction, or every clipped
512
- * candidate rejected): one contact at the triangle vertex deepest below the
513
- * reference face, with the exact SAT overlap as depth. The box witness is
514
- * the vertex projected onto the face and clamped into the face rectangle.
768
+ * Box-face fallback for configurations the plane recovery cannot serve (the triangle plane near-parallel
769
+ * to the projection direction, or every clipped candidate rejected): one contact, at the deepest point
770
+ * of the triangle over the reference face — the triangle clipped to the face's rectangle as the caller
771
+ * clipped it, each point carrying its depth past the face — and the point of the face under it. The
772
+ * depth is that point's, at least 0: the SAT has found the two overlapping, so some point of the
773
+ * triangle over the face lies on the box's side of it.
774
+ *
775
+ * The deepest vertex of the whole triangle can lie anywhere past the rectangle: on a floor triangle
776
+ * metres long, metres from the box. Clamped into the rectangle, the box's witness then sat that far
777
+ * from the triangle's, which the manifold took for one contact.
778
+ *
779
+ * Only after the caller's clip of the same triangle to the same rectangle kept a point: the clip here
780
+ * computes u and v as that one does, so it keeps one too.
515
781
  */
516
- function emit_box_face_deepest_vertex(
782
+ function emit_box_face_deepest_point(
517
783
  out,
518
784
  ref_face_ox, ref_face_oy, ref_face_oz,
519
785
  face_out_nx, face_out_ny, face_out_nz,
520
786
  ux, uy, uz, vx, vy, vz, half_u, half_v,
521
- ax, ay, az, bx, by, bz, cx, cy, cz,
522
- best_overlap
787
+ ax, ay, az, bx, by, bz, cx, cy, cz
523
788
  ) {
524
- let px = ax, py = ay, pz = az;
525
- let best_d = (ref_face_ox - ax) * face_out_nx + (ref_face_oy - ay) * face_out_ny + (ref_face_oz - az) * face_out_nz;
526
- const d_b = (ref_face_ox - bx) * face_out_nx + (ref_face_oy - by) * face_out_ny + (ref_face_oz - bz) * face_out_nz;
527
- if (d_b > best_d) { best_d = d_b; px = bx; py = by; pz = bz; }
528
- const d_c = (ref_face_ox - cx) * face_out_nx + (ref_face_oy - cy) * face_out_ny + (ref_face_oz - cz) * face_out_nz;
529
- if (d_c > best_d) { best_d = d_c; px = cx; py = cy; pz = cz; }
530
-
531
- // Project onto the face plane, clamped into the face rectangle.
532
- let u = (px - ref_face_ox) * ux + (py - ref_face_oy) * uy + (pz - ref_face_oz) * uz;
533
- let v = (px - ref_face_ox) * vx + (py - ref_face_oy) * vy + (pz - ref_face_oz) * vz;
534
- u = u < -half_u ? -half_u : (u > half_u ? half_u : u);
535
- v = v < -half_v ? -half_v : (v > half_v ? half_v : v);
789
+ // each corner over the face, (u, v), and its depth past it, w = (face origin - corner) · face_out
790
+ const da_x = ax - ref_face_ox, da_y = ay - ref_face_oy, da_z = az - ref_face_oz;
791
+ const db_x = bx - ref_face_ox, db_y = by - ref_face_oy, db_z = bz - ref_face_oz;
792
+ const dc_x = cx - ref_face_ox, dc_y = cy - ref_face_oy, dc_z = cz - ref_face_oz;
793
+ tri_uvw_in[0] = da_x * ux + da_y * uy + da_z * uz;
794
+ tri_uvw_in[1] = da_x * vx + da_y * vy + da_z * vz;
795
+ tri_uvw_in[2] = -(da_x * face_out_nx + da_y * face_out_ny + da_z * face_out_nz);
796
+ tri_uvw_in[3] = db_x * ux + db_y * uy + db_z * uz;
797
+ tri_uvw_in[4] = db_x * vx + db_y * vy + db_z * vz;
798
+ tri_uvw_in[5] = -(db_x * face_out_nx + db_y * face_out_ny + db_z * face_out_nz);
799
+ tri_uvw_in[6] = dc_x * ux + dc_y * uy + dc_z * uz;
800
+ tri_uvw_in[7] = dc_x * vx + dc_y * vy + dc_z * vz;
801
+ tri_uvw_in[8] = -(dc_x * face_out_nx + dc_y * face_out_ny + dc_z * face_out_nz);
802
+
803
+ let n = 3;
804
+ n = clip_uvw_axis_halfplane(tri_uvw_in, n, tri_uvw_out, 0, half_u, true);
805
+ n = clip_uvw_axis_halfplane(tri_uvw_out, n, tri_uvw_in, 0, -half_u, false);
806
+ n = clip_uvw_axis_halfplane(tri_uvw_in, n, tri_uvw_out, 1, half_v, true);
807
+ n = clip_uvw_axis_halfplane(tri_uvw_out, n, tri_uvw_in, 1, -half_v, false);
808
+
809
+ let deepest = 0;
810
+
811
+ for (let i = 1; i < n; i++) {
812
+ if (tri_uvw_in[i * 3 + 2] > tri_uvw_in[deepest * 3 + 2]) {
813
+ deepest = i;
814
+ }
815
+ }
816
+
817
+ const u = tri_uvw_in[deepest * 3];
818
+ const v = tri_uvw_in[deepest * 3 + 1];
819
+ const w = tri_uvw_in[deepest * 3 + 2];
820
+
821
+ // the face's point, and the triangle's: w past it, along the face's outward normal
822
+ const fx = ref_face_ox + u * ux + v * vx;
823
+ const fy = ref_face_oy + u * uy + v * vy;
824
+ const fz = ref_face_oz + u * uz + v * vz;
536
825
 
537
826
  out[3] = 1;
538
- out[4] = px;
539
- out[5] = py;
540
- out[6] = pz;
541
- out[7] = ref_face_ox + u * ux + v * vx;
542
- out[8] = ref_face_oy + u * uy + v * vy;
543
- out[9] = ref_face_oz + u * uz + v * vz;
544
- out[10] = best_overlap;
827
+ out[4] = fx - face_out_nx * w;
828
+ out[5] = fy - face_out_ny * w;
829
+ out[6] = fz - face_out_nz * w;
830
+ out[7] = fx;
831
+ out[8] = fy;
832
+ out[9] = fz;
833
+ out[10] = w > 0 ? w : 0;
545
834
  return true;
546
835
  }
547
836
 
@@ -549,15 +838,19 @@ function emit_box_face_deepest_vertex(
549
838
  * Triangle-face SAT winner: reference = triangle, incident = the box face
550
839
  * most antiparallel to the contact normal. Clip the box face quad against
551
840
  * the triangle's 3 edges, then recover world contacts on the box face plane.
841
+ *
842
+ * Box, triangle, triangle normal, and the face's normal and overlap are the staged ones (`bt`).
552
843
  */
553
- function emit_triangle_face_manifold(
554
- out, axes,
555
- bcx, bcy, bcz, bhx, bhy, bhz,
556
- ax, ay, az, bx, by, bz, cx, cy, cz,
557
- tnx, tny, tnz,
558
- nx, ny, nz,
559
- best_overlap
560
- ) {
844
+ function emit_triangle_face_manifold(out, axes) {
845
+ const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
846
+ const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
847
+ const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
848
+ const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
849
+ const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
850
+ const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
851
+ const nx = bt[BT_FACE_NORMAL], ny = bt[BT_FACE_NORMAL + 1], nz = bt[BT_FACE_NORMAL + 2];
852
+ const best_overlap = bt[BT_FACE_OVERLAP];
853
+
561
854
  // Reference = triangle. Its outward face normal points from the triangle
562
855
  // surface toward the box — i.e. the contact normal `n` (triangle → box),
563
856
  // which the SAT already sign-canonicalised. The incident box face is then
@@ -725,7 +1018,7 @@ function emit_triangle_face_manifold(
725
1018
  // Depth: how far the box face has penetrated past the triangle
726
1019
  // plane, measured along ref_out. depth = -t.
727
1020
  const depth = -t;
728
- if (depth <= 0 || depth > depth_cap) continue;
1021
+ if (depth < -ON_PLANE_EPS || depth > depth_cap) continue;
729
1022
 
730
1023
  const off = cand_count * 7;
731
1024
  // Triangle-side contact: the clipped (u, v) point on the
@@ -736,7 +1029,7 @@ function emit_triangle_face_manifold(
736
1029
  candidates[off + 3] = world_box_x;
737
1030
  candidates[off + 4] = world_box_y;
738
1031
  candidates[off + 5] = world_box_z;
739
- candidates[off + 6] = depth;
1032
+ candidates[off + 6] = depth > 0 ? depth : 0;
740
1033
  cand_count++;
741
1034
  }
742
1035
 
@@ -824,14 +1117,16 @@ function emit_triangle_face_deepest_corner(
824
1117
  return true;
825
1118
  }
826
1119
 
827
- function emit_edge_cross_contact(
828
- out, axes,
829
- bcx, bcy, bcz, bhx, bhy, bhz,
830
- ax, ay, az, bx, by, bz, cx, cy, cz,
831
- box_edge_idx, tri_edge_idx,
832
- nx, ny, nz,
833
- overlap
834
- ) {
1120
+ function emit_edge_cross_contact(out, axes, box_edge_idx, tri_edge_idx) {
1121
+ // box, triangle, and the winning normal and overlap: the staged ones
1122
+ const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
1123
+ const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
1124
+ const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
1125
+ const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
1126
+ const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
1127
+ const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
1128
+ const overlap = bt[BT_BEST_OVERLAP];
1129
+
835
1130
  // Box edge direction: axis index `box_edge_idx`.
836
1131
  const edx = axes[box_edge_idx * 3];
837
1132
  const edy = axes[box_edge_idx * 3 + 1];