@woosh/meep-engine 3.60.3 → 3.60.5

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 (514) hide show
  1. package/CHANGELOG.md +2602 -0
  2. package/CONTRIBUTING.md +7 -0
  3. package/MIGRATION_2_TO_3.md +136 -0
  4. package/SECURITY.md +4 -0
  5. package/editor/EditorCameraNavigation.d.ts +2 -1
  6. package/editor/EditorCameraNavigation.d.ts.map +1 -1
  7. package/editor/EditorCameraNavigation.js +51 -57
  8. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +3 -0
  9. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  10. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +6 -0
  11. package/package.json +6 -2
  12. package/src/engine/EngineHarness.d.ts +3 -9
  13. package/src/engine/EngineHarness.d.ts.map +1 -1
  14. package/src/engine/EngineHarness.js +6 -8
  15. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
  16. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
  17. package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
  18. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
  19. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
  20. package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
  21. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
  22. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
  23. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
  24. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
  25. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
  27. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
  28. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  29. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
  30. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +1 -2
  31. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts +14 -0
  32. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts.map +1 -0
  33. package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.js +22 -0
  34. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +19 -3
  35. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  36. package/src/engine/graphics/ecs/trail3d/Trail3D.js +31 -4
  37. package/src/engine/graphics/ecs/trail3d/advance_trail.js +1 -1
  38. package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
  39. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  40. package/src/engine/graphics/ecs/water/Water.js +8 -0
  41. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +5 -5
  42. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +1 -1
  43. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +6 -6
  44. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/WaterSystem.js +731 -734
  46. package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
  47. package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
  48. package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
  49. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
  50. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  51. package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
  52. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
  53. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
  54. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
  55. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
  56. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
  57. package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
  58. package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
  59. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  60. package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
  61. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
  62. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
  63. package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
  64. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
  65. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
  66. package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
  67. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +10 -0
  68. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
  69. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -1
  70. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
  71. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
  72. package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
  73. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
  74. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
  75. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
  76. package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +2 -2
  77. package/src/engine/physics/cloth/ecs/cloth_geodesic.js +2 -2
  78. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  79. package/src/shade/playground/probe_clipmap/README.md +1 -0
  80. package/src/shade/playground/probe_clipmap/index.html +5 -0
  81. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  82. package/src/shade/playground/probe_clipmap/main.js +16 -2
  83. package/src/shade/playground/vgeo_scene/README.md +1 -1
  84. package/src/shade/playground/water_refraction/README.md +5 -6
  85. package/src/shade/playground/water_refraction/index.html +1 -1
  86. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  87. package/src/shade/renderer/Renderer.js +7 -5
  88. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +4 -6
  89. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -1
  90. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +34 -36
  91. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +1 -1
  92. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +162 -163
  94. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +1 -1
  95. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +1 -1
  96. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +1 -1
  97. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +1 -1
  98. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -164
  99. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +1 -1
  100. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
  101. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  102. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
  103. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  104. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  105. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  106. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  107. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  108. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +4 -4
  109. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +4 -4
  110. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
  111. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  112. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
  113. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +2 -2
  114. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +1 -1
  115. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +1 -1
  116. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +4 -5
  117. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  118. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +6 -7
  119. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
  120. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
  121. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
  122. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
  123. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
  124. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
  125. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
  126. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
  127. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  128. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +2 -8
  129. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
  130. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  131. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
  132. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +12 -0
  133. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  134. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +22 -0
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +4 -4
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +50 -13
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +6 -0
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +7 -0
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +13 -0
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -0
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +13 -0
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +17 -0
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +20 -0
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts +18 -0
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts.map +1 -0
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.js +42 -0
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +5 -4
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
  156. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  157. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +13 -2
  158. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +52 -0
  159. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -0
  160. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +250 -0
  161. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  162. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
  163. package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
  164. package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
  165. package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
  166. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
  167. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
  168. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
  169. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
  170. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
  171. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
  172. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
  173. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  174. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
  175. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
  176. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
  177. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
  178. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
  179. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
  180. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
  181. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
  182. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
  183. package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
  184. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
  185. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  186. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
  187. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
  188. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
  189. package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
  190. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts +39 -0
  191. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts.map +1 -0
  192. package/src/shade/renderer/light/environment/environment_level_1_blur_plan.js +119 -0
  193. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +15 -7
  194. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  195. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +66 -83
  196. package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts.map +1 -1
  197. package/src/shade/renderer/light/environment/graph_filter_environment_map.js +15 -6
  198. package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts +3 -0
  199. package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts.map +1 -0
  200. package/src/shade/renderer/light/environment/shader_blur_environment_map.js +111 -0
  201. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts +3 -0
  202. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts.map +1 -0
  203. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js +128 -0
  204. package/src/shade/renderer/light/environment/shader_downsample_environment_map.d.ts.map +1 -1
  205. package/src/shade/renderer/light/environment/shader_downsample_environment_map.js +0 -1
  206. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  207. package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
  208. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  209. package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
  210. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
  211. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  212. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
  213. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -3
  214. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  215. package/src/shade/renderer/postprocess/nss/NSS.js +1 -3
  216. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts +5 -6
  217. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.js +9 -10
  219. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  220. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +48 -49
  221. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  222. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +12 -16
  223. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +246 -246
  224. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +1 -2
  225. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +34 -35
  227. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +2 -2
  228. package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +2 -2
  229. package/src/shade/renderer/shader/chunk/atmosphere/chunk_compute_extinction.js +1 -1
  230. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +1 -1
  231. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +1 -1
  232. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.d.ts +3 -3
  233. package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.js +3 -3
  234. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +9 -10
  235. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -1
  236. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +9 -10
  237. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +4 -4
  238. package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +5 -5
  239. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +1 -2
  240. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -1
  241. package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +1 -2
  242. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts +14 -1
  243. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts.map +1 -1
  244. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.js +19 -6
  245. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts +10 -1
  246. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts.map +1 -1
  247. package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.js +14 -6
  248. package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.d.ts +1 -1
  249. package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.js +1 -1
  250. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
  252. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +2 -3
  253. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +7 -8
  255. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +1 -1
  256. package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -12
  257. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +2 -2
  258. package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/vsm/VSMPageManager.js +3 -4
  260. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
  261. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  262. package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
  263. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
  264. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
  265. package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
  266. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  267. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  268. package/src/shade/renderer/water/shader_water.js +22 -13
  269. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  270. package/src/shade/renderer/water/shader_water_avboit.js +7 -7
  271. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
  272. package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
  273. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
  274. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +0 -19
  275. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  276. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +2 -52
  277. package/editor/REWORK_PLAN_2026_08.md +0 -692
  278. package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
  279. package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
  280. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
  281. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
  282. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
  283. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
  284. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
  285. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
  286. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
  287. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
  288. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
  289. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
  290. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
  291. package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
  292. package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
  293. package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
  294. package/src/REVIEW_2026_08_06/adv-core.md +0 -511
  295. package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
  296. package/src/REVIEW_2026_08_06/adv-view.md +0 -446
  297. package/src/REVIEW_2026_08_06/api-core.md +0 -296
  298. package/src/REVIEW_2026_08_06/api-engine.md +0 -195
  299. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
  300. package/src/REVIEW_2026_08_06/core-binary.md +0 -348
  301. package/src/REVIEW_2026_08_06/core-collection.md +0 -376
  302. package/src/REVIEW_2026_08_06/core-math.md +0 -221
  303. package/src/REVIEW_2026_08_06/core-process.md +0 -266
  304. package/src/REVIEW_2026_08_06/core-science.md +0 -223
  305. package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
  306. package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
  307. package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
  308. package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
  309. package/src/REVIEW_2026_08_06/engine-input.md +0 -197
  310. package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
  311. package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
  312. package/src/REVIEW_2026_08_06/generation.md +0 -176
  313. package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
  314. package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
  315. package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
  316. package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
  317. package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
  318. package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
  319. package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
  320. package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
  321. package/src/REVIEW_2026_08_06/view.md +0 -667
  322. package/src/REVIEW_2026_08_06.md +0 -610
  323. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
  324. package/src/core/bvh2/bvh3/NOTES.md +0 -2
  325. package/src/core/bvh8/NOTES.md +0 -63
  326. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
  327. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
  328. package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
  329. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
  330. package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
  331. package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
  332. package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
  333. package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
  334. package/src/core/geom/3d/gjk/NOTES.md +0 -8
  335. package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
  336. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
  337. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
  338. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
  339. package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
  340. package/src/engine/REVIEW_2026_07_03.md +0 -211
  341. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
  342. package/src/engine/control/first-person/DESIGN.md +0 -658
  343. package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
  344. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
  345. package/src/engine/control/first-person/TODO.md +0 -160
  346. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
  347. package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
  348. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
  349. package/src/engine/ecs/ik/PLAN.md +0 -179
  350. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
  351. package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
  352. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
  353. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
  354. package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
  355. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
  356. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
  357. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
  358. package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
  359. package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
  360. package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
  361. package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
  362. package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
  363. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
  364. package/src/engine/network/CONGESTION_CONTROL.md +0 -87
  365. package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
  366. package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
  367. package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
  368. package/src/engine/physics/cloth/PLAN.md +0 -3056
  369. package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
  370. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
  371. package/src/engine/physics/fluid/solver/NOTES.md +0 -46
  372. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
  373. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
  374. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
  375. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
  376. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
  377. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
  378. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
  379. package/src/format/image/avif/DECISIONS.md +0 -545
  380. package/src/format/image/jpeg/NOTES.md +0 -3
  381. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
  382. package/src/generation/COORDINATES.md +0 -54
  383. package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
  384. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
  385. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
  386. package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
  387. package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
  388. package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
  389. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
  390. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
  391. package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
  392. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
  393. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
  394. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
  395. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
  396. package/src/shade/RENDERER_CONTRACT.md +0 -697
  397. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
  398. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
  399. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
  400. package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
  401. package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
  402. package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
  403. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
  404. package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
  405. package/src/shade/renderer/NOTES.md +0 -78
  406. package/src/shade/renderer/PLAN.md +0 -8
  407. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
  408. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
  409. package/src/shade/renderer/atmosphere/NOTES.md +0 -6
  410. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
  411. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
  412. package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
  413. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
  414. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
  415. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
  416. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
  417. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
  418. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
  419. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
  420. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
  421. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
  422. package/src/shade/renderer/camera/orbital/README.md +0 -81
  423. package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
  424. package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
  425. package/src/shade/renderer/camera/orbital/index.js +0 -9
  426. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
  427. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
  428. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
  429. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
  430. package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
  431. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
  432. package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
  433. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
  434. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
  435. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -483
  436. package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
  437. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
  438. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
  439. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
  440. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
  441. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
  442. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
  443. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -536
  444. package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
  445. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4225
  446. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
  447. package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
  448. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
  449. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
  450. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
  451. package/src/shade/renderer/hiz/NOTES.md +0 -3
  452. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
  453. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
  454. package/src/shade/renderer/light/cluster/NOTES.md +0 -11
  455. package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
  456. package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
  457. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts +0 -13
  458. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts.map +0 -1
  459. package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.js +0 -198
  460. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
  461. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
  462. package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
  463. package/src/shade/renderer/particles/DESIGN.md +0 -1011
  464. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -283
  465. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
  466. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
  467. package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
  468. package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
  469. package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
  470. package/src/shade/renderer/postprocess/nss/NOTES.md +0 -339
  471. package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
  472. package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
  473. package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
  474. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
  475. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
  476. package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
  477. package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
  478. package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
  479. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
  480. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
  481. package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
  482. package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
  483. package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -394
  484. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -160
  485. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
  486. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
  487. package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
  488. package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
  489. package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
  490. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
  491. package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
  492. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
  493. package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
  494. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -932
  495. package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
  496. package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
  497. package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
  498. package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
  499. package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
  500. package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
  501. package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
  502. package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
  503. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
  504. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
  505. package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -4
  506. package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
  507. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
  508. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
  509. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
  510. package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
  511. package/src/shade/wgsl/NOTES.md +0 -4
  512. package/src/view/elements/progress/segmented/segment_frame_transform.d.ts +0 -15
  513. package/src/view/elements/progress/segmented/segment_frame_transform.d.ts.map +0 -1
  514. package/src/view/elements/progress/segmented/segment_frame_transform.js +0 -69
@@ -0,0 +1,119 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { cone_cosine_from_roughness } from "../../../../core/math/physics/brdf/cone_cosine_from_roughness.js";
3
+ import { BSDF_ROUGHNESS_MINIMUM } from "./DEFINES.js";
4
+ import { sphere_probe_lod_to_roughness } from "./sphere_probe_lod_to_roughness.js";
5
+
6
+ /**
7
+ * Samples per texel of level 1. They read a Gaussian-blurred copy of level 0, so the count sets how
8
+ * fine that blur can be and how much of the lobe is the lobe's own. Measured on a 1024 map against
9
+ * level 1 from 8192 point taps (sun lobe 1.315° rms): 64 → sky rms error 0.092, sun 1.345°, a bright
10
+ * texel's share 0.998 ± 0.008; 128 → 0.057, 1.342°, 0.998 ± 0.003, never above 1.
11
+ * @type {number}
12
+ */
13
+ export const LEVEL_1_SAMPLE_COUNT = 128;
14
+
15
+ /**
16
+ * Gaussian σ per spacing of the points it is sampled at. A Gaussian sampled on a lattice of spacing Δ
17
+ * sums to its integral up to its first alias, 2 exp(-2π² σ²/Δ²): 1e-4 at 0.7. Holds both for the
18
+ * blurred level's own texels and for level 1's samples reading it.
19
+ * @type {number}
20
+ */
21
+ const SIGMA_PER_SPACING = 0.7;
22
+
23
+ /**
24
+ * A Gaussian's weight past 3 σ is under 1.2% of its peak, and its share of the integral in 2D under 1.2%.
25
+ * @type {number}
26
+ */
27
+ const RADIUS_IN_SIGMA = 3;
28
+
29
+ /**
30
+ * Side of one texel of an octahedral level, as an angle. A skirted level of side `size` holds an
31
+ * n = size - 2 square over 4π steradians, but its texels are not alike: the octahedron's solid angle
32
+ * per unit area of the square is 1 / |p|^3, |p| from 1 at its vertices to 1/√3 at its face centres,
33
+ * so a texel covers 1 to 3√3 times the area-mean density π.
34
+ *
35
+ * @param {number} size
36
+ * @returns {{mean: number, min: number, max: number}}
37
+ */
38
+ function octahedral_texel_angle(size) {
39
+ const mean = Math.sqrt(4 * Math.PI) / (size - 2);
40
+
41
+ return {
42
+ mean,
43
+ min: mean * Math.sqrt(1 / Math.PI),
44
+ max: mean * Math.sqrt(3 * Math.sqrt(3) / Math.PI),
45
+ };
46
+ }
47
+
48
+ /**
49
+ * How level 1 of a map of side `map_size` is filtered.
50
+ *
51
+ * Level 1's samples are uniform in its cone, so each stands for Ω_s = Ω_cone / N. They read a copy of
52
+ * level 0 blurred by a Gaussian of σ = 0.7 · max(√Ω_s, the copy's largest texel), wide enough that
53
+ * neither the samples nor the copy's texels alias. The copy is level 0 averaged down to level 1's
54
+ * size when that leaves the lobe room for the blur, else level 0's own size.
55
+ *
56
+ * The lobe exp(2 (N·H - 1) / r^4) is a Gaussian of variance 2 r^4 an axis (N·H = cos(θ/2)), and
57
+ * Gaussians add variances, so it is narrowed by what the copy adds: the blur, and the bilinear tent
58
+ * across the copy's texels beyond the one across level 0's. It narrows to the minimum roughness when
59
+ * the map's texels are coarser than the lobe itself, and level 1 is then the blur alone.
60
+ *
61
+ * @param {number} map_size side of the map's level 0
62
+ * @returns {{
63
+ * blurred_size: number,
64
+ * average_first: boolean,
65
+ * sigma: number,
66
+ * radius: number,
67
+ * lobe_roughness: number,
68
+ * }} `average_first`: the copy is level 0 averaged to level 1's size before the blur; `sigma` the
69
+ * blur still to apply (radians), past what averaging adds; `radius` in the copy's texels
70
+ */
71
+ export function environment_level_1_blur_plan(map_size) {
72
+ assert.isNonNegativeInteger(map_size, 'map_size');
73
+ assert.greaterThanOrEqual(map_size, 6, 'a level 1 needs at least 3 texels');
74
+
75
+ const roughness = Math.max(sphere_probe_lod_to_roughness(1), BSDF_ROUGHNESS_MINIMUM);
76
+ const lobe_variance = 2 * roughness ** 4;
77
+
78
+ const cone_solid_angle = 2 * Math.PI * (1 - cone_cosine_from_roughness(roughness));
79
+ const sample_spacing = Math.sqrt(cone_solid_angle / LEVEL_1_SAMPLE_COUNT);
80
+
81
+ const level_0 = octahedral_texel_angle(map_size);
82
+
83
+ function plan(blurred_size, average_first) {
84
+ const texel = octahedral_texel_angle(blurred_size);
85
+
86
+ const total = (SIGMA_PER_SPACING * Math.max(sample_spacing, texel.max)) ** 2;
87
+
88
+ // averaging boxes a texel of the copy, s^2 / 12 an axis
89
+ const averaged = average_first ? texel.mean ** 2 / 12 : 0;
90
+ const sigma = Math.sqrt(total - averaged);
91
+
92
+ // a bilinear tent across texels of side s is s^2 / 6 an axis; level 0's own is in the lobe already
93
+ const bilinear = (texel.mean ** 2 - level_0.mean ** 2) / 6;
94
+
95
+ return {
96
+ blurred_size,
97
+ average_first,
98
+ sigma,
99
+ radius: Math.ceil(RADIUS_IN_SIGMA * sigma / texel.min),
100
+ lobe_variance: lobe_variance - total - bilinear,
101
+ };
102
+ }
103
+
104
+ let chosen = plan(map_size >> 1, true);
105
+
106
+ if (chosen.lobe_variance <= 0) {
107
+ chosen = plan(map_size, false);
108
+ }
109
+
110
+ const minimum_variance = 2 * BSDF_ROUGHNESS_MINIMUM ** 4;
111
+
112
+ return {
113
+ blurred_size: chosen.blurred_size,
114
+ average_first: chosen.average_first,
115
+ sigma: chosen.sigma,
116
+ radius: chosen.radius,
117
+ lobe_roughness: Math.sqrt(Math.sqrt(Math.max(chosen.lobe_variance, minimum_variance) / 2)),
118
+ };
119
+ }
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @typedef {import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
3
+ */
1
4
  /**
2
5
  * Offer the pipelines {@link execute_filter_environment_map} dispatches — see {@link PipelineEnquiry}.
3
6
  *
@@ -5,21 +8,26 @@
5
8
  */
6
9
  export function enquire_filter_environment_map_pipelines(enquiry: PipelineEnquiry): void;
7
10
  /**
8
- * The plain averages of a map's level 0 the prefilter's level 1 samples from: level 1 down as far as
9
- * its samples reach, as a texture of their own, so the map keeps its levels 1.. for the filtered
10
- * result. Nothing reads them after the prefilter, so a frame graph holds them transiently.
11
+ * The scratch levels the prefilter's level 1 reads through: level 0 blurred by a Gaussian, and the
12
+ * plain average it is blurred from when the plan averages first. Textures of their own, so the map
13
+ * keeps its levels 1.. for the filtered result; nothing reads them after the prefilter, so a frame
14
+ * graph holds them transiently.
11
15
  *
12
16
  * @param {number} map_size side of the map's level 0
13
- * @returns {TextureResourceDescriptor}
17
+ * @returns {{averaged: TextureResourceDescriptor|null, blurred: TextureResourceDescriptor}}
14
18
  */
15
- export function environment_map_averages_descriptor(map_size: number): TextureResourceDescriptor;
19
+ export function environment_map_scratch_descriptors(map_size: number): {
20
+ averaged: TextureResourceDescriptor | null;
21
+ blurred: TextureResourceDescriptor;
22
+ };
16
23
  /**
17
24
  *
18
25
  * @param {GPUTextureContext} map
19
- * @param {GPUTextureContext} averages described by {@link environment_map_averages_descriptor}
26
+ * @param {GPUTextureContext|null} averaged described by {@link environment_map_scratch_descriptors}
27
+ * @param {GPUTextureContext} blurred described by {@link environment_map_scratch_descriptors}
20
28
  * @param {ShadeGPUCommandContext} encoder
21
29
  */
22
- export function execute_filter_environment_map(map: GPUTextureContext, averages: GPUTextureContext, encoder: ShadeGPUCommandContext): void;
30
+ export function execute_filter_environment_map(map: GPUTextureContext, averaged: GPUTextureContext | null, blurred: GPUTextureContext, encoder: ShadeGPUCommandContext): void;
23
31
  export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
24
32
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
25
33
  //# sourceMappingURL=execute_filter_environment_map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/execute_filter_environment_map.js"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH,kEAFW,eAAe,QAMzB;AAsBD;;;;;;;GAOG;AACH,8DAHW,MAAM,GACJ,yBAAyB,CAyBrC;AAED;;;;;GAKG;AACH,2IA0GC;8BAzLY,OAAO,6CAA6C,EAAE,eAAe;0CAZxC,oDAAoD"}
1
+ {"version":3,"file":"execute_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/execute_filter_environment_map.js"],"names":[],"mappings":"AAUA;;GAEG;AAEH;;;;GAIG;AACH,kEAFW,eAAe,QAOzB;AAcD;;;;;;;;GAQG;AACH,8DAHW,MAAM,GACJ;IAAC,QAAQ,EAAE,yBAAyB,GAAC,IAAI,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAC,CAS1F;AAED;;;;;;GAMG;AACH,iFAJW,oBAAkB,IAAI,qEA2HhC;8BA3KY,OAAO,6CAA6C,EAAE,eAAe;0CATxC,oDAAoD"}
@@ -1,26 +1,17 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
2
  import { TextureViewDescriptor } from "../../../descriptor/texture/TextureViewDescriptor.js";
3
3
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
4
- import { cone_cosine_from_roughness } from "../../../../core/math/physics/brdf/cone_cosine_from_roughness.js";
5
- import { BSDF_ROUGHNESS_MINIMUM, SPHERE_PROBE_MIPMAP_LEVELS } from "./DEFINES.js";
4
+ import { SPHERE_PROBE_MIPMAP_LEVELS } from "./DEFINES.js";
5
+ import { environment_level_1_blur_plan } from "./environment_level_1_blur_plan.js";
6
+ import { shader_blur_environment_map } from "./shader_blur_environment_map.js";
6
7
  import { shader_convolve_reflection_map } from "./shader_convolve_reflection_map.js";
7
- import {
8
- CONVOLVE_FROM_AVERAGES_SAMPLE_COUNT,
9
- shader_convolve_reflection_map_from_averages
10
- } from "./shader_convolve_reflection_map_from_averages.js";
8
+ import { shader_convolve_reflection_map_from_blurred } from "./shader_convolve_reflection_map_from_blurred.js";
11
9
  import { shader_downsample_environment_map } from "./shader_downsample_environment_map.js";
12
- import { sphere_probe_lod_to_roughness } from "./sphere_probe_lod_to_roughness.js";
13
10
 
14
11
  /**
15
12
  * @typedef {import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
16
13
  */
17
14
 
18
- /**
19
- * The smallest side a skirted level of the averages goes down to: two interior texels.
20
- * @type {number}
21
- */
22
- const AVERAGES_MIN_SIZE = 4;
23
-
24
15
  /**
25
16
  * Offer the pipelines {@link execute_filter_environment_map} dispatches — see {@link PipelineEnquiry}.
26
17
  *
@@ -28,76 +19,56 @@ const AVERAGES_MIN_SIZE = 4;
28
19
  */
29
20
  export function enquire_filter_environment_map_pipelines(enquiry) {
30
21
  enquiry.compute.push(shader_downsample_environment_map.pipeline);
31
- enquiry.compute.push(shader_convolve_reflection_map_from_averages.pipeline);
22
+ enquiry.compute.push(shader_blur_environment_map.pipeline);
23
+ enquiry.compute.push(shader_convolve_reflection_map_from_blurred.pipeline);
32
24
  enquiry.compute.push(shader_convolve_reflection_map.pipeline);
33
25
  }
34
26
 
35
27
  /**
36
- * How many averages level 1's samples reach. A sample reads the level whose texel is the solid angle
37
- * it stands for, and the coarsest it asks for is where the octahedron's texels are smallest
38
- * (|d|_1 = 1): the lod `shader_convolve_reflection_map_from_averages` takes, at its largest. 3 for a
39
- * 1024 map, one more for each doubling.
40
- *
41
- * @param {number} map_size side of the map's level 0
42
- * @returns {number}
43
- */
44
- function averages_read_by_level_1(map_size) {
45
- const roughness = Math.max(sphere_probe_lod_to_roughness(1), BSDF_ROUGHNESS_MINIMUM);
46
- const cone_solid_angle = 2 * Math.PI * (1 - cone_cosine_from_roughness(roughness));
47
- const sample_solid_angle = cone_solid_angle / CONVOLVE_FROM_AVERAGES_SAMPLE_COUNT;
48
-
49
- const interior = map_size - 2;
50
- const smallest_texel_solid_angle = 4 / (interior * interior);
51
-
52
- return Math.max(1, Math.ceil(0.5 * Math.log2(sample_solid_angle / smallest_texel_solid_angle)));
53
- }
54
-
55
- /**
56
- * The plain averages of a map's level 0 the prefilter's level 1 samples from: level 1 down as far as
57
- * its samples reach, as a texture of their own, so the map keeps its levels 1.. for the filtered
58
- * result. Nothing reads them after the prefilter, so a frame graph holds them transiently.
59
- *
60
- * @param {number} map_size side of the map's level 0
28
+ * @param {number} size
61
29
  * @returns {TextureResourceDescriptor}
62
30
  */
63
- export function environment_map_averages_descriptor(map_size) {
64
- assert.isNonNegativeInteger(map_size, 'map_size');
65
-
66
- const size = map_size >> 1;
67
-
68
- let available = 0;
69
- for (let s = size; s >= AVERAGES_MIN_SIZE; s >>= 1) {
70
- available++;
71
- }
72
-
73
- assert.greaterThanOrEqual(available, 1, 'environment map too small to average');
74
-
75
- const mipLevelCount = Math.min(available, averages_read_by_level_1(map_size));
76
-
77
- const descriptor = TextureResourceDescriptor.from({
31
+ function scratch_level_descriptor(size) {
32
+ return TextureResourceDescriptor.from({
78
33
  resolution: [size, size],
79
34
  format: "rgba16float",
80
35
  usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
81
36
  });
37
+ }
82
38
 
83
- descriptor.mipLevelCount = mipLevelCount;
39
+ /**
40
+ * The scratch levels the prefilter's level 1 reads through: level 0 blurred by a Gaussian, and the
41
+ * plain average it is blurred from when the plan averages first. Textures of their own, so the map
42
+ * keeps its levels 1.. for the filtered result; nothing reads them after the prefilter, so a frame
43
+ * graph holds them transiently.
44
+ *
45
+ * @param {number} map_size side of the map's level 0
46
+ * @returns {{averaged: TextureResourceDescriptor|null, blurred: TextureResourceDescriptor}}
47
+ */
48
+ export function environment_map_scratch_descriptors(map_size) {
49
+ const plan = environment_level_1_blur_plan(map_size);
84
50
 
85
- return descriptor;
51
+ return {
52
+ averaged: plan.average_first ? scratch_level_descriptor(plan.blurred_size) : null,
53
+ blurred: scratch_level_descriptor(plan.blurred_size),
54
+ };
86
55
  }
87
56
 
88
57
  /**
89
58
  *
90
59
  * @param {GPUTextureContext} map
91
- * @param {GPUTextureContext} averages described by {@link environment_map_averages_descriptor}
60
+ * @param {GPUTextureContext|null} averaged described by {@link environment_map_scratch_descriptors}
61
+ * @param {GPUTextureContext} blurred described by {@link environment_map_scratch_descriptors}
92
62
  * @param {ShadeGPUCommandContext} encoder
93
63
  */
94
64
  export function execute_filter_environment_map(
95
65
  map,
96
- averages,
66
+ averaged,
67
+ blurred,
97
68
  encoder
98
69
  ) {
99
70
  assert.defined(map);
100
- assert.defined(averages);
71
+ assert.defined(blurred);
101
72
  assert.defined(encoder);
102
73
 
103
74
  /*
@@ -121,35 +92,50 @@ export function execute_filter_environment_map(
121
92
  return;
122
93
  }
123
94
 
124
- const level_0 = map.obtainView(TextureViewDescriptor.from({
95
+ const plan = environment_level_1_blur_plan(map.size[0]);
96
+
97
+ assert.equal(blurred.size[0], plan.blurred_size, 'blurred level is not the size the plan blurs at');
98
+
99
+ const single_level = TextureViewDescriptor.from({
125
100
  baseMipLevel: 0,
126
101
  mipLevelCount: 1,
127
- }));
102
+ });
128
103
 
129
- // the averages, each from the one above it, the first from level 0
130
- const average_levels = averages.descriptor.mipLevelCount;
104
+ const level_0 = map.obtainView(single_level);
105
+ const blurred_group_count = Math.max(1, Math.ceil(plan.blurred_size / 16));
131
106
 
132
- for (let i = 0; i < average_levels; i++) {
133
- const target_size = averages.size[0] >> i;
134
- const group_count = Math.max(1, Math.ceil(target_size / 16));
107
+ let unblurred = level_0;
108
+
109
+ if (plan.average_first) {
110
+ assert.defined(averaged, 'averaged');
135
111
 
136
112
  shader_downsample_environment_map.dispatch({
137
113
  encoder,
138
- group_count_x: group_count,
139
- group_count_y: group_count,
114
+ group_count_x: blurred_group_count,
115
+ group_count_y: blurred_group_count,
140
116
  bindings: {
141
- input: i === 0 ? level_0 : averages.obtainView(TextureViewDescriptor.from({
142
- baseMipLevel: i - 1,
143
- mipLevelCount: 1,
144
- })),
145
- output: averages.obtainView(TextureViewDescriptor.from({
146
- baseMipLevel: i,
147
- mipLevelCount: 1
148
- }))
117
+ input: level_0,
118
+ output: averaged.obtainView(single_level)
149
119
  }
150
120
  });
121
+
122
+ unblurred = averaged.obtainView(single_level);
151
123
  }
152
124
 
125
+ shader_blur_environment_map.dispatch({
126
+ encoder,
127
+ group_count_x: blurred_group_count,
128
+ group_count_y: blurred_group_count,
129
+ bindings: {
130
+ settings: {
131
+ inverse_two_sigma_squared: 1 / (2 * plan.sigma * plan.sigma),
132
+ radius: plan.radius,
133
+ },
134
+ input: unblurred,
135
+ output: blurred.obtainView(single_level)
136
+ }
137
+ });
138
+
153
139
  for (let i = 1; i < mips; i++) {
154
140
  const target_width = map.size[0] >> i;
155
141
  const target_height = map.size[1] >> i;
@@ -165,17 +151,14 @@ export function execute_filter_environment_map(
165
151
  }));
166
152
 
167
153
  if (i === 1) {
168
- // from level 0 and its averages: level 0 is too fine for the taps that cover level 1's cone
169
- shader_convolve_reflection_map_from_averages.dispatch({
154
+ // level 0 is too fine for the taps that cover level 1's cone; its blurred copy is not
155
+ shader_convolve_reflection_map_from_blurred.dispatch({
170
156
  encoder,
171
157
  group_count_x: dispatch_x,
172
158
  group_count_y: dispatch_y,
173
159
  bindings: {
174
- level_0,
175
- averages: averages.obtainView(TextureViewDescriptor.from({
176
- baseMipLevel: 0,
177
- mipLevelCount: average_levels,
178
- })),
160
+ lobe_roughness: plan.lobe_roughness,
161
+ blurred: blurred.obtainView(single_level),
179
162
  output
180
163
  }
181
164
  });
@@ -1 +1 @@
1
- {"version":3,"file":"graph_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/graph_filter_environment_map.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH;IAJ+B,KAAK,EAAzB,UAAU;IACM,GAAG,EAAnB,MAAM;IACJ,MAAM,CAmClB;AAED;;;;;;GAMG;AACH,6GAYC;2BApE0B,8DAA8D"}
1
+ {"version":3,"file":"graph_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/graph_filter_environment_map.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH;IAJ+B,KAAK,EAAzB,UAAU;IACM,GAAG,EAAnB,MAAM;IACJ,MAAM,CA4ClB;AAED;;;;;;GAMG;AACH,6GAYC;2BA7E0B,8DAA8D"}
@@ -1,7 +1,7 @@
1
1
  import { FrameGraph } from "../../../../engine/graphics/render/frame_graph/FrameGraph.js";
2
2
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
3
3
  import {
4
- environment_map_averages_descriptor,
4
+ environment_map_scratch_descriptors,
5
5
  execute_filter_environment_map
6
6
  } from "./execute_filter_environment_map.js";
7
7
 
@@ -32,17 +32,26 @@ export function graph_filter_environment_map({
32
32
  */
33
33
  const map = resources.get(data.map);
34
34
 
35
- execute_filter_environment_map(map, resources.get(data.averages), context.encoder);
35
+ execute_filter_environment_map(
36
+ map,
37
+ data.averaged === undefined ? null : resources.get(data.averaged),
38
+ resources.get(data.blurred),
39
+ context.encoder
40
+ );
36
41
 
37
42
  }
38
43
 
39
44
  const builder = graph.add("filter env map", data, execute);
40
45
 
41
46
  data.map = builder.read(map);
42
- data.averages = builder.create(
43
- "env map averages",
44
- environment_map_averages_descriptor(graph.getDescriptor(map).resolution[0])
45
- );
47
+
48
+ const scratch = environment_map_scratch_descriptors(graph.getDescriptor(map).resolution[0]);
49
+
50
+ if (scratch.averaged !== null) {
51
+ data.averaged = builder.create("env map averaged", scratch.averaged);
52
+ }
53
+
54
+ data.blurred = builder.create("env map blurred", scratch.blurred);
46
55
 
47
56
  return builder.write(map);
48
57
  }
@@ -0,0 +1,3 @@
1
+ export const shader_blur_environment_map: ComputeShader;
2
+ import { ComputeShader } from "../../shader/ComputeShader.js";
3
+ //# sourceMappingURL=shader_blur_environment_map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_blur_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_blur_environment_map.js"],"names":[],"mappings":"AA0GA,wDAII;8BAvG0B,+BAA+B"}
@@ -0,0 +1,111 @@
1
+ import {
2
+ chunk_uv_octahedral_unit_decode
3
+ } from "../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
4
+ import {
5
+ chunk_texture_octahedral_wrap_texel_coordinates
6
+ } from "../../shader/chunk/texture/octahedral/chunk_texture_octahedral_wrap_texel_coordinates.js";
7
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
8
+ import { ComputeShader } from "../../shader/ComputeShader.js";
9
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
11
+ import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
12
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
13
+
14
+ const BLUR_SETTINGS = WebGPUStruct.from({
15
+ // 1 / (2 σ²), σ in radians
16
+ inverse_two_sigma_squared: f32,
17
+ // texels either side, enough for 3 σ where the octahedron's texels are smallest
18
+ radius: u32,
19
+ }, 'EnvironmentBlurSettings');
20
+
21
+ const resources = new ShaderResourceSetDescriptor();
22
+
23
+ resources.setImmediate("settings", BLUR_SETTINGS);
24
+
25
+ resources.createGroup()
26
+ .addTexture("input", "float")
27
+ .addStorageTexture("output", "rgba16float")
28
+ ;
29
+
30
+ /**
31
+ * A skirted octahedral level blurred by a Gaussian on the sphere, into a level of the same size:
32
+ * each texel the mean of the texels within `radius`, weighted by exp(-θ² / 2σ²) of the angle θ
33
+ * between them and by their solid angle. The octahedral square wraps at its edges, so the kernel is
34
+ * the same on either side of a fold.
35
+ *
36
+ * A Gaussian, not a box, because level 1 reads this through a lobe that is itself a Gaussian, and
37
+ * the two compose into a Gaussian whose variance is the sum: the lobe narrows by exactly what the
38
+ * blur adds (see environment_level_1_blur_plan).
39
+ *
40
+ * @type {CodeChunk}
41
+ */
42
+ const body = CodeChunk.from(
43
+ //language=WGSL
44
+ `
45
+ @compute @workgroup_size(16,16,1)
46
+ fn main(
47
+ @builtin(global_invocation_id) global_invocation_id : vec3<u32>,
48
+ ){
49
+ let output_size = textureDimensions(output);
50
+
51
+ let output_texel_i = global_invocation_id.xy;
52
+
53
+ if(any(output_texel_i >= output_size)){
54
+ return;
55
+ }
56
+
57
+ let interior = i32(output_size.x) - 2;
58
+
59
+ // the skirt too: a skirt texel takes its interior twin, so it is that texel, computed again
60
+ let centre = texture_octahedral_wrap_texel_coordinates(vec2<i32>(output_texel_i) - 1, interior);
61
+ let centre_direction = uv_octahedral_unit_decode((vec2<f32>(centre) + 0.5) / f32(interior));
62
+
63
+ let radius = i32(settings.radius);
64
+
65
+ var sum = vec4(0.0);
66
+ var weight_sum = 0.0;
67
+
68
+ for (var y = -radius; y <= radius; y++) {
69
+ for (var x = -radius; x <= radius; x++) {
70
+ let unwrapped = vec2<i32>(centre) + vec2(x, y);
71
+ let texel = texture_octahedral_wrap_texel_coordinates(unwrapped, interior);
72
+
73
+ // near the middle of the square's edge the fold maps the window onto itself, so a tap that
74
+ // wraps can land on a texel the window reaches directly: count every texel once
75
+ let wrapped = any(unwrapped < vec2(0)) || any(unwrapped >= vec2(interior));
76
+ let in_window = all(abs(vec2<i32>(texel) - vec2<i32>(centre)) <= vec2(radius));
77
+
78
+ if (wrapped && in_window) {
79
+ continue;
80
+ }
81
+
82
+ let direction = uv_octahedral_unit_decode((vec2<f32>(texel) + 0.5) / f32(interior));
83
+
84
+ // θ² from the chord c: θ = 2 asin(c / 2), so θ² = c² + c⁴ / 12 + ...
85
+ let chord = direction - centre_direction;
86
+ let chord_squared = dot(chord, chord);
87
+ let theta_squared = chord_squared * (1.0 + chord_squared / 12.0);
88
+
89
+ // the octahedron's solid angle per unit area of the square is |d|_1^3 along unit d
90
+ let l1 = dot(abs(direction), vec3(1.0));
91
+
92
+ let weight = exp(-theta_squared * settings.inverse_two_sigma_squared) * l1 * l1 * l1;
93
+
94
+ sum += textureLoad(input, texel + 1u, 0) * weight;
95
+ weight_sum += weight;
96
+ }
97
+ }
98
+
99
+ textureStore(output, output_texel_i, sum / weight_sum);
100
+ }
101
+ `, [
102
+ chunk_texture_octahedral_wrap_texel_coordinates,
103
+ chunk_uv_octahedral_unit_decode,
104
+ ]
105
+ );
106
+
107
+ export const shader_blur_environment_map = new ComputeShader(ShaderDescriptor.from({
108
+ label: 'Blur environment map',
109
+ body,
110
+ resources
111
+ }));
@@ -0,0 +1,3 @@
1
+ export const shader_convolve_reflection_map_from_blurred: ComputeShader;
2
+ import { ComputeShader } from "../../shader/ComputeShader.js";
3
+ //# sourceMappingURL=shader_convolve_reflection_map_from_blurred.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_convolve_reflection_map_from_blurred.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js"],"names":[],"mappings":"AA2HA,wEAII;8BA7G0B,+BAA+B"}