@woosh/meep-engine 3.41.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 (344) 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/triangle/tri3_ray_intersection.d.ts +20 -0
  63. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  64. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
  65. package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
  66. package/src/core/math/noise/curl_noise_3dt.js +20 -10
  67. package/src/core/math/noise/sdnoise.d.ts +16 -5
  68. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  69. package/src/core/math/noise/sdnoise.js +43 -9
  70. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
  71. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  72. package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
  73. package/src/engine/Engine.d.ts.map +1 -1
  74. package/src/engine/Engine.js +6 -2
  75. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
  76. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  77. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
  78. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  79. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
  80. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  81. package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
  82. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  83. package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
  84. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  85. package/src/engine/control/first-person/abilities/Slide.js +1 -0
  86. package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
  87. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  88. package/src/engine/control/first-person/abilities/WallRun.js +13 -1
  89. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
  90. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  91. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
  92. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
  93. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  94. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
  95. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  96. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
  97. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  98. package/src/engine/ecs/EntityManager.js +18 -15
  99. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  100. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
  101. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
  102. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
  103. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  104. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
  105. package/src/engine/ecs/parent/EntityNode.js +3 -3
  106. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  107. package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
  108. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
  109. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
  110. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
  111. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
  112. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
  113. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
  114. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  115. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +8 -0
  116. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  117. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
  118. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  119. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
  120. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  121. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
  122. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
  123. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  124. package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
  125. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  126. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
  127. package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
  128. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
  129. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
  130. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
  131. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
  132. package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
  133. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  134. package/src/engine/graphics/ecs/water/Water.js +17 -0
  135. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  136. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
  137. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
  138. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
  139. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
  140. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
  141. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
  142. package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
  143. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
  144. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
  145. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
  146. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
  147. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
  148. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  149. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
  150. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
  151. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
  152. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
  153. package/src/engine/graphics3/WaterSystem.d.ts +12 -3
  154. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  155. package/src/engine/graphics3/WaterSystem.js +78 -46
  156. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  157. package/src/engine/input/devices/PointerDevice.js +29 -4
  158. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
  159. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
  160. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
  161. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  162. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  163. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
  164. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  165. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
  166. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
  167. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
  168. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
  169. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  170. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
  171. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
  172. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
  173. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
  174. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  175. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
  176. package/src/engine/ui/DraggableAspect.d.ts +5 -1
  177. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  178. package/src/engine/ui/DraggableAspect.js +61 -4
  179. package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
  180. package/src/format/image/avif/heif/ItemProperty.js +1 -1
  181. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  182. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
  183. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
  184. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  185. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
  186. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  187. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
  188. package/src/shade/playground/water_refraction/README.md +10 -11
  189. package/src/shade/playground/water_refraction/main.js +9 -8
  190. package/src/shade/playground/water_refraction/world.js +1 -1
  191. package/src/shade/playground/water_surface/README.md +43 -0
  192. package/src/shade/playground/water_surface/index.html +30 -0
  193. package/src/shade/playground/water_surface/main.d.ts +2 -0
  194. package/src/shade/playground/water_surface/main.d.ts.map +1 -0
  195. package/src/shade/playground/water_surface/main.js +154 -0
  196. package/src/shade/playground/water_surface/world.d.ts +44 -0
  197. package/src/shade/playground/water_surface/world.d.ts.map +1 -0
  198. package/src/shade/playground/water_surface/world.js +160 -0
  199. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
  201. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  202. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  203. package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
  204. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
  205. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  206. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
  207. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
  208. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
  209. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
  210. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
  211. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  212. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
  213. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
  214. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  215. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
  216. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
  217. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
  218. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
  220. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  221. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
  222. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
  226. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  227. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
  228. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
  229. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
  230. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
  231. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
  232. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
  233. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
  234. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  235. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
  236. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
  237. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  238. package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
  239. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
  240. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  241. package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
  242. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
  243. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
  244. package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
  245. package/src/shade/renderer/water/shader_water.d.ts +0 -1
  246. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  247. package/src/shade/renderer/water/shader_water.js +201 -72
  248. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
  249. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
  250. package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
  251. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
  252. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
  253. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
  254. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
  255. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
  256. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
  257. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
  258. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  259. package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
  260. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
  261. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
  262. package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
  263. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
  264. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
  265. package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
  266. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
  267. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
  268. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
  269. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
  270. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
  271. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
  272. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
  273. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
  274. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
  275. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
  276. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
  277. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
  278. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
  279. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
  280. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
  281. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
  282. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
  283. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
  284. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
  285. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
  286. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
  287. package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
  288. package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
  289. package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
  290. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
  291. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
  292. package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
  293. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
  294. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
  295. package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
  296. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
  297. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
  298. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
  299. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
  300. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
  301. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
  302. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
  303. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
  304. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
  305. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
  306. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
  307. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
  308. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
  309. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
  310. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
  311. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
  312. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
  313. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
  314. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  315. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
  316. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  317. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
  318. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
  319. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
  320. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
  321. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
  322. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
  323. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
  324. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
  325. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
  326. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
  327. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
  328. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
  329. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
  330. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
  331. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
  332. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
  333. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
  334. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
  335. package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
  336. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
  337. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
  338. package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
  339. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
  340. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
  341. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
  342. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
  343. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
  344. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
@@ -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"}
@@ -1,83 +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 { WebGPUArray } from "../../shader/type/WebGPUArray.js";
5
- import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
6
- import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
7
- import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
8
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
9
- import { chunk_ray_query_blas_nearest } from "../../shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js";
10
- import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
11
- import { f32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
12
- import { WATER_WAVES_TABLE as table } from "../medium/chunk_water_bodies.js";
13
- import { WATER_WAVE_BATCH_STRUCT } from "./shader_water_wave_batch.js";
14
-
15
- const resources = new ShaderResourceSetDescriptor();
16
- resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
17
- .addStorageBuffer('scene_database', WebGPUArray.u32)
18
- .addStorageBuffer('geometries', WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
19
- .addStorageBuffer('blas_lookup', WebGPUArray.u32)
20
- .addStorageBuffer('blas_data', WebGPUArray.from(BVH2_NODE_STRUCT))
21
- .addStorageBuffer('meshlet_metadata', WebGPUArray.from(MESHLET_METADATA_STRUCT))
22
- .addStorageBuffer('meshlet_data', WebGPUArray.from(f32))
23
- .addStorageBuffer('domain', WebGPUArray.u32, true);
24
-
25
- /** Bake the authored footprint once per new wave row, using the existing geometry BLAS. */
26
- export const shader_water_wave_domain = ComputeShader.from({ label: 'Water / authored simulation domain', resources,
27
- body: CodeChunk.from(/* language=WGSL */ `
28
- @compute @workgroup_size(128)
29
- fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
30
- let i = folded_workgroup_index(group) * 128u + lane;
31
- let n = batch.resolution;
32
- let row = i / (n * n);
33
- if (row >= batch.capacity) { return; }
34
- let params = ${table.marshalling_method_read}(&scene_database, row);
35
- if (params.node == 0u || params.node == ~0u) { domain[i] = 0u; return; }
36
- if (params.first_write == 0u && batch.apply_impulses == 0u) { return; }
37
- let geometry = geometries[params.geometry];
38
- let cell = vec2u(i % n, (i / n) % n);
39
- let xz = mix(params.extent.xy, params.extent.zw, vec2f(cell) / f32(n - 1u));
40
- let margin = max(1e-3, (geometry.bounding_box[4] - geometry.bounding_box[1]) * 1e-4);
41
- let top = geometry.bounding_box[4] + margin;
42
- var stack: array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
43
- let hit = ray_query_blas_nearest(Ray(vec3f(xz.x, top, xz.y), vec3f(0.0, -1.0, 0.0),
44
- top - geometry.bounding_box[1] + margin), params.geometry, &stack, 0u);
45
- domain[i] = select(0u, 1u, hit.t >= 0.0);
46
- }
47
- `, [table.chunk_read, chunk_folded_workgroup_index, chunk_ray_query_blas_nearest]) });
48
-
49
- const bounds_resources = new ShaderResourceSetDescriptor();
50
- bounds_resources.createGroup().addUniform('batch', WATER_WAVE_BATCH_STRUCT)
51
- .addStorageBuffer('scene_database', WebGPUArray.u32, true)
52
- .addStorageBuffer('state', WebGPUArray.from(f32));
53
-
54
- /** Bilinear reconstruction cannot leave the extrema of its samples. Include the rest surface. */
55
- export const shader_water_wave_bounds = ComputeShader.from({ label: 'Water / displacement bounds', resources: bounds_resources,
56
- body: CodeChunk.from(/* language=WGSL */ `
57
- var<workgroup> lower: array<f32, 128>;
58
- var<workgroup> upper: array<f32, 128>;
59
- @compute @workgroup_size(128)
60
- fn main(@builtin(workgroup_id) group: vec3u, @builtin(local_invocation_index) lane: u32) {
61
- let row = folded_workgroup_index(group);
62
- if (row >= batch.capacity) { return; }
63
- let params = ${table.marshalling_method_read_rw}(&scene_database, row);
64
- let occupied = params.node != 0u && params.node != ~0u;
65
- let size = select(0u, batch.resolution * batch.resolution, occupied);
66
- var lo = 0.0;
67
- var hi = 0.0;
68
- for (var cell = lane; cell < size; cell += 128u) {
69
- let h = state[row * size + cell];
70
- lo = min(lo, h); hi = max(hi, h);
71
- }
72
- lower[lane] = lo; upper[lane] = hi;
73
- workgroupBarrier();
74
- for (var stride = 64u; stride != 0u; stride /= 2u) {
75
- if (lane < stride) {
76
- lower[lane] = min(lower[lane], lower[lane + stride]);
77
- upper[lane] = max(upper[lane], upper[lane + stride]);
78
- }
79
- workgroupBarrier();
80
- }
81
- if (lane == 0u && occupied) { ${table.marshalling_method_write_field('displacement_bounds')}(&scene_database, row, vec2f(lower[0], upper[0])); }
82
- }
83
- `, [table.chunk_read_rw, table.wgsl_gen_write_field_code('displacement_bounds'), chunk_folded_workgroup_index]) });