@woosh/meep-engine 3.40.0 → 3.42.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 (539) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/selection/editor_pick.d.ts.map +1 -1
  4. package/editor/selection/editor_pick.js +2 -1
  5. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  6. package/editor/tools/TransformToolV2.js +7 -1
  7. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  8. package/editor/tools/engine/ToolEngine.js +10 -0
  9. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  10. package/editor/tools/v2/TransformControls.js +7 -20
  11. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
  12. package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
  13. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  14. package/editor/view/ecs/EntityEditor.js +3 -1
  15. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  16. package/editor/view/node-graph/NodeGraphView.js +28 -12
  17. package/package.json +1 -1
  18. package/samples/engine/first-scene/index.html +4 -1
  19. package/samples/engine/first-scene/main.js +14 -9
  20. package/src/core/binary/utf8/utf8_decode.js +3 -3
  21. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
  22. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
  23. package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
  24. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
  25. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  26. package/src/core/collection/RingBuffer.js +4 -0
  27. package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
  28. package/src/core/collection/array/array_contains_duplicates.js +2 -1
  29. package/src/core/collection/array/array_copy.d.ts.map +1 -1
  30. package/src/core/collection/array/array_copy.js +23 -0
  31. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
  32. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
  34. package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
  35. package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
  36. package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
  37. package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
  38. package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
  39. package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
  40. package/src/core/collection/array/weightedRandomFromArray.js +9 -1
  41. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  42. package/src/core/collection/heap/BinaryHeap.js +4 -0
  43. package/src/core/collection/list/List.d.ts.map +1 -1
  44. package/src/core/collection/list/List.js +4 -2
  45. package/src/core/collection/set/ArraySet.js +1 -1
  46. package/src/core/collection/set/HashSet.d.ts +1 -1
  47. package/src/core/collection/set/HashSet.d.ts.map +1 -1
  48. package/src/core/collection/set/HashSet.js +4 -2
  49. package/src/core/debug/matchers/IsEqual.js +1 -1
  50. package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
  51. package/src/core/debug/matchers/IsIterableContaining.js +61 -74
  52. package/src/core/events/signal/SignalBinding.js +101 -101
  53. package/src/core/function/extractFunctionBody.js +13 -13
  54. package/src/core/function/objectsEqual.d.ts.map +1 -1
  55. package/src/core/function/objectsEqual.js +15 -14
  56. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  57. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
  58. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  59. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
  60. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  61. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
  62. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts +24 -0
  63. package/src/core/geom/3d/quaternion/swing_twist_clamp.d.ts.map +1 -0
  64. package/src/core/geom/3d/quaternion/swing_twist_clamp.js +62 -0
  65. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts +15 -0
  66. package/src/core/geom/3d/quaternion/swing_twist_compose.d.ts.map +1 -0
  67. package/src/core/geom/3d/quaternion/swing_twist_compose.js +36 -0
  68. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts +39 -0
  69. package/src/core/geom/3d/quaternion/swing_twist_error.d.ts.map +1 -0
  70. package/src/core/geom/3d/quaternion/swing_twist_error.js +85 -0
  71. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
  72. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  73. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
  74. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts +11 -6
  75. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.d.ts.map +1 -1
  76. package/src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js +27 -13
  77. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts +25 -0
  78. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.d.ts.map +1 -0
  79. package/src/core/math/linalg/eigen/matrix_symmetric_4x4_eigen.js +166 -0
  80. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts +5 -3
  81. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.d.ts.map +1 -1
  82. package/src/core/math/linalg/eigen/matrix_top_eigenvector_power_iteration.js +5 -3
  83. package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
  84. package/src/core/math/noise/curl_noise_3dt.js +20 -10
  85. package/src/core/math/noise/sdnoise.d.ts +16 -5
  86. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  87. package/src/core/math/noise/sdnoise.js +43 -9
  88. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
  89. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  90. package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
  91. package/src/engine/Engine.d.ts.map +1 -1
  92. package/src/engine/Engine.js +6 -2
  93. package/src/engine/animation/curve/AnimationCurve.d.ts +3 -0
  94. package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
  95. package/src/engine/animation/curve/AnimationCurve.js +6 -1
  96. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
  97. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  98. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
  99. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  100. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
  101. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  102. package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
  103. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  104. package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
  105. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  106. package/src/engine/control/first-person/abilities/Slide.js +1 -0
  107. package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
  108. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  109. package/src/engine/control/first-person/abilities/WallRun.js +13 -1
  110. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
  111. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  112. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
  113. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
  114. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  115. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
  116. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  117. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
  118. package/src/engine/ecs/EntityManager.d.ts +9 -1
  119. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  120. package/src/engine/ecs/EntityManager.js +44 -42
  121. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  122. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
  123. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
  124. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
  125. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  126. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
  127. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +20 -0
  128. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -1
  129. package/src/engine/ecs/gpu/GPUStateAuthority.js +21 -0
  130. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts +13 -0
  131. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.d.ts.map +1 -0
  132. package/src/engine/ecs/gpu/GPU_AUTHORITY_EVENT_HOLD_CHANGE.js +12 -0
  133. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +6 -0
  134. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -1
  135. package/src/engine/ecs/gpu/gpu_authority_grant.js +7 -1
  136. package/src/engine/ecs/gpu/gpu_authority_held.d.ts +14 -0
  137. package/src/engine/ecs/gpu/gpu_authority_held.d.ts.map +1 -0
  138. package/src/engine/ecs/gpu/gpu_authority_held.js +23 -0
  139. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts +23 -0
  140. package/src/engine/ecs/gpu/gpu_authority_hold.d.ts.map +1 -0
  141. package/src/engine/ecs/gpu/gpu_authority_hold.js +41 -0
  142. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts +14 -0
  143. package/src/engine/ecs/gpu/gpu_authority_unhold.d.ts.map +1 -0
  144. package/src/engine/ecs/gpu/gpu_authority_unhold.js +32 -0
  145. package/src/engine/ecs/ik/IKGoal.d.ts +59 -0
  146. package/src/engine/ecs/ik/IKGoal.d.ts.map +1 -0
  147. package/src/engine/ecs/ik/IKGoal.js +83 -0
  148. package/src/engine/ecs/ik/IKGoalSystem.d.ts +75 -0
  149. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -0
  150. package/src/engine/ecs/ik/IKGoalSystem.js +1456 -0
  151. package/src/engine/ecs/ik/PLAN.md +179 -0
  152. package/src/engine/ecs/parent/EntityNode.js +3 -3
  153. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  154. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  155. package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
  156. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
  157. package/src/engine/ecs/storage/BinaryBufferSerializer.d.ts.map +1 -1
  158. package/src/engine/ecs/storage/BinaryBufferSerializer.js +4 -5
  159. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
  160. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
  161. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +7 -3
  162. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
  163. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
  164. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
  165. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  166. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +9 -2
  167. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts +33 -0
  168. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.d.ts.map +1 -0
  169. package/src/engine/ecs/system/orderSystemsByDeclaredAccess.js +282 -0
  170. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  171. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
  172. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  173. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
  174. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  175. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
  176. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
  177. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  178. package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
  179. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  180. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
  181. package/src/engine/ecs/transform/T64WorldCache.js +139 -139
  182. package/src/engine/ecs/transform/t64_evaluate_local.d.ts +25 -0
  183. package/src/engine/ecs/transform/t64_evaluate_local.d.ts.map +1 -0
  184. package/src/engine/ecs/transform/t64_evaluate_local.js +35 -0
  185. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +5 -3
  186. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -1
  187. package/src/engine/ecs/transform/t64_evaluate_world.js +128 -126
  188. package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
  189. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
  190. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
  191. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
  192. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
  193. package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
  194. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  195. package/src/engine/graphics/ecs/water/Water.js +17 -0
  196. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  197. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
  198. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
  199. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
  200. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
  201. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
  202. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
  203. package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
  204. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
  205. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
  206. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
  207. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
  208. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
  209. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  210. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
  211. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
  212. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
  213. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
  214. package/src/engine/graphics3/AnimationGraphSystem.d.ts +2 -0
  215. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  216. package/src/engine/graphics3/AnimationGraphSystem.js +337 -329
  217. package/src/engine/graphics3/AnimationSystem.d.ts +2 -0
  218. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  219. package/src/engine/graphics3/AnimationSystem.js +360 -352
  220. package/src/engine/graphics3/WaterSystem.d.ts +12 -3
  221. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  222. package/src/engine/graphics3/WaterSystem.js +78 -46
  223. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  224. package/src/engine/input/devices/PointerDevice.js +29 -4
  225. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
  226. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
  227. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
  228. package/src/engine/physics/cloth/MEASUREMENTS.md +130 -0
  229. package/src/engine/physics/cloth/PLAN.md +16 -1
  230. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +5 -6
  231. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  232. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +5 -6
  233. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +4 -7
  234. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  235. package/src/engine/physics/cloth/ecs/ClothInstance.js +4 -7
  236. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +4 -3
  237. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  238. package/src/engine/physics/cloth/ecs/ClothSystem.js +4 -3
  239. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  240. package/src/engine/physics/cloth/ecs/ClothWorld.js +10 -0
  241. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +24 -24
  242. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  243. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +46 -43
  244. package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +1 -1
  245. package/src/engine/physics/cloth/ecs/cloth_write_back.js +1 -1
  246. package/src/engine/physics/constraint/solve_constraints.d.ts +0 -35
  247. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  248. package/src/engine/physics/constraint/solve_constraints.js +1 -83
  249. package/src/engine/physics/ecs/ContactProbe.d.ts +73 -0
  250. package/src/engine/physics/ecs/ContactProbe.d.ts.map +1 -0
  251. package/src/engine/physics/ecs/ContactProbe.js +103 -0
  252. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +44 -0
  253. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -0
  254. package/src/engine/physics/ecs/ContactProbeSystem.js +397 -0
  255. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +1 -1
  256. package/src/engine/physics/fluid/ecs/FluidComponent.js +1 -1
  257. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  258. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  259. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
  260. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  261. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
  262. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
  263. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
  264. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
  265. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  266. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
  267. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
  268. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
  269. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts +205 -0
  270. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.d.ts.map +1 -0
  271. package/src/engine/physics/inverse_kinematics/frame_fabrik/FrameFabrikProblem.js +245 -0
  272. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts +21 -0
  273. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.d.ts.map +1 -0
  274. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_limit_from_joint.js +63 -0
  275. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts +33 -0
  276. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.d.ts.map +1 -0
  277. package/src/engine/physics/inverse_kinematics/frame_fabrik/frame_fabrik_solve.js +874 -0
  278. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts +27 -0
  279. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.d.ts.map +1 -0
  280. package/src/engine/physics/inverse_kinematics/joint_hinge_mid_axis.js +77 -0
  281. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts +36 -0
  282. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.d.ts.map +1 -0
  283. package/src/engine/physics/inverse_kinematics/two_bone_path_solve.js +97 -0
  284. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +33 -11
  285. package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -1
  286. package/src/engine/physics/inverse_kinematics/two_joint_ik.js +158 -67
  287. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
  288. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  289. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
  290. package/src/engine/ui/DraggableAspect.d.ts +5 -1
  291. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  292. package/src/engine/ui/DraggableAspect.js +61 -4
  293. package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
  294. package/src/format/image/avif/heif/ItemProperty.js +1 -1
  295. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  296. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
  297. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
  298. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  299. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
  300. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  301. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
  302. package/src/shade/playground/water_refraction/README.md +10 -11
  303. package/src/shade/playground/water_refraction/main.js +9 -8
  304. package/src/shade/playground/water_refraction/world.js +1 -1
  305. package/src/shade/playground/water_surface/README.md +43 -0
  306. package/src/shade/playground/water_surface/index.html +30 -0
  307. package/src/shade/playground/water_surface/main.d.ts +2 -0
  308. package/src/shade/playground/water_surface/main.d.ts.map +1 -0
  309. package/src/shade/playground/water_surface/main.js +154 -0
  310. package/src/shade/playground/water_surface/world.d.ts +44 -0
  311. package/src/shade/playground/water_surface/world.d.ts.map +1 -0
  312. package/src/shade/playground/water_surface/world.js +160 -0
  313. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
  314. package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +10 -1
  315. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +10 -4
  316. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  317. package/src/shade/renderer/animation/GPUAnimationManager.js +251 -23
  318. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +12 -4
  319. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  320. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +12 -4
  321. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  322. package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -1
  323. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts +78 -0
  324. package/src/shade/renderer/animation/pose/PoseChannelIndex.d.ts.map +1 -0
  325. package/src/shade/renderer/animation/pose/PoseChannelIndex.js +274 -0
  326. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +40 -3
  327. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  328. package/src/shade/renderer/animation/pose/PosePlayback.js +77 -3
  329. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +21 -3
  330. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  331. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +79 -11
  332. package/src/shade/renderer/animation/shader_animation_apply.js +1 -1
  333. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts +3 -2
  334. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  335. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +187 -176
  336. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  337. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
  338. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  339. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  340. package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
  341. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
  342. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  343. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
  344. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
  345. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
  346. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
  347. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
  348. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  349. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
  350. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
  351. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  352. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
  353. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
  354. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
  355. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  356. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
  357. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  358. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
  359. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  360. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
  361. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  362. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
  363. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  364. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +3 -1
  365. package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
  366. package/src/shade/renderer/object_property/chunk_write_object_property.js +5 -2
  367. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +4 -0
  368. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  369. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +6 -1
  370. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  371. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
  372. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +1 -1
  373. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  374. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +135 -73
  375. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +7 -0
  376. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  377. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +29 -1
  378. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts +19 -0
  379. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.d.ts.map +1 -0
  380. package/src/shade/renderer/scene/optimization/geometry/internal/face_neighbourhood_hash.js +167 -0
  381. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts +25 -0
  382. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.d.ts.map +1 -0
  383. package/src/shade/renderer/scene/optimization/geometry/internal/neighbourhood_anchor_index.js +124 -0
  384. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts +19 -0
  385. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.d.ts.map +1 -0
  386. package/src/shade/renderer/scene/optimization/geometry/internal/seed_correspondence_from_face_pair.js +48 -0
  387. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +17 -1
  388. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  389. package/src/shade/renderer/scene/rows/GPUSceneRows.js +29 -3
  390. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
  391. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
  393. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
  394. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
  396. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  397. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
  398. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
  399. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  400. package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
  401. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
  402. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  403. package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
  404. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
  405. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
  406. package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
  407. package/src/shade/renderer/water/shader_water.d.ts +0 -1
  408. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  409. package/src/shade/renderer/water/shader_water.js +201 -72
  410. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
  411. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
  412. package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
  413. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
  414. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
  415. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
  416. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
  417. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
  418. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
  419. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
  420. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  421. package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
  422. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
  423. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
  424. package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
  425. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
  426. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
  427. package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
  428. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
  429. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
  430. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
  431. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
  432. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
  433. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
  434. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
  435. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
  436. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
  437. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
  438. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
  439. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
  440. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
  441. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
  442. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
  443. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
  444. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
  445. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
  446. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
  447. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
  448. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
  449. package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
  450. package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
  451. package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
  452. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
  453. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
  454. package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
  455. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
  456. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
  457. package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
  458. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
  459. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
  460. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
  461. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
  462. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
  463. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
  464. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
  465. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
  466. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
  467. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
  468. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
  469. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
  470. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
  471. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
  472. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
  473. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
  474. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
  475. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
  476. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  477. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
  478. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  479. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
  480. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
  481. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
  482. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
  483. package/src/engine/ecs/ik/IKConstraint.d.ts +0 -52
  484. package/src/engine/ecs/ik/IKConstraint.d.ts.map +0 -1
  485. package/src/engine/ecs/ik/IKConstraint.js +0 -95
  486. package/src/engine/ecs/ik/IKProblem.d.ts +0 -45
  487. package/src/engine/ecs/ik/IKProblem.d.ts.map +0 -1
  488. package/src/engine/ecs/ik/IKProblem.js +0 -58
  489. package/src/engine/ecs/ik/IKSolver.d.ts +0 -8
  490. package/src/engine/ecs/ik/IKSolver.d.ts.map +0 -1
  491. package/src/engine/ecs/ik/IKSolver.js +0 -9
  492. package/src/engine/ecs/ik/InverseKinematics.d.ts +0 -48
  493. package/src/engine/ecs/ik/InverseKinematics.d.ts.map +0 -1
  494. package/src/engine/ecs/ik/InverseKinematics.js +0 -119
  495. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts +0 -19
  496. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.d.ts.map +0 -1
  497. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +0 -72
  498. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +0 -54
  499. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +0 -1
  500. package/src/engine/ecs/ik/InverseKinematicsSystem.js +0 -212
  501. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts +0 -8
  502. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +0 -1
  503. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +0 -153
  504. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts +0 -5
  505. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +0 -1
  506. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +0 -120
  507. package/src/engine/ecs/ik/ik_bone_chain.d.ts +0 -64
  508. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +0 -1
  509. package/src/engine/ecs/ik/ik_bone_chain.js +0 -142
  510. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +0 -42
  511. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +0 -1
  512. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +0 -123
  513. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +0 -18
  514. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +0 -1
  515. package/src/engine/ecs/ik/ik_write_local_rotation.js +0 -32
  516. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
  517. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
  518. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
  519. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
  520. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
  521. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
  522. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
  523. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
  524. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
  525. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
  526. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
  527. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
  528. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
  529. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
  530. package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
  531. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
  532. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
  533. package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
  534. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
  535. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
  536. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
  537. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
  538. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
  539. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
@@ -1 +1 @@
1
- {"version":3,"file":"gjk_epa_penetration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/gjk/gjk_epa_penetration.js"],"names":[],"mappings":"AAkkBA;;;;;;;;;;;;;;;;GAgBG;AACH,yCATW,YAAY,GAAC,MAAM,EAAE,KACrB,eAAe,KACf,eAAe,GACb,MAAM,CA0BlB;AA7DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,4BAFU,MAAM,CAEgB;;;;;;;8BAzdnB;IAAE,OAAO,SAAW,YAAY,QAAE,MAAM,QAAE,CAAC,YAAY,GAAC,MAAM,EAAE,CAAC,QAAE,MAAM,KAAG,IAAI,CAAA;CAAE"}
1
+ {"version":3,"file":"gjk_epa_penetration.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/gjk/gjk_epa_penetration.js"],"names":[],"mappings":"AAmkBA;;;;;;;;;;;;;;;;GAgBG;AACH,yCATW,YAAY,GAAC,MAAM,EAAE,KACrB,eAAe,KACf,eAAe,GACb,MAAM,CA0BlB;AA7DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,4BAFU,MAAM,CAEgB;;;;;;;8BA1dnB;IAAE,OAAO,SAAW,YAAY,QAAE,MAAM,QAAE,CAAC,YAAY,GAAC,MAAM,EAAE,CAAC,QAAE,MAAM,KAAG,IAAI,CAAA;CAAE"}
@@ -533,9 +533,6 @@ function epa(A, B, out) {
533
533
  // Degenerate: no face survived. Report no usable axis (the caller treats a
534
534
  // non-positive depth as a miss) rather than reading a stale face and
535
535
  // throwing out of the narrowphase step.
536
- out[0] = 0;
537
- out[1] = 0;
538
- out[2] = 0;
539
536
  return 0;
540
537
  }
541
538
 
@@ -545,11 +542,15 @@ function epa(A, B, out) {
545
542
  best = f;
546
543
  }
547
544
  }
545
+ const depth = FACE_DIST[best];
546
+ if (!(depth > 0) || !Number.isFinite(depth)) {
547
+ return 0;
548
+ }
548
549
  const bn = best * 3;
549
550
  out[0] = FACE_N[bn];
550
551
  out[1] = FACE_N[bn + 1];
551
552
  out[2] = FACE_N[bn + 2];
552
- return FACE_DIST[best];
553
+ return depth;
553
554
  }
554
555
 
555
556
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAkFlB"}
1
+ {"version":3,"file":"line3_compute_segment_point_distance_eikonal.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,iEAbW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAwFlB"}
@@ -26,7 +26,13 @@ export function line3_compute_segment_point_distance_eikonal(
26
26
  const ab_z = z1 - z0;
27
27
  const L = Math.hypot(ab_x, ab_y, ab_z);
28
28
 
29
- if (L < 1e-9) return Math.min(d0, d1);
29
+ if (L < 1e-9) {
30
+ // A point-like edge still leaves the distance from its endpoints to the target.
31
+ return Math.min(
32
+ d0 + Math.hypot(px - x0, py - y0, pz - z0),
33
+ d1 + Math.hypot(px - x1, py - y1, pz - z1)
34
+ );
35
+ }
30
36
 
31
37
  // Vector AC
32
38
  const ac_x = px - x0;
@@ -93,4 +99,4 @@ export function line3_compute_segment_point_distance_eikonal(
93
99
  const dist_to_v1 = Math.hypot(px - x1, py - y1, pz - z1);
94
100
  return Math.min(d0 + dist_to_v0, d1 + dist_to_v1);
95
101
  }
96
- }
102
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
3
+ * as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
4
+ *
5
+ * This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
6
+ * the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
7
+ * inside is written back unchanged, bit for bit; one outside is composed again from the clamped
8
+ * positions ({@link swing_twist_compose_array}).
9
+ *
10
+ * An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
11
+ *
12
+ * `out` may be `q`.
13
+ *
14
+ * @param {Float64Array} out
15
+ * @param {number} out_offset receives `[x, y, z, w]`
16
+ * @param {Float64Array} q
17
+ * @param {number} q_offset `[x, y, z, w]`, unit
18
+ * @param {Float64Array} lower
19
+ * @param {Float64Array} upper
20
+ * @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
21
+ * @returns {boolean} whether any position was outside its limits
22
+ */
23
+ export function swing_twist_clamp_array(out: Float64Array, out_offset: number, q: Float64Array, q_offset: number, lower: Float64Array, upper: Float64Array, limit_offset: number): boolean;
24
+ //# sourceMappingURL=swing_twist_clamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_clamp.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_clamp.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CATW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,SACN,YAAY,SACZ,YAAY,gBACZ,MAAM,GACJ,OAAO,CAgCnB"}
@@ -0,0 +1,62 @@
1
+ import { swing_twist_compose_array } from "./swing_twist_compose.js";
2
+ import { swing_twist_error_array } from "./swing_twist_error.js";
3
+
4
+ /**
5
+ * The three swing-twist positions, measured and then clamped.
6
+ * @type {Float64Array}
7
+ */
8
+ const e = new Float64Array(3);
9
+
10
+ /**
11
+ * Project a rotation into a box of swing-twist limits: the twist about X and the swing over Y and Z,
12
+ * as {@link swing_twist_error_array} measures them, each clamped to its own `[lower, upper]`.
13
+ *
14
+ * This is the box a physics `Joint` with `swingTwist` on allows: the joint solver limits each of
15
+ * the three positions separately, so Y and Z swing are a box and not a cone. A rotation already
16
+ * inside is written back unchanged, bit for bit; one outside is composed again from the clamped
17
+ * positions ({@link swing_twist_compose_array}).
18
+ *
19
+ * An axis that is not limited takes `-Infinity` / `Infinity`; a locked one takes `0` / `0`.
20
+ *
21
+ * `out` may be `q`.
22
+ *
23
+ * @param {Float64Array} out
24
+ * @param {number} out_offset receives `[x, y, z, w]`
25
+ * @param {Float64Array} q
26
+ * @param {number} q_offset `[x, y, z, w]`, unit
27
+ * @param {Float64Array} lower
28
+ * @param {Float64Array} upper
29
+ * @param {number} limit_offset `[twist, swing y, swing z]` in `lower` and `upper`, radians
30
+ * @returns {boolean} whether any position was outside its limits
31
+ */
32
+ export function swing_twist_clamp_array(out, out_offset, q, q_offset, lower, upper, limit_offset) {
33
+ swing_twist_error_array(q, q_offset, e);
34
+
35
+ let clamped = false;
36
+
37
+ for (let k = 0; k < 3; k++) {
38
+ const lo = lower[limit_offset + k];
39
+ const hi = upper[limit_offset + k];
40
+
41
+ const value = e[k];
42
+
43
+ if (value < lo) {
44
+ e[k] = lo;
45
+ clamped = true;
46
+ } else if (value > hi) {
47
+ e[k] = hi;
48
+ clamped = true;
49
+ }
50
+ }
51
+
52
+ if (clamped) {
53
+ swing_twist_compose_array(out, out_offset, e, 0);
54
+ } else if (out !== q || out_offset !== q_offset) {
55
+ out[out_offset] = q[q_offset];
56
+ out[out_offset + 1] = q[q_offset + 1];
57
+ out[out_offset + 2] = q[q_offset + 2];
58
+ out[out_offset + 3] = q[q_offset + 3];
59
+ }
60
+
61
+ return clamped;
62
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
3
+ * {@link swing_twist_error_array}.
4
+ *
5
+ * `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
6
+ * `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
7
+ * measured rotation, on the hemisphere with `w ≥ 0`.
8
+ *
9
+ * @param {Float64Array} out
10
+ * @param {number} out_offset receives `[x, y, z, w]`
11
+ * @param {Float64Array} e
12
+ * @param {number} e_offset `[twist, swing y, swing z]`, radians
13
+ */
14
+ export function swing_twist_compose_array(out: Float64Array, out_offset: number, e: Float64Array, e_offset: number): void;
15
+ //# sourceMappingURL=swing_twist_compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_compose.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_compose.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,+CALW,YAAY,cACZ,MAAM,KACN,YAAY,YACZ,MAAM,QAwBhB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The rotation whose swing-twist positions are `e[e_offset ..+2]`: the inverse of
3
+ * {@link swing_twist_error_array}.
4
+ *
5
+ * `e[0]` is the twist about X, `e[1]`, `e[2]` the swing as `φ·axis` over Y and Z, and the rotation is
6
+ * `swing ⊗ twist`. Composed back from what {@link swing_twist_error_array} measured, it is the
7
+ * measured rotation, on the hemisphere with `w ≥ 0`.
8
+ *
9
+ * @param {Float64Array} out
10
+ * @param {number} out_offset receives `[x, y, z, w]`
11
+ * @param {Float64Array} e
12
+ * @param {number} e_offset `[twist, swing y, swing z]`, radians
13
+ */
14
+ export function swing_twist_compose_array(out, out_offset, e, e_offset) {
15
+ const twist = e[e_offset];
16
+ const y = e[e_offset + 1];
17
+ const z = e[e_offset + 2];
18
+
19
+ const tx = Math.sin(twist * 0.5);
20
+ const tw = Math.cos(twist * 0.5);
21
+
22
+ const phi = Math.sqrt(y * y + z * z);
23
+
24
+ // sin(φ/2) / φ, which is 1/2 as φ goes to 0, as the measure's small-angle branch is
25
+ const s = phi < 1e-9 ? 0.5 : Math.sin(phi * 0.5) / phi;
26
+
27
+ const sy = y * s;
28
+ const sz = z * s;
29
+ const sw = Math.cos(phi * 0.5);
30
+
31
+ // (0, sy, sz, sw) ⊗ (tx, 0, 0, tw)
32
+ out[out_offset] = sw * tx;
33
+ out[out_offset + 1] = sy * tw + sz * tx;
34
+ out[out_offset + 2] = sz * tw - sy * tx;
35
+ out[out_offset + 3] = sw * tw;
36
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
3
+ * the per-frame-axis angular positions used by wide-cone angular DOFs.
4
+ *
5
+ * Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
6
+ * axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
7
+ * about an axis in the YZ plane that carries X to its new direction). Writes,
8
+ * into `out`:
9
+ * - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
10
+ * limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
11
+ * - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
12
+ * (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
13
+ * an accurate (box-shaped) cone that holds at large tilt.
14
+ * Reduces continuously to the small-angle vector near identity. Pure scratch /
15
+ * locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
16
+ * class has an object-based `computeSwingAndTwist`; this is the inlined,
17
+ * allocation-free form — see the bench that justifies it.)
18
+ *
19
+ * The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
20
+ * measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
21
+ *
22
+ * @param {number} dx qD x
23
+ * @param {number} dy qD y
24
+ * @param {number} dz qD z
25
+ * @param {number} dw qD w
26
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
27
+ */
28
+ export function swing_twist_error(dx: number, dy: number, dz: number, dw: number, out: Float64Array): void;
29
+ /**
30
+ * {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
31
+ * arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
32
+ * would box each into a new heap object.
33
+ *
34
+ * @param {Float64Array} q
35
+ * @param {number} q_offset
36
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
37
+ */
38
+ export function swing_twist_error_array(q: Float64Array, q_offset: number, out: Float64Array): void;
39
+ //# sourceMappingURL=swing_twist_error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swing_twist_error.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/quaternion/swing_twist_error.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,YAAY,QAWtB;AAKD;;;;;;;;GAQG;AACH,2CAJW,YAAY,YACZ,MAAM,OACN,YAAY,QAoCtB"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Swing-twist decomposition of the relative rotation `qD = conj(qA)⊗qB`, giving
3
+ * the per-frame-axis angular positions used by wide-cone angular DOFs.
4
+ *
5
+ * Decomposes `qD = swing ⊗ twist`, with **twist** the rotation about frame
6
+ * axis X (the bone / twist axis) and **swing** the residual tilt (a rotation
7
+ * about an axis in the YZ plane that carries X to its new direction). Writes,
8
+ * into `out`:
9
+ * - `out[0]` = signed twist angle about X, in `(−π, π]` — *exact*, so a twist
10
+ * limit engages at the true angle, not the `2·sin(θ/2)` small-angle proxy;
11
+ * - `out[1]`, `out[2]` = the swing angle distributed over Y and Z
12
+ * (`φ·axis`, φ the true swing angle), so independent Y/Z swing limits form
13
+ * an accurate (box-shaped) cone that holds at large tilt.
14
+ * Reduces continuously to the small-angle vector near identity. Pure scratch /
15
+ * locals — no allocation, suitable for the per-substep hot loop. (The Quaternion
16
+ * class has an object-based `computeSwingAndTwist`; this is the inlined,
17
+ * allocation-free form — see the bench that justifies it.)
18
+ *
19
+ * The physics joint solver measures a `Joint`'s angular DOFs with it, and IK clamps to the same
20
+ * measure ({@link swing_twist_clamp_array}), so the two agree on what a limit allows.
21
+ *
22
+ * @param {number} dx qD x
23
+ * @param {number} dy qD y
24
+ * @param {number} dz qD z
25
+ * @param {number} dw qD w
26
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
27
+ */
28
+ export function swing_twist_error(dx, dy, dz, dw, out) {
29
+ const q = swing_twist_inputs;
30
+
31
+ q[0] = dx;
32
+ q[1] = dy;
33
+ q[2] = dz;
34
+ q[3] = dw;
35
+
36
+ swing_twist_error_array(q, 0, out);
37
+ }
38
+
39
+ /** Where {@link swing_twist_error} packs its quaternion. */
40
+ const swing_twist_inputs = new Float64Array(4);
41
+
42
+ /**
43
+ * {@link swing_twist_error} with `qD` read from `q[q_offset ..+3]`, `[x, y, z, w]`: the one place the
44
+ * arithmetic lives. For a caller whose inlining budget is spent, where a call taking the four numbers
45
+ * would box each into a new heap object.
46
+ *
47
+ * @param {Float64Array} q
48
+ * @param {number} q_offset
49
+ * @param {Float64Array} out length-3 destination (frame-axis positions)
50
+ */
51
+ export function swing_twist_error_array(q, q_offset, out) {
52
+ let dx = q[q_offset], dy = q[q_offset + 1], dz = q[q_offset + 2], dw = q[q_offset + 3];
53
+
54
+ // Shortest arc: work with the hemisphere where dw ≥ 0.
55
+ if (dw < 0) { dx = -dx; dy = -dy; dz = -dz; dw = -dw; }
56
+
57
+ const nxt = Math.sqrt(dx * dx + dw * dw); // |twist| (before normalising)
58
+ let sy, sz, sw;
59
+ if (nxt < 1e-12) {
60
+ // dw ≈ 0 and dx ≈ 0: a ~180° pure swing — twist is undefined, take 0.
61
+ out[0] = 0;
62
+ // Swing is qD itself; distribute its angle over Y/Z below.
63
+ sy = dy; sz = dz; sw = dw;
64
+ } else {
65
+ out[0] = 2 * Math.atan2(dx, dw); // exact signed twist about X
66
+ const tx = dx / nxt, tw = dw / nxt; // normalised twist (tx,0,0,tw)
67
+ // swing = qD ⊗ conj(twist); its X component is identically 0.
68
+ sy = dy * tw - dz * tx;
69
+ sz = dy * tx + dz * tw;
70
+ sw = dw * tw + dx * tx;
71
+ }
72
+
73
+ if (sw < 0) { sy = -sy; sz = -sz; sw = -sw; }
74
+ const syz = Math.sqrt(sy * sy + sz * sz);
75
+ if (syz < 1e-9) {
76
+ // Near-zero swing: small-angle vector (continuous with φ·axis as φ→0).
77
+ out[1] = 2 * sy;
78
+ out[2] = 2 * sz;
79
+ } else {
80
+ const phi = 2 * Math.atan2(syz, sw); // exact swing angle in [0, π]
81
+ const s = phi / syz;
82
+ out[1] = sy * s;
83
+ out[2] = sz * s;
84
+ }
85
+ }
@@ -20,4 +20,24 @@
20
20
  * @returns {boolean}
21
21
  */
22
22
  export function tri3_ray_intersection(result: SurfacePoint3, origin_x: number, origin_y: number, origin_z: number, direction_x: number, direction_y: number, direction_z: number, ax: number, ay: number, az: number, bx: number, by: number, bz: number, cx: number, cy: number, cz: number): boolean;
23
+ /**
24
+ * Ray-triangle intersection with vertices read from a packed triangle,
25
+ * [ax, ay, az, bx, by, bz, cx, cy, cz] at triangle_offset.
26
+ *
27
+ * All nine coordinates are read before validation or output writes so output
28
+ * callbacks can mutate the source without changing this intersection.
29
+ * The arithmetic and output order match tri3_ray_intersection.
30
+ *
31
+ * @param {import("../SurfacePoint3.js").SurfacePoint3} result
32
+ * @param {number} origin_x
33
+ * @param {number} origin_y
34
+ * @param {number} origin_z
35
+ * @param {number} direction_x
36
+ * @param {number} direction_y
37
+ * @param {number} direction_z
38
+ * @param {ArrayLike<number>|number[]|Float32Array|Float64Array} triangle
39
+ * @param {number} [triangle_offset=0]
40
+ * @returns {boolean}
41
+ */
42
+ export function tri3_ray_intersection_triangle_array(result: import("../SurfacePoint3.js").SurfacePoint3, origin_x: number, origin_y: number, origin_z: number, direction_x: number, direction_y: number, direction_z: number, triangle: ArrayLike<number> | number[] | Float32Array | Float64Array, triangle_offset?: number): boolean;
23
43
  //# sourceMappingURL=tri3_ray_intersection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tri3_ray_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_ray_intersection.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uEAjBW,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoJnB"}
1
+ {"version":3,"file":"tri3_ray_intersection.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/triangle/tri3_ray_intersection.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uEAjBW,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,OAAO,CAoJnB;AAGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,6DAXW,OAAO,qBAAqB,EAAE,aAAa,YAC3C,MAAM,YACN,MAAM,YACN,MAAM,eACN,MAAM,eACN,MAAM,eACN,MAAM,YACN,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,oBACpD,MAAM,GACJ,OAAO,CAmKnB"}
@@ -170,3 +170,185 @@ export function tri3_ray_intersection(
170
170
  return true;
171
171
  }
172
172
 
173
+
174
+ /**
175
+ * Ray-triangle intersection with vertices read from a packed triangle,
176
+ * [ax, ay, az, bx, by, bz, cx, cy, cz] at triangle_offset.
177
+ *
178
+ * All nine coordinates are read before validation or output writes so output
179
+ * callbacks can mutate the source without changing this intersection.
180
+ * The arithmetic and output order match tri3_ray_intersection.
181
+ *
182
+ * @param {import("../SurfacePoint3.js").SurfacePoint3} result
183
+ * @param {number} origin_x
184
+ * @param {number} origin_y
185
+ * @param {number} origin_z
186
+ * @param {number} direction_x
187
+ * @param {number} direction_y
188
+ * @param {number} direction_z
189
+ * @param {ArrayLike<number>|number[]|Float32Array|Float64Array} triangle
190
+ * @param {number} [triangle_offset=0]
191
+ * @returns {boolean}
192
+ */
193
+ export function tri3_ray_intersection_triangle_array(
194
+ result,
195
+ origin_x, origin_y, origin_z,
196
+ direction_x, direction_y, direction_z,
197
+ triangle, triangle_offset = 0
198
+ ) {
199
+ const ax = triangle[triangle_offset];
200
+ const ay = triangle[triangle_offset + 1];
201
+ const az = triangle[triangle_offset + 2];
202
+ const bx = triangle[triangle_offset + 3];
203
+ const by = triangle[triangle_offset + 4];
204
+ const bz = triangle[triangle_offset + 5];
205
+ const cx = triangle[triangle_offset + 6];
206
+ const cy = triangle[triangle_offset + 7];
207
+ const cz = triangle[triangle_offset + 8];
208
+
209
+ // Finite primitive numbers keep the valid path unboxed. The fallback
210
+ // preserves the scalar form's validation order and diagnostic messages.
211
+ if (!(Number.isFinite(ax) && Number.isFinite(ay) && Number.isFinite(az)
212
+ && Number.isFinite(bx) && Number.isFinite(by) && Number.isFinite(bz)
213
+ && Number.isFinite(cx) && Number.isFinite(cy) && Number.isFinite(cz))) {
214
+ assert.isNumber(ax, 'ax');
215
+ assert.isNumber(ay, 'ay');
216
+ assert.isNumber(az, 'az');
217
+
218
+ assert.isNumber(bx, 'bx');
219
+ assert.isNumber(by, 'by');
220
+ assert.isNumber(bz, 'bz');
221
+
222
+ assert.isNumber(cx, 'cx');
223
+ assert.isNumber(cy, 'cy');
224
+ assert.isNumber(cz, 'cz');
225
+
226
+ // nan checks
227
+ assert.notNaN(ax, 'ax');
228
+ assert.notNaN(ay, 'ay');
229
+ assert.notNaN(az, 'az');
230
+
231
+ assert.notNaN(bx, 'bx');
232
+ assert.notNaN(by, 'by');
233
+ assert.notNaN(bz, 'bz');
234
+
235
+ assert.notNaN(cx, 'cx');
236
+ assert.notNaN(cy, 'cy');
237
+ assert.notNaN(cz, 'cz');
238
+
239
+ // finate number check
240
+ assert.isFinite(ax, 'ax');
241
+ assert.isFinite(ay, 'ay');
242
+ assert.isFinite(az, 'az');
243
+
244
+ assert.isFinite(bx, 'bx');
245
+ assert.isFinite(by, 'by');
246
+ assert.isFinite(bz, 'bz');
247
+
248
+ assert.isFinite(cx, 'cx');
249
+ assert.isFinite(cy, 'cy');
250
+ assert.isFinite(cz, 'cz');
251
+
252
+
253
+ }
254
+
255
+ // edge1 = a - b
256
+ const edge1_x = bx - ax;
257
+ const edge1_y = by - ay;
258
+ const edge1_z = bz - az;
259
+
260
+ // edge2 = c - a
261
+ const edge2_x = cx - ax;
262
+ const edge2_y = cy - ay;
263
+ const edge2_z = cz - az;
264
+
265
+ // Compute triangle normal
266
+
267
+ // normal = edge1 x edge2
268
+ const normal_x = edge1_y * edge2_z - edge1_z * edge2_y;
269
+ const normal_y = edge1_z * edge2_x - edge1_x * edge2_z;
270
+ const normal_z = edge1_x * edge2_y - edge1_y * edge2_x
271
+
272
+ let DdN = v3_dot(direction_x, direction_y, direction_z, normal_x, normal_y, normal_z);
273
+ let sign = 1;
274
+
275
+ if (DdN === 0) {
276
+ // ray and the triangle normal are orthogonal, means that the ray can not pass penetrate triangle
277
+ return false;
278
+ } else if (DdN < 0) {
279
+ sign = -1;
280
+ DdN = -DdN;
281
+ }
282
+
283
+ // diff = origin - a
284
+ const diff_x = origin_x - ax;
285
+ const diff_y = origin_y - ay;
286
+ const diff_z = origin_z - az;
287
+
288
+ // edge3 = diff x edge2
289
+ const edge3_x = diff_y * edge2_z - diff_z * edge2_y;
290
+ const edge3_y = diff_z * edge2_x - diff_x * edge2_z;
291
+ const edge3_z = diff_x * edge2_y - diff_y * edge2_x;
292
+
293
+ // DdQxE2 = sign * ( direction . edge3)
294
+ const DdQxE2 = sign * v3_dot(direction_x, direction_y, direction_z, edge3_x, edge3_y, edge3_z);
295
+
296
+ if (DdQxE2 < 0) {
297
+ // b1 < 0, no intersection
298
+ return false;
299
+ }
300
+
301
+ const edge4_x = edge1_y * diff_z - edge1_z * diff_y;
302
+ const edge4_y = edge1_z * diff_x - edge1_x * diff_z;
303
+ const edge4_z = edge1_x * diff_y - edge1_y * diff_x;
304
+
305
+ const DdE1xQ = sign * v3_dot(direction_x, direction_y, direction_z, edge4_x, edge4_y, edge4_z);
306
+
307
+ if (DdE1xQ < 0) {
308
+ // b2 < 0, no intersection
309
+ return false;
310
+ }
311
+
312
+ if (DdQxE2 + DdE1xQ > DdN) {
313
+ // b1+b2 > 1, no intersection
314
+ return false;
315
+ }
316
+
317
+ // Line intersects triangle, check if ray does.
318
+ const QdN = -sign * v3_dot(diff_x, diff_y, diff_z, normal_x, normal_y, normal_z);
319
+
320
+ if (QdN < 0) {
321
+ // t < 0, no intersection
322
+ return false;
323
+
324
+ }
325
+
326
+ // Ray intersects triangle.
327
+ const t = QdN / DdN;
328
+
329
+ // `normal_x/y/z` is the raw `edge1 x edge2`, whose length is twice the triangle's area - it was
330
+ // written straight into `SurfacePoint3.normal`, which is documented as a surface normal and is
331
+ // a unit vector out of every other producer in the tree.
332
+ //
333
+ // NOTE: normalised but NOT turned to meet the ray, unlike `tri3_raycast`. This normal keeps the
334
+ // winding's facing on purpose: `StaticSceneBVH.raycast_nearest` derives `geometric_back_face`
335
+ // from `dot(normal, direction)`, and a normal pre-flipped toward the ray would report every hit
336
+ // as front-facing.
337
+ const normal_length = Math.sqrt(normal_x * normal_x + normal_y * normal_y + normal_z * normal_z);
338
+
339
+ const inv_normal_length = 1 / normal_length;
340
+
341
+ result.normal.set(
342
+ normal_x * inv_normal_length,
343
+ normal_y * inv_normal_length,
344
+ normal_z * inv_normal_length
345
+ );
346
+
347
+ result.position.set(
348
+ direction_x * t + origin_x,
349
+ direction_y * t + origin_y,
350
+ direction_z * t + origin_z,
351
+ );
352
+
353
+ return true;
354
+ }
@@ -8,16 +8,21 @@
8
8
  *
9
9
  * The matrix N is built so that the eigenvector of its largest eigenvalue
10
10
  * IS the optimal rotation quaternion (in scalar-last form, matching meep's
11
- * `Quaternion`).
11
+ * `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
12
+ * (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
13
+ * so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
14
+ * directly (Jacobi), which needs no gap between the top two eigenvalues, so a
15
+ * set whose twist is weakly determined (nearly parallel vectors) is solved as
16
+ * exactly as a well-spread one.
12
17
  *
13
18
  * Inputs are unit vectors so no centroid subtraction is needed — the rotation
14
19
  * is recovered from the cross-correlations alone.
15
20
  *
16
- * @param {Float32Array|number[]} a_xyz Source vectors — Length: count*3, unit length per triple
17
- * @param {Float32Array|number[]} b_xyz Target vectors — Length: count*3, unit length per triple
21
+ * @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
22
+ * @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
18
23
  * @param {number} count
19
- * @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
20
- * @returns {number} The maximum eigenvalue ≈ Σ a_i · R·b_i. For a perfect alignment this equals `count`.
24
+ * @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
25
+ * @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
21
26
  */
22
- export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | number[], b_xyz: Float32Array | number[], count: number, out_quaternion: Float32Array | number[]): number;
27
+ export function v3_rigid_align_paired_unit_vectors(a_xyz: Float32Array | Float64Array | number[], b_xyz: Float32Array | Float64Array | number[], count: number, out_quaternion: Float32Array | Float64Array | number[]): number;
23
28
  //# sourceMappingURL=v3_rigid_align_paired_unit_vectors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DANW,YAAY,GAAC,MAAM,EAAE,SACrB,YAAY,GAAC,MAAM,EAAE,SACrB,MAAM,kBACN,YAAY,GAAC,MAAM,EAAE,GACnB,MAAM,CAsElB"}
1
+ {"version":3,"file":"v3_rigid_align_paired_unit_vectors.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec3/v3_rigid_align_paired_unit_vectors.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,0DANW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,SAClC,MAAM,kBACN,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,MAAM,CA+ElB"}
@@ -1,8 +1,8 @@
1
- import { BinaryDataType } from "../../binary/type/BinaryDataType.js";
2
- import { matrix_top_eigenvector_power_iteration } from "../../math/linalg/eigen/matrix_top_eigenvector_power_iteration.js";
3
- import { SquareMatrix } from "../../math/matrix/SquareMatrix.js"
1
+ import { matrix_symmetric_4x4_eigen } from "../../math/linalg/eigen/matrix_symmetric_4x4_eigen.js";
4
2
 
5
- const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
3
+ const scratch_horn_n = new Float64Array(16);
4
+ const scratch_eigen_values = new Float64Array(4);
5
+ const scratch_eigen_vectors = new Float64Array(16);
6
6
 
7
7
  /**
8
8
  * Closed-form solution for the rotation that best aligns two sets of unit
@@ -14,16 +14,21 @@ const scratch_horn_n = new SquareMatrix(4, BinaryDataType.Float64);
14
14
  *
15
15
  * The matrix N is built so that the eigenvector of its largest eigenvalue
16
16
  * IS the optimal rotation quaternion (in scalar-last form, matching meep's
17
- * `Quaternion`).
17
+ * `Quaternion`). Largest means signed, not by magnitude: for a coplanar set
18
+ * (every set of two) det S = 0, which makes N's spectrum symmetric about zero,
19
+ * so −λmax is an eigenvalue too (±count for a perfect fit). N is decomposed
20
+ * directly (Jacobi), which needs no gap between the top two eigenvalues, so a
21
+ * set whose twist is weakly determined (nearly parallel vectors) is solved as
22
+ * exactly as a well-spread one.
18
23
  *
19
24
  * Inputs are unit vectors so no centroid subtraction is needed — the rotation
20
25
  * is recovered from the cross-correlations alone.
21
26
  *
22
- * @param {Float32Array|number[]} a_xyz Source vectors — Length: count*3, unit length per triple
23
- * @param {Float32Array|number[]} b_xyz Target vectors — Length: count*3, unit length per triple
27
+ * @param {Float32Array|Float64Array|number[]} a_xyz Target vectors, which R·b_i is fitted onto — Length: count*3, unit length per triple
28
+ * @param {Float32Array|Float64Array|number[]} b_xyz Source vectors, which R rotates — Length: count*3, unit length per triple
24
29
  * @param {number} count
25
- * @param {Float32Array|number[]} out_quaternion Length 4 (x, y, z, w)
26
- * @returns {number} The maximum eigenvalue ≈ Σ a_i · R·b_i. For a perfect alignment this equals `count`.
30
+ * @param {Float32Array|Float64Array|number[]} out_quaternion Length 4 (x, y, z, w)
31
+ * @returns {number} The maximum eigenvalue = Σ a_i · R·b_i at the optimum. For a perfect alignment this equals `count`.
27
32
  */
28
33
  export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quaternion) {
29
34
 
@@ -72,9 +77,8 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
72
77
  const Nyw = Szx - Sxz;
73
78
  const Nzw = Sxy - Syx;
74
79
 
75
- const N = scratch_horn_n;
76
- const d = N.data;
77
- // SquareMatrix is column-major: d[col * 4 + row]
80
+ // Symmetric, so the index is row*4 + col and col*4 + row alike.
81
+ const d = scratch_horn_n;
78
82
  d[0] = Nxx;
79
83
  d[5] = Nyy;
80
84
  d[10] = Nzz;
@@ -92,5 +96,15 @@ export function v3_rigid_align_paired_unit_vectors(a_xyz, b_xyz, count, out_quat
92
96
  d[11] = Nzw;
93
97
  d[14] = Nzw;
94
98
 
95
- return matrix_top_eigenvector_power_iteration(N, out_quaternion);
99
+ const values = scratch_eigen_values;
100
+ const vectors = scratch_eigen_vectors;
101
+ matrix_symmetric_4x4_eigen(values, vectors, d);
102
+
103
+ // Eigenpairs come back ascending; the last is the largest.
104
+ out_quaternion[0] = vectors[12];
105
+ out_quaternion[1] = vectors[13];
106
+ out_quaternion[2] = vectors[14];
107
+ out_quaternion[3] = vectors[15];
108
+
109
+ return values[3];
96
110
  }