@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
@@ -216,8 +216,8 @@ const vertex_code = ShaderDescriptor.from({
216
216
 
217
217
  /*
218
218
  The template is handed what the G-buffer pass hands it, in the geometry's local space, the card
219
- being there: real derivatives, as this is a raster with neighbours of its own triangle, unbiased, as
220
- UE's card capture leaves its material mip bias at 0. Both functions run first, in uniform control
219
+ being there: real derivatives, as this is a raster with neighbours of its own triangle, unbiased (mip
220
+ bias at 0). Both functions run first, in uniform control
221
221
  flow, so a template may sample with implicit derivatives.
222
222
 
223
223
  Coverage is drawn as the trace draws it, a texel's surface opaque with probability its opacity, from
@@ -7,7 +7,7 @@ export const MESH_CARDS_HISTOGRAM_SETTINGS: WebGPUStruct;
7
7
  * six directions, over a resident geometry's level-0 occupancy — a brick is occupied when its entry
8
8
  * holds a slot. Walking its column along the direction, a thread finds every run start: an occupied
9
9
  * brick at layer z whose predecessor is empty or outside the grid. A run start's m is the layer after
10
- * the previous run's end, or 0 for the first: UE's MinRayZ. The thread counts each run start into
10
+ * the previous run's end, or 0 for the first. The thread counts each run start into
11
11
  * its direction's histogram by (m, z), which the layout's scratch holds cleared.
12
12
  *
13
13
  * @type {ComputeShader}
@@ -31,7 +31,7 @@ resources.createGroup()
31
31
  * six directions, over a resident geometry's level-0 occupancy — a brick is occupied when its entry
32
32
  * holds a slot. Walking its column along the direction, a thread finds every run start: an occupied
33
33
  * brick at layer z whose predecessor is empty or outside the grid. A run start's m is the layer after
34
- * the previous run's end, or 0 for the first: UE's MinRayZ. The thread counts each run start into
34
+ * the previous run's end, or 0 for the first. The thread counts each run start into
35
35
  * its direction's histogram by (m, z), which the layout's scratch holds cleared.
36
36
  *
37
37
  * @type {ComputeShader}
@@ -10,8 +10,7 @@ export const BLAS_BAND_VOTE_STRATA: number;
10
10
  */
11
11
  export const BLAS_BAND_VOTE_RAYS: number;
12
12
  /**
13
- * A geometry's signed distance within a band, signed by UE 5.4's vote (`MeshDistanceFieldUtilities.cpp`,
14
- * `FMeshDistanceFieldAsyncTask::DoWork`):
13
+ * A geometry's signed distance within a band, signed by a hemisphere ray vote:
15
14
  *
16
15
  * - The nearest point within the band, through the BLAS. With none, the point is a band away, outside,
17
16
  * and casts no ray.
@@ -20,9 +19,9 @@ export const BLAS_BAND_VOTE_RAYS: number;
20
19
  * than a quarter of them meet a back face.
21
20
  * - A two-sided geometry has no back face: it is outside throughout, and casts no ray either.
22
21
  *
23
- * The directions are UE's, made as its stream runs, ray after ray: `FRandomStream(0)` drives two
24
- * `GenerateStratifiedUniformHemisphereSamples(49)` on Shirley and Chiu's concentric map, and the second
25
- * hemisphere's Z is negated. UE's Z is our Y.
22
+ * The directions are made as the LCG stream runs, ray after ray: a seed of 0 drives two
23
+ * 49-sample stratified uniform hemisphere sets on Shirley and Chiu's concentric map, and the second
24
+ * hemisphere's pole is negated (+Y and -Y hemispheres).
26
25
  *
27
26
  * ```wgsl
28
27
  * fn blas_query_band_sdf(point: vec3<f32>, geometry_index: u32, band: f32, two_sided: bool, contact, stack, stack_top: u32) -> f32
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wCAFU,SAAS,CAgHjB;0BAlJwB,oCAAoC"}
1
+ {"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wCAFU,SAAS,CAgHjB;0BAjJwB,oCAAoC"}
@@ -28,8 +28,7 @@ export const BLAS_BAND_VOTE_STRATA = 7;
28
28
  export const BLAS_BAND_VOTE_RAYS = 2 * BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_STRATA;
29
29
 
30
30
  /**
31
- * A geometry's signed distance within a band, signed by UE 5.4's vote (`MeshDistanceFieldUtilities.cpp`,
32
- * `FMeshDistanceFieldAsyncTask::DoWork`):
31
+ * A geometry's signed distance within a band, signed by a hemisphere ray vote:
33
32
  *
34
33
  * - The nearest point within the band, through the BLAS. With none, the point is a band away, outside,
35
34
  * and casts no ray.
@@ -38,9 +37,9 @@ export const BLAS_BAND_VOTE_RAYS = 2 * BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_ST
38
37
  * than a quarter of them meet a back face.
39
38
  * - A two-sided geometry has no back face: it is outside throughout, and casts no ray either.
40
39
  *
41
- * The directions are UE's, made as its stream runs, ray after ray: `FRandomStream(0)` drives two
42
- * `GenerateStratifiedUniformHemisphereSamples(49)` on Shirley and Chiu's concentric map, and the second
43
- * hemisphere's Z is negated. UE's Z is our Y.
40
+ * The directions are made as the LCG stream runs, ray after ray: a seed of 0 drives two
41
+ * 49-sample stratified uniform hemisphere sets on Shirley and Chiu's concentric map, and the second
42
+ * hemisphere's pole is negated (+Y and -Y hemispheres).
44
43
  *
45
44
  * ```wgsl
46
45
  * fn blas_query_band_sdf(point: vec3<f32>, geometry_index: u32, band: f32, two_sided: bool, contact, stack, stack_top: u32) -> f32
@@ -55,7 +54,7 @@ const BLAS_BAND_VOTE_STRATA = ${BLAS_BAND_VOTE_STRATA}u;
55
54
  const BLAS_BAND_VOTE_HEMISPHERE = ${BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_STRATA}u;
56
55
  const BLAS_BAND_VOTE_RAYS = ${BLAS_BAND_VOTE_RAYS}u;
57
56
 
58
- /** FRandomStream::GetFraction: the stream's next fraction in [0, 1) */
57
+ /** Next LCG fraction in [0, 1) */
59
58
  fn blas_band_vote_fraction(seed: ptr<function, u32>) -> f32 {
60
59
  *seed = *seed * 196314165u + 907633515u;
61
60
 
@@ -145,7 +144,7 @@ fn blas_query_band_sdf(
145
144
  }
146
145
  }
147
146
 
148
- // UE's Hit > 0 && HitBack > 0.25 · samples, of which the first follows from the second
147
+ // Inside when hits > 0 and back-face hits > 0.25 · samples (the first follows from the second)
149
148
  return select(distance, -distance, 4u * back > BLAS_BAND_VOTE_RAYS);
150
149
  }
151
150
  `, [
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Turn a virtual geometry into an ordinary meshlet geometry of at most `triangle_limit` triangles: a
3
+ * proxy, for whatever wants a plain mesh of an asset that is only clusters.
4
+ *
5
+ * **No simplification happens here.** The DAG already holds the asset at every level of detail; the
6
+ * proxy is a cut through it, and the cut's clusters are meshlets already (`VGEO_FORMAT.md` §8). The
7
+ * cut starts at the roots and refines, one group at a time, the group whose parents carry the largest
8
+ * `self_error`, and stops at the first refinement that would take it over the limit — so the error is
9
+ * as uniform as the DAG allows.
10
+ *
11
+ * A group is refined only once every one of its parents is in the cut (`group_parent_count`, §6), and
12
+ * then all of them are replaced together, so the cut is watertight at every step, as a view's cut is.
13
+ *
14
+ * Pages are installed as the descent reaches them, down to one band below the cut: a small proxy of a
15
+ * large asset reads the coarse prefix of the file and nothing else.
16
+ *
17
+ * The DAG's roots are as coarse as it goes: a limit below the roots' triangle count gets the roots.
18
+ *
19
+ * @param {VGeoContainerReader} reader an open container, which is one material's geometry; the pages the
20
+ * descent reaches are installed into it and left there
21
+ * @param {number} triangle_limit
22
+ * @returns {Promise<MeshletGeometry>}
23
+ *
24
+ * @author Alex Goldring
25
+ * @copyright Company Named Limited (c) 2026
26
+ */
27
+ export function vgeo_to_proxy_mesh(reader: VGeoContainerReader, triangle_limit: number): Promise<MeshletGeometry>;
28
+ export type VGeoContainerReader = import("../format/read/VGeoContainerReader.js").VGeoContainerReader;
29
+ export type VGeoPage = import("../format/read/VGeoPage.js").VGeoPage;
30
+ import { MeshletGeometry } from "../../MeshletGeometry.js";
31
+ //# sourceMappingURL=vgeo_to_proxy_mesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vgeo_to_proxy_mesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,2CARW,mBAAmB,kBAEnB,MAAM,GACJ,QAAQ,eAAe,CAAC,CAcpC;kCA7CY,OAAO,uCAAuC,EAAE,mBAAmB;uBACnE,OAAO,4BAA4B,EAAE,QAAQ;gCAP1B,0BAA0B"}
@@ -0,0 +1,343 @@
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
3
+ import { platform_compute_endianness } from "../../../../../core/binary/platform_compute_endianness.js";
4
+ import { IndexedFloatMaxHeap } from "../../../../../core/collection/heap/IndexedFloatMaxHeap.js";
5
+ import { aabb3_array_combine } from "../../../../../core/geom/3d/aabb/aabb3_array_combine.js";
6
+ import { blas_from_meshlets } from "../../blas_from_meshlets.js";
7
+ import { MESHLET_METADATA_STRUCT } from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
8
+ import { MeshletGeometry } from "../../MeshletGeometry.js";
9
+ import { VGEO_NO_CHILD } from "../format/cluster/VGEO_NO_CHILD.js";
10
+ import { VGEO_SAME_PAGE } from "../format/cluster/VGEO_SAME_PAGE.js";
11
+ import { vgeo_meshlet_metadata_write } from "../runtime/vgeo_meshlet_metadata_write.js";
12
+
13
+ /**
14
+ * @typedef {import("../format/read/VGeoContainerReader.js").VGeoContainerReader} VGeoContainerReader
15
+ * @typedef {import("../format/read/VGeoPage.js").VGeoPage} VGeoPage
16
+ */
17
+
18
+ /**
19
+ * A page not yet given its groups' ids.
20
+ * @type {number}
21
+ */
22
+ const NO_BASE = -1;
23
+
24
+ /**
25
+ * Turn a virtual geometry into an ordinary meshlet geometry of at most `triangle_limit` triangles: a
26
+ * proxy, for whatever wants a plain mesh of an asset that is only clusters.
27
+ *
28
+ * **No simplification happens here.** The DAG already holds the asset at every level of detail; the
29
+ * proxy is a cut through it, and the cut's clusters are meshlets already (`VGEO_FORMAT.md` §8). The
30
+ * cut starts at the roots and refines, one group at a time, the group whose parents carry the largest
31
+ * `self_error`, and stops at the first refinement that would take it over the limit — so the error is
32
+ * as uniform as the DAG allows.
33
+ *
34
+ * A group is refined only once every one of its parents is in the cut (`group_parent_count`, §6), and
35
+ * then all of them are replaced together, so the cut is watertight at every step, as a view's cut is.
36
+ *
37
+ * Pages are installed as the descent reaches them, down to one band below the cut: a small proxy of a
38
+ * large asset reads the coarse prefix of the file and nothing else.
39
+ *
40
+ * The DAG's roots are as coarse as it goes: a limit below the roots' triangle count gets the roots.
41
+ *
42
+ * @param {VGeoContainerReader} reader an open container, which is one material's geometry; the pages the
43
+ * descent reaches are installed into it and left there
44
+ * @param {number} triangle_limit
45
+ * @returns {Promise<MeshletGeometry>}
46
+ *
47
+ * @author Alex Goldring
48
+ * @copyright Company Named Limited (c) 2026
49
+ */
50
+ export async function vgeo_to_proxy_mesh(reader, triangle_limit) {
51
+ assert.defined(reader.root, 'reader.root — the container must be open');
52
+ assert.isNonNegativeInteger(triangle_limit, 'triangle_limit');
53
+
54
+ const cut = new ProxyCut(reader);
55
+
56
+ await cut.descend(triangle_limit);
57
+
58
+ return cut.build();
59
+ }
60
+
61
+ /**
62
+ * The cut, and the bookkeeping of its descent.
63
+ *
64
+ * Groups are given dense ids as their page is installed, so the per-group state is typed arrays sized
65
+ * once from the header's `total_groups`.
66
+ */
67
+ class ProxyCut {
68
+ /**
69
+ * @param {VGeoContainerReader} reader
70
+ */
71
+ constructor(reader) {
72
+ this.reader = reader;
73
+
74
+ const capacity = reader.header.total_groups;
75
+
76
+ /**
77
+ * First group id of each page; {@link NO_BASE} until the page is installed.
78
+ */
79
+ this.page_base = new Int32Array(reader.header.total_pages).fill(NO_BASE);
80
+
81
+ this.next_base = 0;
82
+
83
+ this.group_page = new Uint32Array(capacity);
84
+ this.group_index = new Uint16Array(capacity);
85
+
86
+ /**
87
+ * Parents of the group in the cut so far.
88
+ */
89
+ this.arrived = new Uint16Array(capacity);
90
+
91
+ /**
92
+ * Their triangles: what refining the group takes out of the cut.
93
+ */
94
+ this.parent_triangles = new Uint32Array(capacity);
95
+
96
+ this.refined = new Uint8Array(capacity);
97
+
98
+ /**
99
+ * Groups whose every parent is in the cut, by the error those parents carry.
100
+ */
101
+ this.refinable = new IndexedFloatMaxHeap(capacity);
102
+
103
+ /**
104
+ * Every cluster that entered the cut, as the id of its group, its index in its page and the id
105
+ * of its child group (-1 for a leaf). One leaves the cut when its child group is refined.
106
+ * @type {number[]}
107
+ */
108
+ this.entered_group = [];
109
+ this.entered_cluster = [];
110
+ this.entered_child = [];
111
+
112
+ this.triangle_count = 0;
113
+ }
114
+
115
+ /**
116
+ * @param {number} limit
117
+ * @returns {Promise<void>}
118
+ */
119
+ async descend(limit) {
120
+ const root = this.reader.root;
121
+
122
+ this.#register(root);
123
+
124
+ for (let group = 0; group < root.group_parent_count.length; group++) {
125
+ // no cluster refines into it: the top of the DAG
126
+ if (root.group_parent_count[group] === 0) {
127
+ await this.#enter(this.page_base[root.index] + group);
128
+ }
129
+ }
130
+
131
+ const refinable = this.refinable;
132
+
133
+ while (refinable.size > 0) {
134
+ const id = refinable.pop_max();
135
+
136
+ if (this.triangle_count - this.parent_triangles[id] + this.#group_triangles(id) > limit) {
137
+ // the largest error left does not fit: refining anywhere finer would make it less uniform
138
+ break;
139
+ }
140
+
141
+ this.refined[id] = 1;
142
+ this.triangle_count -= this.parent_triangles[id];
143
+
144
+ await this.#enter(id);
145
+ }
146
+ }
147
+
148
+ /**
149
+ * The cut's clusters as a meshlet geometry: their payloads gathered as they are stored, a metadata
150
+ * row each, and the BVH the mesh path builds.
151
+ *
152
+ * @returns {MeshletGeometry}
153
+ */
154
+ build() {
155
+ /** @type {VGeoPage[]} */
156
+ const pages = [];
157
+ /** @type {number[]} */
158
+ const clusters = [];
159
+
160
+ let data_size = 0;
161
+
162
+ for (let i = 0; i < this.entered_group.length; i++) {
163
+ const child = this.entered_child[i];
164
+
165
+ if (child !== -1 && this.refined[child] === 1) {
166
+ continue;
167
+ }
168
+
169
+ const page = this.reader.page(this.group_page[this.entered_group[i]]);
170
+ const cluster = this.entered_cluster[i];
171
+
172
+ pages.push(page);
173
+ clusters.push(cluster);
174
+
175
+ data_size += page.cluster_payload_size[cluster];
176
+ }
177
+
178
+ const count = clusters.length;
179
+
180
+ const data = new Uint8Array(data_size);
181
+
182
+ const metadata = BinaryBuffer.fromEndianness(platform_compute_endianness());
183
+
184
+ metadata.setCapacity(count * MESHLET_METADATA_STRUCT.size);
185
+
186
+ const result = new MeshletGeometry();
187
+
188
+ const box = result.bounding_box;
189
+
190
+ box.set([Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity]);
191
+
192
+ let address = 0;
193
+
194
+ for (let i = 0; i < count; i++) {
195
+ const page = pages[i];
196
+ const cluster = clusters[i];
197
+
198
+ const start = page.payload_offset + page.cluster_payload_offset[cluster];
199
+ const size = page.cluster_payload_size[cluster];
200
+
201
+ data.set(page.bytes.subarray(start, start + size), address);
202
+
203
+ // §11.8: every payload size is a multiple of four, so each cluster starts on a word
204
+ vgeo_meshlet_metadata_write(metadata, page, cluster, address >>> 2);
205
+
206
+ // `aabb` is the cluster's tight fit, so their union is the proxy's
207
+ aabb3_array_combine(box, 0, box, 0, page.aabb, cluster * 6);
208
+
209
+ address += size;
210
+ }
211
+
212
+ const batch = result.meshlets;
213
+
214
+ batch.count = count;
215
+ batch.data_buffer = data.buffer;
216
+ batch.metadata_buffer = metadata.data.slice(0, count * MESHLET_METADATA_STRUCT.size);
217
+
218
+ // the box-diagonal sphere `meshlet_geometry_build_from_geometry` gives a mesh
219
+ const sphere = result.bounding_sphere;
220
+
221
+ sphere[0] = (box[0] + box[3]) * 0.5;
222
+ sphere[1] = (box[1] + box[4]) * 0.5;
223
+ sphere[2] = (box[2] + box[5]) * 0.5;
224
+ sphere[3] = 0.5 * Math.hypot(box[3] - box[0], box[4] - box[1], box[5] - box[2]);
225
+
226
+ result.name = this.reader.source.name;
227
+ result.primitive_count = this.triangle_count;
228
+ result.bvh = blas_from_meshlets(batch, result.primitive_count, box);
229
+
230
+ return result;
231
+ }
232
+
233
+ /**
234
+ * @param {number} id
235
+ * @returns {number}
236
+ */
237
+ #group_triangles(id) {
238
+ const page = this.reader.page(this.group_page[id]);
239
+ const group = this.group_index[id];
240
+
241
+ const first = page.group_cluster_first[group];
242
+ const end = first + page.group_cluster_count[group];
243
+
244
+ let triangles = 0;
245
+
246
+ for (let cluster = first; cluster < end; cluster++) {
247
+ triangles += page.triangle_count[cluster];
248
+ }
249
+
250
+ return triangles;
251
+ }
252
+
253
+ /**
254
+ * Give an installed page's groups their ids.
255
+ *
256
+ * @param {VGeoPage} page
257
+ */
258
+ #register(page) {
259
+ if (this.page_base[page.index] !== NO_BASE) {
260
+ return;
261
+ }
262
+
263
+ const base = this.next_base;
264
+ const group_count = page.group_cluster_count.length;
265
+
266
+ this.page_base[page.index] = base;
267
+
268
+ for (let group = 0; group < group_count; group++) {
269
+ this.group_page[base + group] = page.index;
270
+ this.group_index[base + group] = group;
271
+ }
272
+
273
+ this.next_base = base + group_count;
274
+ }
275
+
276
+ /**
277
+ * Put a group's clusters in the cut, and count each in at its child group, which becomes
278
+ * refinable once its last parent arrives.
279
+ *
280
+ * @param {number} id
281
+ * @returns {Promise<void>}
282
+ */
283
+ async #enter(id) {
284
+ const reader = this.reader;
285
+ const page = reader.page(this.group_page[id]);
286
+ const group = this.group_index[id];
287
+
288
+ const first = page.group_cluster_first[group];
289
+ const end = first + page.group_cluster_count[group];
290
+
291
+ // the child pages first: a child group's parent count lives in its own page
292
+ const installs = [];
293
+
294
+ for (let cluster = first; cluster < end; cluster++) {
295
+ const child_ref = page.child_ref[cluster];
296
+
297
+ if (child_ref === VGEO_NO_CHILD || child_ref === VGEO_SAME_PAGE) {
298
+ continue;
299
+ }
300
+
301
+ const child_page = page.child_page_index[child_ref];
302
+
303
+ if (!reader.is_resident(child_page)) {
304
+ installs.push(reader.install(
305
+ child_page, page.child_frame_offset[child_ref], page.child_fetch_size[child_ref]
306
+ ));
307
+ }
308
+ }
309
+
310
+ for (const child_page of await Promise.all(installs)) {
311
+ this.#register(child_page);
312
+ }
313
+
314
+ for (let cluster = first; cluster < end; cluster++) {
315
+ const triangles = page.triangle_count[cluster];
316
+
317
+ this.triangle_count += triangles;
318
+
319
+ this.entered_group.push(id);
320
+ this.entered_cluster.push(cluster);
321
+
322
+ const child_ref = page.child_ref[cluster];
323
+
324
+ if (child_ref === VGEO_NO_CHILD) {
325
+ this.entered_child.push(-1);
326
+ continue;
327
+ }
328
+
329
+ const child_page = reader.page(child_ref === VGEO_SAME_PAGE ? page.index : page.child_page_index[child_ref]);
330
+ const child_group = page.child_group[cluster];
331
+ const child = this.page_base[child_page.index] + child_group;
332
+
333
+ this.entered_child.push(child);
334
+
335
+ this.arrived[child]++;
336
+ this.parent_triangles[child] += triangles;
337
+
338
+ if (this.arrived[child] === child_page.group_parent_count[child_group]) {
339
+ this.refinable.insert(child, page.self_error[cluster]);
340
+ }
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * One cluster's meshlet metadata row, written at `buffer`'s position.
3
+ *
4
+ * `VGEO_FORMAT.md` §8: the 40-byte rows are synthesized from the cluster record — `aabb` becomes
5
+ * `bounds_box`, the u8 counts widen to u32, `encoding_flags` passes through. Only `address` depends
6
+ * on where the payload went, so the caller says.
7
+ *
8
+ * @param {BinaryBuffer} buffer
9
+ * @param {VGeoPage} page
10
+ * @param {number} cluster index within `page`
11
+ * @param {number} address where the cluster's payload starts in the data the row will be read against, in 4-byte words
12
+ *
13
+ * @author Alex Goldring
14
+ * @copyright Company Named Limited (c) 2026
15
+ */
16
+ export function vgeo_meshlet_metadata_write(buffer: BinaryBuffer, page: VGeoPage, cluster: number, address: number): void;
17
+ //# sourceMappingURL=vgeo_meshlet_metadata_write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vgeo_meshlet_metadata_write.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,2FANW,MAAM,WACN,MAAM,QAahB"}
@@ -0,0 +1,29 @@
1
+ import { write_wgsl_type_value } from "../../../shader/type/serde/write_gpu_typed_buffer.js";
2
+ import {
3
+ MESHLET_METADATA_STRUCT
4
+ } from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
5
+
6
+ /**
7
+ * One cluster's meshlet metadata row, written at `buffer`'s position.
8
+ *
9
+ * `VGEO_FORMAT.md` §8: the 40-byte rows are synthesized from the cluster record — `aabb` becomes
10
+ * `bounds_box`, the u8 counts widen to u32, `encoding_flags` passes through. Only `address` depends
11
+ * on where the payload went, so the caller says.
12
+ *
13
+ * @param {BinaryBuffer} buffer
14
+ * @param {VGeoPage} page
15
+ * @param {number} cluster index within `page`
16
+ * @param {number} address where the cluster's payload starts in the data the row will be read against, in 4-byte words
17
+ *
18
+ * @author Alex Goldring
19
+ * @copyright Company Named Limited (c) 2026
20
+ */
21
+ export function vgeo_meshlet_metadata_write(buffer, page, cluster, address) {
22
+ write_wgsl_type_value({
23
+ bounds_box: page.aabb.subarray(cluster * 6, cluster * 6 + 6),
24
+ address,
25
+ primitive_count: page.triangle_count[cluster],
26
+ vertex_count: page.vertex_count[cluster],
27
+ flags: page.encoding_flags[cluster],
28
+ }, buffer, MESHLET_METADATA_STRUCT);
29
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"vgeo_runtime_meshlet_batch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4DALa,YAAY,CA6CxB;6BA9D4B,+BAA+B"}
1
+ {"version":3,"file":"vgeo_runtime_meshlet_batch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4DALa,YAAY,CAuCxB;6BAzD4B,+BAA+B"}
@@ -1,11 +1,11 @@
1
1
  import { assert } from "../../../../../core/assert.js";
2
2
  import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
3
3
  import { platform_compute_endianness } from "../../../../../core/binary/platform_compute_endianness.js";
4
- import { write_wgsl_type_value } from "../../../shader/type/serde/write_gpu_typed_buffer.js";
5
4
  import {
6
5
  MESHLET_METADATA_STRUCT
7
6
  } from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
8
7
  import { MeshletBatch } from "../../meshlet/MeshletBatch.js";
8
+ import { vgeo_meshlet_metadata_write } from "./vgeo_meshlet_metadata_write.js";
9
9
 
10
10
  /**
11
11
  * A decoded page, as the meshlet pool takes it.
@@ -46,18 +46,12 @@ export function vgeo_runtime_meshlet_batch(page) {
46
46
  metadata.setCapacity(count * MESHLET_METADATA_STRUCT.size);
47
47
 
48
48
  for (let cluster = 0; cluster < count; cluster++) {
49
- write_wgsl_type_value({
50
- bounds_box: page.aabb.subarray(cluster * 6, cluster * 6 + 6),
51
- /*
52
- Words, and relative to the page's payload section — `GPUMeshletManager` adds the
53
- allocation's own offset when it uploads. Format §11.8 makes every payload offset a
54
- multiple of four, so this division is exact rather than rounded.
55
- */
56
- address: page.cluster_payload_offset[cluster] >>> 2,
57
- primitive_count: page.triangle_count[cluster],
58
- vertex_count: page.vertex_count[cluster],
59
- flags: page.encoding_flags[cluster],
60
- }, metadata, MESHLET_METADATA_STRUCT);
49
+ /*
50
+ Words, and relative to the page's payload section — `GPUMeshletManager` adds the
51
+ allocation's own offset when it uploads. Format §11.8 makes every payload offset a
52
+ multiple of four, so this division is exact rather than rounded.
53
+ */
54
+ vgeo_meshlet_metadata_write(metadata, page, cluster, page.cluster_payload_offset[cluster] >>> 2);
61
55
  }
62
56
 
63
57
  // `BinaryBuffer.data` is the ArrayBuffer itself, and `setCapacity` may have rounded it up;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUProbeClipmapGI.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IA0DI;;OAEG;IACH,sBAFW,eAAe,EAMzB;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,oCAEC;IAED;;;;;;;;;;;;;;OAcG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACJ,KAAK,EAArB,MAAM;QACU,MAAM,EAAtB,MAAM;QACK,IAAI;QACE,MAAM,GAAvB,MAAM;aAiGhB;IAED;;;OAGG;IACH,0BAEC;IAED;;;;;;;;;OASG;IACH,4CAUC;IAwDD;;;;;;;;;;OAUG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACF,UAAU,EAA5B,MAAM,EAAE;QACN,MAAM,CAmBlB;IAED;;;;;OAKG;IACH,uBAFW,aAAa,QASvB;IAED;;;OAGG;IACH,0BAHW,aAAa,GACX,OAAO,CAanB;IAyCD;;;OAGG;IACH,gBAoBC;IAED,gBAcC;;CACJ;yBApcY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,0BAA0B,EAAE,eAAe;6BAClD,OAAO,8BAA8B,EAAE,cAAc;mCACrD,OAAO,2BAA2B,EAAE,oBAAoB;4BACxD,OAAO,4BAA4B,EAAE,aAAa;gCAjB/B,4BAA4B;gCAQ5B,4BAA4B;uCAErB,6BAA6B"}
1
+ {"version":3,"file":"GPUProbeClipmapGI.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IA0DI;;OAEG;IACH,sBAFW,eAAe,EAMzB;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,oCAEC;IAED;;;;;;;;;;;;;;OAcG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACJ,KAAK,EAArB,MAAM;QACU,MAAM,EAAtB,MAAM;QACK,IAAI;QACE,MAAM,GAAvB,MAAM;aA2FhB;IAED;;;OAGG;IACH,0BAEC;IAED;;;;;;;;;OASG;IACH,4CAUC;IAwDD;;;;;;;;;;OAUG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACF,UAAU,EAA5B,MAAM,EAAE;QACN,MAAM,CAmBlB;IAED;;;;;OAKG;IACH,uBAFW,aAAa,QASvB;IAED;;;OAGG;IACH,0BAHW,aAAa,GACX,OAAO,CAanB;IAyCD;;;OAGG;IACH,gBAoBC;IAED,gBAcC;;CACJ;yBA9bY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,0BAA0B,EAAE,eAAe;6BAClD,OAAO,8BAA8B,EAAE,cAAc;mCACrD,OAAO,2BAA2B,EAAE,oBAAoB;4BACxD,OAAO,4BAA4B,EAAE,aAAa;gCAjB/B,4BAA4B;gCAQ5B,4BAA4B;uCAErB,6BAA6B"}
@@ -180,12 +180,6 @@ export class GPUProbeClipmapGI {
180
180
 
181
181
  const scene = view.scene;
182
182
  const sdf = scene.geometries.sdf;
183
- const materials = this.#graphics.materials_resident;
184
-
185
- // the scene's materials as they are this frame: a repack recaptures its pairs
186
- materials.ensure_scene_materials(scene);
187
- materials.update();
188
-
189
183
  sdf.configure(settings.mesh_sdf_voxel_size, settings.mesh_sdf_max_bricks);
190
184
  sdf.trim();
191
185
  sdf.cards.capture_mode = settings.card_capture_mode;
@@ -193,7 +187,7 @@ export class GPUProbeClipmapGI {
193
187
  graph,
194
188
  budget: settings.mesh_sdf_bake_budget,
195
189
  capture_budget: settings.card_capture_budget,
196
- materials,
190
+ materials: this.#graphics.materials_resident,
197
191
  material_contexts: this.#graphics.materials,
198
192
  });
199
193
 
@@ -235,8 +229,8 @@ export class GPUProbeClipmapGI {
235
229
  brick_clipmap: this.#brick_clipmap,
236
230
  bricks,
237
231
  scene,
238
- materials,
239
232
  card_rows: this.#holds.rows_buffer,
233
+ resampling: settings.resampling,
240
234
  });
241
235
  }
242
236
 
@@ -15,8 +15,8 @@
15
15
  * its hold and its pair, the new ones taken before the old ones go, so a cache or card set a row keeps
16
16
  * drawing is never let go in between.
17
17
  *
18
- * When the resident material context repacks a material whose version moved, each of that
19
- * material's pairs is recaptured (§6.5), and the holds of its rows move to the side it draws now.
18
+ * When the material manager restages a material whose version moved, each of that material's pairs
19
+ * is recaptured (§6.5), and the holds of its rows move to the side it draws now.
20
20
  *
21
21
  * {@link attach} subscribes and walks the rows already there; {@link detach} gives every hold and card
22
22
  * set back. Neither trims: a cache with no holder stays until its user trims, so leaving the mode keeps
@@ -25,7 +25,7 @@
25
25
  export class ProbeClipmapSceneHolds {
26
26
  /**
27
27
  * @param {GPUSceneContext} scene
28
- * @param {GraphicsContext} graphics whose resident materials' repacks recapture the pairs of the material
28
+ * @param {GraphicsContext} graphics whose material manager's restages recapture the pairs of the material
29
29
  */
30
30
  constructor(scene: GPUSceneContext, graphics: GraphicsContext);
31
31
  /**
@@ -43,7 +43,7 @@ export class ProbeClipmapSceneHolds {
43
43
  */
44
44
  get pair_count(): number;
45
45
  /**
46
- * Recaptures asked for, a pair each time its material was repacked.
46
+ * Recaptures asked for, a pair each time its material was restaged.
47
47
  * @returns {number}
48
48
  */
49
49
  get recaptures_requested(): number;
@@ -79,6 +79,6 @@ export type GPUSceneContext = import("../../scene/GPUSceneContext.js").GPUSceneC
79
79
  export type MeshletGeometry = import("../../geometry/MeshletGeometry.js").MeshletGeometry;
80
80
  export type GPUGeometryMetadata = import("../../geometry/GPUGeometryMetadata.js").GPUGeometryMetadata;
81
81
  export type ShadeMaterial = import("../../material/ShadeMaterial.js").ShadeMaterial;
82
- export type GPUResidentMaterialContext = import("../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext;
82
+ export type GPUMaterialManager = import("../../material/GPUMaterialManager.js").GPUMaterialManager;
83
83
  export type GraphicsContext = import("../../GraphicsContext.js").GraphicsContext;
84
84
  //# sourceMappingURL=ProbeClipmapSceneHolds.d.ts.map