@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
@@ -6,8 +6,7 @@ export class RasterizationJob {
6
6
  pipeline_type: number;
7
7
  /**
8
8
  * Side-to-cullMode lookup applied per material bucket. Default {@link CullPolicy.Standard}
9
- * matches main-pass culling. Shadow callers set {@link CullPolicy.Reversed} so the back
10
- * face of sided geometry is what gets written into the shadow map.
9
+ * matches main-pass culling, which shadow casters use too.
11
10
  * @type {Readonly<Record<number, GPUCullMode>>}
12
11
  */
13
12
  cull_policy: Readonly<Record<number, GPUCullMode>>;
@@ -1 +1 @@
1
- {"version":3,"file":"RasterizationJob.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/rasterize/RasterizationJob.js"],"names":[],"mappings":";;;;AAcA;IACI,sBAAmD;IAEnD;;;;;OAKG;IACH,aAFU,SAAS,OAAO,MAAM,cAAc,CAAC,CAEb;IAElC;;OAEG;IACH,kCAAW;IACX;;;;OAIG;IACH,0CAAiB;IAEjB;;OAEG;IACH,4BAAa;IAEb;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEV;IAER;;OAEG;IACH,yBAAQ;IAER;;;OAGG;IACH,gBAAyB;IAEzB;;;OAGG;IACH,sBAA+B;CAClC"}
1
+ {"version":3,"file":"RasterizationJob.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/rasterize/RasterizationJob.js"],"names":[],"mappings":";;;;AAcA;IACI,sBAAmD;IAEnD;;;;OAIG;IACH,aAFU,SAAS,OAAO,MAAM,cAAc,CAAC,CAEb;IAElC;;OAEG;IACH,kCAAW;IACX;;;;OAIG;IACH,0CAAiB;IAEjB;;OAEG;IACH,4BAAa;IAEb;;;OAGG;IACH,UAFU,MAAM,EAAE,CAEV;IAER;;OAEG;IACH,yBAAQ;IAER;;;OAGG;IACH,gBAAyB;IAEzB;;;OAGG;IACH,sBAA+B;CAClC"}
@@ -17,8 +17,7 @@ export class RasterizationJob {
17
17
 
18
18
  /**
19
19
  * Side-to-cullMode lookup applied per material bucket. Default {@link CullPolicy.Standard}
20
- * matches main-pass culling. Shadow callers set {@link CullPolicy.Reversed} so the back
21
- * face of sided geometry is what gets written into the shadow map.
20
+ * matches main-pass culling, which shadow casters use too.
22
21
  * @type {Readonly<Record<number, GPUCullMode>>}
23
22
  */
24
23
  cull_policy = CullPolicy.Standard;
@@ -16,12 +16,11 @@ export function construct_primitive_state(draw_mode: ShadeDrawMode, side: ShadeD
16
16
  *
17
17
  * - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
18
18
  * presents (cull back), `Double` renders both.
19
- * - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
20
- * standard "back-face shadow casting" / "front-face culling for shadow casters"
21
- * technique — shadow callers select this policy so the surface written into the shadow
22
- * map sits behind the lit surface, eliminating self-shadow acne on the lit side and
23
- * keeping shadow casting consistent with the user's view of one-sided geometry.
24
- * `Double` has no opposite and stays at `none`.
19
+ * - `Reversed` culls the other way, so the *back* face is what gets drawn — "back-face
20
+ * shadow casting". Shadow casters do not use it: they cull as the main view does, and the
21
+ * shared rasterizer slope bias keeps acne off; back faces on top of that bias left a gap of
22
+ * a shadow texel or so where a caster meets the ground. `Double` has no opposite and stays
23
+ * at `none`.
25
24
  */
26
25
  export type CullPolicy = Readonly<Record<number, GPUCullMode>>;
27
26
  export namespace CullPolicy {
@@ -1 +1 @@
1
- {"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"AA4DA;;;;;;GAMG;AACH,qDALW,aAAa,QACb,aAAa,gBACb,SAAS,OAAO,MAAM,cAAc,CAAC,GACnC,cAAc,CA2B1B;;;;;;;;;;;;;;;;;;yBA5DS,SAAS,OAAO,MAAM,cAAc,CAAC;;;;;;;;;AAe/C;;;;;;;GAOG;AACH,yCAFU,cAAc,aAAa,CAAC,CAKnC;8BAzD2B,iCAAiC;8BACjC,iCAAiC;+BAFhC,uDAAuD"}
1
+ {"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"AA2DA;;;;;;GAMG;AACH,qDALW,aAAa,QACb,aAAa,gBACb,SAAS,OAAO,MAAM,cAAc,CAAC,GACnC,cAAc,CA2B1B;;;;;;;;;;;;;;;;;yBA5DS,SAAS,OAAO,MAAM,cAAc,CAAC;;;;;;;;;AAe/C;;;;;;;GAOG;AACH,yCAFU,cAAc,aAAa,CAAC,CAKnC;8BAxD2B,iCAAiC;8BACjC,iCAAiC;+BAFhC,uDAAuD"}
@@ -23,12 +23,11 @@ const lut_topology = {
23
23
  *
24
24
  * - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
25
25
  * presents (cull back), `Double` renders both.
26
- * - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
27
- * standard "back-face shadow casting" / "front-face culling for shadow casters"
28
- * technique — shadow callers select this policy so the surface written into the shadow
29
- * map sits behind the lit surface, eliminating self-shadow acne on the lit side and
30
- * keeping shadow casting consistent with the user's view of one-sided geometry.
31
- * `Double` has no opposite and stays at `none`.
26
+ * - `Reversed` culls the other way, so the *back* face is what gets drawn — "back-face
27
+ * shadow casting". Shadow casters do not use it: they cull as the main view does, and the
28
+ * shared rasterizer slope bias keeps acne off; back faces on top of that bias left a gap of
29
+ * a shadow texel or so where a caster meets the ground. `Double` has no opposite and stays
30
+ * at `none`.
32
31
  *
33
32
  * @enum {Readonly<Record<number, GPUCullMode>>}
34
33
  */
@@ -128,10 +128,10 @@ export type AVBOITSideChannel = {
128
128
  emission: number;
129
129
  };
130
130
  /**
131
- * whether the channel would add nothing this frame;
131
+ * whether the channel would add nothing for this view;
132
132
  * asked before the orchestrator records, and a channel that answers `true` is not asked for
133
133
  * anything else in that frame.
134
134
  */
135
- avboit_is_empty?: () => boolean;
135
+ avboit_is_empty?: (view: import("../../../view/GPUViewContext.js").GPUViewContext) => boolean;
136
136
  };
137
137
  //# sourceMappingURL=AVBOITSideChannel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAC3E,WAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QACvD,wBAA8B,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QACjG,eAAqB,EAAE,MAAM,CAAC;QAC9B,sBAA4B,EAAE,OAAO,uCAAuC,EAAE,yBAAyB,CAAC;KACrG,KAAK;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;sBAKtB,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,kBAAwB,EAAE,UAAU,MAAM,CAAC,CAAC;QAC5C,SAAe,EAAE,MAAM,CAAC;KACrB,KAAK,MAAM;;;;;;;;kBAED,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,IAAU,EAAE,MAAM,CAAC;QACnB,aAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,MAAY,EAAE;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KACjE,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;iBAKhD,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QACzE,MAAY,EAAE,MAAM,CAAC;QACrB,aAAmB,EAAE,MAAM,CAAC;QAC5B,IAAU,EAAE,MAAM,CAAC;QACnB,QAAc,EAAE,MAAM,CAAC;QACvB,eAAqB,EAAE,MAAM,CAAC;QAC9B,oBAA0B,EAAE,MAAM,CAAC;QACnC,sBAA4B,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC;QACxD,YAAkB,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,CAAC;KACrF,KAAK;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;;;;;;sBAU9D,MAAM,OAAO"}
1
+ {"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAC3E,WAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QACvD,wBAA8B,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QACjG,eAAqB,EAAE,MAAM,CAAC;QAC9B,sBAA4B,EAAE,OAAO,uCAAuC,EAAE,yBAAyB,CAAC;KACrG,KAAK;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;sBAKtB,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,kBAAwB,EAAE,UAAU,MAAM,CAAC,CAAC;QAC5C,SAAe,EAAE,MAAM,CAAC;KACrB,KAAK,MAAM;;;;;;;;kBAED,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,IAAU,EAAE,MAAM,CAAC;QACnB,aAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,MAAY,EAAE;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KACjE,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;iBAKhD,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QACzE,MAAY,EAAE,MAAM,CAAC;QACrB,aAAmB,EAAE,MAAM,CAAC;QAC5B,IAAU,EAAE,MAAM,CAAC;QACnB,QAAc,EAAE,MAAM,CAAC;QACvB,eAAqB,EAAE,MAAM,CAAC;QAC9B,oBAA0B,EAAE,MAAM,CAAC;QACnC,sBAA4B,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC;QACxD,YAAkB,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,CAAC;KACrF,KAAK;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;;;;;;sBAU9D,CAAC,IAAI,EAAE,OAAO,iCAAiC,EAAE,cAAc,KAAK,OAAO"}
@@ -86,7 +86,7 @@
86
86
  * (`chunk_volumetrics_irradiance_sh`), for a channel whose fragments are lit: the renderer's
87
87
  * indirect lighting, whichever mode it runs, and the scene's lights, shadowed and attenuated by
88
88
  * the fog, written by the pass that lights the fog.
89
- * @property {() => boolean} [avboit_is_empty] whether the channel would add nothing this frame;
89
+ * @property {(view: import("../../../view/GPUViewContext.js").GPUViewContext) => boolean} [avboit_is_empty] whether the channel would add nothing for this view;
90
90
  * asked before the orchestrator records, and a channel that answers `true` is not asked for
91
91
  * anything else in that frame.
92
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SCENE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SCENE_DATABASE_SPEC.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wDAOG;sCAlBmC,0CAA0C"}
1
+ {"version":3,"file":"SCENE_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/SCENE_DATABASE_SPEC.js"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wDASG;sCAtBmC,0CAA0C"}
@@ -2,6 +2,8 @@ import { GPUDatabaseDefinition } from "../buffer/table/GPUDatabaseDefinition.js"
2
2
  import { MESH_INSTANCE_METADATA_STRUCT } from "./MESH_INSTANCE_METADATA_STRUCT.js";
3
3
  import { NODE3D_STRUCT } from "./NODE3D_STRUCT.js";
4
4
  import { PARTICIPATING_MEDIA_VOLUME_STRUCT } from "../volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js";
5
+ import { WATER_BODY_STRUCT } from "../water/medium/WATER_BODIES_STRUCT.js";
6
+ import { WATER_WAVE_RECORD_STRUCT } from "../water/surface/WATER_WAVE_RECORD_STRUCT.js";
5
7
 
6
8
  /**
7
9
  * Schema for the scene's GPU-resident records — meshes and the
@@ -16,8 +18,17 @@ export const SCENE_DATABASE_SPEC = GPUDatabaseDefinition.from({
16
18
  // GPUSceneVolumetrics whenever their version moves; read by the froxel volumetrics and by the
17
19
  // ray passes through chunk_participating_media_volumes_iterate
18
20
  participating_media_volumes: PARTICIPATING_MEDIA_VOLUME_STRUCT,
21
+ water_bodies: WATER_BODY_STRUCT,
22
+ water_waves: WATER_WAVE_RECORD_STRUCT,
19
23
  });
20
24
 
25
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_bodies', field: 'node', target_database: SCENE_DATABASE_SPEC,
26
+ target_table: 'transforms', nullable: false, owning: false });
27
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_bodies', field: 'wave', target_database: SCENE_DATABASE_SPEC,
28
+ target_table: 'water_waves', nullable: true, owning: true });
29
+ SCENE_DATABASE_SPEC.add_link({ table: 'water_waves', field: 'node', target_database: SCENE_DATABASE_SPEC,
30
+ target_table: 'transforms', nullable: false, owning: false });
31
+
21
32
  // A mesh's transform. A mesh row and its transforms row are the same row — the entity's, one on —
22
33
  // so this word always names its own index, and it is declared as the link it is.
23
34
  SCENE_DATABASE_SPEC.add_link({
@@ -1 +1 @@
1
- {"version":3,"file":"build_lut_fog_parameters_jendersie_deon.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js"],"names":[],"mappings":"AAeA;;;;;;;;;GASG;AACH,qEAPW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,YAAY,CAoDxB;6BArE4B,wCAAwC"}
1
+ {"version":3,"file":"build_lut_fog_parameters_jendersie_deon.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,qEAPW,MAAM,iBACN,MAAM,iBACN,MAAM,GACJ,YAAY,CAoDxB;6BArE4B,wCAAwC"}
@@ -1,5 +1,4 @@
1
1
  import { assert } from "../../../../../../../core/assert.js";
2
- import { to_half_float_uint16 } from "../../../../../../../core/binary/to_half_float_uint16.js";
3
2
  import { BinaryDataType } from "../../../../../../../core/binary/type/BinaryDataType.js";
4
3
  import { ColorSpace } from "../../../../../texture/ColorSpace.js";
5
4
  import { ShadeTexture } from "../../../../../texture/ShadeTexture.js";
@@ -33,7 +32,7 @@ export function build_lut_fog_parameters_jendersie_deon(
33
32
  const log_d_min = Math.log(min_diameter);
34
33
  const log_range = Math.log(max_diameter) - log_d_min;
35
34
 
36
- const u16 = new Uint16Array(resolution * 4);
35
+ const f16 = new Float16Array(resolution * 4);
37
36
 
38
37
  const sample = [];
39
38
  for (let i = 0; i < resolution; i++) {
@@ -49,7 +48,7 @@ export function build_lut_fog_parameters_jendersie_deon(
49
48
  );
50
49
 
51
50
  for (let j = 0; j < 4; j++) {
52
- u16[i * 4 + j] = to_half_float_uint16(sample[j]);
51
+ f16[i * 4 + j] = sample[j];
53
52
  }
54
53
 
55
54
  assert.greaterThanOrEqual(sample[3],0, "w_D must not be negative");
@@ -57,7 +56,7 @@ export function build_lut_fog_parameters_jendersie_deon(
57
56
  }
58
57
 
59
58
  const image = ShadeImage.fromArrayBuffer(
60
- u16.buffer,
59
+ f16.buffer,
61
60
  4,
62
61
  BinaryDataType.Float16,
63
62
  resolution, 1, 1,
@@ -71,4 +70,4 @@ export function build_lut_fog_parameters_jendersie_deon(
71
70
  texture.dimensions = 1;
72
71
 
73
72
  return texture;
74
- }
73
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"generate_dfg_texture.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js"],"names":[],"mappings":"AA8EA;;;;;GAKG;AACH;IAHoC,QAAQ;IAChB,UAAU,GAA3B,MAAM;SA2BhB"}
1
+ {"version":3,"file":"generate_dfg_texture.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js"],"names":[],"mappings":"AA0EA;;;;;GAKG;AACH;IAHoC,QAAQ;IAChB,UAAU,GAA3B,MAAM;SA2BhB"}
@@ -1,6 +1,5 @@
1
1
  import { BinaryBuffer } from "../../../../../../core/binary/BinaryBuffer.js";
2
2
  import { downloadAsFile } from "../../../../../../core/binary/downloadAsFile.js";
3
- import { to_half_float_uint16 } from "../../../../../../core/binary/to_half_float_uint16.js";
4
3
  import { BinaryDataType } from "../../../../../../core/binary/type/BinaryDataType.js";
5
4
  import { FrameGraph } from "../../../../../../engine/graphics/render/frame_graph/FrameGraph.js";
6
5
  import { ShadeGPUCommandContext } from "../../../../../device/ShadeGPUCommandContext.js";
@@ -40,10 +39,7 @@ function graph_download_texture({
40
39
  const texture_data = await texture.download();
41
40
 
42
41
  // encode to f16
43
- const f16_data = new Uint16Array(texture.width * texture.height * 2);
44
- for (let i = 0; i < texture_data.length; i++) {
45
- f16_data[i] = to_half_float_uint16(texture_data[i]);
46
- }
42
+ const f16_data = new Float16Array(texture_data);
47
43
 
48
44
 
49
45
  const image = ShadeImage.fromArrayBuffer(
@@ -0,0 +1,30 @@
1
+ /**
2
+ * How far in from each edge of the screen the importance falls off, as a fraction of the screen's
3
+ * height (the horizontal falloff is the same distance in pixels).
4
+ * @type {number}
5
+ */
6
+ export const SCREEN_IMPORTANCE_BORDER_FRACTION: number;
7
+ /**
8
+ * Steps a pixel's importance is quantized to when it is summed with atomics: a pixel of full
9
+ * importance adds this much.
10
+ * @type {number}
11
+ */
12
+ export const SCREEN_IMPORTANCE_STEPS: number;
13
+ /**
14
+ * How much a pixel matters by where it is on screen: 1 over most of it, falling to 0 at the edges —
15
+ * the automatic exposure's metering mask, after
16
+ * https://www.unrealengine.com/en-US/tech-blog/how-epic-games-is-handling-auto-exposure-in-4-25 —
17
+ * shared by every pass that weighs pixels by their place on screen.
18
+ *
19
+ * - `screen_importance(uv, vertical_aspect, border_fraction)` — the mask, in [0, 1]; `vertical_aspect`
20
+ * is the screen's height over its width, `border_fraction` the falloff's width
21
+ * - `screen_importance_weight(uv, vertical_aspect)` — the mask at
22
+ * {@link SCREEN_IMPORTANCE_BORDER_FRACTION} as an integer for an atomic sum:
23
+ * {@link SCREEN_IMPORTANCE_STEPS} at full importance, and never below 1, so that a pixel at the very
24
+ * edge still counts
25
+ *
26
+ * @type {CodeChunk}
27
+ */
28
+ export const chunk_screen_importance: CodeChunk;
29
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
30
+ //# sourceMappingURL=chunk_screen_importance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_screen_importance.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,gDAFU,MAAM,CAEsC;AAEtD;;;;GAIG;AACH,sCAFU,MAAM,CAE0B;AAE1C;;;;;;;;;;;;;;GAcG;AACH,sCAFU,SAAS,CAwBjB;0BArDwB,6BAA6B"}
@@ -0,0 +1,54 @@
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+
3
+ /**
4
+ * How far in from each edge of the screen the importance falls off, as a fraction of the screen's
5
+ * height (the horizontal falloff is the same distance in pixels).
6
+ * @type {number}
7
+ */
8
+ export const SCREEN_IMPORTANCE_BORDER_FRACTION = 0.13;
9
+
10
+ /**
11
+ * Steps a pixel's importance is quantized to when it is summed with atomics: a pixel of full
12
+ * importance adds this much.
13
+ * @type {number}
14
+ */
15
+ export const SCREEN_IMPORTANCE_STEPS = 64;
16
+
17
+ /**
18
+ * How much a pixel matters by where it is on screen: 1 over most of it, falling to 0 at the edges —
19
+ * the automatic exposure's metering mask, after
20
+ * https://www.unrealengine.com/en-US/tech-blog/how-epic-games-is-handling-auto-exposure-in-4-25 —
21
+ * shared by every pass that weighs pixels by their place on screen.
22
+ *
23
+ * - `screen_importance(uv, vertical_aspect, border_fraction)` — the mask, in [0, 1]; `vertical_aspect`
24
+ * is the screen's height over its width, `border_fraction` the falloff's width
25
+ * - `screen_importance_weight(uv, vertical_aspect)` — the mask at
26
+ * {@link SCREEN_IMPORTANCE_BORDER_FRACTION} as an integer for an atomic sum:
27
+ * {@link SCREEN_IMPORTANCE_STEPS} at full importance, and never below 1, so that a pixel at the very
28
+ * edge still counts
29
+ *
30
+ * @type {CodeChunk}
31
+ */
32
+ export const chunk_screen_importance = CodeChunk.from(
33
+ //language=WGSL
34
+ `
35
+ fn screen_importance(
36
+ uv: vec2<f32>,
37
+ vertical_aspect: f32,
38
+ border_fraction: f32
39
+ ) -> f32{
40
+
41
+ let fov = border_fraction * vec2(vertical_aspect, 1.0);
42
+
43
+ let border = smoothstep(vec2(0.0, 0.0), fov, uv) * (1.0 - smoothstep(vec2(1.0, 1.0) - fov, vec2(1.0, 1.0), uv));
44
+
45
+ return border.x * border.y;
46
+ }
47
+
48
+ fn screen_importance_weight(uv: vec2<f32>, vertical_aspect: f32) -> u32 {
49
+ let importance = screen_importance(uv, vertical_aspect, ${SCREEN_IMPORTANCE_BORDER_FRACTION});
50
+
51
+ return max(1u, u32(importance * ${SCREEN_IMPORTANCE_STEPS}));
52
+ }
53
+ `
54
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"read_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js"],"names":[],"mappings":"AAuGA;;;;GAIG;AACH,6CAHW,YAAY,yBAqDtB;AAwBD;;;;;;GAMG;AACH,8DALW,WAAW,eACX,MAAM,UACN,MAAM,GACJ,EAAE,CAsBd;6BAjN4B,4CAA4C"}
1
+ {"version":3,"file":"read_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js"],"names":[],"mappings":"AAwGA;;;;GAIG;AACH,6CAHW,YAAY,yBAqDtB;AAwBD;;;;;;GAMG;AACH,8DALW,WAAW,eACX,MAAM,UACN,MAAM,GACJ,EAAE,CAsBd;6BAlN4B,4CAA4C"}
@@ -79,11 +79,12 @@ function read_multiple_f32(buffer, count) {
79
79
  *
80
80
  * @param {BinaryBuffer} buffer
81
81
  * @param {number} count
82
- * @returns {Uint32Array}
82
+ * @returns {Int32Array}
83
83
  */
84
84
  function read_multiple_i32(buffer, count) {
85
85
 
86
- const r = new Uint32Array(count);
86
+ // signed storage, or every negative component reads back as its u32 bit pattern
87
+ const r = new Int32Array(count);
87
88
  buffer.readInt32Array(r, 0, count);
88
89
  return r;
89
90
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A directional light's shadow map: a row of the light database's `shadow_directional` table,
3
+ * which the light's `shadow_id` names. It says where the map is, which is one of two things:
4
+ *
5
+ * - **cascades** — a range over the `shadow_cascade` table, one row per cascade, nearest first, with
6
+ * `virtual_map` naming nothing;
7
+ * - **a virtual shadow map** — `virtual_map` names its row of the `shadow_virtual` table, and the
8
+ * cascade range is empty.
9
+ *
10
+ * Neither the range nor the link owns its rows: the shadow context claims a map's rows when it
11
+ * builds the map and gives them back when it evicts it, while the record itself sits in a slot that
12
+ * is reassigned densely as maps come and go. A record written without `virtual_map` leaves it
13
+ * naming nothing, which is how a cascaded map's record is written.
14
+ *
15
+ * @type {WebGPUStruct}
16
+ */
17
+ export const DIRECTIONAL_SHADOWMAP_STRUCT: WebGPUStruct;
18
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
19
+ //# sourceMappingURL=DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DIRECTIONAL_SHADOWMAP_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,2CAFU,YAAY,CASY;6BAzBL,mCAAmC"}
@@ -0,0 +1,27 @@
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+
4
+ /**
5
+ * A directional light's shadow map: a row of the light database's `shadow_directional` table,
6
+ * which the light's `shadow_id` names. It says where the map is, which is one of two things:
7
+ *
8
+ * - **cascades** — a range over the `shadow_cascade` table, one row per cascade, nearest first, with
9
+ * `virtual_map` naming nothing;
10
+ * - **a virtual shadow map** — `virtual_map` names its row of the `shadow_virtual` table, and the
11
+ * cascade range is empty.
12
+ *
13
+ * Neither the range nor the link owns its rows: the shadow context claims a map's rows when it
14
+ * builds the map and gives them back when it evicts it, while the record itself sits in a slot that
15
+ * is reassigned densely as maps come and go. A record written without `virtual_map` leaves it
16
+ * naming nothing, which is how a cascaded map's record is written.
17
+ *
18
+ * @type {WebGPUStruct}
19
+ */
20
+ export const DIRECTIONAL_SHADOWMAP_STRUCT = WebGPUStruct.from({
21
+ /** row of the map's nearest cascade in `shadow_cascade` */
22
+ first_cascade: u32,
23
+ /** how many cascades follow it, the nearest included */
24
+ cascade_count: u32,
25
+ /** the map's row in `shadow_virtual`, or NULL for a cascaded map */
26
+ virtual_map: u32,
27
+ }, "DirectionalShadowmap").pack();
@@ -66,6 +66,7 @@ export class DirectionalLightShadowmap extends Shadowmap {
66
66
  make_record(): {
67
67
  first_cascade: number;
68
68
  cascade_count: number;
69
+ virtual_map: number;
69
70
  };
70
71
  /**
71
72
  * The CPU's half of cascade `index`'s `shadow_cascade` row: where it is in the atlas, and the
@@ -1 +1 @@
1
- {"version":3,"file":"DirectionalLightShadowmap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/DirectionalLightShadowmap.js"],"names":[],"mappings":"AAwGA;IAsEI;;OAEG;IACH,2BAFW,MAAM,EAiBhB;IAvFD;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,eAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,QAFU,YAAY,CAEf;IAEP;;;;;;OAMG;IACH,eAFU,MAAM,CAEG;IAEnB;;;;;;;OAOG;IACH,cAFU,YAAY,CAET;IASb;;;;OAIG;IACH,oBAFU,OAAO,CAEU;IAE3B;;;;;;OAMG;IACH,iBAFU;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,YAAY,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,CAEjF;IAsBhB,+CA0QC;IAED;;;MAKC;IAED;;;;;;;OAOG;IACH,2BAJW,MAAM,UACN;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,GAC9C;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,CAiB5D;;CAEJ;0BArdyB,gBAAgB"}
1
+ {"version":3,"file":"DirectionalLightShadowmap.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/DirectionalLightShadowmap.js"],"names":[],"mappings":"AAyGA;IAsEI;;OAEG;IACH,2BAFW,MAAM,EAiBhB;IAvFD;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,eAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,QAFU,YAAY,CAEf;IAEP;;;;;;OAMG;IACH,eAFU,MAAM,CAEG;IAEnB;;;;;;;OAOG;IACH,cAFU,YAAY,CAET;IASb;;;;OAIG;IACH,oBAFU,OAAO,CAEU;IAE3B;;;;;;OAMG;IACH,iBAFU;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,YAAY,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,CAEjF;IAsBhB,+CA0QC;IAED;;;;MAQC;IAED;;;;;;;OAOG;IACH,2BAJW,MAAM,UACN;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,GAC9C;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,CAiB5D;;CAEJ;0BAxdyB,gBAAgB"}
@@ -20,6 +20,7 @@ import { inverseLerp } from "../../../../core/math/inverseLerp.js";
20
20
  import {
21
21
  quaternion_invert_orientation
22
22
  } from "../../../../engine/graphics/ecs/camera/quaternion_invert_orientation.js";
23
+ import { GPU_DATABASE_NULL } from "../../buffer/table/GPU_DATABASE_NULL.js";
23
24
  import { CSM_CASCADE_STRUCT, CSM_CASTER_RANGE_UNKNOWN } from "./csm/CSM_CASCADE_STRUCT.js";
24
25
  import { SHADOWMAP_CSM_CASCADE_BLEND_FRACTION } from "./csm/SHADOWMAP_CSM_CASCADE_BLEND_FRACTION.js";
25
26
  import { SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION } from "./csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js";
@@ -464,6 +465,9 @@ export class DirectionalLightShadowmap extends Shadowmap {
464
465
  return {
465
466
  first_cascade: this.first_cascade,
466
467
  cascade_count: this.cascade_count,
468
+ // said outright: the slot may have held a virtual map's record a moment ago, and a write
469
+ // that leaves a field out keeps what the row had
470
+ virtual_map: GPU_DATABASE_NULL,
467
471
  };
468
472
  }
469
473
 
@@ -50,6 +50,43 @@ export class GPUSceneShadowmapContext {
50
50
  * @type {boolean}
51
51
  */
52
52
  use_tetrahedron_point_shadows: boolean;
53
+ /**
54
+ * Gives directional lights virtual shadow maps instead of cascades. The renderer pushes this
55
+ * from its `feature_virtual_shadow_maps` flag before each light update, alongside
56
+ * {@link enabled}; a flip is picked up in {@link process_lights}, which rebuilds every
57
+ * directional map of the other kind on the same pass, as it does for the point-light generator.
58
+ * @type {boolean}
59
+ */
60
+ use_virtual_shadow_maps: boolean;
61
+ /**
62
+ * The renderer pushes this from {@link Renderer.shadow_virtual_page_budget} every frame. Pages a
63
+ * frame wants beyond it wait, best first, for the next.
64
+ *
65
+ * @param {number} v pages per frame; zero draws none and leaves every page as it is
66
+ */
67
+ set virtual_page_budget(v: number);
68
+ /**
69
+ * @returns {number} pages per frame, across the scene's virtual shadow maps
70
+ */
71
+ get virtual_page_budget(): number;
72
+ /**
73
+ * Added to the level every point of a virtual shadow map selects; positive is coarser. Pushed by
74
+ * the renderer every frame and written into each map's record, so a change takes effect on the
75
+ * next frame's demand and sampling alike.
76
+ * @type {number}
77
+ */
78
+ virtual_lod_bias: number;
79
+ /**
80
+ * Pushed from {@link Renderer.shadow_virtual_first_texel_size}. A change rebuilds every virtual
81
+ * shadow map in {@link process_lights}: every page of the clipmap changes size.
82
+ *
83
+ * @param {number} v metres, positive
84
+ */
85
+ set virtual_first_texel_size(v: number);
86
+ /**
87
+ * @returns {number}
88
+ */
89
+ get virtual_first_texel_size(): number;
53
90
  /**
54
91
  * The renderer pushes this from {@link Renderer.shadow_cascade_count} before each light update,
55
92
  * alongside {@link enabled}. A change is picked up in {@link process_lights}: every directional
@@ -100,6 +137,22 @@ export class GPUSceneShadowmapContext {
100
137
  * @returns {number}
101
138
  */
102
139
  get cascade_table(): number;
140
+ /**
141
+ * Record this frame's virtual shadow map feedback — the casters that moved, the pages they made
142
+ * stale, the pages the view's pixels ask for — into the frame's `Shading` graph once the main
143
+ * view's depth exists, and read it back for the maps' next frames. Does nothing in a scene
144
+ * without virtual shadow maps. See {@link graph_vsm_feedback}.
145
+ *
146
+ * @param {Object} options
147
+ * @param {FrameGraph} options.graph
148
+ * @param {import("../../view/GPUViewContext.js").GPUViewContext} options.view the main view
149
+ * @param {number} options.depth graph handle of the main view's depth
150
+ */
151
+ graph_virtual_feedback({ graph, view, depth }: {
152
+ graph: FrameGraph;
153
+ view: import("../../view/GPUViewContext.js").GPUViewContext;
154
+ depth: number;
155
+ }): void;
103
156
  /**
104
157
  *
105
158
  * @param {Light} light
@@ -227,5 +280,6 @@ export type GPURecordWriter = import("../../buffer/table/serde/generate_record_w
227
280
  import { MaxRectanglesPacker } from "../../../../core/geom/packing/max-rect/MaxRectanglesPacker.js";
228
281
  import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
229
282
  import { ViewManager } from "../../view/ViewManager.js";
283
+ import { FrameGraph } from "../../../../engine/graphics/render/frame_graph/FrameGraph.js";
230
284
  import AABB2 from "../../../../core/geom/2d/aabb/AABB2.js";
231
285
  //# sourceMappingURL=GPUSceneShadowmapContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSceneShadowmapContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js"],"names":[],"mappings":"AAsGA;;GAEG;AACH;IAsQI;;;;;;;;OAQG;IACH,sBAPW,eAAe,aACf,eAAe,SAGf,kBAAkB,EAiE5B;IA5UD,2BAAwG;IAExG;;;OAGG;IACH,SAFU,iBAAiB,CAEnB;IAQR;;;;;;;;OAQG;IACH,qBAFU,WAAW,CAED;IAsCpB;;;;;;;;OAQG;IACH,SAFU,OAAO,CAEF;IAEf;;;;;;;;;;OAUG;IACH,+BAFU,OAAO,CAEqB;IAetC;;;;;;;;OAQG;IACH,6BAIC;IApBD;;OAEG;IACH,4BAEC;IA0CD;;;;OAIG;IACH,6BAIC;IAhBD;;OAEG;IACH,4BAEC;IAwED;;OAEG;IACH,iCAEC;IAED;;;;;;OAMG;IACH,oCAEC;IAED;;;;;OAKG;IACH,oCAEC;IAoGD;;;;;OAKG;IACH,4BAMC;IA2LD;;;;OAIG;IACH,eAHW,KAAK,GACH,SAAS,GAAC,SAAS,CAI/B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,6BAPW,MAAM,SAEN,eAAe,eACf,MAAM,mBACN,UAAU,MAAM,CAAC,QAoE3B;IAsGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,kBAFW,sBAAsB,QAwFhC;IAsbD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBALa,OAAO,CAiQnB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,KAAK,CAWjB;IAED,gBAiBC;;CACJ;qCA1nDY,OAAO,2CAA2C,EAAE,sBAAsB;8BAC1E,OAAO,0BAA0B,EAAE,eAAe;qBAClD,OAAO,wBAAwB,EAAE,MAAM;iCACvC,OAAO,mCAAmC,EAAE,kBAAkB;oBAC9D,OAAO,4BAA4B,EAAE,KAAK;8BAC1C,OAAO,gCAAgC,EAAE,eAAe;wBACxD,OAAO,gBAAgB,EAAE,SAAS;8BAClC,OAAO,oDAAoD,EAAE,eAAe;oCAtErD,+DAA+D;kCAkBjE,oCAAoC;4BAG1C,2BAA2B;kBAtBrC,wCAAwC"}
1
+ {"version":3,"file":"GPUSceneShadowmapContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js"],"names":[],"mappings":"AAkJA;;GAEG;AACH;IAoWI;;;;;;;;OAQG;IACH,sBAPW,eAAe,aACf,eAAe,SAGf,kBAAkB,EAiE5B;IA1aD,2BAAwG;IAExG;;;OAGG;IACH,SAFU,iBAAiB,CAEnB;IAQR;;;;;;;;OAQG;IACH,qBAFU,WAAW,CAED;IAsCpB;;;;;;;;OAQG;IACH,SAFU,OAAO,CAEF;IAEf;;;;;;;;;;OAUG;IACH,+BAFU,OAAO,CAEqB;IAEtC;;;;;;OAMG;IACH,yBAFU,OAAO,CAEe;IAehC;;;;;OAKG;IACH,mCAIC;IAjBD;;OAEG;IACH,kCAEC;IAcD;;;;;OAKG;IACH,kBAFU,MAAM,CAEK;IAerB;;;;;OAKG;IACH,wCAKC;IAlBD;;OAEG;IACH,uCAEC;IA4BD;;;;;;;;OAQG;IACH,6BAIC;IApBD;;OAEG;IACH,4BAEC;IA0CD;;;;OAIG;IACH,6BAIC;IAhBD;;OAEG;IACH,4BAEC;IAkGD;;OAEG;IACH,iCAEC;IAED;;;;;;OAMG;IACH,oCAEC;IAED;;;;;OAKG;IACH,oCAEC;IAoGD;;;;;OAKG;IACH,4BAMC;IA2MD;;;;;;;;;;OAUG;IACH;QAJ+B,KAAK,EAAzB,UAAU;QACqD,IAAI,EAAnE,OAAO,8BAA8B,EAAE,cAAc;QACrC,KAAK,EAArB,MAAM;aAuChB;IA0LD;;;;OAIG;IACH,eAHW,KAAK,GACH,SAAS,GAAC,SAAS,CAI/B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4CG;IACH,6BAPW,MAAM,SAEN,eAAe,eACf,MAAM,mBACN,UAAU,MAAM,CAAC,QAuG3B;IA2GD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,kBAFW,sBAAsB,QA0FhC;IA2bD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBALa,OAAO,CAqTnB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,KAAK,CAWjB;IAED,gBAsBC;;CACJ;qCA/lEY,OAAO,2CAA2C,EAAE,sBAAsB;8BAC1E,OAAO,0BAA0B,EAAE,eAAe;qBAClD,OAAO,wBAAwB,EAAE,MAAM;iCACvC,OAAO,mCAAmC,EAAE,kBAAkB;oBAC9D,OAAO,4BAA4B,EAAE,KAAK;8BAC1C,OAAO,gCAAgC,EAAE,eAAe;wBACxD,OAAO,gBAAgB,EAAE,SAAS;8BAClC,OAAO,oDAAoD,EAAE,eAAe;oCA7ErD,+DAA+D;kCAkBjE,oCAAoC;4BAG1C,2BAA2B;2BApB5B,8DAA8D;kBAFvE,wCAAwC"}