@woosh/meep-engine 3.39.0 → 3.40.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 (367) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/engine/EngineHarness.d.ts.map +1 -1
  4. package/src/engine/EngineHarness.js +17 -4
  5. package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
  6. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  7. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
  8. package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
  9. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  10. package/src/engine/graphics/ecs/water/Water.js +100 -110
  11. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  12. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
  13. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
  14. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
  15. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
  16. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
  17. package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
  18. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
  19. package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
  20. package/src/engine/graphics3/WaterSystem.d.ts +21 -74
  21. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  22. package/src/engine/graphics3/WaterSystem.js +174 -367
  23. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  24. package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
  25. package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
  26. package/src/format/image/avif/api/convert_to_rgba.js +10 -9
  27. package/src/format/image/avif/api/decode_avif.d.ts +2 -2
  28. package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
  29. package/src/format/image/avif/api/decode_avif.js +1 -1
  30. package/src/shade/playground/ssr_reprojection/README.md +111 -103
  31. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
  32. package/src/shade/playground/ssr_reprojection/index.html +80 -79
  33. package/src/shade/playground/ssr_reprojection/main.js +256 -247
  34. package/src/shade/playground/ssr_variance/capture.js +96 -96
  35. package/src/shade/playground/ssr_variance/reference.js +78 -78
  36. package/src/shade/playground/vsm/README.md +96 -0
  37. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
  38. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
  39. package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
  40. package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
  41. package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
  42. package/src/shade/playground/vsm/clipmap_panel.js +138 -0
  43. package/src/shade/playground/vsm/index.html +170 -0
  44. package/src/shade/playground/vsm/main.d.ts +2 -0
  45. package/src/shade/playground/vsm/main.d.ts.map +1 -0
  46. package/src/shade/playground/vsm/main.js +389 -0
  47. package/src/shade/playground/vsm/scenes.d.ts +52 -0
  48. package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
  49. package/src/shade/playground/vsm/scenes.js +320 -0
  50. package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
  51. package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
  52. package/src/shade/playground/vsm/verify_vsm.js +305 -0
  53. package/src/shade/playground/water_refraction/README.md +57 -9
  54. package/src/shade/playground/water_refraction/main.js +12 -3
  55. package/src/shade/playground/water_refraction/world.d.ts +1 -0
  56. package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
  57. package/src/shade/playground/water_refraction/world.js +15 -5
  58. package/src/shade/renderer/Renderer.d.ts +19 -0
  59. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  60. package/src/shade/renderer/Renderer.js +72 -1
  61. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +8 -0
  62. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  63. package/src/shade/renderer/animation/GPUAnimationManager.js +18 -0
  64. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
  65. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  66. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
  67. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
  68. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  69. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
  70. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
  71. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
  72. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
  73. package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
  74. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
  75. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  76. package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
  77. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  78. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
  79. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
  80. package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
  81. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
  82. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
  83. package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
  84. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
  85. package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
  86. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  87. package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
  88. package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
  89. package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
  90. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
  91. package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
  92. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  93. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
  94. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  95. package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
  96. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
  97. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
  98. package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
  99. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
  100. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
  101. package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
  102. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  103. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
  104. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
  105. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
  106. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
  107. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
  108. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
  109. package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
  110. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
  111. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
  112. package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
  113. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
  114. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  115. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
  116. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
  117. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  118. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
  119. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
  120. package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
  121. package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
  122. package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
  123. package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
  124. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
  125. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
  126. package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
  127. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
  128. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  129. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
  130. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
  131. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
  132. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
  133. package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
  134. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
  135. package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
  136. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
  137. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
  138. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
  139. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
  140. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
  141. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
  142. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
  143. package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
  144. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
  145. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  146. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
  147. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
  148. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  149. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
  150. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
  151. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  152. package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
  153. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
  154. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
  155. package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
  156. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
  157. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  158. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
  159. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
  160. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
  161. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
  162. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
  163. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
  164. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
  165. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
  166. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
  167. package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
  168. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
  169. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
  170. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
  171. package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
  172. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
  173. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
  174. package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
  175. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
  176. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
  177. package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
  178. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
  179. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
  180. package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
  181. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
  182. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
  183. package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
  184. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
  185. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
  186. package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
  187. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
  188. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
  189. package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
  190. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
  191. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
  192. package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
  193. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
  194. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
  195. package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
  196. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
  197. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
  198. package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
  199. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
  200. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
  201. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
  202. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
  203. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
  204. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
  205. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
  206. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
  207. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
  208. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
  209. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
  210. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
  211. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
  212. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
  213. package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
  214. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
  215. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
  216. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
  217. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
  218. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
  219. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
  220. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
  221. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
  222. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
  223. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
  224. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
  225. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
  226. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
  227. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
  228. package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
  229. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
  230. package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
  231. package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
  232. package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
  233. package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
  234. package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
  235. package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
  236. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
  237. package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
  238. package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
  239. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
  240. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
  241. package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
  242. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
  243. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
  244. package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
  245. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
  246. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
  247. package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
  248. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
  249. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  250. package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
  251. package/src/shade/renderer/water/chunk_water_transport.js +3 -3
  252. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
  253. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  254. package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
  255. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
  256. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
  257. package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
  258. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
  259. package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
  260. package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
  261. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
  262. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
  263. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
  264. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
  265. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
  266. package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
  267. package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
  268. package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
  269. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
  270. package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -74
  271. package/src/shade/renderer/water/shader_water.d.ts +1 -1
  272. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  273. package/src/shade/renderer/water/shader_water.js +490 -406
  274. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
  275. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
  276. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
  277. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
  278. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
  279. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
  280. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
  281. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
  282. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
  283. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
  284. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
  285. package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
  286. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
  287. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
  288. package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
  289. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
  290. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
  291. package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
  292. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
  293. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
  294. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
  295. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
  296. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
  297. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
  298. package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
  299. package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
  300. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
  301. package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
  302. package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
  303. package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
  304. package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
  305. package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
  306. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
  307. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
  308. package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
  309. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
  310. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
  311. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
  312. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
  313. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
  314. package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
  315. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
  316. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
  317. package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
  318. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
  319. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
  320. package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
  321. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
  322. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
  323. package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
  324. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
  325. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
  326. package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
  327. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
  328. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
  329. package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
  330. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
  331. package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
  332. package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
  333. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
  334. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
  335. package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
  336. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
  337. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
  338. package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
  339. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
  340. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
  341. package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
  342. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
  343. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
  344. package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
  345. package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
  346. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
  347. package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
  348. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
  349. package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
  350. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
  351. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
  352. package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
  353. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
  354. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
  355. package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
  356. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
  357. package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
  358. package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
  359. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
  360. package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
  361. package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
  362. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
  363. package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
  364. package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
  365. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
  366. package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
  367. package/src/shade/renderer/water/surface/water_surface_grid_indices.js +0 -39
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.39.0",
9
+ "version": "3.40.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -1 +1 @@
1
- {"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AA+EA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CA0DnB;IArfD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CAkXJ;;IAID;;;OAGG;IACH,uCAMC;;qCA7iBY,OAAO,iCAAiC,EAAE,sBAAsB;mBAxB1D,aAAa;oCACI,0BAA0B;sBAOxC,kCAAkC;8BAjB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}
1
+ {"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AAmFA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CAmEnB;IA9fD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CA2XJ;;IAID;;;OAGG;IACH,uCAMC;;qCAtjBY,OAAO,iCAAiC,EAAE,sBAAsB;mBA5B1D,aAAa;oCACI,0BAA0B;sBAOxC,kCAAkC;8BAjB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}
@@ -26,6 +26,10 @@ import TopDownCameraController from "./graphics/ecs/camera/topdown/TopDownCamera
26
26
  import TopDownCameraControllerSystem from "./graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js";
27
27
  import { Light } from "./graphics/ecs/light/Light.js";
28
28
  import Water from "./graphics/ecs/water/Water.js";
29
+ import { make_plane_geometry } from "../shade/renderer/geometry/primitives/make_plane_geometry.js";
30
+ import { meshlet_geometry_build_from_geometry } from "../shade/renderer/geometry/meshlet_geometry_build_from_geometry.js";
31
+ import { MeshoptClusterizer } from "../shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.js";
32
+ import { StandardAttributes } from "../shade/renderer/geometry/StandardAttributes.js";
29
33
  import { MouseEvents } from "./input/devices/events/MouseEvents.js";
30
34
  import KeyboardCameraController from "./input/ecs/controllers/KeyboardCameraController.js";
31
35
  import InputControllerSystem from "./input/ecs/systems/InputControllerSystem.js";
@@ -565,14 +569,23 @@ export class EngineHarness {
565
569
  if (enableWater) {
566
570
 
567
571
  if (em.getSystem(WaterSystem) === null) {
568
- em.addSystem(new WaterSystem(engine.graphics));
572
+ em.addSystem(new WaterSystem(engine.graphics, EngineHarness.shadeScene(engine)));
569
573
  }
570
574
 
571
575
  const water = new Water();
572
576
 
573
- water.level.set(waterLevel);
574
-
575
- eb.add(water);
577
+ await MeshoptClusterizer.ready;
578
+ const plane = make_plane_geometry(size.x * 2, size.y * 2);
579
+ const positions = plane.getAttribute(StandardAttributes.Position).data;
580
+ const normals = plane.getAttribute(StandardAttributes.Normal).data;
581
+ for (let i = 0; i < positions.length; i += 3) {
582
+ positions[i + 2] = -positions[i + 1]; positions[i + 1] = 0;
583
+ normals[i] = 0; normals[i + 1] = 1; normals[i + 2] = 0;
584
+ }
585
+ const geometry = meshlet_geometry_build_from_geometry(plane);
586
+ const placement = new Transform64();
587
+ placement.setTranslation(size.x, waterLevel, size.y);
588
+ new Entity().add(water).add(geometry).add(placement).build(engine.entityManager.dataset);
576
589
  }
577
590
 
578
591
  eb.build(engine.entityManager.dataset);
@@ -229,7 +229,7 @@ export class ThreadedImageEncoder {
229
229
  width: sampler2d.width,
230
230
  height: sampler2d.height,
231
231
  item_size: sampler2d.itemSize,
232
- is_hdr: data instanceof Uint16Array,
232
+ is_hdr: data instanceof Float16Array || data instanceof Uint16Array,
233
233
  quality,
234
234
  speed
235
235
  };
@@ -1 +1 @@
1
- {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AAkLA;;;;;;;;GAQG;AACH,iGA4GC"}
1
+ {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AAoLA;;;;;;;;GAQG;AACH,iGA8GC"}
@@ -89,6 +89,8 @@ import { WaterSerializationAdapter } from "../../graphics/ecs/water/WaterSeriali
89
89
  import { WaterSerializationUpgrader_0_1 } from "../../graphics/ecs/water/WaterSerializationUpgrader_0_1.js";
90
90
  import { WaterSerializationUpgrader_1_2 } from "../../graphics/ecs/water/WaterSerializationUpgrader_1_2.js";
91
91
  import { WaterSerializationUpgrader_2_3 } from "../../graphics/ecs/water/WaterSerializationUpgrader_2_3.js";
92
+ import { WaterSerializationUpgrader_3_4 } from "../../graphics/ecs/water/WaterSerializationUpgrader_3_4.js";
93
+ import { MeshletGeometrySerializationAdapter } from "../../../shade/renderer/geometry/MeshletGeometrySerializationAdapter.js";
92
94
  import { WaterWavesSerializationAdapter } from "../../graphics/ecs/water/WaterWavesSerializationAdapter.js";
93
95
  import { GridPosition2Transform } from "../../grid/grid2transform/GridPosition2Transform.js";
94
96
  import {
@@ -218,6 +220,7 @@ export function populateEngineSerializationRegistry(registry) {
218
220
  new ClingToTerrainSerializationAdapter(),
219
221
  new TerrainSerializationAdapter(),
220
222
  new WaterSerializationAdapter(),
223
+ new MeshletGeometrySerializationAdapter(),
221
224
  new WaterWavesSerializationAdapter(),
222
225
  new GridPosition2TransformSerializationAdapter(),
223
226
  new GridObstacleSerializationAdapter(),
@@ -286,6 +289,7 @@ export function populateEngineSerializationRegistry(registry) {
286
289
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_0_1());
287
290
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_1_2());
288
291
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_2_3());
292
+ registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_3_4());
289
293
 
290
294
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_0_1());
291
295
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_1_2());
@@ -1,6 +1,7 @@
1
1
  export default Water;
2
2
  /**
3
- * A body of water flooding the level, as authored data and nothing else.
3
+ * Optical properties of an authored water surface. MeshletGeometry supplies its shape and
4
+ * Transform64 supplies its placement.
4
5
  *
5
6
  * Everything optical here is physical and in SI units (WATER_OPTICS_PLAN_2026_10_02.md §7.1): the
6
7
  * index of refraction, the micro-roughness of the surface, and what fills the body — a
@@ -11,16 +12,11 @@ export default Water;
11
12
  * How the surface moves is not here: the surface producer and its own component (`WaterWaves`)
12
13
  * own that.
13
14
  *
14
- * The component holds no renderer state: `WaterSystem` reads these values every frame onto the
15
- * surface its passes draw, which is why an edit needs no notification to be picked up.
15
+ * The component holds no renderer state. Optical edits notify WaterSystem, which updates the
16
+ * persistent scene row without scanning water bodies each frame.
16
17
  */
17
18
  declare class Water {
18
19
  constructor(options: any);
19
- /**
20
- * Rest height of the surface, m.
21
- * @type {Vector1}
22
- */
23
- level: Vector1;
24
20
  /**
25
21
  * Index of refraction of the water relative to the air above it.
26
22
  * @type {Vector1}
@@ -32,27 +28,28 @@ declare class Water {
32
28
  * @type {Vector1}
33
29
  */
34
30
  roughness: Vector1;
31
+ /** Optical edits queue a scene row update. */
32
+ onChanged: Signal;
33
+ /** @param {ParticipatingMedium} value */
34
+ set medium(value: ParticipatingMedium);
35
35
  /**
36
- * What fills the body: absorption and scattering lobes, RGB in 1/m. Clear open ocean
37
- * (chlorophyll 0.3 mg/m³, the `open_ocean` preset) unless told otherwise. After editing its fields in place, set
38
- * `medium.needsUpdate = true`.
39
- * @type {ParticipatingMedium}
36
+ * Absorption and scattering lobes, RGB in 1/m. Defaults to open ocean.
37
+ * After editing fields in place, set `medium.needsUpdate = true`.
38
+ * @returns {ParticipatingMedium}
40
39
  */
41
- medium: ParticipatingMedium;
42
- bvh: BvhClient;
43
- updateBounds(): void;
40
+ get medium(): ParticipatingMedium;
44
41
  fromJSON(json: any): void;
45
42
  toJSON(): {
46
- level: number;
47
43
  ior: number;
48
44
  roughness: number;
49
45
  medium: any;
50
46
  };
47
+ #private;
51
48
  }
52
49
  declare namespace Water {
53
50
  let typeName: string;
54
51
  }
55
52
  import Vector1 from "../../../../core/geom/Vector1.js";
53
+ import Signal from "../../../../core/events/signal/Signal.js";
56
54
  import { ParticipatingMedium } from "../../../../shade/renderer/medium/ParticipatingMedium.js";
57
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
58
55
  //# sourceMappingURL=Water.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Water.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/Water.js"],"names":[],"mappings":";AAUA;;;;;;;;;;;;;;GAcG;AACH;IA8BI,0BAMC;IAnCD;;;OAGG;IACH,OAFU,OAAO,CAEM;IAEvB;;;OAGG;IACH,KAFU,OAAO,CAEQ;IAEzB;;;;OAIG;IACH,WAFU,OAAO,CAEa;IAE9B;;;;;OAKG;IACH,QAFU,mBAAmB,CAEG;IAEhC,eAAsB;IAUtB,qBAcC;IAED,0BAgBC;IAED;;;;;MAOC;CACJ;;;;oBAxGmB,kCAAkC;oCAClB,0DAA0D;0BAFpE,yCAAyC"}
1
+ {"version":3,"file":"Water.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/Water.js"],"names":[],"mappings":";AASA;;;;;;;;;;;;;;;GAeG;AACH;IAmCI,0BAQC;IA1CD;;;OAGG;IACH,KAFU,OAAO,CAEQ;IAEzB;;;;OAIG;IACH,WAFU,OAAO,CAEa;IAE9B,8CAA8C;IAC9C,kBAAyB;IAWzB,yCAAyC;IACzC,uCAMC;IAbD;;;;OAIG;IACH,kCAAqC;IAoBrC,0BAgBC;IAED;;;;MAMC;;CACJ;;;;oBA9FmB,kCAAkC;mBADnC,0CAA0C;oCAEzB,0DAA0D"}
@@ -1,110 +1,100 @@
1
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
2
- import Vector1 from "../../../../core/geom/Vector1.js";
3
- import { ParticipatingMedium } from "../../../../shade/renderer/medium/ParticipatingMedium.js";
4
- import {
5
- participating_medium_from_json,
6
- participating_medium_to_json
7
- } from "../../../../shade/renderer/medium/participating_medium_serialization.js";
8
- import { water_medium_default } from "../../../../shade/renderer/medium/water/water_presets.js";
9
- import { WATER_SIZE } from "./WATER_SIZE.js";
10
-
11
- /**
12
- * A body of water flooding the level, as authored data and nothing else.
13
- *
14
- * Everything optical here is physical and in SI units (WATER_OPTICS_PLAN_2026_10_02.md §7.1): the
15
- * index of refraction, the micro-roughness of the surface, and what fills the body — a
16
- * {@link ParticipatingMedium}, the same description the path tracer, fog and glass read. Presets
17
- * and the constituent and appearance tools in `shade/renderer/medium/water/` build that medium;
18
- * the component stores only the result.
19
- *
20
- * How the surface moves is not here: the surface producer and its own component (`WaterWaves`)
21
- * own that.
22
- *
23
- * The component holds no renderer state: `WaterSystem` reads these values every frame onto the
24
- * surface its passes draw, which is why an edit needs no notification to be picked up.
25
- */
26
- class Water {
27
- /**
28
- * Rest height of the surface, m.
29
- * @type {Vector1}
30
- */
31
- level = new Vector1(0);
32
-
33
- /**
34
- * Index of refraction of the water relative to the air above it.
35
- * @type {Vector1}
36
- */
37
- ior = new Vector1(1.333);
38
-
39
- /**
40
- * Perceptual roughness of the surface for the waves too small for the surface's mesh, before
41
- * the slope variance the surface producer reports is added.
42
- * @type {Vector1}
43
- */
44
- roughness = new Vector1(0.02);
45
-
46
- /**
47
- * What fills the body: absorption and scattering lobes, RGB in 1/m. Clear open ocean
48
- * (chlorophyll 0.3 mg/m³, the `open_ocean` preset) unless told otherwise. After editing its fields in place, set
49
- * `medium.needsUpdate = true`.
50
- * @type {ParticipatingMedium}
51
- */
52
- medium = water_medium_default();
53
-
54
- bvh = new BvhClient();
55
-
56
- constructor(options) {
57
-
58
- if (options !== undefined) {
59
- console.error('Constructor options are deprecated');
60
- this.fromJSON(options);
61
- }
62
- }
63
-
64
- updateBounds() {
65
- const width = WATER_SIZE;
66
- const height = WATER_SIZE;
67
-
68
- const level = this.level.getValue();
69
-
70
- this.bvh.resize(
71
- -width / 4,
72
- level,
73
- -height / 4,
74
- width * (3 / 4),
75
- level,
76
- height * (3 / 4)
77
- );
78
- }
79
-
80
- fromJSON(json) {
81
- if (typeof json.level === 'number') {
82
- this.level.fromJSON(json.level);
83
- }
84
-
85
- if (typeof json.ior === 'number') {
86
- this.ior.fromJSON(json.ior);
87
- }
88
-
89
- if (typeof json.roughness === 'number') {
90
- this.roughness.fromJSON(json.roughness);
91
- }
92
-
93
- if (json.medium !== null && typeof json.medium === 'object') {
94
- participating_medium_from_json(this.medium, json.medium);
95
- }
96
- }
97
-
98
- toJSON() {
99
- return {
100
- level: this.level.toJSON(),
101
- ior: this.ior.toJSON(),
102
- roughness: this.roughness.toJSON(),
103
- medium: participating_medium_to_json(this.medium),
104
- };
105
- }
106
- }
107
-
108
- Water.typeName = "Water";
109
-
110
- export default Water;
1
+ import Signal from "../../../../core/events/signal/Signal.js";
2
+ import Vector1 from "../../../../core/geom/Vector1.js";
3
+ import { ParticipatingMedium } from "../../../../shade/renderer/medium/ParticipatingMedium.js";
4
+ import {
5
+ participating_medium_from_json,
6
+ participating_medium_to_json
7
+ } from "../../../../shade/renderer/medium/participating_medium_serialization.js";
8
+ import { water_medium_default } from "../../../../shade/renderer/medium/water/water_presets.js";
9
+
10
+ /**
11
+ * Optical properties of an authored water surface. MeshletGeometry supplies its shape and
12
+ * Transform64 supplies its placement.
13
+ *
14
+ * Everything optical here is physical and in SI units (WATER_OPTICS_PLAN_2026_10_02.md §7.1): the
15
+ * index of refraction, the micro-roughness of the surface, and what fills the body — a
16
+ * {@link ParticipatingMedium}, the same description the path tracer, fog and glass read. Presets
17
+ * and the constituent and appearance tools in `shade/renderer/medium/water/` build that medium;
18
+ * the component stores only the result.
19
+ *
20
+ * How the surface moves is not here: the surface producer and its own component (`WaterWaves`)
21
+ * own that.
22
+ *
23
+ * The component holds no renderer state. Optical edits notify WaterSystem, which updates the
24
+ * persistent scene row without scanning water bodies each frame.
25
+ */
26
+ class Water {
27
+ /**
28
+ * Index of refraction of the water relative to the air above it.
29
+ * @type {Vector1}
30
+ */
31
+ ior = new Vector1(1.333);
32
+
33
+ /**
34
+ * Perceptual roughness of the surface for the waves too small for the surface's mesh, before
35
+ * the slope variance the surface producer reports is added.
36
+ * @type {Vector1}
37
+ */
38
+ roughness = new Vector1(0.02);
39
+
40
+ /** Optical edits queue a scene row update. */
41
+ onChanged = new Signal();
42
+ /** @type {ParticipatingMedium|null} */
43
+ #medium = null;
44
+ #changed = () => this.onChanged.dispatch();
45
+
46
+ /**
47
+ * Absorption and scattering lobes, RGB in 1/m. Defaults to open ocean.
48
+ * After editing fields in place, set `medium.needsUpdate = true`.
49
+ * @returns {ParticipatingMedium}
50
+ */
51
+ get medium() { return this.#medium; }
52
+ /** @param {ParticipatingMedium} value */
53
+ set medium(value) {
54
+ if (value === this.#medium) { return; }
55
+ this.#medium?.onChanged.remove(this.#changed);
56
+ this.#medium = value;
57
+ value.onChanged.add(this.#changed);
58
+ this.#changed();
59
+ }
60
+
61
+ constructor(options) {
62
+ this.ior.onChanged.add(this.#changed);
63
+ this.roughness.onChanged.add(this.#changed);
64
+ this.medium = water_medium_default();
65
+ if (options !== undefined) {
66
+ console.error('Constructor options are deprecated');
67
+ this.fromJSON(options);
68
+ }
69
+ }
70
+
71
+ fromJSON(json) {
72
+ if (json.level !== undefined || json.size !== undefined) {
73
+ throw new Error('Legacy Water placement must be migrated to MeshletGeometry and Transform64 before loading');
74
+ }
75
+
76
+ if (typeof json.ior === 'number') {
77
+ this.ior.fromJSON(json.ior);
78
+ }
79
+
80
+ if (typeof json.roughness === 'number') {
81
+ this.roughness.fromJSON(json.roughness);
82
+ }
83
+
84
+ if (json.medium !== null && typeof json.medium === 'object') {
85
+ participating_medium_from_json(this.medium, json.medium);
86
+ }
87
+ }
88
+
89
+ toJSON() {
90
+ return {
91
+ ior: this.ior.toJSON(),
92
+ roughness: this.roughness.toJSON(),
93
+ medium: participating_medium_to_json(this.medium),
94
+ };
95
+ }
96
+ }
97
+
98
+ Water.typeName = "Water";
99
+
100
+ export default Water;
@@ -1 +1 @@
1
- {"version":3,"file":"WaterSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationAdapter.js"],"names":[],"mappings":"AAOA;;IAEI,oBAAc;IAGd;;;;OAIG;IACH,uCAFW,KAAK,QAQf;IAED;;;;OAIG;IACH,yCAFW,KAAK,QAQf;CACJ;gDArC+C,gEAAgE;kBAK9F,YAAY"}
1
+ {"version":3,"file":"WaterSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationAdapter.js"],"names":[],"mappings":"AAOA;;IAEI,oBAAc;IAGd;;;;OAIG;IACH,uCAFW,KAAK,QAOf;IAED;;;;OAIG;IACH,yCAFW,KAAK,QAOf;CACJ;gDAnC+C,gEAAgE;kBAK9F,YAAY"}
@@ -1,38 +1,36 @@
1
- import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
- import {
3
- deserialize_participating_medium,
4
- serialize_participating_medium
5
- } from "../../../../shade/renderer/medium/participating_medium_serialization.js";
6
- import Water from "./Water.js";
7
-
8
- export class WaterSerializationAdapter extends BinaryClassSerializationAdapter {
9
-
10
- klass = Water;
11
- version = 3;
12
-
13
- /**
14
- *
15
- * @param {BinaryBuffer} buffer
16
- * @param {Water} value
17
- */
18
- serialize(buffer, value) {
19
- buffer.writeFloat64(value.level.getValue());
20
- buffer.writeFloat32(value.ior.getValue());
21
- buffer.writeFloat32(value.roughness.getValue());
22
-
23
- serialize_participating_medium(buffer, value.medium);
24
- }
25
-
26
- /**
27
- *
28
- * @param {BinaryBuffer} buffer
29
- * @param {Water} value
30
- */
31
- deserialize(buffer, value) {
32
- value.level.set(buffer.readFloat64());
33
- value.ior.set(buffer.readFloat32());
34
- value.roughness.set(buffer.readFloat32());
35
-
36
- deserialize_participating_medium(buffer, value.medium);
37
- }
38
- }
1
+ import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import {
3
+ deserialize_participating_medium,
4
+ serialize_participating_medium
5
+ } from "../../../../shade/renderer/medium/participating_medium_serialization.js";
6
+ import Water from "./Water.js";
7
+
8
+ export class WaterSerializationAdapter extends BinaryClassSerializationAdapter {
9
+
10
+ klass = Water;
11
+ version = 4;
12
+
13
+ /**
14
+ *
15
+ * @param {BinaryBuffer} buffer
16
+ * @param {Water} value
17
+ */
18
+ serialize(buffer, value) {
19
+ buffer.writeFloat32(value.ior.getValue());
20
+ buffer.writeFloat32(value.roughness.getValue());
21
+
22
+ serialize_participating_medium(buffer, value.medium);
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @param {BinaryBuffer} buffer
28
+ * @param {Water} value
29
+ */
30
+ deserialize(buffer, value) {
31
+ value.ior.set(buffer.readFloat32());
32
+ value.roughness.set(buffer.readFloat32());
33
+
34
+ deserialize_participating_medium(buffer, value.medium);
35
+ }
36
+ }
@@ -0,0 +1,6 @@
1
+ /** A component upgrader cannot create the geometry and transform needed to retain old placement. */
2
+ export class WaterSerializationUpgrader_3_4 extends BinaryClassUpgrader {
3
+ upgrade(): void;
4
+ }
5
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
6
+ //# sourceMappingURL=WaterSerializationUpgrader_3_4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaterSerializationUpgrader_3_4.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js"],"names":[],"mappings":"AAEA,oGAAoG;AACpG;IAGI,gBAEC;CACJ;oCATmC,oDAAoD"}
@@ -0,0 +1,10 @@
1
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
2
+
3
+ /** A component upgrader cannot create the geometry and transform needed to retain old placement. */
4
+ export class WaterSerializationUpgrader_3_4 extends BinaryClassUpgrader {
5
+ __startVersion = 3;
6
+ __targetVersion = 4;
7
+ upgrade() {
8
+ throw new Error('Legacy Water placement must be migrated to MeshletGeometry and Transform64 before loading');
9
+ }
10
+ }
@@ -5,8 +5,8 @@ export default WaterWaves;
5
5
  *
6
6
  * Kept apart from `Water` on purpose: `Water` describes the body and its optics, and says nothing
7
7
  * about how the surface moves. The production surface simulation replaces this component, its
8
- * system and its producer together, and `Water` stays as it is. A body without this component is
9
- * simulated with no forcing, which is calm water — not a separate flat-water path.
8
+ * system and its producer together, and `Water` stays as it is. A body without this component
9
+ * tessellates its authored rest surface and allocates no wave grid until a splash is queued.
10
10
  */
11
11
  declare class WaterWaves {
12
12
  /**
@@ -16,7 +16,7 @@ declare class WaterWaves {
16
16
  */
17
17
  windSpeed: Vector1;
18
18
  /**
19
- * Direction the wind blows towards, radians in the xz plane, measured from +x towards +z.
19
+ * Direction the wind blows towards, radians in the mesh's local xz plane, measured from +x towards +z.
20
20
  * @type {Vector1}
21
21
  */
22
22
  windDirection: Vector1;
@@ -1,46 +1,46 @@
1
- import Vector1 from "../../../../core/geom/Vector1.js";
2
-
3
- /**
4
- * What drives the waves of the {@link Water} on the same entity, for the primitive wave
5
- * simulation.
6
- *
7
- * Kept apart from `Water` on purpose: `Water` describes the body and its optics, and says nothing
8
- * about how the surface moves. The production surface simulation replaces this component, its
9
- * system and its producer together, and `Water` stays as it is. A body without this component is
10
- * simulated with no forcing, which is calm water — not a separate flat-water path.
11
- */
12
- class WaterWaves {
13
- /**
14
- * Wind speed at 10 m, m/s. Sets the forcing, which grows as its square, and the slope variance
15
- * of the waves the simulation's grid does not resolve (Cox-Munk).
16
- * @type {Vector1}
17
- */
18
- windSpeed = new Vector1(3);
19
-
20
- /**
21
- * Direction the wind blows towards, radians in the xz plane, measured from +x towards +z.
22
- * @type {Vector1}
23
- */
24
- windDirection = new Vector1(0);
25
-
26
- fromJSON(json) {
27
- if (typeof json.windSpeed === 'number') {
28
- this.windSpeed.fromJSON(json.windSpeed);
29
- }
30
-
31
- if (typeof json.windDirection === 'number') {
32
- this.windDirection.fromJSON(json.windDirection);
33
- }
34
- }
35
-
36
- toJSON() {
37
- return {
38
- windSpeed: this.windSpeed.toJSON(),
39
- windDirection: this.windDirection.toJSON(),
40
- };
41
- }
42
- }
43
-
44
- WaterWaves.typeName = "WaterWaves";
45
-
46
- export default WaterWaves;
1
+ import Vector1 from "../../../../core/geom/Vector1.js";
2
+
3
+ /**
4
+ * What drives the waves of the {@link Water} on the same entity, for the primitive wave
5
+ * simulation.
6
+ *
7
+ * Kept apart from `Water` on purpose: `Water` describes the body and its optics, and says nothing
8
+ * about how the surface moves. The production surface simulation replaces this component, its
9
+ * system and its producer together, and `Water` stays as it is. A body without this component
10
+ * tessellates its authored rest surface and allocates no wave grid until a splash is queued.
11
+ */
12
+ class WaterWaves {
13
+ /**
14
+ * Wind speed at 10 m, m/s. Sets the forcing, which grows as its square, and the slope variance
15
+ * of the waves the simulation's grid does not resolve (Cox-Munk).
16
+ * @type {Vector1}
17
+ */
18
+ windSpeed = new Vector1(3);
19
+
20
+ /**
21
+ * Direction the wind blows towards, radians in the mesh's local xz plane, measured from +x towards +z.
22
+ * @type {Vector1}
23
+ */
24
+ windDirection = new Vector1(0);
25
+
26
+ fromJSON(json) {
27
+ if (typeof json.windSpeed === 'number') {
28
+ this.windSpeed.fromJSON(json.windSpeed);
29
+ }
30
+
31
+ if (typeof json.windDirection === 'number') {
32
+ this.windDirection.fromJSON(json.windDirection);
33
+ }
34
+ }
35
+
36
+ toJSON() {
37
+ return {
38
+ windSpeed: this.windSpeed.toJSON(),
39
+ windDirection: this.windDirection.toJSON(),
40
+ };
41
+ }
42
+ }
43
+
44
+ WaterWaves.typeName = "WaterWaves";
45
+
46
+ export default WaterWaves;
@@ -1 +1 @@
1
- {"version":3,"file":"sampler2d_to_avif.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/sampler2d_to_avif.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gEARW,MAAM,YACN,MAAM,+BAEJ,UAAU,CAmCtB"}
1
+ {"version":3,"file":"sampler2d_to_avif.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/sampler2d_to_avif.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gEARW,MAAM,YACN,MAAM,+BAEJ,UAAU,CAmCtB"}