@woosh/meep-engine 3.37.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 (1016) 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 +6 -0
  159. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
  160. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
  161. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -0
  162. package/src/engine/ecs/transform/Transform64.d.ts +4 -2
  163. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  164. package/src/engine/ecs/transform/Transform64.js +10 -16
  165. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  166. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
  167. package/src/engine/graphics/ecs/water/Water.d.ts +26 -34
  168. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  169. package/src/engine/graphics/ecs/water/Water.js +42 -36
  170. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  171. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -62
  172. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
  173. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
  174. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -0
  175. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
  176. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
  177. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
  178. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +33 -0
  179. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -0
  180. package/src/engine/graphics/ecs/water/WaterWaves.js +46 -0
  181. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts +17 -0
  182. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -0
  183. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +26 -0
  184. package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts +22 -0
  185. package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts.map +1 -1
  186. package/src/engine/graphics/texture/3d/scs3d_sample_linear.js +43 -1
  187. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +29 -3
  188. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
  189. package/src/engine/graphics/texture/sampler/Sampler2D.js +102 -14
  190. package/src/engine/graphics3/WaterSystem.d.ts +58 -6
  191. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  192. package/src/engine/graphics3/WaterSystem.js +423 -293
  193. package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
  194. package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
  195. package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
  196. package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
  197. package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
  198. package/src/engine/interpolation/InterpolationLog.js +12 -6
  199. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  200. package/src/engine/interpolation/InterpolationSystem.js +39 -8
  201. package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
  202. package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
  203. package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
  204. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
  205. package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
  206. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
  207. package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
  208. package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
  209. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
  210. package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
  211. package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
  212. package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
  213. package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
  214. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  215. package/src/engine/physics/body/SolverBodyState.js +4 -5
  216. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
  217. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  218. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
  219. package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
  220. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  221. package/src/engine/physics/ccd/linear_sweep.js +1131 -97
  222. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +26 -14
  223. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  224. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +221 -52
  225. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
  226. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  227. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +117 -24
  228. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
  229. package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
  230. package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
  231. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +2 -1
  232. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
  233. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  234. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
  235. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
  236. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  237. package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
  238. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  239. package/src/engine/physics/cloth/ecs/ClothWorld.js +78 -53
  240. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
  241. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  242. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +185 -128
  243. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
  244. package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
  245. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
  246. package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
  247. package/src/engine/physics/cloth/playground/garment_build.js +6 -6
  248. package/src/engine/physics/cloth/playground/garment_main.js +18 -14
  249. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  250. package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
  251. package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
  252. package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
  253. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  254. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
  255. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
  256. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
  257. package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
  258. package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
  259. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  260. package/src/engine/physics/constraint/solve_constraints.js +703 -429
  261. package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
  262. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  263. package/src/engine/physics/contact/ManifoldStore.js +32 -0
  264. package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
  265. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
  266. package/src/engine/physics/ecs/BodyKind.js +16 -8
  267. package/src/engine/physics/ecs/Collider.d.ts +7 -2
  268. package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
  269. package/src/engine/physics/ecs/Collider.js +7 -2
  270. package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
  271. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
  272. package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
  273. package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
  274. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  275. package/src/engine/physics/ecs/PhysicsSystem.js +810 -96
  276. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  277. package/src/engine/physics/fluid/FluidField.js +5 -1
  278. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
  279. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  280. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
  281. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
  282. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
  283. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  284. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
  285. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  286. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
  287. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
  288. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
  289. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
  290. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
  291. package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
  292. package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
  293. package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
  294. package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
  295. package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
  296. package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
  297. package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
  298. package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
  299. package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
  300. package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
  301. package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
  302. package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
  303. package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
  304. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
  305. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
  306. package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
  307. package/src/engine/physics/integration/integrate_position.d.ts +18 -19
  308. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
  309. package/src/engine/physics/integration/integrate_position.js +40 -37
  310. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
  311. package/src/engine/physics/integration/integrate_velocity.js +13 -4
  312. package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
  313. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  314. package/src/engine/physics/island/IslandBuilder.js +322 -19
  315. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
  316. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  317. package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
  318. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
  319. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  320. package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
  321. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
  322. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  323. package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
  324. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
  325. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
  326. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
  327. package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
  328. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
  329. package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
  330. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
  331. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  332. package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
  333. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
  334. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
  335. package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
  336. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
  337. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
  338. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
  339. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
  340. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
  341. package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
  342. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
  343. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  344. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
  345. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
  346. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
  347. package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
  348. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
  349. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
  350. package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
  351. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
  352. package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
  353. package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
  354. package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
  355. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
  356. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
  357. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
  358. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
  359. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  360. package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
  361. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
  362. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
  363. package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
  364. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
  365. package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
  366. package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
  367. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
  368. package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
  369. package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
  370. package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
  371. package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
  372. package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
  373. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
  374. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
  375. package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
  376. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
  377. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
  378. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
  379. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
  380. package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
  381. package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
  382. package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
  383. package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
  384. package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
  385. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
  386. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
  387. package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
  388. package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
  389. package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
  390. package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
  391. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  392. package/src/engine/physics/queries/overlap_shape.js +57 -79
  393. package/src/engine/physics/queries/raycast.d.ts +10 -4
  394. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  395. package/src/engine/physics/queries/raycast.js +133 -9
  396. package/src/engine/physics/queries/shape_cast.d.ts +55 -24
  397. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  398. package/src/engine/physics/queries/shape_cast.js +2061 -245
  399. package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
  400. package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
  401. package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
  402. package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
  403. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  404. package/src/engine/physics/solver/solve_contacts.js +458 -234
  405. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  406. package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
  407. package/src/shade/assets/textures/split_sum.bin +0 -0
  408. package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
  409. package/src/shade/device/mock/SoftwareGPUQueue.js +2 -1
  410. package/src/shade/playground/path_traced_media/README.md +78 -0
  411. package/src/shade/playground/path_traced_media/capture_radiance.d.ts +33 -0
  412. package/src/shade/playground/path_traced_media/capture_radiance.d.ts.map +1 -0
  413. package/src/shade/playground/path_traced_media/capture_radiance.js +174 -0
  414. package/src/shade/playground/path_traced_media/checks.d.ts +160 -0
  415. package/src/shade/playground/path_traced_media/checks.d.ts.map +1 -0
  416. package/src/shade/playground/path_traced_media/checks.js +921 -0
  417. package/src/shade/playground/path_traced_media/index.html +71 -0
  418. package/src/shade/playground/path_traced_media/main.d.ts +2 -0
  419. package/src/shade/playground/path_traced_media/main.d.ts.map +1 -0
  420. package/src/shade/playground/path_traced_media/main.js +440 -0
  421. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts +26 -0
  422. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts.map +1 -0
  423. package/src/shade/playground/path_traced_media/make_wave_pool_geometry.js +117 -0
  424. package/src/shade/playground/path_traced_media/views.d.ts +21 -0
  425. package/src/shade/playground/path_traced_media/views.d.ts.map +1 -0
  426. package/src/shade/playground/path_traced_media/views.js +161 -0
  427. package/src/shade/playground/sh_exponential/README.md +43 -0
  428. package/src/shade/playground/sh_exponential/index.html +59 -0
  429. package/src/shade/playground/sh_exponential/main.d.ts +2 -0
  430. package/src/shade/playground/sh_exponential/main.d.ts.map +1 -0
  431. package/src/shade/playground/sh_exponential/main.js +571 -0
  432. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts +46 -0
  433. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -0
  434. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +270 -0
  435. package/src/shade/playground/water_refraction/README.md +158 -0
  436. package/src/shade/playground/water_refraction/index.html +40 -0
  437. package/src/shade/playground/water_refraction/main.d.ts +2 -0
  438. package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
  439. package/src/shade/playground/water_refraction/main.js +202 -0
  440. package/src/shade/playground/water_refraction/world.d.ts +39 -0
  441. package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
  442. package/src/shade/playground/water_refraction/world.js +141 -0
  443. package/src/shade/renderer/Renderer.d.ts +2 -0
  444. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  445. package/src/shade/renderer/Renderer.js +27 -0
  446. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
  447. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  448. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  449. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  450. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +9 -1
  451. package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.d.ts.map +1 -1
  452. package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.js +6 -4
  453. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  454. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  455. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts +7 -0
  456. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts.map +1 -1
  457. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.js +12 -12
  458. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts +4 -0
  459. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts.map +1 -1
  460. package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.js +13 -9
  461. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  462. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +2 -0
  463. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  464. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
  465. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  466. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -9
  467. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  468. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +20 -10
  469. package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts +8 -0
  470. package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
  471. package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
  472. package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
  473. package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts +2 -1
  474. package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts.map +1 -1
  475. package/src/shade/renderer/light/environment/rgbe/load_environment_map.js +2 -1
  476. package/src/shade/renderer/light/environment/sh_exponential/README.md +171 -0
  477. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts +170 -0
  478. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts.map +1 -0
  479. package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.js +377 -0
  480. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts +16 -0
  481. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts.map +1 -0
  482. package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.js +27 -0
  483. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts +21 -0
  484. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -0
  485. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +53 -0
  486. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts +33 -0
  487. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts.map +1 -0
  488. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.js +90 -0
  489. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts +28 -0
  490. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts.map +1 -0
  491. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.js +92 -0
  492. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts +39 -0
  493. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts.map +1 -0
  494. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.js +44 -0
  495. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts +42 -0
  496. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts.map +1 -0
  497. package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.js +123 -0
  498. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +30 -0
  499. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -0
  500. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +147 -0
  501. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts +24 -0
  502. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -0
  503. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +79 -0
  504. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts +17 -0
  505. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -0
  506. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +99 -0
  507. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts +24 -0
  508. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -0
  509. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +104 -0
  510. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts +12 -0
  511. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -0
  512. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +93 -0
  513. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  514. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  515. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  516. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
  517. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  518. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
  519. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  520. package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts +1 -1
  521. package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts.map +1 -1
  522. package/src/shade/renderer/material/StandardShadeMaterial.d.ts +15 -0
  523. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  524. package/src/shade/renderer/material/StandardShadeMaterial.js +17 -0
  525. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +36 -2
  526. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  527. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +218 -18
  528. package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.d.ts.map +1 -1
  529. package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.js +10 -0
  530. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts +17 -0
  531. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts.map +1 -0
  532. package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.js +24 -0
  533. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts +24 -0
  534. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts.map +1 -0
  535. package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.js +18 -0
  536. package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts +20 -0
  537. package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts.map +1 -0
  538. package/src/shade/renderer/medium/MEDIUM_STRUCT.js +43 -0
  539. package/src/shade/renderer/medium/ParticipatingMedium.d.ts +108 -0
  540. package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
  541. package/src/shade/renderer/medium/ParticipatingMedium.js +204 -0
  542. package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
  543. package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
  544. package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
  545. package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
  546. package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
  547. package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
  548. package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
  549. package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
  550. package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
  551. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
  552. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
  553. package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
  554. package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
  555. package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
  556. package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
  557. package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
  558. package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
  559. package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
  560. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
  561. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
  562. package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
  563. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
  564. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
  565. package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
  566. package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
  567. package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
  568. package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
  569. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
  570. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
  571. package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
  572. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
  573. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
  574. package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
  575. package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
  576. package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
  577. package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
  578. package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
  579. package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
  580. package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
  581. package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
  582. package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
  583. package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
  584. package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
  585. package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
  586. package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
  587. package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
  588. package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
  589. package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
  590. package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
  591. package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
  592. package/src/shade/renderer/medium/water/water_presets.js +119 -0
  593. package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
  594. package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
  595. package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
  596. package/src/shade/renderer/particles/DESIGN.md +4 -2
  597. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +1 -1
  598. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
  599. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
  600. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
  601. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
  602. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  603. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
  604. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
  605. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
  606. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
  607. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  608. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  609. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  610. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
  611. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  612. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
  613. package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
  614. package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
  615. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
  616. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
  617. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
  618. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
  619. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  620. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
  621. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  622. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
  623. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
  624. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
  625. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
  626. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
  627. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
  628. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
  629. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
  630. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
  631. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
  632. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
  633. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
  634. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
  635. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
  636. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
  637. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
  638. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
  639. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
  640. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
  641. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
  642. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
  643. package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
  644. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
  645. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
  646. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
  647. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
  648. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
  649. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
  650. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
  651. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
  652. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
  653. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
  654. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
  655. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
  656. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
  657. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
  658. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
  659. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
  660. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
  661. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
  662. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
  663. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
  664. package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
  665. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  666. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
  667. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +85 -84
  668. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +8 -0
  669. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -1
  670. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +9 -0
  671. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +28 -1
  672. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  673. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +17 -1
  674. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
  675. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
  676. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
  677. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
  678. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
  679. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  680. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
  681. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
  682. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
  683. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
  684. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
  685. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
  686. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
  687. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts +4 -0
  688. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
  689. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
  690. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
  691. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
  692. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
  693. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
  694. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
  695. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
  696. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -1
  697. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
  698. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
  699. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
  700. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
  701. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
  702. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
  703. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
  704. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
  705. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
  706. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
  707. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
  708. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
  709. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
  710. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
  711. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
  712. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
  713. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
  714. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  715. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +23 -2
  716. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
  717. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
  718. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
  719. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
  720. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  721. package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
  722. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
  723. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +5 -0
  724. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  725. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
  726. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
  727. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
  728. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
  729. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
  730. package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
  731. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
  732. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
  733. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
  734. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
  735. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
  736. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
  737. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
  738. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
  739. package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
  740. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
  741. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
  742. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
  743. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
  744. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
  745. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
  746. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
  747. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
  748. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
  749. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
  750. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
  751. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
  752. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
  753. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -0
  754. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
  755. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
  756. package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
  757. package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
  758. package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
  759. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
  760. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
  761. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
  762. package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
  763. package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -0
  764. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
  765. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
  766. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
  767. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
  768. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
  769. package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
  770. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
  771. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
  772. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
  773. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
  774. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
  775. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
  776. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
  777. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
  778. package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
  779. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
  780. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
  781. package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
  782. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts +4 -0
  783. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
  784. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +135 -0
  785. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
  786. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
  787. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
  788. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
  789. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
  790. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
  791. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
  792. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
  793. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
  794. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
  795. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
  796. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
  797. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
  798. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
  799. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
  800. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
  801. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
  802. package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
  803. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
  804. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
  805. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
  806. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
  807. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
  808. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
  809. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
  810. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
  811. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
  812. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
  813. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
  814. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
  815. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
  816. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
  817. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
  818. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
  819. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
  820. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
  821. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
  822. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
  823. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
  824. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
  825. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
  826. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
  827. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
  828. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
  829. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
  830. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
  831. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
  832. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
  833. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
  834. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
  835. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
  836. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
  837. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
  838. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
  839. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
  840. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
  841. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
  842. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
  843. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
  844. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
  845. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
  846. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
  847. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
  848. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
  849. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
  850. package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
  851. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
  852. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
  853. package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
  854. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +7 -7
  855. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +7 -7
  856. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +42 -10
  857. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  858. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +104 -48
  859. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +20 -4
  860. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  861. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +186 -74
  862. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +2 -1
  863. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  864. package/src/shade/renderer/shadow/map/Shadowmap.js +2 -1
  865. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts +30 -0
  866. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts.map +1 -0
  867. package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.js +52 -0
  868. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +14 -0
  869. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +1 -0
  870. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +20 -0
  871. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts +8 -0
  872. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts.map +1 -0
  873. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js +7 -0
  874. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +8 -6
  875. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
  876. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +28 -34
  877. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts +3 -2
  878. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts.map +1 -1
  879. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.js +19 -14
  880. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +4 -3
  881. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  882. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +12 -7
  883. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +4 -4
  884. package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +4 -4
  885. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
  886. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +39 -17
  887. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +1 -1
  888. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +5 -36
  889. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +1 -1
  890. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +3 -2
  891. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +1 -1
  892. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  893. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +49 -35
  894. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +4 -1
  895. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +1 -1
  896. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +8 -9
  897. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +2 -2
  898. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +1 -1
  899. package/src/shade/renderer/shadow/vsm/decode_tile_address.js +15 -23
  900. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +1 -1
  901. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +6 -9
  902. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +1 -1
  903. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +19 -9
  904. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +1 -1
  905. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +18 -6
  906. package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts +1 -1
  907. package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts.map +1 -1
  908. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts +18 -1
  909. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts.map +1 -1
  910. package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.js +24 -3
  911. package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts +1 -1
  912. package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts.map +1 -1
  913. package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts +0 -1
  914. package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts.map +1 -1
  915. package/src/shade/renderer/texture/util/get_single_pixel_texture.js +2 -23
  916. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts +11 -0
  917. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts.map +1 -0
  918. package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.js +34 -0
  919. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +17 -8
  920. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  921. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +35 -64
  922. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +21 -0
  923. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -0
  924. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +70 -0
  925. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts +31 -0
  926. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts.map +1 -0
  927. package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.js +86 -0
  928. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  929. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  930. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  931. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +6 -7
  932. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +7 -7
  933. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +72 -27
  934. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  935. package/src/shade/renderer/water/GPUWaterRenderer.js +275 -138
  936. package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
  937. package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
  938. package/src/shade/renderer/water/chunk_water_gi.js +56 -0
  939. package/src/shade/renderer/water/chunk_water_transport.d.ts +7 -0
  940. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
  941. package/src/shade/renderer/water/chunk_water_transport.js +105 -0
  942. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +29 -0
  943. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
  944. package/src/shade/renderer/water/medium/GPUWaterBodies.js +116 -0
  945. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +23 -0
  946. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -0
  947. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +42 -0
  948. package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts +9 -0
  949. package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts.map +1 -0
  950. package/src/shade/renderer/water/medium/chunk_water_medium_derived.js +55 -0
  951. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts +8 -0
  952. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts.map +1 -0
  953. package/src/shade/renderer/water/medium/chunk_water_medium_scattering.js +17 -0
  954. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +8 -0
  955. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -0
  956. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +30 -0
  957. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts +28 -0
  958. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -0
  959. package/src/shade/renderer/water/optics/chunk_water_inscatter.js +123 -0
  960. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +23 -0
  961. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +1 -0
  962. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +18 -0
  963. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +1 -0
  964. package/src/shade/renderer/water/optics/chunk_water_optics.d.ts +12 -0
  965. package/src/shade/renderer/water/optics/chunk_water_optics.d.ts.map +1 -0
  966. package/src/shade/renderer/water/optics/chunk_water_optics.js +75 -0
  967. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +27 -0
  968. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -0
  969. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +74 -0
  970. package/src/shade/renderer/water/shader_water.d.ts +15 -26
  971. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  972. package/src/shade/renderer/water/shader_water.js +373 -213
  973. package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
  974. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
  975. package/src/shade/renderer/water/shader_water_avboit.js +268 -0
  976. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +98 -0
  977. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
  978. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +408 -0
  979. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +12 -0
  980. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +1 -0
  981. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +27 -0
  982. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +14 -0
  983. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +1 -0
  984. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +49 -0
  985. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +15 -0
  986. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -0
  987. package/src/shade/renderer/water/surface/chunk_water_wave.js +48 -0
  988. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +9 -0
  989. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +1 -0
  990. package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +47 -0
  991. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +10 -0
  992. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +1 -0
  993. package/src/shade/renderer/water/surface/shader_water_surface_write.js +51 -0
  994. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +12 -0
  995. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +1 -0
  996. package/src/shade/renderer/water/surface/shader_water_wave_step.js +54 -0
  997. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +13 -0
  998. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +1 -0
  999. package/src/shade/renderer/water/surface/water_surface_grid_indices.js +39 -0
  1000. package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
  1001. package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
  1002. package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
  1003. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  1004. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
  1005. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
  1006. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  1007. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +61 -6
  1008. package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
  1009. package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
  1010. package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
  1011. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +0 -29
  1012. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +0 -1
  1013. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +0 -43
  1014. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts +0 -7
  1015. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts.map +0 -1
  1016. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.js +0 -6
@@ -1,8 +1,8 @@
1
+ import { COLUMN_CHILD_1, COLUMN_CHILD_2, COLUMN_USER_DATA, ELEMENT_WORD_COUNT, NULL_NODE } from "../../../core/bvh2/bvh3/BVH.js";
1
2
  import { v3_length } from "../../../core/geom/vec3/v3_length.js";
2
3
  import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
3
4
  import { v3_quaternion_apply_inverse } from "../../../core/geom/vec3/v3_quaternion_apply_inverse.js";
4
- import { TRIANGLE_FLOAT_STRIDE } from "./decomposition/triangle_buffer_layout.js";
5
- import { mesh_enumerate_triangles } from "./decomposition/mesh_enumerate_triangles.js";
5
+ import { TRIANGLE_FEATURE_ID_OFFSET, TRIANGLE_FLOAT_STRIDE } from "./decomposition/triangle_buffer_layout.js";
6
6
  import { heightmap_enumerate_triangles } from "./decomposition/heightmap_enumerate_triangles.js";
7
7
 
8
8
  /**
@@ -13,15 +13,21 @@ import { heightmap_enumerate_triangles } from "./decomposition/heightmap_enumera
13
13
  * local frame:
14
14
  * 1. clip the ray to the shape's local bounding box (a quick reject, and a
15
15
  * finite query segment even when `tMax` is unbounded);
16
- * 2. enumerate the triangles overlapping that segment's AABB
17
- * (`mesh_enumerate_triangles` / `heightmap_enumerate_triangles`);
16
+ * 2. gather the triangles overlapping that segment's AABB — a heightmap's
17
+ * through `heightmap_enumerate_triangles`, a mesh's by walking its
18
+ * surface BVH (see {@link walk_mesh}; the same triangles the mesh
19
+ * enumerator would give, without scanning the mesh);
18
20
  * 3. two-sided Möller–Trumbore each, keeping the nearest crossing;
19
21
  * 4. return its distance and the world surface normal (the triangle's
20
22
  * geometric normal, oriented to face the ray).
21
23
  *
22
- * The triangle scratch grows on saturation and is bounded by {@link MAX_TRIS}
23
- * (a ray crossing more triangles than that in one mesh is not a realistic
24
- * raycast — it would mean skewering a 65k-triangle mesh lengthwise).
24
+ * The heightmap's triangle scratch grows on saturation and is bounded by {@link MAX_TRIS}.
25
+ * A segment's box is not bounded by anything that small: a long shallow ray
26
+ * over terrain boxes in the terrain's whole area (256 m at 1 m cells is
27
+ * 131,072 triangles). Past the bound the segment is tested a piece at a time
28
+ * — each sized so its box fits — instead of being cut off; the scratch
29
+ * used to stop at 65,536 and drop the rest, so the ray missed any surface it
30
+ * met beyond them.
25
31
  *
26
32
  * @author Alex Goldring
27
33
  * @copyright Company Named Limited (c) 2026
@@ -35,14 +41,73 @@ const INITIAL_TRIS = 1024;
35
41
  const MAX_TRIS = 1 << 16;
36
42
  let tri_buf = new Float64Array(INITIAL_TRIS * TRIANGLE_FLOAT_STRIDE);
37
43
 
44
+ /**
45
+ * Shortest piece of the clipped segment worth splitting further, as a fraction
46
+ * of the segment. A piece this short whose box still overlaps more than
47
+ * {@link MAX_TRIS} triangles is not a long ray, it is a pile of triangles in one
48
+ * spot; it is tested against the first {@link MAX_TRIS} and reported once.
49
+ * @type {number}
50
+ */
51
+ const MIN_PIECE_FRACTION = 1 / (1 << 20);
52
+
53
+ /**
54
+ * Whether a piece too short to split has overflowed (once per process).
55
+ * @type {boolean}
56
+ */
57
+ let overflow_reported = false;
58
+
38
59
  const EPS = 1e-12;
39
60
  const AABB_FATTEN = 1e-5; // guards triangles whose AABB just abuts the segment
40
61
 
62
+ /**
63
+ * How far past its entry into the shape's box, along its fastest axis, a ray
64
+ * with an unbounded reach is walked when nothing in the shape's bounds ends it:
65
+ * far past any surface a body could carry, and far enough short of float64's
66
+ * 1.8e308 that the segment's box stays finite.
67
+ * @type {number}
68
+ */
69
+ const UNBOUNDED_REACH = 1e300;
70
+
71
+ /**
72
+ * One float32 ULP, relative: BVH node boxes are float32, rounded to nearest
73
+ * from the mesh's positions, so a node test widened by this much (and then
74
+ * the exact float64 test at the leaf) can only admit, never lose, a triangle.
75
+ * @type {number}
76
+ */
77
+ const F32_RELATIVE_SLACK = 1 / (1 << 23);
78
+
79
+ /** Float32's largest finite value; a float64 position past it has an infinite BVH box bound. */
80
+ const F32_MAX = 3.4028234663852886e38;
81
+
82
+ // Overflow to ±Infinity by multiplying (3.4e38 × 1e300), not with the
83
+ // `Infinity` constant, which makes V8 box the bounds (see the enumerator's).
84
+
85
+ /** @param {number} max a widened query maximum @returns {number} */
86
+ function f32_reach_up(max) {
87
+ return max >= F32_MAX ? max * 1e300 : max;
88
+ }
89
+
90
+ /** @param {number} min a widened query minimum @returns {number} */
91
+ function f32_reach_down(min) {
92
+ return min <= -F32_MAX ? min * 1e300 : min;
93
+ }
94
+
95
+ /**
96
+ * {@link walk_mesh}'s own node stack. It must not be
97
+ * SCRATCH_UINT32_TRAVERSAL_STACK: the physics raycast reaches this from inside
98
+ * its broadphase walk, which keeps that stack's pointer in a local — a nested
99
+ * walk there writes over the entries it has yet to pop (it looped forever).
100
+ * At most one pending sibling per level, so near the tree's height; grown on
101
+ * demand.
102
+ * @type {Uint32Array}
103
+ */
104
+ let stack = new Uint32Array(64);
105
+
41
106
  /**
42
107
  * @param {AbstractShape3D} shape a concave shape (`is_convex === false`)
43
108
  * @param {ArrayLike<number>} position body world position, indexed as
44
109
  * [x, y, z] — read by index like `rotation`, so an `{x, y, z}` object
45
- * sends a NaN ray into the decomposition and returns NaN
110
+ * makes a NaN ray, which misses (`Infinity`)
46
111
  * @param {ArrayLike<number>} rotation body rotation quaternion (x,y,z,w)
47
112
  * @param {number} ox ray origin x (world)
48
113
  * @param {number} oy ray origin y (world)
@@ -50,7 +115,7 @@ const AABB_FATTEN = 1e-5; // guards triangles whose AABB just abuts the segment
50
115
  * @param {number} dx ray dir x (world, unit)
51
116
  * @param {number} dy ray dir y (world, unit)
52
117
  * @param {number} dz ray dir z (world, unit)
53
- * @param {number} tMax
118
+ * @param {number} tMax reach; NaN reaches nothing (a miss)
54
119
  * @param {Float64Array|Vector3} outNormal world surface normal, written on hit
55
120
  * @returns {number} hit distance, or `Infinity` on miss
56
121
  */
@@ -62,33 +127,215 @@ export function refine_ray_concave(shape, position, rotation, ox, oy, oz, dx, dy
62
127
  const lox = lo[0], loy = lo[1], loz = lo[2];
63
128
  const ldx = ld[0], ldy = ld[1], ldz = ld[2];
64
129
 
130
+ // A NaN anywhere in the ray (or the pose it was taken through), or an
131
+ // infinite direction, makes a NaN query box, which overlaps everything: the
132
+ // walks below would test the whole shape — and the heightmap's piece walk,
133
+ // splitting a box that never shrinks, would take a million pieces to finish.
134
+ // Such a ray crosses nothing. (An infinite origin is the clip's business.)
135
+ if (lox !== lox || loy !== loy || loz !== loz || !Number.isFinite(ldx + ldy + ldz)) return Infinity;
136
+
65
137
  // Clip the local ray to the shape's local AABB → segment [tEnter, tExit].
138
+ // Only an axis the ray does not move along at all is held to the origin's
139
+ // slab, as in walk_mesh: a component however small still crosses a face,
140
+ // and a large surface is met far along it (1 nm above a 200 km floor at
141
+ // 1e-13 a metre is a hit 10 km on; Möller–Trumbore's det there is 4e-3).
142
+ // Divided, not multiplied by a reciprocal: a subnormal component's
143
+ // reciprocal is infinite, and 0 × Infinity, an origin on a face, is NaN.
66
144
  shape.compute_bounding_box(bounds);
67
145
  let tEnter = 0, tExit = tMax;
68
- if (ldx > EPS || ldx < -EPS) {
69
- const inv = 1 / ldx;
70
- let t1 = (bounds[0] - lox) * inv, t2 = (bounds[3] - lox) * inv;
146
+ if (ldx !== 0) {
147
+ let t1 = (bounds[0] - lox) / ldx, t2 = (bounds[3] - lox) / ldx;
71
148
  if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
72
149
  if (t1 > tEnter) tEnter = t1;
73
150
  if (t2 < tExit) tExit = t2;
74
151
  } else if (lox < bounds[0] || lox > bounds[3]) return Infinity;
75
- if (ldy > EPS || ldy < -EPS) {
76
- const inv = 1 / ldy;
77
- let t1 = (bounds[1] - loy) * inv, t2 = (bounds[4] - loy) * inv;
152
+ if (ldy !== 0) {
153
+ let t1 = (bounds[1] - loy) / ldy, t2 = (bounds[4] - loy) / ldy;
78
154
  if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
79
155
  if (t1 > tEnter) tEnter = t1;
80
156
  if (t2 < tExit) tExit = t2;
81
157
  } else if (loy < bounds[1] || loy > bounds[4]) return Infinity;
82
- if (ldz > EPS || ldz < -EPS) {
83
- const inv = 1 / ldz;
84
- let t1 = (bounds[2] - loz) * inv, t2 = (bounds[5] - loz) * inv;
158
+ if (ldz !== 0) {
159
+ let t1 = (bounds[2] - loz) / ldz, t2 = (bounds[5] - loz) / ldz;
85
160
  if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
86
161
  if (t1 > tEnter) tEnter = t1;
87
162
  if (t2 < tExit) tExit = t2;
88
163
  } else if (loz < bounds[2] || loz > bounds[5]) return Infinity;
89
- if (tExit < tEnter) return Infinity; // ray misses the shape's AABB entirely
164
+ // The ray misses the shape's AABB entirely — or its reach is NaN, which
165
+ // nothing passes: tEnter is never NaN (it only takes clip values greater
166
+ // than it), so `!(tExit >= tEnter)` catches a NaN tExit, which the piece
167
+ // walk would otherwise never reach the end of.
168
+ if (!(tExit >= tEnter)) return Infinity;
169
+
170
+ if (!(tExit < Infinity)) {
171
+ // An unbounded reach and no face to leave the box through: the shape's
172
+ // bounds are infinite or NaN on every axis the ray moves along — an
173
+ // infinite mesh vertex; an infinite height sample, which the filter
174
+ // makes NaN; an infinite heightmap size. The ray still meets what
175
+ // finite surface lies along it, but its box would hold 0 × Infinity =
176
+ // NaN on an axis it does not move along, which covers everything. End
177
+ // it UNBOUNDED_REACH past where it enters: its box stays finite.
178
+ tExit = tEnter + UNBOUNDED_REACH / Math.max(Math.abs(ldx), Math.abs(ldy), Math.abs(ldz));
179
+
180
+ // A zero direction goes nowhere (nor, in effect, does a subnormal one).
181
+ if (!(tExit < Infinity)) return Infinity;
182
+ }
183
+
184
+ ray[0] = lox; ray[1] = loy; ray[2] = loz;
185
+ ray[3] = ldx; ray[4] = ldy; ray[5] = ldz;
186
+
187
+ nearest[NEAREST_T] = tMax;
188
+ nearest[NEAREST_FID] = 0;
189
+ nearest[NEAREST_FOUND] = 0;
190
+
191
+ if (shape.isHeightMapShape3D === true) {
192
+ walk_heightmap(shape, tEnter, tExit);
193
+ } else {
194
+ walk_mesh(shape, tEnter, tExit);
195
+ }
196
+
197
+ if (nearest[NEAREST_FOUND] === 0) return Infinity;
198
+
199
+ hit_feature = nearest[NEAREST_FID];
200
+
201
+ // Normalise, orient to face the ray, then rotate the local normal to world.
202
+ let nx = nearest[NEAREST_NX], ny = nearest[NEAREST_NY], nz = nearest[NEAREST_NZ];
203
+ let nl = v3_length(nx, ny, nz);
204
+ if (nl === 0) nl = 1;
205
+ nx /= nl; ny /= nl; nz /= nl;
206
+ if (nx * ldx + ny * ldy + nz * ldz > 0) { nx = -nx; ny = -ny; nz = -nz; }
207
+ v3_quaternion_apply(outNormal, 0, nx, ny, nz, qx, qy, qz, qw);
208
+ return nearest[NEAREST_T];
209
+ }
210
+
211
+ // ── The query in progress (single-threaded; refine_ray_concave is not re-entered) ──
212
+ //
213
+ // Held in typed arrays rather than module-level `let`s: a module-level binding
214
+ // holding a double is a boxed heap number, so every write to one — and every
215
+ // read of one into a local that is then reassigned — allocates. As `let`s these
216
+ // cost a mesh ray ~3 KB of garbage.
217
+
218
+ /** The ray, shape-local: origin xyz, direction xyz. @type {Float64Array} */
219
+ const ray = new Float64Array(6);
220
+
221
+ /**
222
+ * The nearest crossing so far: its distance (starts at tMax, exclusive), its
223
+ * triangle's feature id, whether there is one (0/1), and its geometric normal
224
+ * e1 × e2, unnormalised.
225
+ * @type {Float64Array}
226
+ */
227
+ const nearest = new Float64Array(6);
228
+ const NEAREST_T = 0;
229
+ const NEAREST_FID = 1;
230
+ const NEAREST_FOUND = 2;
231
+ const NEAREST_NX = 3;
232
+ const NEAREST_NY = 4;
233
+ const NEAREST_NZ = 5;
90
234
 
91
- // Query AABB = bbox of the clipped local segment.
235
+ /** The feature id of the triangle the last call to hit anything struck. */
236
+ let hit_feature = 0;
237
+
238
+ /**
239
+ * The feature id of the triangle the most recent {@link refine_ray_concave}
240
+ * that returned a hit struck — the enumerators' id, the triangle's index in
241
+ * its shape's triangulation plus one. Read straight after that call: a later
242
+ * hit overwrites it, a miss leaves it alone.
243
+ *
244
+ * @returns {number}
245
+ */
246
+ export function refine_ray_concave_hit_feature() {
247
+ return hit_feature;
248
+ }
249
+
250
+ /**
251
+ * Two-sided Möller–Trumbore of the query ray against one triangle (shape-local
252
+ * vertices), keeping it if it is the nearest crossing so far. A tie at one
253
+ * distance goes to the lower feature id — the order both enumerators emit in,
254
+ * so the answer does not depend on the order triangles are tested in, and a
255
+ * single in-order pass keeps the first one it met.
256
+ *
257
+ * The vertices are read from where they are stored, by index: passed as nine
258
+ * doubles to a call V8 does not inline, each is boxed into a heap number — a
259
+ * mesh ray allocated 330 bytes that way, a heightmap ray 190 more than it needs.
260
+ *
261
+ * @param {ArrayLike<number>} p the array holding the vertices
262
+ * @param {number} ia index of vertex a's x in `p`; y and z follow
263
+ * @param {number} ib index of vertex b's x
264
+ * @param {number} ic index of vertex c's x
265
+ * @param {number} fid the triangle's feature id
266
+ */
267
+ function test_triangle(p, ia, ib, ic, fid) {
268
+ const ax = p[ia], ay = p[ia + 1], az = p[ia + 2];
269
+ const bx = p[ib], by = p[ib + 1], bz = p[ib + 2];
270
+ const cx = p[ic], cy = p[ic + 1], cz = p[ic + 2];
271
+ const ldx = ray[3], ldy = ray[4], ldz = ray[5];
272
+
273
+ const e1x = bx - ax, e1y = by - ay, e1z = bz - az;
274
+ const e2x = cx - ax, e2y = cy - ay, e2z = cz - az;
275
+
276
+ const px = ldy * e2z - ldz * e2y, py = ldz * e2x - ldx * e2z, pz = ldx * e2y - ldy * e2x;
277
+ const det = e1x * px + e1y * py + e1z * pz;
278
+ if (det < EPS && det > -EPS) return; // ray parallel to the triangle
279
+ // det can overflow to ±Infinity on finite edges (1e154 and more); 1/det is
280
+ // then ±0 and u, v and t all come out 0 — a "crossing" at the ray's origin.
281
+ // No answer can be had from such a triangle here; it is not crossed.
282
+ if (!(det > -Infinity && det < Infinity)) return;
283
+ const invDet = 1 / det;
284
+
285
+ const tvx = ray[0] - ax, tvy = ray[1] - ay, tvz = ray[2] - az;
286
+ const u = (tvx * px + tvy * py + tvz * pz) * invDet;
287
+ if (u < 0 || u > 1) return;
288
+
289
+ const wx = tvy * e1z - tvz * e1y, wy = tvz * e1x - tvx * e1z, wz = tvx * e1y - tvy * e1x;
290
+ const v = (ldx * wx + ldy * wy + ldz * wz) * invDet;
291
+ if (v < 0 || u + v > 1) return;
292
+
293
+ const best = nearest[NEAREST_T];
294
+ const t = (e2x * wx + e2y * wy + e2z * wz) * invDet;
295
+ // A NaN or infinite vertex (a bad height sample, a NaN in a mesh) leaves t
296
+ // NaN — through det, or through w — and such a triangle is not there. The
297
+ // comparisons above are all false for NaN, so this is where it is turned
298
+ // away: taken, at a NaN distance, no later crossing could compare nearer.
299
+ if (!(t >= 0) || t > best) return;
300
+ if (t === best && !(nearest[NEAREST_FOUND] !== 0 && fid < nearest[NEAREST_FID])) return;
301
+
302
+ nearest[NEAREST_T] = t;
303
+ nearest[NEAREST_FID] = fid;
304
+ nearest[NEAREST_FOUND] = 1;
305
+ // Geometric normal e1 × e2 (local, unnormalised).
306
+ nearest[NEAREST_NX] = e1y * e2z - e1z * e2y;
307
+ nearest[NEAREST_NY] = e1z * e2x - e1x * e2z;
308
+ nearest[NEAREST_NZ] = e1x * e2y - e1y * e2x;
309
+ }
310
+
311
+ /**
312
+ * A mesh: walk its surface BVH ({@link MeshShape3D#get_surface_bvh}) for the
313
+ * triangles the clipped segment [tEnter, tExit] can cross, instead of
314
+ * enumerating every triangle under the segment's box — which for the mesh was
315
+ * a scan of every triangle in it (1.1 ms a ray on 200k triangles).
316
+ *
317
+ * The candidates are the ones enumeration filtered to — triangles whose box
318
+ * overlaps the segment's box (fattened by {@link AABB_FATTEN}) — less those
319
+ * whose BVH ancestor the ray provably does not enter before the nearest
320
+ * crossing so far. A crossing lies on its triangle, so inside every ancestor's
321
+ * box; the ancestors are tested fattened by {@link AABB_FATTEN} plus a float32
322
+ * ULP (node boxes are float32), far beyond Möller–Trumbore's rounding, so no
323
+ * crossing is culled. With the order-independent tie-break in
324
+ * {@link test_triangle}, the answer is the enumeration's, bit for bit.
325
+ *
326
+ * @param {MeshShape3D} shape
327
+ * @param {number} tEnter
328
+ * @param {number} tExit
329
+ */
330
+ function walk_mesh(shape, tEnter, tExit) {
331
+ const indices = shape.indices;
332
+
333
+ if (indices.length < 3) return;
334
+
335
+ const lox = ray[0], loy = ray[1], loz = ray[2];
336
+ const ldx = ray[3], ldy = ray[4], ldz = ray[5];
337
+
338
+ // The segment's box, as enumeration filtered by.
92
339
  const sax = lox + ldx * tEnter, say = loy + ldy * tEnter, saz = loz + ldz * tEnter;
93
340
  const sbx = lox + ldx * tExit, sby = loy + ldy * tExit, sbz = loz + ldz * tExit;
94
341
  const qminx = (sax < sbx ? sax : sbx) - AABB_FATTEN;
@@ -98,63 +345,369 @@ export function refine_ray_concave(shape, position, rotation, ox, oy, oz, dx, dy
98
345
  const qmaxy = (say > sby ? say : sby) + AABB_FATTEN;
99
346
  const qmaxz = (saz > sbz ? saz : sbz) + AABB_FATTEN;
100
347
 
101
- const enumerate = shape.isHeightMapShape3D === true ? heightmap_enumerate_triangles : mesh_enumerate_triangles;
102
- let cap = (tri_buf.length / TRIANGLE_FLOAT_STRIDE) | 0;
103
- // The enumerators return the TRUE overlap count, which can EXCEED the buffer
104
- // capacity (writes past the end are silently dropped). So the grow trigger is
105
- // `count > cap` (not `=== cap`): regrow whenever the true count overflowed.
106
- let count = enumerate(tri_buf, 0, shape, qminx, qminy, qminz, qmaxx, qmaxy, qmaxz);
107
- while (count > cap && cap < MAX_TRIS) {
108
- cap = cap * 2 < MAX_TRIS ? cap * 2 : MAX_TRIS;
109
- tri_buf = new Float64Array(cap * TRIANGLE_FLOAT_STRIDE);
110
- count = enumerate(tri_buf, 0, shape, qminx, qminy, qminz, qmaxx, qmaxy, qmaxz);
348
+ // The same box widened by a float32 ULP, for the node test only. No floor
349
+ // at float32's subnormal step is needed here, unlike the enumerator's: these
350
+ // bounds carry ±AABB_FATTEN, so the nearest one to zero that is not zero is
351
+ // an ULP of 1e-5 (1.7e-21), a normal float32. A bound at or past float32's
352
+ // range reaches to infinity, as in the enumerator: a node wholly past it has
353
+ // a box of [+Infinity, +Infinity] (or the negative), beyond any finite bound.
354
+ const wminx = f32_reach_down(qminx - Math.abs(qminx) * F32_RELATIVE_SLACK);
355
+ const wminy = f32_reach_down(qminy - Math.abs(qminy) * F32_RELATIVE_SLACK);
356
+ const wminz = f32_reach_down(qminz - Math.abs(qminz) * F32_RELATIVE_SLACK);
357
+ const wmaxx = f32_reach_up(qmaxx + Math.abs(qmaxx) * F32_RELATIVE_SLACK);
358
+ const wmaxy = f32_reach_up(qmaxy + Math.abs(qmaxy) * F32_RELATIVE_SLACK);
359
+ const wmaxz = f32_reach_up(qmaxz + Math.abs(qmaxz) * F32_RELATIVE_SLACK);
360
+
361
+ // Only an axis the ray does not move along at all is held to the origin's
362
+ // slab. Treating a component under EPS as zero here, as the clip does, would
363
+ // cull nodes such a ray does reach at the 1e12-unit distances a direction
364
+ // that short crosses at; with an exact test the slab bounds stay exact.
365
+ const parallel_x = ldx === 0;
366
+ const parallel_y = ldy === 0;
367
+ const parallel_z = ldz === 0;
368
+ const inv_x = 1 / ldx, inv_y = 1 / ldy, inv_z = 1 / ldz;
369
+ const forward_x = ldx > 0, forward_y = ldy > 0, forward_z = ldz > 0;
370
+ // A component under 2^-1024 has an infinite reciprocal: a slab distance
371
+ // times it is ±Infinity (NaN at zero), where the true one, the gap over the
372
+ // component, is finite — 1e305 for a gap of 1e-5 at 1e-310 — and a node it
373
+ // reaches read as entered past any finite reach. Such an axis divides.
374
+ const divide_x = !(inv_x > -Infinity && inv_x < Infinity);
375
+ const divide_y = !(inv_y > -Infinity && inv_y < Infinity);
376
+ const divide_z = !(inv_z > -Infinity && inv_z < Infinity);
377
+
378
+ const positions = shape.positions;
379
+ const bvh = shape.get_surface_bvh();
380
+ const root = bvh.root;
381
+
382
+ if (root === NULL_NODE) return;
383
+
384
+ // Read the node columns directly, as ebvh_geometry_query_nearest_triangle_ray does.
385
+ const float32 = bvh.__data_float32;
386
+ const uint32 = bvh.__data_uint32;
387
+
388
+ let pointer = 0;
389
+ stack[pointer++] = root;
390
+
391
+ while (pointer > 0) {
392
+ const node = stack[--pointer];
393
+ const address = node * ELEMENT_WORD_COUNT;
394
+
395
+ const x0 = float32[address], y0 = float32[address + 1], z0 = float32[address + 2];
396
+ const x1 = float32[address + 3], y1 = float32[address + 4], z1 = float32[address + 5];
397
+
398
+ if (x0 > wmaxx || x1 < wminx || y0 > wmaxy || y1 < wminy || z0 > wmaxz || z1 < wminz) continue;
399
+
400
+ // Does the ray enter the (fattened) node box over [0, nearest so far]?
401
+ // Each axis's entry face is the one the ray's sign says it comes in
402
+ // through, not the nearer of the two distances: a node wholly past
403
+ // float32's range has a minimum of +Infinity (or a maximum of
404
+ // -Infinity), which fattened is Infinity - Infinity = NaN, and a NaN
405
+ // distance must bound nothing. Ordering by comparison, a ray coming
406
+ // back toward the origin took the other, infinite face's -Infinity
407
+ // for its exit and never entered such a node.
408
+ let t_near = 0;
409
+ let t_far = nearest[NEAREST_T];
410
+
411
+ {
412
+ const lo_x = x0 - AABB_FATTEN - Math.abs(x0) * F32_RELATIVE_SLACK;
413
+ const hi_x = x1 + AABB_FATTEN + Math.abs(x1) * F32_RELATIVE_SLACK;
414
+ if (parallel_x) {
415
+ if (lox < lo_x || lox > hi_x) continue;
416
+ } else {
417
+ const near = (forward_x ? lo_x : hi_x) - lox, far = (forward_x ? hi_x : lo_x) - lox;
418
+ const t_in = divide_x ? near / ldx : near * inv_x;
419
+ const t_out = divide_x ? far / ldx : far * inv_x;
420
+ if (t_in > t_near) t_near = t_in;
421
+ if (t_out < t_far) t_far = t_out;
422
+ }
423
+
424
+ const lo_y = y0 - AABB_FATTEN - Math.abs(y0) * F32_RELATIVE_SLACK;
425
+ const hi_y = y1 + AABB_FATTEN + Math.abs(y1) * F32_RELATIVE_SLACK;
426
+ if (parallel_y) {
427
+ if (loy < lo_y || loy > hi_y) continue;
428
+ } else {
429
+ const near = (forward_y ? lo_y : hi_y) - loy, far = (forward_y ? hi_y : lo_y) - loy;
430
+ const t_in = divide_y ? near / ldy : near * inv_y;
431
+ const t_out = divide_y ? far / ldy : far * inv_y;
432
+ if (t_in > t_near) t_near = t_in;
433
+ if (t_out < t_far) t_far = t_out;
434
+ }
435
+
436
+ const lo_z = z0 - AABB_FATTEN - Math.abs(z0) * F32_RELATIVE_SLACK;
437
+ const hi_z = z1 + AABB_FATTEN + Math.abs(z1) * F32_RELATIVE_SLACK;
438
+ if (parallel_z) {
439
+ if (loz < lo_z || loz > hi_z) continue;
440
+ } else {
441
+ const near = (forward_z ? lo_z : hi_z) - loz, far = (forward_z ? hi_z : lo_z) - loz;
442
+ const t_in = divide_z ? near / ldz : near * inv_z;
443
+ const t_out = divide_z ? far / ldz : far * inv_z;
444
+ if (t_in > t_near) t_near = t_in;
445
+ if (t_out < t_far) t_far = t_out;
446
+ }
447
+
448
+ if (t_near > t_far) continue;
449
+ }
450
+
451
+ const child_1 = uint32[address + COLUMN_CHILD_1];
452
+
453
+ if (child_1 !== NULL_NODE) {
454
+ if (pointer + 2 > stack.length) {
455
+ const grown = new Uint32Array(stack.length * 2);
456
+ grown.set(stack);
457
+ stack = grown;
458
+ }
459
+
460
+ stack[pointer++] = child_1;
461
+ stack[pointer++] = uint32[address + COLUMN_CHILD_2];
462
+ continue;
463
+ }
464
+
465
+ const tri = uint32[address + COLUMN_USER_DATA];
466
+
467
+ const i_a = indices[tri * 3] * 3;
468
+ const i_b = indices[tri * 3 + 1] * 3;
469
+ const i_c = indices[tri * 3 + 2] * 3;
470
+
471
+ const ax = positions[i_a], ay = positions[i_a + 1], az = positions[i_a + 2];
472
+ const bx = positions[i_b], by = positions[i_b + 1], bz = positions[i_b + 2];
473
+ const cx = positions[i_c], cy = positions[i_c + 1], cz = positions[i_c + 2];
474
+
475
+ // the exact filter enumeration applied: the triangle's box against the segment's
476
+ if ((ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx)) > qmaxx) continue;
477
+ if ((ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx)) < qminx) continue;
478
+ if ((ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy)) > qmaxy) continue;
479
+ if ((ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy)) < qminy) continue;
480
+ if ((az < bz ? (az < cz ? az : cz) : (bz < cz ? bz : cz)) > qmaxz) continue;
481
+ if ((az > bz ? (az > cz ? az : cz) : (bz > cz ? bz : cz)) < qminz) continue;
482
+
483
+ test_triangle(positions, i_a, i_b, i_c, tri + 1);
111
484
  }
112
- // If the true count still exceeds MAX_TRIS, only `cap` triangles were written;
113
- // clamp so the consume loop never reads undefined past the buffer (which would
114
- // poison `best` with NaN). Dropping the overflow is the documented MAX_TRIS bound.
115
- const n_tris = count < cap ? count : cap;
116
-
117
- // Two-sided Möller–Trumbore over the candidates; keep the nearest.
118
- let best = tMax;
119
- let found = false;
120
- let nx = 0, ny = 0, nz = 0;
121
- for (let i = 0; i < n_tris; i++) {
122
- const o = i * TRIANGLE_FLOAT_STRIDE;
123
- const ax = tri_buf[o], ay = tri_buf[o + 1], az = tri_buf[o + 2];
124
- const e1x = tri_buf[o + 3] - ax, e1y = tri_buf[o + 4] - ay, e1z = tri_buf[o + 5] - az;
125
- const e2x = tri_buf[o + 6] - ax, e2y = tri_buf[o + 7] - ay, e2z = tri_buf[o + 8] - az;
126
-
127
- const px = ldy * e2z - ldz * e2y, py = ldz * e2x - ldx * e2z, pz = ldx * e2y - ldy * e2x;
128
- const det = e1x * px + e1y * py + e1z * pz;
129
- if (det < EPS && det > -EPS) continue; // ray parallel to the triangle
130
- const invDet = 1 / det;
131
-
132
- const tvx = lox - ax, tvy = loy - ay, tvz = loz - az;
133
- const u = (tvx * px + tvy * py + tvz * pz) * invDet;
134
- if (u < 0 || u > 1) continue;
135
-
136
- const wx = tvy * e1z - tvz * e1y, wy = tvz * e1x - tvx * e1z, wz = tvx * e1y - tvy * e1x;
137
- const v = (ldx * wx + ldy * wy + ldz * wz) * invDet;
138
- if (v < 0 || u + v > 1) continue;
139
-
140
- const t = (e2x * wx + e2y * wy + e2z * wz) * invDet;
141
- if (t < 0 || t >= best) continue;
142
-
143
- best = t;
144
- found = true;
145
- // Geometric normal e1 × e2 (local, unnormalised).
146
- nx = e1y * e2z - e1z * e2y;
147
- ny = e1z * e2x - e1x * e2z;
148
- nz = e1x * e2y - e1y * e2x;
485
+ }
486
+
487
+ /**
488
+ * A heightmap: enumerate the triangles under the clipped segment's box and
489
+ * test each. The segment [tEnter, tExit] is one piece unless its box overlaps
490
+ * more than MAX_TRIS triangles; then it is walked in ray order in pieces sized
491
+ * to fit. A crossing at distance t lies on the piece covering t,
492
+ * so its triangle overlaps that piece's box — every crossing is tested — and
493
+ * once the nearest so far lies before a piece's end, no later piece can come
494
+ * nearer.
495
+ *
496
+ * @param {HeightMapShape3D} shape
497
+ * @param {number} tEnter
498
+ * @param {number} tExit
499
+ */
500
+ function walk_heightmap(shape, tEnter, tExit) {
501
+ const lox = ray[0], loy = ray[1], loz = ray[2];
502
+ const ldx = ray[3], ldy = ray[4], ldz = ray[5];
503
+
504
+ const segment = tExit - tEnter;
505
+ let piece = segment;
506
+ let t0 = tEnter;
507
+
508
+ // Set once a piece cannot be made to fit: shortening no longer shrinks its
509
+ // box below MAX_TRIS triangles (they all lie within the box's fattening,
510
+ // say), so walking on in short pieces would take a million of them, each
511
+ // enumerating the same box. The rest of the segment then goes as one piece,
512
+ // tested as far as the scratch holds, and the walk ends.
513
+ let saturated = false;
514
+
515
+ for (; ;) {
516
+ let t1 = saturated || !(piece < tExit - t0) ? tExit : t0 + piece;
517
+
518
+ // Size the piece before enumerating it: shrink it until its box holds
519
+ // at most MAX_TRIS triangles, counted in O(1) (heightmap_box_triangles),
520
+ // rather than enumerating an over-full box only to learn it was over
521
+ // full — that, once per halving, cost more than the whole old capped
522
+ // enumeration. A box's count grows at most with the square of its
523
+ // length, so scaling the length by sqrt(MAX_TRIS / count) shrinks a
524
+ // diagonal box to fit in one step and an axis-aligned one in a few. A
525
+ // segment that fits is still one piece, enumerated once, as before.
526
+ let in_box = saturated ? 0 : heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1);
527
+ while (in_box > MAX_TRIS) {
528
+ const shorter = (t1 - t0) * Math.sqrt(MAX_TRIS / in_box) * 0.9;
529
+ // `tExit - shorter < tExit`: it still moves `t` at the segment's
530
+ // magnitude, so the walk advances.
531
+ if (!(shorter > segment * MIN_PIECE_FRACTION && tExit - shorter < tExit)) {
532
+ saturated = true;
533
+ t1 = tExit;
534
+ break;
535
+ }
536
+ t1 = t0 + shorter;
537
+ in_box = heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1);
538
+ }
539
+
540
+ // Query AABB = bbox of this piece of the local segment.
541
+ const sax = lox + ldx * t0, say = loy + ldy * t0, saz = loz + ldz * t0;
542
+ const sbx = lox + ldx * t1, sby = loy + ldy * t1, sbz = loz + ldz * t1;
543
+ const qminx = (sax < sbx ? sax : sbx) - AABB_FATTEN;
544
+ const qminy = (say < sby ? say : sby) - AABB_FATTEN;
545
+ const qminz = (saz < sbz ? saz : sbz) - AABB_FATTEN;
546
+ const qmaxx = (sax > sbx ? sax : sbx) + AABB_FATTEN;
547
+ const qmaxy = (say > sby ? say : sby) + AABB_FATTEN;
548
+ const qmaxz = (saz > sbz ? saz : sbz) + AABB_FATTEN;
549
+
550
+ const cap = (tri_buf.length / TRIANGLE_FLOAT_STRIDE) | 0;
551
+ // The enumerator returns the TRUE overlap count, which can EXCEED the
552
+ // buffer capacity (writes past the end are silently dropped).
553
+ let n_tris = heightmap_enumerate_triangles(tri_buf, 0, shape, qminx, qminy, qminz, qmaxx, qmaxy, qmaxz);
554
+
555
+ if (n_tris > cap) {
556
+ if (cap < MAX_TRIS) {
557
+ // grow, and enumerate this piece again
558
+ tri_buf = new Float64Array(Math.min(MAX_TRIS, Math.max(n_tris, cap * 2)) * TRIANGLE_FLOAT_STRIDE);
559
+ continue;
560
+ }
561
+
562
+ if (!saturated) {
563
+ const half = (t1 - t0) * 0.5;
564
+ // `tExit - half < tExit`: the half still moves `t` at the segment's
565
+ // magnitude, so the walk advances.
566
+ if (half > segment * MIN_PIECE_FRACTION && tExit - half < tExit) {
567
+ piece = half;
568
+ continue;
569
+ }
570
+
571
+ // too short to split: the rest of the segment as one piece
572
+ saturated = true;
573
+ continue;
574
+ }
575
+
576
+ // The saturated last piece: test what fits, never read past it.
577
+ if (!overflow_reported) {
578
+ overflow_reported = true;
579
+ console.warn(
580
+ `refine_ray_concave: ${n_tris} triangles of a ${shape.constructor.name} lie in a stretch of`
581
+ + ` ray ${t1 - t0} long; ${cap} are tested and the rest are not.`
582
+ );
583
+ }
584
+ n_tris = cap;
585
+ }
586
+
587
+ for (let i = 0; i < n_tris; i++) {
588
+ const o = i * TRIANGLE_FLOAT_STRIDE;
589
+ test_triangle(tri_buf, o, o + 3, o + 6, tri_buf[o + TRIANGLE_FEATURE_ID_OFFSET]);
590
+ }
591
+
592
+ if (t1 >= tExit || (nearest[NEAREST_FOUND] !== 0 && nearest[NEAREST_T] < t1)) break;
593
+
594
+ // Offer the next piece twice this one's length; the sizing above takes
595
+ // it back down where the terrain is denser.
596
+ piece = 2 * (t1 - t0);
597
+ t0 = t1;
149
598
  }
599
+ }
150
600
 
151
- if (!found) return Infinity;
601
+ /**
602
+ * How many triangles {@link heightmap_box_triangles} counts for the box of the
603
+ * ray piece [t0, t1], fattened by {@link AABB_FATTEN} as the walk queries it.
604
+ *
605
+ * @param {HeightMapShape3D} shape
606
+ * @param {number} lox
607
+ * @param {number} loy
608
+ * @param {number} loz
609
+ * @param {number} ldx
610
+ * @param {number} ldy
611
+ * @param {number} ldz
612
+ * @param {number} t0
613
+ * @param {number} t1
614
+ * @returns {number}
615
+ */
616
+ function heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1) {
617
+ const sax = lox + ldx * t0, say = loy + ldy * t0, saz = loz + ldz * t0;
618
+ const sbx = lox + ldx * t1, sby = loy + ldy * t1, sbz = loz + ldz * t1;
152
619
 
153
- // Normalise, orient to face the ray, then rotate the local normal to world.
154
- let nl = v3_length(nx, ny, nz);
155
- if (nl === 0) nl = 1;
156
- nx /= nl; ny /= nl; nz /= nl;
157
- if (nx * ldx + ny * ldy + nz * ldz > 0) { nx = -nx; ny = -ny; nz = -nz; }
158
- v3_quaternion_apply(outNormal, 0, nx, ny, nz, qx, qy, qz, qw);
159
- return best;
620
+ return heightmap_box_triangles(
621
+ shape,
622
+ (sax < sbx ? sax : sbx) - AABB_FATTEN,
623
+ (say < sby ? say : sby) - AABB_FATTEN,
624
+ (saz < sbz ? saz : sbz) - AABB_FATTEN,
625
+ (sax > sbx ? sax : sbx) + AABB_FATTEN,
626
+ (say > sby ? say : sby) + AABB_FATTEN,
627
+ (saz > sbz ? saz : sbz) + AABB_FATTEN
628
+ );
629
+ }
630
+
631
+ /**
632
+ * How many triangles {@link heightmap_enumerate_triangles} emits for a query box
633
+ * in the heightmap's own frame, in O(1): the enumerator's own cell-range
634
+ * arithmetic, expression for expression, without the emitting — so the same
635
+ * number for the same box. For sizing a walk's pieces before enumerating any
636
+ * (this one's, and `shape_cast`'s over a heightmap): enumerating an over-full
637
+ * box only to learn that it was samples every height in it.
638
+ *
639
+ * @param {HeightMapShape3D} shape
640
+ * @param {number} aabb_min_x query box in the heightmap's frame
641
+ * @param {number} aabb_min_y
642
+ * @param {number} aabb_min_z
643
+ * @param {number} aabb_max_x
644
+ * @param {number} aabb_max_y
645
+ * @param {number} aabb_max_z
646
+ * @returns {number}
647
+ */
648
+ export function heightmap_box_triangles(shape, aabb_min_x, aabb_min_y, aabb_min_z, aabb_max_x, aabb_max_y, aabb_max_z) {
649
+ const sampler = shape.sampler;
650
+ if (sampler === null) return 0;
651
+
652
+ const W = sampler.width;
653
+ const H = sampler.height;
654
+ if (W < 2 || H < 2) return 0;
655
+
656
+ const size_x = shape.size[0];
657
+ const size_z = shape.size[2];
658
+ if (size_x <= 0 || size_z <= 0) return 0;
659
+
660
+ const N = shape.tessellation;
661
+ const seg_u = (W - 1) * N;
662
+ const seg_v = (H - 1) * N;
663
+
664
+ shape._ensure_basis();
665
+ const b = shape._basis;
666
+
667
+ const c_x = 0.5 * (aabb_min_x + aabb_max_x);
668
+ const c_y = 0.5 * (aabb_min_y + aabb_max_y);
669
+ const c_z = 0.5 * (aabb_min_z + aabb_max_z);
670
+
671
+ const h_x = 0.5 * (aabb_max_x - aabb_min_x);
672
+ const h_y = 0.5 * (aabb_max_y - aabb_min_y);
673
+ const h_z = 0.5 * (aabb_max_z - aabb_min_z);
674
+
675
+ const u_c = b[0] * c_x + b[1] * c_y + b[2] * c_z;
676
+ const v_c = b[3] * c_x + b[4] * c_y + b[5] * c_z;
677
+
678
+ const u_e = Math.abs(b[0]) * h_x + Math.abs(b[1]) * h_y + Math.abs(b[2]) * h_z;
679
+ const v_e = Math.abs(b[3]) * h_x + Math.abs(b[4]) * h_y + Math.abs(b[5]) * h_z;
680
+
681
+ const half_u = size_x * 0.5;
682
+ const half_v = size_z * 0.5;
683
+
684
+ const u_lo_q = u_c - u_e;
685
+ const u_hi_q = u_c + u_e;
686
+ const v_lo_q = v_c - v_e;
687
+ const v_hi_q = v_c + v_e;
688
+
689
+ if (u_lo_q > half_u || u_hi_q < -half_u) return 0;
690
+ if (v_lo_q > half_v || v_hi_q < -half_v) return 0;
691
+
692
+ const u_lo = u_lo_q > -half_u ? u_lo_q : -half_u;
693
+ const u_hi = u_hi_q < +half_u ? u_hi_q : +half_u;
694
+ const v_lo = v_lo_q > -half_v ? v_lo_q : -half_v;
695
+ const v_hi = v_hi_q < +half_v ? v_hi_q : +half_v;
696
+
697
+ const inv_cell_u = seg_u / size_x;
698
+ const inv_cell_v = seg_v / size_z;
699
+
700
+ let i_first = Math.floor((u_lo + half_u) * inv_cell_u);
701
+ let i_last = Math.ceil((u_hi + half_u) * inv_cell_u) - 1;
702
+ let j_first = Math.floor((v_lo + half_v) * inv_cell_v);
703
+ let j_last = Math.ceil((v_hi + half_v) * inv_cell_v) - 1;
704
+
705
+ if (i_first < 0) i_first = 0;
706
+ if (j_first < 0) j_first = 0;
707
+ if (i_last > seg_u - 1) i_last = seg_u - 1;
708
+ if (j_last > seg_v - 1) j_last = seg_v - 1;
709
+
710
+ if (i_first > i_last || j_first > j_last) return 0;
711
+
712
+ return (i_last - i_first + 1) * (j_last - j_first + 1) * 2;
160
713
  }