@woosh/meep-engine 3.59.0 → 3.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/package.json +1 -1
  2. package/src/shade/playground/probe_clipmap/index.html +12 -0
  3. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  4. package/src/shade/playground/probe_clipmap/main.js +5 -0
  5. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  6. package/src/shade/renderer/Renderer.js +4 -6
  7. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
  8. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  9. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
  10. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
  11. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  12. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
  13. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
  14. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
  15. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
  16. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
  17. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
  18. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
  19. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
  20. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
  21. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
  22. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
  23. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
  24. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
  25. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
  26. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
  27. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
  28. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
  29. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
  30. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
  31. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
  32. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
  33. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
  34. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
  35. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
  36. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
  37. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
  38. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
  39. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
  40. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
  41. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
  42. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
  43. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  44. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
  45. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
  46. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  47. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
  48. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
  49. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
  50. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
  51. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  52. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
  53. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
  54. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  55. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
  56. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
  57. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  58. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
  59. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
  60. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  61. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
  62. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
  63. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  64. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
  65. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
  66. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  67. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
  68. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
  69. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
  70. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
  71. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
  72. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
  73. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
  74. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
  75. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
  76. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
  77. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
  78. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
  79. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
  80. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
  81. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
  82. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
  83. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
  84. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
  85. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
  86. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
  87. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
  88. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
  89. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
  90. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
  91. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
  92. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
  93. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
  94. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
  95. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
  96. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
  97. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
  98. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
  99. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
  101. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
  102. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +254 -73
  104. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
  105. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  106. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +181 -13
  107. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +412 -31
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
  111. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  112. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +4 -3
  113. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
  114. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +218 -29
  116. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
  117. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  118. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
  119. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
  120. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  121. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
  122. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
  123. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
  124. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
  125. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
  126. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  127. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
  128. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
  129. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
  130. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
  131. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
  132. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  133. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
  134. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +4 -8
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +21 -36
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
  156. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
  157. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
  158. package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
  159. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
  160. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
  161. package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
  162. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
  163. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
  164. package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
  165. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
  166. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
  167. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
  168. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
  169. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
  170. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
  171. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
  172. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
  173. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
  174. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
  175. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
  176. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
  177. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
  178. package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
  179. package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
  180. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
  181. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  182. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
  183. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
  184. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  185. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
  186. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
  187. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
  188. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
  189. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
  190. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
  191. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
  192. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
  193. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  194. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
  195. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
  196. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
  197. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
  198. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
  199. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
  200. package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
  201. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
  202. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
  203. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  204. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
  205. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
  206. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
  207. package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
  208. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
  209. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
  210. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
  211. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
  212. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
  213. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
  214. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
  215. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
  216. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
  217. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
  218. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
  219. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
  220. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
  221. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
  222. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
  223. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
  224. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
  225. package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
  226. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
  227. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
  228. package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
  229. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
  230. package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
  231. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
  232. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
  233. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
  234. package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
  235. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
  236. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
  237. package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
  238. package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
  239. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
  241. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
  242. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  243. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
  244. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
  245. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
  246. package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
  247. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
  248. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
  249. package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
  250. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
  251. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
  252. package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
  253. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
  254. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
  255. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
  256. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  257. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
  258. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  259. package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
  260. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  261. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
  262. package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
  263. package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
  264. package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
  265. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
  266. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
  267. package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
  268. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
  269. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
  270. package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
  271. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
  272. package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
  273. package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
  274. package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
  275. package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
  276. package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
  277. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
  278. package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
  279. package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
  280. package/src/view/elements/progress/segmented/playground/index.html +78 -0
  281. package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
  282. package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
  283. package/src/view/elements/progress/segmented/playground/main.js +173 -0
  284. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
  285. package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
  286. package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
  287. package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
  288. package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
  289. package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
  290. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
  291. package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
  292. package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
  293. package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
  298. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
  299. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
  300. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
  301. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
  302. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
  303. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
  304. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
  305. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
  306. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
  307. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
  308. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
  309. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
  310. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
  311. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
  312. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
  313. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
  314. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
  315. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
  316. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
  317. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
  318. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
  319. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
  320. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
  321. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
  322. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
  323. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
  324. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
  325. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
  326. package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +0 -135
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Lanes of the collect, a lane a job.
3
+ * @type {number}
4
+ */
5
+ export const VGEO_SDF_COLLECT_WORKGROUP_SIZE: number;
6
+ /**
7
+ * The extraction's collect (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): a cut's instance record a job,
8
+ * as every cut's collect writes one (`chunk_vgeo_cut_instance`), its geometry's root page, lookup and claim width from
9
+ * the geometry's row. Cut in the geometry's own space, at a world error under half its cache's voxel: `k` the job's,
10
+ * the distance weight 0.
11
+ *
12
+ * @type {ComputeShader}
13
+ */
14
+ export const shader_vgeo_sdf_collect: ComputeShader;
15
+ import { ComputeShader } from "../../../shader/ComputeShader.js";
16
+ //# sourceMappingURL=shader_vgeo_sdf_collect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_vgeo_sdf_collect.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js"],"names":[],"mappings":"AAUA;;;GAGG;AACH,8CAFU,MAAM,CAEkC;AAwClD;;;;;;;GAOG;AACH,sCAFU,aAAa,CAMpB;8BAhE2B,kCAAkC"}
@@ -0,0 +1,67 @@
1
+ import { COLLECTION_U32_STRUCT_WRITE } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
2
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
3
+ import { ComputeShader } from "../../../shader/ComputeShader.js";
4
+ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
5
+ import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
7
+ import { chunk_vgeo_cut_instance } from "../runtime/cut/chunk_vgeo_cut_instance.js";
8
+ import { VGEO_INSTANCE_OFFSET } from "../runtime/layout/VGEO_INSTANCE_OFFSET.js";
9
+ import { VGEO_SDF_JOB_STRUCT, VGEO_SDF_SETTINGS } from "./VGEO_SDF.js";
10
+
11
+ /**
12
+ * Lanes of the collect, a lane a job.
13
+ * @type {number}
14
+ */
15
+ export const VGEO_SDF_COLLECT_WORKGROUP_SIZE = 64;
16
+
17
+ const resources = new ShaderResourceSetDescriptor();
18
+
19
+ resources.setImmediate("settings", VGEO_SDF_SETTINGS);
20
+
21
+ resources.createGroup()
22
+ .addStorageBuffer("vgeo_sdf_jobs", WebGPUArray.from(VGEO_SDF_JOB_STRUCT))
23
+ .addStorageBuffer("vg_geometries", WebGPUArray.from(u32))
24
+ // a cut's instance records, and their claim widths for the scan
25
+ .addStorageBuffer("instances", WebGPUArray.from(u32), true)
26
+ .addStorageBuffer("claim_widths", COLLECTION_U32_STRUCT_WRITE, true);
27
+
28
+ const body = CodeChunk.from(
29
+ //language=WGSL
30
+ `
31
+ @compute @workgroup_size(${VGEO_SDF_COLLECT_WORKGROUP_SIZE})
32
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
33
+ let job = id.x;
34
+
35
+ if (job >= settings.job_count) {
36
+ return;
37
+ }
38
+
39
+ // a job's record names its job where a view's names its mesh row: what its take lists the job's clusters under
40
+ let base = vg_instance_record(job, vgeo_sdf_jobs[job].vg_row, settings.job_count);
41
+
42
+ if (base == VG_INSTANCE_RECORD_NONE) {
43
+ return;
44
+ }
45
+
46
+ // no eye: at a distance weight of 0 the projection is the error itself over half the voxel, wherever it is
47
+ vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE}u, 0.0);
48
+ vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 1}u, 0.0);
49
+ vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 2}u, 0.0);
50
+ vg_store(base, ${VGEO_INSTANCE_OFFSET.PROJECTION_K}u, vgeo_sdf_jobs[job].projection_k);
51
+ vg_store(base, ${VGEO_INSTANCE_OFFSET.DISTANCE_WEIGHT}u, 0.0);
52
+ }
53
+ `, [chunk_vgeo_cut_instance]);
54
+
55
+ /**
56
+ * The extraction's collect (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): a cut's instance record a job,
57
+ * as every cut's collect writes one (`chunk_vgeo_cut_instance`), its geometry's root page, lookup and claim width from
58
+ * the geometry's row. Cut in the geometry's own space, at a world error under half its cache's voxel: `k` the job's,
59
+ * the distance weight 0.
60
+ *
61
+ * @type {ComputeShader}
62
+ */
63
+ export const shader_vgeo_sdf_collect = ComputeShader.from({
64
+ label: "VGeo SDF Collect",
65
+ resources,
66
+ body,
67
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Lanes of the decode, a workgroup a listed cluster: a lane a vertex, and a lane a triangle.
3
+ * @type {number}
4
+ */
5
+ export const VGEO_SDF_DECODE_WORKGROUP_SIZE: number;
6
+ /**
7
+ * The extraction's decode (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): a workgroup a cluster the cut
8
+ * listed, dispatched by the list's count. Each adds its cluster's vertices and triangles to its job's counts, which
9
+ * size the job's room in a later frame. A job the host gives room this frame (`decode`) takes each cluster's share of
10
+ * it by atomic: the cluster's positions as they are stored, in the geometry's own space, and its triangles as indices
11
+ * into its job's vertices, which the host reads back as the proxy's mesh.
12
+ *
13
+ * @type {ComputeShader}
14
+ */
15
+ export const shader_vgeo_sdf_decode: ComputeShader;
16
+ import { ComputeShader } from "../../../shader/ComputeShader.js";
17
+ //# sourceMappingURL=shader_vgeo_sdf_decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_vgeo_sdf_decode.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,6CAFU,MAAM,CAEuG;AAwGvH;;;;;;;;GAQG;AACH,qCAFU,aAAa,CAMpB;8BAzI2B,kCAAkC"}
@@ -0,0 +1,145 @@
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { COLLECTION_U32_STRUCT_READ } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
3
+ import { chunk_meshlet_compute_attribute_section_offset } from "../../../shader/chunk/geometry/meshlet/chunk_meshlet_compute_attribute_section_offset.js";
4
+ import { chunk_read_meshlet_attribute_vec3f } from "../../../shader/chunk/geometry/meshlet/chunk_read_meshlet_attribute_vec3f.js";
5
+ import { chunk_read_meshlet_resolved_index } from "../../../shader/chunk/geometry/meshlet/chunk_read_meshlet_resolved_index.js";
6
+ import { chunk_folded_workgroup_index } from "../../../shader/chunk/grid/chunk_folded_workgroup_index.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 { atomic_u32, u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
11
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
12
+ import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
13
+ import { MESHLET_METADATA_STRUCT } from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
14
+ import { VGEO_MAX_CLUSTER_TRIANGLE_COUNT } from "../format/cluster/VGEO_MAX_CLUSTER_TRIANGLE_COUNT.js";
15
+ import { VGEO_MAX_CLUSTER_VERTEX_COUNT } from "../format/cluster/VGEO_MAX_CLUSTER_VERTEX_COUNT.js";
16
+ import {
17
+ VGEO_SDF_CLUSTER_WORDS,
18
+ VGEO_SDF_COUNTER,
19
+ VGEO_SDF_COUNTER_WORDS,
20
+ VGEO_SDF_JOB_STRUCT,
21
+ VGEO_SDF_SETTINGS
22
+ } from "./VGEO_SDF.js";
23
+
24
+ /**
25
+ * Lanes of the decode, a workgroup a listed cluster: a lane a vertex, and a lane a triangle.
26
+ * @type {number}
27
+ */
28
+ export const VGEO_SDF_DECODE_WORKGROUP_SIZE = Math.max(VGEO_MAX_CLUSTER_VERTEX_COUNT, VGEO_MAX_CLUSTER_TRIANGLE_COUNT);
29
+
30
+ assert.lessThanOrEqual(VGEO_SDF_DECODE_WORKGROUP_SIZE, 256, 'the decode\'s workgroup is within WebGPU\'s default invocation limit');
31
+
32
+ const resources = new ShaderResourceSetDescriptor();
33
+
34
+ resources.setImmediate("settings", VGEO_SDF_SETTINGS);
35
+
36
+ resources.createGroup()
37
+ .addStorageBuffer("vgeo_sdf_jobs", WebGPUArray.from(VGEO_SDF_JOB_STRUCT))
38
+ .addStorageBuffer("vgeo_sdf_counters", WebGPUArray.from(atomic_u32), true)
39
+ .addStorageBuffer("vgeo_sdf_clusters", COLLECTION_U32_STRUCT_READ)
40
+ .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
41
+ .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE)
42
+ // the readback's: its header, then the jobs' vertices, then their triangles
43
+ .addStorageBuffer("vgeo_sdf_payload", WebGPUArray.from(u32), true);
44
+
45
+ const body = CodeChunk.from(
46
+ //language=WGSL
47
+ `
48
+ var<workgroup> listed: u32;
49
+ var<workgroup> writes: u32;
50
+ var<workgroup> first_vertex: u32;
51
+ var<workgroup> first_triangle: u32;
52
+
53
+ @compute @workgroup_size(${VGEO_SDF_DECODE_WORKGROUP_SIZE})
54
+ fn main(
55
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
56
+ @builtin(local_invocation_index) lane: u32,
57
+ ) {
58
+ let index = folded_workgroup_index(workgroup_id);
59
+
60
+ if (lane == 0u) {
61
+ listed = min(vgeo_sdf_clusters.count, settings.cluster_capacity);
62
+ }
63
+
64
+ // a folded dispatch's tail, and a count that ran past the list, leave whole
65
+ if (index >= workgroupUniformLoad(&listed)) {
66
+ return;
67
+ }
68
+
69
+ let entry = ${VGEO_SDF_CLUSTER_WORDS}u * index;
70
+ let job = vgeo_sdf_clusters.elements[entry];
71
+ let meshlet = vgeo_sdf_clusters.elements[entry + 1u];
72
+ let header = meshlet_metadata[meshlet];
73
+ let counters = job * ${VGEO_SDF_COUNTER_WORDS}u;
74
+
75
+ // every job's size, what the host makes room by; a job written out this frame takes its cluster's room in it
76
+ if (lane == 0u) {
77
+ atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.VERTICES}u], header.vertex_count);
78
+ atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.TRIANGLES}u], header.primitive_count);
79
+
80
+ var write = 0u;
81
+
82
+ if (vgeo_sdf_jobs[job].decode != 0u) {
83
+ let vertex = atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.VERTICES_WRITTEN}u], header.vertex_count);
84
+ let triangle = atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.TRIANGLES_WRITTEN}u], header.primitive_count);
85
+
86
+ // a cut grown since the room was made writes nothing past it; the host sees the sizes disagree
87
+ if (vertex + header.vertex_count <= vgeo_sdf_jobs[job].vertex_count
88
+ && triangle + header.primitive_count <= vgeo_sdf_jobs[job].triangle_count) {
89
+ first_vertex = vertex;
90
+ first_triangle = triangle;
91
+ write = 1u;
92
+ }
93
+ }
94
+
95
+ writes = write;
96
+ }
97
+
98
+ if (workgroupUniformLoad(&writes) == 0u) {
99
+ return;
100
+ }
101
+
102
+ let vertex_base = first_vertex;
103
+
104
+ if (lane < header.vertex_count) {
105
+ let position = read_meshlet_attribute_vec3f(meshlet_compute_attribute_section_offset(header) + 3u * lane);
106
+ let word = settings.vertex_offset + 3u * (vgeo_sdf_jobs[job].vertex_base + vertex_base + lane);
107
+
108
+ vgeo_sdf_payload[word] = bitcast<u32>(position.x);
109
+ vgeo_sdf_payload[word + 1u] = bitcast<u32>(position.y);
110
+ vgeo_sdf_payload[word + 2u] = bitcast<u32>(position.z);
111
+ }
112
+
113
+ // the cluster's corners as indices into its job's vertices, clamped to its own as every reader of it clamps
114
+ if (lane < header.primitive_count) {
115
+ let word = settings.index_offset + 3u * (vgeo_sdf_jobs[job].triangle_base + first_triangle + lane);
116
+
117
+ for (var corner = 0u; corner < 3u; corner++) {
118
+ let local = min(read_meshlet_resolved_index(header, 3u * lane + corner), header.vertex_count - 1u);
119
+
120
+ vgeo_sdf_payload[word + corner] = vertex_base + local;
121
+ }
122
+ }
123
+ }
124
+ `, [
125
+ MESHLET_METADATA_STRUCT.declaration_chunk,
126
+ chunk_folded_workgroup_index,
127
+ chunk_meshlet_compute_attribute_section_offset,
128
+ chunk_read_meshlet_attribute_vec3f,
129
+ chunk_read_meshlet_resolved_index,
130
+ ]);
131
+
132
+ /**
133
+ * The extraction's decode (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): a workgroup a cluster the cut
134
+ * listed, dispatched by the list's count. Each adds its cluster's vertices and triangles to its job's counts, which
135
+ * size the job's room in a later frame. A job the host gives room this frame (`decode`) takes each cluster's share of
136
+ * it by atomic: the cluster's positions as they are stored, in the geometry's own space, and its triangles as indices
137
+ * into its job's vertices, which the host reads back as the proxy's mesh.
138
+ *
139
+ * @type {ComputeShader}
140
+ */
141
+ export const shader_vgeo_sdf_decode = ComputeShader.from({
142
+ label: "VGeo SDF Decode",
143
+ resources,
144
+ body,
145
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The extraction's cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): the camera cut's descent
3
+ * (`chunk_vgeo_cut_descent`) over the jobs' records, each geometry whole, at the error its record's projection constant
4
+ * sets against a τ of 1. Every cluster in the cut, a stand-in too, goes onto the cluster list under its job; a clamp
5
+ * wants its page through the extraction's own feedback slot, as the camera's do, so a job cut again each frame keeps
6
+ * its pages wanted until they arrive.
7
+ *
8
+ * @type {ComputeShader}
9
+ */
10
+ export const shader_vgeo_sdf_traverse: ComputeShader;
11
+ import { ComputeShader } from "../../../shader/ComputeShader.js";
12
+ //# sourceMappingURL=shader_vgeo_sdf_traverse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_vgeo_sdf_traverse.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js"],"names":[],"mappings":"AA2FA;;;;;;;;GAQG;AACH,uCAFU,aAAa,CAMpB;8BApG2B,kCAAkC"}
@@ -0,0 +1,105 @@
1
+ import { WebGPUExtensionType } from "../../../../descriptor/WebGPUExtensionType.js";
2
+ import { COLLECTION_U32_STRUCT_READ } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
3
+ import { COLLECTION_U32_STRUCT_WRITE } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
4
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../../../shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { atomic_u32, u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
8
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
9
+ import { chunk_vgeo_cut_access } from "../runtime/cut/chunk_vgeo_cut_access.js";
10
+ import { chunk_vgeo_cut_descent } from "../runtime/cut/chunk_vgeo_cut_descent.js";
11
+ import { VGEO_CUT_PARAMS_STRUCT } from "../runtime/cut/VGEO_CUT_PARAMS_STRUCT.js";
12
+ import { VGEO_CUT_STAT } from "../runtime/layout/VGEO_CUT_STAT.js";
13
+ import { VGEO_INSTANCE_OFFSET } from "../runtime/layout/VGEO_INSTANCE_OFFSET.js";
14
+ import { VGEO_PAGE_ROW_OFFSET } from "../runtime/layout/VGEO_PAGE_ROW_OFFSET.js";
15
+ import { VGEO_SDF_CLUSTER_WORDS, VGEO_SDF_COUNTER, VGEO_SDF_COUNTER_WORDS, VGEO_SDF_SETTINGS } from "./VGEO_SDF.js";
16
+
17
+ const resources = new ShaderResourceSetDescriptor();
18
+
19
+ resources.setImmediate("settings", VGEO_SDF_SETTINGS);
20
+
21
+ resources.createGroup()
22
+ .addUniform("params", VGEO_CUT_PARAMS_STRUCT)
23
+ .addStorageBuffer("vg_lookup", WebGPUArray.from(u32), false)
24
+ .addStorageBuffer("vg_arena", WebGPUArray.from(u32), false)
25
+ ;
26
+
27
+ resources.createGroup()
28
+ .addStorageBuffer("instances", WebGPUArray.from(u32), false)
29
+ .addStorageBuffer("queue_in", COLLECTION_U32_STRUCT_READ, false)
30
+ .addStorageBuffer("queue_out", COLLECTION_U32_STRUCT_WRITE, true)
31
+ ;
32
+
33
+ resources.createGroup()
34
+ .addStorageBuffer("claim", WebGPUArray.from(atomic_u32), true)
35
+ .addStorageBuffer("feedback", WebGPUArray.from(atomic_u32), true)
36
+ .addStorageBuffer("vg_want_stamps", WebGPUArray.from(atomic_u32), true)
37
+ // a job's counters, `VGEO_SDF_COUNTER_WORDS` each
38
+ .addStorageBuffer("vgeo_sdf_counters", WebGPUArray.from(atomic_u32), true)
39
+ // the cut's clusters, a job and a meshlet row each; the count runs past what the list holds
40
+ .addStorageBuffer("vgeo_sdf_clusters", COLLECTION_U32_STRUCT_WRITE, true)
41
+ ;
42
+
43
+ const body = CodeChunk.from(
44
+ //language=WGSL
45
+ `
46
+ /** A geometry is cut whole: nothing is outside. */
47
+ fn vg_cut_sphere_outside(instance_base: u32, sphere: vec4<f32>) -> bool {
48
+ return false;
49
+ }
50
+
51
+ fn vg_cut_box_outside(instance_base: u32, lower: vec3<f32>, upper: vec3<f32>) -> bool {
52
+ return false;
53
+ }
54
+
55
+ /**
56
+ * A cluster in the cut, a stand-in's too, onto the list as its job and its meshlet row. A stand-in, for a page not
57
+ * resident or a group not selectable, is counted against its job, whose cut is then not the one it asked for; past
58
+ * the list a cluster is dropped and counted, and its job's cut is incomplete too.
59
+ */
60
+ fn vg_cut_take(instance_base: u32, page_row: u32, verdict: VGVerdict) {
61
+ let job = instances[instance_base + ${VGEO_INSTANCE_OFFSET.MESH_INDEX}u];
62
+ let counters = job * ${VGEO_SDF_COUNTER_WORDS}u;
63
+
64
+ atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.TAKEN}u], 1u);
65
+
66
+ if (verdict.kind != VG_VERDICT_TAKE) {
67
+ atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.STAND_INS}u], 1u);
68
+ }
69
+
70
+ let slot = atomicAdd(&vgeo_sdf_clusters.count, 1u);
71
+
72
+ if (slot >= settings.cluster_capacity) {
73
+ atomicAdd(&vgeo_sdf_counters[counters + ${VGEO_SDF_COUNTER.DROPPED}u], 1u);
74
+ vg_stat(${VGEO_CUT_STAT.MESHLETS_DROPPED}u, 1u);
75
+ return;
76
+ }
77
+
78
+ let entry = ${VGEO_SDF_CLUSTER_WORDS}u * slot;
79
+
80
+ vgeo_sdf_clusters.elements[entry] = job;
81
+ vgeo_sdf_clusters.elements[entry + 1u] = vg_page_field(page_row, ${VGEO_PAGE_ROW_OFFSET.MESHLET_BASE}u) + verdict.cluster;
82
+
83
+ vg_stat(${VGEO_CUT_STAT.DRAWN}u, 1u);
84
+ }
85
+ `, [
86
+ chunk_vgeo_cut_descent,
87
+ chunk_vgeo_cut_access,
88
+ ]);
89
+
90
+ body.addExtension(WebGPUExtensionType.Subgroups);
91
+
92
+ /**
93
+ * The extraction's cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8, as S8 built it): the camera cut's descent
94
+ * (`chunk_vgeo_cut_descent`) over the jobs' records, each geometry whole, at the error its record's projection constant
95
+ * sets against a τ of 1. Every cluster in the cut, a stand-in too, goes onto the cluster list under its job; a clamp
96
+ * wants its page through the extraction's own feedback slot, as the camera's do, so a job cut again each frame keeps
97
+ * its pages wanted until they arrive.
98
+ *
99
+ * @type {ComputeShader}
100
+ */
101
+ export const shader_vgeo_sdf_traverse = ComputeShader.from({
102
+ label: "VGeo SDF Cut",
103
+ resources,
104
+ body,
105
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_lpv_build_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js"],"names":[],"mappings":"AAqMA,mDA4BG;4BAzLyB,gCAAgC"}
1
+ {"version":3,"file":"shader_lpv_build_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js"],"names":[],"mappings":"AAsMA,mDA4BG;4BA1LyB,gCAAgC"}
@@ -157,7 +157,8 @@ fn main(
157
157
  material_info,
158
158
  triangle,
159
159
  lambda,
160
- node.global
160
+ node.global,
161
+ 0.0
161
162
  );
162
163
 
163
164
  let hit_position_local = hit.t * ray.direction;
@@ -54,23 +54,17 @@ export class GPUProbeClipmapGI {
54
54
  * @param {number} options.depth graph handle of the view's depth, which the probes are wanted from
55
55
  * @param {number} options.normal graph handle of the G-buffer's normals
56
56
  * @param {*} options.stbn the 2-channel spatio-temporal blue noise, `STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec2`
57
- * @param {number} options.time the caller's clock, seconds: what the probes' retention and response
58
- * times run on
59
57
  * @param {number} [options.movers] the graph handle of the scene's mover list for the frame,
60
58
  * which the world's bricks are built again over
61
- * @param {number} options.shadowmap_atlas graph handle of the frame's shadow map atlas, which shadows
62
- * the local lights at the probes' hits
63
59
  */
64
- graph_update({ graph, view, settings, depth, normal, stbn, time, movers, shadowmap_atlas }: {
60
+ graph_update({ graph, view, settings, depth, normal, stbn, movers }: {
65
61
  graph: FrameGraph;
66
62
  view: GPUViewContext;
67
63
  settings: ProbeClipmapSettings;
68
64
  depth: number;
69
65
  normal: number;
70
66
  stbn: any;
71
- time: number;
72
67
  movers?: number;
73
- shadowmap_atlas: number;
74
68
  }): void;
75
69
  /**
76
70
  * Whether the probes are there to read: the mode has run a frame and not been left since.
@@ -106,8 +100,8 @@ export class GPUProbeClipmapGI {
106
100
  resolution: number[];
107
101
  }): number;
108
102
  /**
109
- * Have a plugin write the world's bricks too, after the engine's own providers and every
110
- * provider added before it, over the same taken cells (§7.6).
103
+ * Have a plugin write the world's bricks too, after the mesh provider and every provider added
104
+ * before it, over the same taken cells (§7.6).
111
105
  *
112
106
  * @param {BrickProvider} provider
113
107
  */
@@ -1 +1 @@
1
- {"version":3,"file":"GPUProbeClipmapGI.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAiEI;;OAEG;IACH,sBAFW,eAAe,EAMzB;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,oCAEC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH;QAb+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACJ,KAAK,EAArB,MAAM;QACU,MAAM,EAAtB,MAAM;QACK,IAAI;QACC,IAAI,EAApB,MAAM;QAEW,MAAM,GAAvB,MAAM;QAEU,eAAe,EAA/B,MAAM;aAoGhB;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;IA0CD;;;OAGG;IACH,gBAsBC;IAED,gBAcC;;CACJ;yBArdY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,0BAA0B,EAAE,eAAe;6BAClD,OAAO,8BAA8B,EAAE,cAAc;mCACrD,OAAO,2BAA2B,EAAE,oBAAoB;4BACxD,OAAO,4BAA4B,EAAE,aAAa;gCAlB/B,4BAA4B;gCAS5B,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;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"}
@@ -3,7 +3,6 @@ import { BufferDescriptor } from "../../../descriptor/buffer/BufferDescriptor.js
3
3
  import { CLIPMAP_LEVEL_ARRAY } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
4
4
  import { GPUBrickClipmap } from "./brick/GPUBrickClipmap.js";
5
5
  import { MeshSDFBrickProvider } from "./brick/mesh/MeshSDFBrickProvider.js";
6
- import { VGeoBrickProvider } from "./brick/vgeo/VGeoBrickProvider.js";
7
6
  import { graph_probe_clipmap_debug_brick_clipmap } from "./debug/graph_probe_clipmap_debug_brick_clipmap.js";
8
7
  import { graph_probe_clipmap_debug_mesh_cards } from "./debug/graph_probe_clipmap_debug_mesh_cards.js";
9
8
  import { graph_probe_clipmap_debug_mesh_sdf } from "./debug/graph_probe_clipmap_debug_mesh_sdf.js";
@@ -11,7 +10,7 @@ import { ProbeClipmapDebugView } from "./debug/ProbeClipmapDebugView.js";
11
10
  import { PROBE_RECORD_STRUCT } from "./probe/chunk_probe_clipmap.js";
12
11
  import { PROBE_SAMPLING_STRUCT } from "./probe/chunk_probe_clipmap_pick.js";
13
12
  import { GPUProbeClipmap } from "./probe/GPUProbeClipmap.js";
14
- import { PROBE_DEPTH_TEXEL_RAYS } from "./probe/PROBE_CLIPMAP.js";
13
+ import { PROBE_DEPTH_TEXEL_RAYS, PROBE_RAYS_PER_TEXEL_MAX, PROBE_RAYS_PER_TEXEL_MIN } from "./probe/PROBE_CLIPMAP.js";
15
14
  import { ProbeClipmapSceneHolds } from "./ProbeClipmapSceneHolds.js";
16
15
 
17
16
  /**
@@ -75,8 +74,8 @@ export class GPUProbeClipmapGI {
75
74
  #destroyed = false;
76
75
 
77
76
  /**
78
- * The plugins that write the world's bricks after the engine's own providers, in the order they
79
- * were added (§7.6).
77
+ * The plugins that write the world's bricks after the mesh provider, in the order they were
78
+ * added (§7.6).
80
79
  * @type {BrickProvider[]}
81
80
  */
82
81
  #plugins = [];
@@ -88,14 +87,7 @@ export class GPUProbeClipmapGI {
88
87
  #mesh_provider = undefined;
89
88
 
90
89
  /**
91
- * The virtual geometry provider (§7.8), made with the clipmaps and given back with them.
92
- * @type {VGeoBrickProvider|undefined}
93
- */
94
- #vgeo_provider = undefined;
95
-
96
- /**
97
- * Every provider in its order, the mesh provider first and the virtual geometry provider next:
98
- * what a frame's build runs.
90
+ * Every provider in its order, the mesh provider first: what a frame's build runs.
99
91
  * @type {BrickProvider[]}
100
92
  */
101
93
  #providers = [];
@@ -149,26 +141,20 @@ export class GPUProbeClipmapGI {
149
141
  * @param {number} options.depth graph handle of the view's depth, which the probes are wanted from
150
142
  * @param {number} options.normal graph handle of the G-buffer's normals
151
143
  * @param {*} options.stbn the 2-channel spatio-temporal blue noise, `STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec2`
152
- * @param {number} options.time the caller's clock, seconds: what the probes' retention and response
153
- * times run on
154
144
  * @param {number} [options.movers] the graph handle of the scene's mover list for the frame,
155
145
  * which the world's bricks are built again over
156
- * @param {number} options.shadowmap_atlas graph handle of the frame's shadow map atlas, which shadows
157
- * the local lights at the probes' hits
158
146
  */
159
- graph_update({ graph, view, settings, depth, normal, stbn, time, movers = -1, shadowmap_atlas }) {
147
+ graph_update({ graph, view, settings, depth, normal, stbn, movers = -1 }) {
160
148
  assert.defined(graph, 'graph');
161
149
  assert.defined(view, 'view');
162
150
  assert.defined(settings, 'settings');
163
151
  assert.isNonNegativeInteger(depth, 'depth');
164
152
  assert.isNonNegativeInteger(normal, 'normal');
165
- assert.isNonNegativeInteger(shadowmap_atlas, 'shadowmap_atlas');
166
- assert.isFinite(time, 'time');
167
153
  assert.notOk(this.#destroyed, 'destroyed');
168
154
 
169
155
  // the relations between fields, checked here because each setter sees only its own field
170
- assert.greaterThanOrEqual(settings.rays_per_probe, settings.radiance_resolution * settings.radiance_resolution / 4, 'rays_per_probe must be at least radiance_resolution² / 4');
171
- assert.lessThanOrEqual(settings.rays_per_probe, 4 * settings.radiance_resolution * settings.radiance_resolution, 'rays_per_probe must be at most 4·radiance_resolution²');
156
+ assert.greaterThanOrEqual(settings.rays_per_probe, PROBE_RAYS_PER_TEXEL_MIN * settings.radiance_resolution * settings.radiance_resolution, 'rays_per_probe must be at least radiance_resolution² / 4');
157
+ assert.lessThanOrEqual(settings.rays_per_probe, PROBE_RAYS_PER_TEXEL_MAX * settings.radiance_resolution * settings.radiance_resolution, 'rays_per_probe must be at most 4·radiance_resolution²');
172
158
  assert.greaterThanOrEqual(settings.ray_budget, settings.rays_per_probe, 'ray_budget must be at least rays_per_probe');
173
159
  assert.lessThanOrEqual(settings.rays_per_probe, PROBE_DEPTH_TEXEL_RAYS * settings.depth_resolution * settings.depth_resolution, 'rays_per_probe must be at most 64·depth_resolution², the rays a depth texel gathers');
174
160
 
@@ -202,11 +188,13 @@ export class GPUProbeClipmapGI {
202
188
 
203
189
  sdf.configure(settings.mesh_sdf_voxel_size, settings.mesh_sdf_max_bricks);
204
190
  sdf.trim();
191
+ sdf.cards.capture_mode = settings.card_capture_mode;
205
192
  sdf.graph_bake({
206
193
  graph,
207
194
  budget: settings.mesh_sdf_bake_budget,
208
195
  capture_budget: settings.card_capture_budget,
209
196
  materials,
197
+ material_contexts: this.#graphics.materials,
210
198
  });
211
199
 
212
200
  // the card sets the capture made resident, for this frame's readers
@@ -241,9 +229,7 @@ export class GPUProbeClipmapGI {
241
229
  camera: view.camera.buffer,
242
230
  stbn,
243
231
  resolution: view.resolution,
244
- time,
245
- retention_time: settings.retention_time,
246
- response_time: settings.response_time,
232
+ response_frames: settings.response_frames,
247
233
  ray_budget: settings.ray_budget,
248
234
  rays_per_probe: settings.rays_per_probe,
249
235
  brick_clipmap: this.#brick_clipmap,
@@ -251,7 +237,6 @@ export class GPUProbeClipmapGI {
251
237
  scene,
252
238
  materials,
253
239
  card_rows: this.#holds.rows_buffer,
254
- shadowmap_atlas,
255
240
  });
256
241
  }
257
242
 
@@ -370,8 +355,8 @@ export class GPUProbeClipmapGI {
370
355
  }
371
356
 
372
357
  /**
373
- * Have a plugin write the world's bricks too, after the engine's own providers and every
374
- * provider added before it, over the same taken cells (§7.6).
358
+ * Have a plugin write the world's bricks too, after the mesh provider and every provider added
359
+ * before it, over the same taken cells (§7.6).
375
360
  *
376
361
  * @param {BrickProvider} provider
377
362
  */
@@ -407,7 +392,7 @@ export class GPUProbeClipmapGI {
407
392
  providers.length = 0;
408
393
 
409
394
  if (this.#mesh_provider !== undefined) {
410
- providers.push(this.#mesh_provider, this.#vgeo_provider);
395
+ providers.push(this.#mesh_provider);
411
396
  }
412
397
 
413
398
  providers.push(...this.#plugins);
@@ -421,7 +406,6 @@ export class GPUProbeClipmapGI {
421
406
  const device = this.#graphics.device;
422
407
 
423
408
  this.#mesh_provider = new MeshSDFBrickProvider(device);
424
- this.#vgeo_provider = new VGeoBrickProvider(device);
425
409
  this.#order_providers();
426
410
 
427
411
  this.#brick_clipmap = new GPUBrickClipmap(device, {
@@ -458,10 +442,8 @@ export class GPUProbeClipmapGI {
458
442
  this.#brick_clipmap.destroy();
459
443
  this.#probe_clipmap.destroy();
460
444
  this.#mesh_provider.destroy();
461
- this.#vgeo_provider.destroy();
462
445
 
463
446
  this.#mesh_provider = undefined;
464
- this.#vgeo_provider = undefined;
465
447
  this.#order_providers();
466
448
 
467
449
  this.#brick_clipmap = undefined;