@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,128 +0,0 @@
1
- import Signal from "../../../../core/events/signal/Signal.js";
2
- import { assert } from "../../../../core/assert.js";
3
- import { WATER_WAVE_BATCH_STRUCT, shader_water_wave_batch, shader_water_wave_batch_finish } from "./shader_water_wave_batch.js";
4
- import { shader_water_wave_bounds, shader_water_wave_domain } from "./shader_water_wave_domain.js";
5
-
6
- /**
7
- * A shared wave atlas, indexed by occupied water_waves rows. Calm bodies allocate no grid.
8
- * Each fixed step dispatches the whole atlas once; tessellated vertices sample it in local xz.
9
- * The regular grid is a displacement field, never the rendered water footprint.
10
- */
11
- export class GPUWaterWaveSimulation {
12
- onInputsConsumed = new Signal();
13
- resolution = 128;
14
- step = 1 / 120;
15
- max_steps_per_frame = 8;
16
- damping = 0.08;
17
- #device = null;
18
- #scene = null;
19
- #state = [];
20
- #domain = null;
21
- #capacity = 0;
22
- #resolution = 0;
23
- #parity = 0;
24
- #pending = 0;
25
- #time = 0;
26
- #recorded = new WeakSet();
27
- #write_pending = true;
28
- get time() { return this.#time; }
29
- get buffer() { return this.#state[this.#parity]; }
30
- get grid_resolution() { return this.#resolution || this.resolution; }
31
-
32
- advance(dt) {
33
- assert.isFinite(dt, 'dt'); assert.greaterThanOrEqual(dt, 0, 'dt');
34
- this.#pending += dt;
35
- this.#write_pending = true;
36
- }
37
-
38
- dispose() {
39
- for (const buffer of this.#state) { buffer.destroy(); }
40
- this.#domain?.destroy(); this.#domain = null;
41
- this.#state = []; this.#capacity = 0; this.#device = null; this.#scene = null;
42
- this.#recorded = new WeakSet();
43
- this.#write_pending = true;
44
- }
45
-
46
- record({ graph, device, scene }) {
47
- if (this.#recorded.has(graph)) { return; }
48
- if (device !== this.#device || scene !== this.#scene) {
49
- this.dispose(); this.#device = device; this.#scene = scene;
50
- }
51
- this.#recorded.add(graph);
52
- if (!this.#write_pending) { return; }
53
- this.#write_pending = false;
54
- const table = scene.scene_database.get('water_waves');
55
- const capacity = table.count === 0 ? 0 : table.element_capacity;
56
- assert.isInteger(this.resolution, 'resolution'); assert.greaterThanOrEqual(this.resolution, 2, 'resolution');
57
- assert.greaterThan(this.step, 0, 'step');
58
- const resize = capacity > this.#capacity || (capacity === 0 && this.#capacity !== 0) || this.resolution !== this.#resolution;
59
- const old = this.#state;
60
- const old_domain = this.#domain;
61
- if (resize || old.length === 0) {
62
- const size = Math.max(4, capacity * this.resolution ** 2 * 4);
63
- assert.lessThanOrEqual(size, device.limits.maxStorageBufferBindingSize, 'Water wave atlas exceeds device storage limit; lower waves.resolution');
64
- this.#state = [0, 1].map(i => device.createBuffer({ label: `Water / wave state ${i}`, size,
65
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }));
66
- this.#domain = device.createBuffer({ label: 'Water / authored footprint', size,
67
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST });
68
- this.#capacity = capacity;
69
- }
70
- const same_resolution = this.#resolution === this.resolution;
71
- this.#resolution = this.resolution;
72
- const steps = Math.min(Math.floor(this.#pending / this.step + 1e-6), this.max_steps_per_frame);
73
- this.#pending = Math.max(0, Math.min(this.#pending - steps * this.step, this.step));
74
- const start = this.#parity, time = this.#time, state = this.#state, domain = this.#domain;
75
- this.#parity = (start + steps) % 2;
76
- this.#time += steps * this.step;
77
- const n = this.#resolution, dt = this.step, damping = this.damping;
78
- const pass = graph.add('Water / batched surface update', {}, (_d, _r, { encoder }) => {
79
- if (state !== old) {
80
- if (same_resolution && old.length !== 0) {
81
- for (let i = 0; i < 2; i++) { encoder.copyBufferToBuffer(old[i], 0, state[i], 0, Math.min(old[i].size, state[i].size)); }
82
- encoder.copyBufferToBuffer(old_domain, 0, domain, 0, Math.min(old_domain.size, domain.size));
83
- }
84
- encoder.done.then(() => { for (const buffer of old) { buffer.destroy(); } old_domain?.destroy(); });
85
- }
86
- if (capacity === 0) { return; }
87
- const groups = Math.ceil(capacity * n * n / 128);
88
- shader_water_wave_domain.dispatch({ encoder, bindings: {
89
- batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
90
- { resolution: n, capacity, apply_impulses: same_resolution ? 0 : 1 }),
91
- scene_database: scene.scene_database_buffer, domain,
92
- geometries: scene.geometries.buffer_metadata,
93
- blas_lookup: scene.geometries.blas.buffer_metadata, blas_data: scene.geometries.blas.buffer_data,
94
- meshlet_metadata: scene.geometries.meshlets.buffer_metadata, meshlet_data: scene.geometries.meshlets.buffer_data,
95
- }, group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
96
- const dispatch = (parity, step_dt, step_time, apply_impulses) => {
97
- shader_water_wave_batch.dispatch({ encoder, bindings: {
98
- batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
99
- { resolution: n, capacity, dt: step_dt, time: step_time, damping, apply_impulses }),
100
- scene_database: scene.scene_database_buffer, domain, state_current: state[parity], state_previous: state[1 - parity],
101
- }, group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
102
- };
103
- // Clear both histories of new/reused slots before advancing, then release the reset flag.
104
- dispatch(0, 0, time, 0); dispatch(1, 0, time, 0);
105
- const finish = apply_impulses => {
106
- const groups = table.dispatch_group_count(64);
107
- shader_water_wave_batch_finish.dispatch({ encoder, bindings: { scene_database: scene.scene_database_buffer,
108
- batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT,
109
- { resolution: n, capacity, dt, time, damping, apply_impulses }) },
110
- group_count_x: Math.min(groups, 65535), group_count_y: Math.ceil(groups / 65535) });
111
- };
112
- finish(0);
113
- for (let i = 0; i < steps; i++) { dispatch((start + i) % 2, dt, time + i * dt, i === 0 ? 1 : 0); }
114
- if (steps > 0) {
115
- finish(1);
116
- // Submit is the ownership boundary for staged CPU inputs. Use the encoder's
117
- // existing synchronous signal so a later scene/update cannot be cleared by
118
- // an old promise callback.
119
- encoder.onFinished.addOne(() => this.onInputsConsumed.dispatch(scene));
120
- }
121
- shader_water_wave_bounds.dispatch({ encoder, bindings: {
122
- batch: encoder.allocateTransientValueBuffer(WATER_WAVE_BATCH_STRUCT, { resolution: n, capacity }),
123
- scene_database: scene.scene_database_buffer, state: state[(start + steps) % 2],
124
- }, group_count_x: Math.min(capacity, 65535), group_count_y: Math.ceil(capacity / 65535) });
125
- });
126
- pass.make_side_effect();
127
- }
128
- }
@@ -1,9 +0,0 @@
1
- export const WATER_TILE_CELLS: 16;
2
- export const WATER_TILE_VERTEX_COUNT: number;
3
- export const WATER_TILE_STRUCT: WebGPUStruct;
4
- export const WATER_TESSELLATION_STRUCT: WebGPUStruct;
5
- /** Clip in barycentric space: every generated point remains on the authored triangle. */
6
- export const chunk_water_tessellation: CodeChunk;
7
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
8
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
9
- //# sourceMappingURL=chunk_water_tessellation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk_water_tessellation.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/chunk_water_tessellation.js"],"names":[],"mappings":"AAKA,kCAAmC;AAEnC,6CAAkE;AAClE,6CAEuB;AACvB,qDAE+B;AAE/B,yFAAyF;AACzF,iDA+H8B;6BA9ID,mCAAmC;0BADtC,oCAAoC"}
@@ -1,144 +0,0 @@
1
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
- import { f32, u32, vec2i, vec2u, vec2f, mat4x4f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
4
- import { chunk_barycentric_solve } from "../../shader/chunk/geometry/triangle/chunk_barycentric_solve.js";
5
-
6
- export const WATER_TILE_CELLS = 16;
7
- // A triangle clipped by five planes has at most eight corners, hence six fan triangles.
8
- export const WATER_TILE_VERTEX_COUNT = WATER_TILE_CELLS ** 2 * 18;
9
- export const WATER_TILE_STRUCT = WebGPUStruct.from({
10
- meshlet: u32, triangle: u32, body: u32, anchor: f32, origin: vec2i, size: vec2u, pixels: f32,
11
- }, 'WaterTile').pack();
12
- export const WATER_TESSELLATION_STRUCT = WebGPUStruct.from({
13
- resolution: vec2f, pixels: f32, view_projection_matrix: mat4x4f,
14
- }, 'WaterTessellation').pack();
15
-
16
- /** Clip in barycentric space: every generated point remains on the authored triangle. */
17
- export const chunk_water_tessellation = CodeChunk.from(/* language=WGSL */ `
18
- fn water_reference_position(position: vec3f, height: f32, simulated: bool) -> vec3f {
19
- return vec3f(position.x, select(position.y, height, simulated), position.z);
20
- }
21
- // Bits identify the boundaries meeting at each corner: the three authored edges,
22
- // followed by the near plane and four cell edges. Retaining them lets reconstruction
23
- // evaluate an intersection directly, independent of the polygon clipping history.
24
- struct WaterPolygon { points: array<vec3f, 8>, boundaries: array<u32, 8>, count: u32 }
25
- fn water_triangle_polygon() -> WaterPolygon {
26
- var p: WaterPolygon;
27
- p.points[0] = vec3f(1,0,0); p.points[1] = vec3f(0,1,0); p.points[2] = vec3f(0,0,1); p.count = 3u;
28
- p.boundaries[0] = 6u; p.boundaries[1] = 5u; p.boundaries[2] = 3u;
29
- return p;
30
- }
31
- fn water_clip_polygon(p: WaterPolygon, distances: vec3f, boundary: u32) -> WaterPolygon {
32
- var out: WaterPolygon;
33
- if (p.count == 0u) { return out; }
34
- var previous = p.points[p.count - 1u];
35
- var d_previous = dot(previous, distances);
36
- for (var i = 0u; i < p.count; i++) {
37
- let current = p.points[i]; let d = dot(current, distances);
38
- if ((d >= 0.0) != (d_previous >= 0.0)) {
39
- let previous_index = select(i - 1u, p.count - 1u, i == 0u);
40
- out.boundaries[out.count] = (p.boundaries[previous_index] & p.boundaries[i]) | boundary;
41
- out.points[out.count] = mix(previous, current, d_previous / (d_previous - d)); out.count++;
42
- }
43
- if (d >= 0.0) { out.boundaries[out.count] = p.boundaries[i]; out.points[out.count] = current; out.count++; }
44
- previous = current; d_previous = d;
45
- }
46
- return out;
47
- }
48
- fn water_plane_distances(a: vec4f, b: vec4f, c: vec4f, plane: vec4f) -> vec3f {
49
- return vec3f(dot(a, plane), dot(b, plane), dot(c, plane));
50
- }
51
- fn water_point_weights(a: vec4f, b: vec4f, c: vec4f, point: vec2f) -> vec3f {
52
- let w = vec3f(a.w,b.w,c.w);
53
- return barycentric_solve(vec3f(a.x,b.x,c.x) - point.x * w, vec3f(a.y,b.y,c.y) - point.y * w);
54
- }
55
- fn water_authored_edges(weights: vec3f) -> u32 {
56
- return select(0u,1u,weights.x == 0.0) | select(0u,2u,weights.y == 0.0) | select(0u,4u,weights.z == 0.0);
57
- }
58
- fn water_boundary_plane(boundary: u32, lo: vec2f, hi: vec2f) -> vec4f {
59
- if ((boundary & 8u) != 0u) { return vec4f(0,0,-1,1); }
60
- if ((boundary & 16u) != 0u) { return vec4f(1,0,0,-lo.x); }
61
- if ((boundary & 32u) != 0u) { return vec4f(-1,0,0,hi.x); }
62
- if ((boundary & 64u) != 0u) { return vec4f(0,1,0,-lo.y); }
63
- return vec4f(0,-1,0,hi.y);
64
- }
65
- fn water_corner_weights(a: vec4f, b: vec4f, c: vec4f, boundaries: u32, lo: vec2f, hi: vec2f) -> vec3f {
66
- if ((boundaries & 15u) == 0u) {
67
- return water_point_weights(a,b,c,vec2f(select(lo.x,hi.x,(boundaries & 32u) != 0u),
68
- select(lo.y,hi.y,(boundaries & 128u) != 0u)));
69
- }
70
- var distances: array<vec3f, 2>;
71
- var count = 0u;
72
- for (var bit = 0u; bit < 8u; bit++) {
73
- if ((boundaries & (1u << bit)) == 0u) { continue; }
74
- if (bit < 3u) { distances[count][bit] = 1.0; }
75
- else { distances[count] = water_plane_distances(a,b,c,water_boundary_plane(1u << bit,lo,hi)); }
76
- count++;
77
- if (count == 2u) { break; }
78
- }
79
- return barycentric_solve(distances[0], distances[1]);
80
- }
81
- fn water_corner_position(a: vec3f, b: vec3f, c: vec3f, ca: vec4f, cb: vec4f, cc: vec4f,
82
- weights: vec3f, boundaries: u32, lo: vec2f, hi: vec2f) -> vec3f {
83
- let edges = boundaries & 7u;
84
- if (edges == 6u) { return a; }
85
- if (edges == 5u) { return b; }
86
- if (edges == 3u) { return c; }
87
- if (edges != 0u) {
88
- var p = a; var q = b; var cp = ca; var cq = cb;
89
- if (edges == 1u) { p = b; q = c; cp = cb; cq = cc; }
90
- if (edges == 2u) { q = c; cq = cc; }
91
- // Adjacent authored triangles traverse their common edge in opposite orders.
92
- // Canonical endpoints and the original clipping plane give identical f32 positions.
93
- if (p.x > q.x || (p.x == q.x && (p.y > q.y || (p.y == q.y && p.z > q.z)))) {
94
- let tmp = p; p = q; q = tmp; let tc = cp; cp = cq; cq = tc;
95
- }
96
- // A cell corner may also lie on an authored edge coincident with a cell plane.
97
- // Use the intersecting plane, rather than dividing by that coincident plane's zero span.
98
- var dp = 0.0; var dq = 0.0;
99
- for (var bit = 3u; bit < 8u; bit++) {
100
- if ((boundaries & (1u << bit)) == 0u) { continue; }
101
- let plane = water_boundary_plane(1u << bit,lo,hi);
102
- let p_distance = dot(cp,plane); let q_distance = dot(cq,plane);
103
- if (abs(p_distance - q_distance) > abs(dp - dq)) { dp = p_distance; dq = q_distance; }
104
- }
105
- return mix(p,q,dp / (dp - dq));
106
- }
107
- return a * weights.x + b * weights.y + c * weights.z;
108
- }
109
- fn water_cell_polygon(a: vec4f, b: vec4f, c: vec4f, lo: vec2f, hi: vec2f) -> WaterPolygon {
110
- // Interior cells are ordinary quads. Reuse the rasterizer's homogeneous barycentric solve
111
- // and reserve polygon clipping for the authored boundary and near-plane intersections.
112
- if (a.w > 0.0 && b.w > 0.0 && c.w > 0.0 && a.w >= a.z && b.w >= b.z && c.w >= c.z) {
113
- let p0 = water_point_weights(a,b,c,lo);
114
- let p1 = water_point_weights(a,b,c,vec2f(hi.x,lo.y));
115
- let p2 = water_point_weights(a,b,c,hi);
116
- let p3 = water_point_weights(a,b,c,vec2f(lo.x,hi.y));
117
- let minimum = min(min(p0,p1),min(p2,p3));
118
- if (all(minimum >= vec3f(0))) {
119
- var quad: WaterPolygon;
120
- quad.points[0] = p0; quad.points[1] = p1; quad.points[2] = p2; quad.points[3] = p3;
121
- quad.boundaries[0] = 80u | water_authored_edges(p0); quad.boundaries[1] = 96u | water_authored_edges(p1);
122
- quad.boundaries[2] = 160u | water_authored_edges(p2); quad.boundaries[3] = 144u | water_authored_edges(p3);
123
- // Preserve the source triangle's winding, just as the clipped path does.
124
- // The rasterizer must identify the same side on interior and boundary cells.
125
- if (dot(cross(a.xyw,b.xyw),c.xyw) < 0.0) {
126
- quad.points[1] = p3; quad.points[3] = p1;
127
- let boundary = quad.boundaries[1]; quad.boundaries[1] = quad.boundaries[3]; quad.boundaries[3] = boundary;
128
- }
129
- quad.count = 4u; return quad;
130
- }
131
- }
132
- var p = water_triangle_polygon();
133
- p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,0,-1,1)), 8u);
134
- p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(1,0,0,-lo.x)), 16u);
135
- p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(-1,0,0,hi.x)), 32u);
136
- p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,1,0,-lo.y)), 64u);
137
- p = water_clip_polygon(p, water_plane_distances(a,b,c,vec4f(0,-1,0,hi.y)), 128u);
138
- for (var i = 0u; i < p.count; i++) {
139
- p.points[i] = water_corner_weights(a,b,c,p.boundaries[i],lo,hi);
140
- p.boundaries[i] |= water_authored_edges(p.points[i]);
141
- }
142
- return p;
143
- }
144
- `, [chunk_barycentric_solve]);
@@ -1,13 +0,0 @@
1
- /**
2
- * The primitive surface producer's physics, as pure functions so each is testable alone.
3
- *
4
- * A damped linear wave equation on a height field, `h_tt = c² ∇²h − γ h_t + f`, stepped by
5
- * leapfrog. The celerity is the shallow-water one, `c = √(g·d)`. The batched producer uses a
6
- * one-metre reference depth because an authored surface supplies no bathymetry. This primitive
7
- * model describes long waves; deep-water wind waves have wavelength-dependent speed.
8
- *
9
- * @type {CodeChunk}
10
- */
11
- export const chunk_water_wave: CodeChunk;
12
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
13
- //# sourceMappingURL=chunk_water_wave.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk_water_wave.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/chunk_water_wave.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,+BAFU,SAAS,CA6BhB;0BAvCuB,oCAAoC"}
@@ -1,40 +0,0 @@
1
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
-
3
- /**
4
- * The primitive surface producer's physics, as pure functions so each is testable alone.
5
- *
6
- * A damped linear wave equation on a height field, `h_tt = c² ∇²h − γ h_t + f`, stepped by
7
- * leapfrog. The celerity is the shallow-water one, `c = √(g·d)`. The batched producer uses a
8
- * one-metre reference depth because an authored surface supplies no bathymetry. This primitive
9
- * model describes long waves; deep-water wind waves have wavelength-dependent speed.
10
- *
11
- * @type {CodeChunk}
12
- */
13
- export const chunk_water_wave = CodeChunk.from(/* language=WGSL */ `
14
- const WATER_WAVE_GRAVITY: f32 = 9.81;
15
-
16
- // Squared celerity of a long wave over water depth metres deep, capped so an explicit step of the
17
- // size the producer takes stays stable (2-D CFL: c·dt/dx ≤ 1/√2).
18
- fn water_wave_celerity2(depth: f32, celerity_limit: f32) -> f32 {
19
- return min(WATER_WAVE_GRAVITY * max(depth, 0.0), celerity_limit * celerity_limit);
20
- }
21
-
22
- // One leapfrog step of h_tt = c² ∇²h − γ h_t + f: the next height from the current one, the
23
- // previous one, the current height's Laplacian, c², the damping rate γ (1/s), the forcing f (m/s²)
24
- // and the step dt (s).
25
- fn water_wave_step(h: f32, h_previous: f32, laplacian: f32, celerity2: f32, damping: f32,
26
- force: f32, dt: f32) -> f32 {
27
- return h + (h - h_previous) * max(1.0 - damping * dt, 0.0) + dt * dt * (celerity2 * laplacian + force);
28
- }
29
-
30
- // Extra damping in a band along the grid's border, rising quadratically to strength at the edge,
31
- // so waves leave the domain instead of reflecting off the end of the grid.
32
- fn water_wave_sponge(cell: vec2<u32>, resolution: u32, width: f32, strength: f32) -> f32 {
33
- let last = f32(resolution - 1u);
34
- let p = vec2<f32>(cell);
35
- let edge = min(min(p.x, p.y), min(last - p.x, last - p.y));
36
- let s = clamp(1.0 - edge / max(width, 1.0), 0.0, 1.0);
37
- return strength * s * s;
38
- }
39
-
40
- `);
@@ -1,4 +0,0 @@
1
- /** Keep triangle identity, including hidden bodies. Only displaced raster depth selects ownership. */
2
- export const shader_water_tiles: ComputeShader;
3
- import { ComputeShader } from "../../shader/ComputeShader.js";
4
- //# sourceMappingURL=shader_water_tiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader_water_tiles.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_tiles.js"],"names":[],"mappings":"AA4BA,sGAAsG;AACtG,+CA6FmG;8BApHrE,+BAA+B"}
@@ -1,123 +0,0 @@
1
- import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
2
- import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
3
- import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
4
- import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../../geometry/meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
5
- import { MESHLET_COLLECTION_STRUCT } from "../../rasterize/MESHLET_COLLECTION_STRUCT.js";
6
- import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
7
- import { ComputeShader } from "../../shader/ComputeShader.js";
8
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
9
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
11
- import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
12
- import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
13
- import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
14
- import { chunk_read_meshlet_vertex_by_draw_index } from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
15
- import { WATER_BODIES_TABLE, WATER_WAVES_TABLE } from "../medium/chunk_water_bodies.js";
16
- import { chunk_water_tessellation, WATER_TILE_CELLS, WATER_TILE_STRUCT, WATER_TESSELLATION_STRUCT } from "./chunk_water_tessellation.js";
17
-
18
- const resources = new ShaderResourceSetDescriptor();
19
- resources.setImmediate('capacity', u32);
20
- resources.createGroup().addUniform('camera', CAMERA_UNIFORM_STRUCT).addUniform('tessellation', WATER_TESSELLATION_STRUCT)
21
- .addStorageBuffer('scene_database', WebGPUArray.u32)
22
- .addStorageBuffer('geometries', WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
23
- .addStorageBuffer('water_meshlets', MESHLET_COLLECTION_STRUCT)
24
- .addStorageBuffer('meshlet_metadata', WebGPUArray.from(MESHLET_METADATA_STRUCT))
25
- .addStorageBuffer('meshlet_data', WebGPUArray.from(f32))
26
- .addStorageBuffer('tiles', WebGPUArray.from(WATER_TILE_STRUCT), true)
27
- .addStorageBuffer('counts', COLLECTION_U32_STRUCT_READ, true);
28
-
29
- /** Keep triangle identity, including hidden bodies. Only displaced raster depth selects ownership. */
30
- export const shader_water_tiles = ComputeShader.from({ label: 'Water / classify view tiles', resources,
31
- body: CodeChunk.from(/* language=WGSL */ `
32
- @compute @workgroup_size(128)
33
- fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
34
- let i = folded_workgroup_index(group) * 128u + lane;
35
- if (i == 0u) { counts.count = capacity; }
36
- if (i >= capacity) { return; }
37
- counts.elements[i] = 0u;
38
- let meshlet_slot = i / ${GEOMETRY_MESHLET_TRIANGLE_LIMIT}u;
39
- if (meshlet_slot >= water_meshlets.count) { return; }
40
- let definition = water_meshlets.elements[meshlet_slot];
41
- let triangle = i % ${GEOMETRY_MESHLET_TRIANGLE_LIMIT}u;
42
- let header = meshlet_metadata[definition.index];
43
- if (triangle >= header.primitive_count) { return; }
44
- let body = ${WATER_BODIES_TABLE.marshalling_method_read}(&scene_database, definition.mesh);
45
- let node = scene_read_node(&scene_database, body.node);
46
- let simulated = body.wave != ~0u;
47
- var bounds = vec2f(0);
48
- if (simulated) { bounds = ${WATER_WAVES_TABLE.marshalling_method_read}(&scene_database, body.wave).displacement_bounds; }
49
- // Increasing near-plane distance is farther from the camera. Use the far endpoint;
50
- // clipping it at the near plane cannot discard a point displaced into the visible frustum.
51
- let direction = tessellation.view_projection_matrix * node.global[1];
52
- let farther = direction.w - direction.z >= 0.0;
53
- var anchor = 0.0;
54
- var pixels = tessellation.pixels;
55
- if (simulated) {
56
- let box = geometries[body.geometry].bounding_box;
57
- // A shared local-xz reference keeps adjacent triangles' generated edge vertices
58
- // identical, including sloped rest geometry. Only reconstruction flattens height;
59
- // rendered vertices still interpolate all three authored position coordinates.
60
- anchor = select(box[1] + bounds.x, box[4] + bounds.y, farther);
61
- let x = tessellation.view_projection_matrix * node.global[0];
62
- let z = tessellation.view_projection_matrix * node.global[2];
63
- let origin = tessellation.view_projection_matrix * node.global[3];
64
- let plane = cross(x.xyw, z.xyw);
65
- let reference = origin + direction * anchor;
66
- let span = box[4] - box[1] + bounds.y - bounds.x;
67
- if (span > 0.0 && abs(dot(plane, reference.xyw)) <= 1e-5 * length(plane) * max(length(reference.xyw), 1.0)
68
- && abs(dot(plane, direction.xyw)) > 1e-20) {
69
- anchor += select(-span, span, farther);
70
- }
71
- var minimum_w = 1e30;
72
- for (var corner = 0u; corner < 4u; corner++) {
73
- let p = vec3f(select(box[0], box[3], (corner & 1u) != 0u), anchor, select(box[2], box[5], (corner & 2u) != 0u));
74
- minimum_w = min(minimum_w, (tessellation.view_projection_matrix * (node.global * vec4f(p, 1))).w);
75
- }
76
- let low = box[1] + bounds.x - anchor;
77
- let high = box[4] + bounds.y - anchor;
78
- let slopes = vec4f(direction.w + direction.x, direction.w - direction.x, direction.w + direction.y, direction.w - direction.y);
79
- let allowance = max(vec4f(0), max(slopes * low, slopes * high));
80
- // After swept side-plane clipping, the reference's NDC span is at most
81
- // 2 + (left + right allowance)/minimum_w. Use this body-wide bound so a
82
- // near-plane envelope cannot amplify patches or split shared edge grids.
83
- let amplification = 1.0 + max(allowance.x + allowance.y, allowance.z + allowance.w)
84
- / (2.0 * max(camera.clip_near_far.x, minimum_w));
85
- pixels *= amplification;
86
- }
87
- let pa = read_meshlet_vertex_by_draw_index(header, triangle * 3u).position;
88
- let pb = read_meshlet_vertex_by_draw_index(header, triangle * 3u + 1u).position;
89
- let pc = read_meshlet_vertex_by_draw_index(header, triangle * 3u + 2u).position;
90
- let a = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pa, anchor, simulated), 1));
91
- let b = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pb, anchor, simulated), 1));
92
- let c = tessellation.view_projection_matrix * (node.global * vec4f(water_reference_position(pc, anchor, simulated), 1));
93
- let heights = select(vec3f(0), vec3f(pa.y, pb.y, pc.y) - vec3f(anchor), simulated);
94
- var p = water_clip_polygon(water_triangle_polygon(), water_plane_distances(a,b,c,vec4f(0,0,-1,1)), 0u);
95
- // The reference is unjittered, but raster samples may move into the viewport by
96
- // a pixel. Retain that fixed border without letting jitter change the tile grid.
97
- let border = vec2f(1.0) + vec2f(2.0) / tessellation.resolution;
98
- let planes = array<vec4f,4>(vec4f(1,0,0,border.x),vec4f(-1,0,0,border.x),vec4f(0,1,0,border.y),vec4f(0,-1,0,border.y));
99
- for (var plane = 0u; plane < 4u; plane++) {
100
- let sweep = dot(direction, planes[plane]);
101
- let allowance = max((heights + vec3f(bounds.x)) * sweep, (heights + vec3f(bounds.y)) * sweep);
102
- p = water_clip_polygon(p, water_plane_distances(a,b,c,planes[plane]) + allowance, 0u);
103
- }
104
- if (p.count < 3u) { return; }
105
- var lo = vec2f(1e30); var hi = vec2f(-1e30);
106
- for (var corner = 0u; corner < p.count; corner++) {
107
- let q = a * p.points[corner].x + b * p.points[corner].y + c * p.points[corner].z;
108
- let pixel = (q.xy / q.w * vec2f(0.5,-0.5) + vec2f(0.5)) * tessellation.resolution;
109
- lo = min(lo, pixel); hi = max(hi, pixel);
110
- }
111
- let tile_pixels = pixels * ${WATER_TILE_CELLS}.0;
112
- let origin = vec2i(floor(lo / tile_pixels));
113
- let end = vec2i(ceil(hi / tile_pixels));
114
- let size = vec2u(max(end - origin, vec2i(0)));
115
- if (any(size == vec2u(0))) { return; }
116
- var tile: WaterTile;
117
- tile.meshlet = definition.index; tile.triangle = triangle; tile.body = definition.mesh;
118
- tile.anchor = anchor; tile.origin = origin; tile.size = size; tile.pixels = pixels;
119
- tiles[i] = tile;
120
- counts.elements[i] = size.x * size.y;
121
- }
122
- `, [chunk_water_tessellation, chunk_read_meshlet_vertex_by_draw_index, chunk_scene_database_access,
123
- WATER_BODIES_TABLE.chunk_read, WATER_WAVES_TABLE.chunk_read, chunk_folded_workgroup_index]) });
@@ -1,6 +0,0 @@
1
- export const WATER_WAVE_BATCH_STRUCT: WebGPUStruct;
2
- export const shader_water_wave_batch: ComputeShader;
3
- export const shader_water_wave_batch_finish: ComputeShader;
4
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
5
- import { ComputeShader } from "../../shader/ComputeShader.js";
6
- //# sourceMappingURL=shader_water_wave_batch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader_water_wave_batch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_wave_batch.js"],"names":[],"mappings":"AAYA,mDAC+E;AAO/E,oDA8CwH;AAMxH,2DAY4F;6BA/E/D,mCAAmC;8BALlC,+BAA+B"}
@@ -1,85 +0,0 @@
1
- import { ComputeShader } from "../../shader/ComputeShader.js";
2
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
4
- import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
6
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
7
- import { WATER_WAVES_TABLE as table } from "../medium/chunk_water_bodies.js";
8
- import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
9
- import { chunk_srdnoise2 } from "../../shader/chunk/noise/psrdnoise/chunk_srdnoise2.js";
10
- import { chunk_water_wave } from "./chunk_water_wave.js";
11
- import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
12
-
13
- export const WATER_WAVE_BATCH_STRUCT = WebGPUStruct.from({ resolution: u32, capacity: u32,
14
- dt: f32, time: f32, damping: f32, apply_impulses: u32 }, 'WaterWaveBatch');
15
- const resources = new ShaderResourceSetDescriptor();
16
- resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
17
- .addStorageBuffer('scene_database', WebGPUArray.u32)
18
- .addStorageBuffer('domain', WebGPUArray.u32)
19
- .addStorageBuffer('state_current', WebGPUArray.from(f32))
20
- .addStorageBuffer('state_previous', WebGPUArray.from(f32), true);
21
- export const shader_water_wave_batch = ComputeShader.from({ label: 'Water / batched wave step', resources,
22
- body: CodeChunk.from(/* language=WGSL */ `
23
- @compute @workgroup_size(128)
24
- fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
25
- let i = folded_workgroup_index(group) * 128u + lane;
26
- let n = batch.resolution;
27
- let row = i / (n * n);
28
- if (row >= batch.capacity) { return; }
29
- let params = ${table.marshalling_method_read}(&scene_database, row);
30
- if (params.first_write != 0u || params.node == 0u || params.node == ~0u || domain[i] == 0u) { state_previous[i] = 0.0; return; }
31
- if (batch.dt == 0.0) { return; }
32
- let cell = vec2u(i % n, (i / n) % n);
33
- let start = row * n * n;
34
- let spacing = max((params.extent.zw - params.extent.xy) / f32(n - 1u), vec2f(1e-20));
35
- let world = scene_read_node(&scene_database, params.node).global;
36
- let scale = vec3f(length(world[0].xyz), length(world[1].xyz), length(world[2].xyz));
37
- // A temporarily collapsed transform must not poison persistent histories with NaNs.
38
- if (any(scale <= vec3f(1e-10))) { state_previous[i] = state_current[i]; return; }
39
- let world_spacing = max(spacing * scale.xz, vec2f(1e-10));
40
- let h = state_current[i];
41
- let left = start + cell.y * n + select(cell.x - 1u, 0u, cell.x == 0u);
42
- let right = start + cell.y * n + min(cell.x + 1u, n - 1u);
43
- let down = start + select(cell.y - 1u, 0u, cell.y == 0u) * n + cell.x;
44
- let up = start + min(cell.y + 1u, n - 1u) * n + cell.x;
45
- let laplacian = (state_current[left] + state_current[right] - 2.0 * h) / (world_spacing.x * world_spacing.x)
46
- + (state_current[down] + state_current[up] - 2.0 * h) / (world_spacing.y * world_spacing.y);
47
- let position = mix(params.extent.xy, params.extent.zw, vec2f(cell) / f32(n - 1u));
48
- let wind = params.forcing.xy * scale.xz;
49
- let wind_direction = wind / max(length(wind), 1e-20);
50
- let drift = wind_direction * params.forcing.w * batch.time;
51
- var force = params.forcing.z / scale.y * srdnoise2((position * scale.xz - drift) / 6.0, 0.0).x;
52
- if (batch.apply_impulses != 0u) {
53
- for (var j = 0u; j < params.impulse_count; j++) {
54
- let impulse = params.impulses[j];
55
- let d = position - impulse.xy;
56
- let world_delta = (world * vec4f(d.x, 0.0, d.y, 0.0)).xyz;
57
- force += impulse.w / (batch.dt * scale.y) * exp(-dot(world_delta, world_delta) / max(impulse.z * impulse.z, 1e-6));
58
- }
59
- }
60
- let damping = batch.damping + water_wave_sponge(cell, n, max(4.0, f32(n) * 0.04), 4.0);
61
- // The authored surface has no bathymetry. The primitive producer uses a one-metre reference
62
- // depth; the CFL cap follows both axes of its local grid. It does not define the mesh outline.
63
- let celerity = 0.6 * min(world_spacing.x, world_spacing.y) / batch.dt;
64
- state_previous[i] = water_wave_step(h, state_previous[i], laplacian,
65
- water_wave_celerity2(1.0, celerity), damping, force, batch.dt);
66
- }
67
- `, [table.chunk_read, chunk_folded_workgroup_index, chunk_srdnoise2, chunk_water_wave, chunk_scene_database_access]) });
68
-
69
- const finish_resources = new ShaderResourceSetDescriptor();
70
- finish_resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
71
- .addStorageBuffer('scene_database', WebGPUArray.u32, true);
72
- const pg = table.page_iterator_symbol_prefix(64, true);
73
- export const shader_water_wave_batch_finish = ComputeShader.from({ label: 'Water / consume wave inputs', resources: finish_resources,
74
- body: CodeChunk.from(/* language=WGSL */ `
75
- @compute @workgroup_size(64)
76
- fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
77
- if (!${pg}_setup(&scene_database, folded_workgroup_index(group), lane)) { return; }
78
- let slot = ${pg}_slot_in_page(lane);
79
- if (slot >= ${pg}_ELEMENTS_PER_PAGE || !${pg}_is_occupied(slot)) { return; }
80
- let row = ${pg}_slot_to_index(slot);
81
- ${table.marshalling_method_write_field('first_write')}(&scene_database, row, 0u);
82
- if (batch.apply_impulses != 0u) { ${table.marshalling_method_write_field('impulse_count')}(&scene_database, row, 0u); }
83
- }
84
- `, [table.chunk_iterate(64, true), table.wgsl_gen_write_field_code('first_write'),
85
- table.wgsl_gen_write_field_code('impulse_count'), chunk_folded_workgroup_index]) });
@@ -1,6 +0,0 @@
1
- /** Bake the authored footprint once per new wave row, using the existing geometry BLAS. */
2
- export const shader_water_wave_domain: ComputeShader;
3
- /** Bilinear reconstruction cannot leave the extrema of its samples. Include the rest surface. */
4
- export const shader_water_wave_bounds: ComputeShader;
5
- import { ComputeShader } from "../../shader/ComputeShader.js";
6
- //# sourceMappingURL=shader_water_wave_domain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader_water_wave_domain.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/water/surface/shader_water_wave_domain.js"],"names":[],"mappings":"AAwBA,2FAA2F;AAC3F,qDAqBsF;AAOtF,iGAAiG;AACjG,qDA4BmH;8BAlFrF,+BAA+B"}