@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
@@ -1,151 +0,0 @@
1
- import { assert } from "../../../../../../core/assert.js";
2
- import { WebGPUExtensionType } from "../../../../../descriptor/WebGPUExtensionType.js";
3
- import { GEOMETRY_METADATA_STRUCT } from "../../../../geometry/GEOMETRY_METADATA_STRUCT.js";
4
- import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
5
- import { BVH2_NODE_STRUCT } from "../../../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
6
- import { BVH_STRUCT } from "../../../../shader/chunk/bvh/BVH_STRUCT.js";
7
- import { chunk_bvh_query_aabb_cooperative } from "../../../../shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js";
8
- import { BVH_QUERY_AABB_WORKGROUP_SIZE } from "../../../../shader/chunk/bvh/chunk_bvh_query_aabb_frontier.js";
9
- import { CLIPMAP_LEVEL_ARRAY } from "../../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
10
- import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
11
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
12
- import { ComputeShader } from "../../../../shader/ComputeShader.js";
13
- import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
14
- import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
15
- import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
16
- import { BRICK_CELL_WORKGROUP_SIZE } from "../BRICK_CLIPMAP.js";
17
- import { BRICK_RING_RESOURCE, BRICK_TAKE_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
18
- import { chunk_brick_provider } from "../chunk_brick_provider.js";
19
- import { chunk_vgeo_brick_pair } from "./chunk_vgeo_brick_pair.js";
20
- import {
21
- VGEO_BRICK_CELL_OFFSET,
22
- VGEO_BRICK_CELL_WORDS,
23
- VGEO_BRICK_SETTINGS,
24
- VGEO_BRICK_STATISTIC_CANDIDATES_DROPPED,
25
- VGEO_BRICK_STATISTIC_NODES_DROPPED,
26
- VGEO_BRICK_STATISTIC_PAIRS_DROPPED
27
- } from "./VGEO_BRICK.js";
28
-
29
- // the gather is the whole workgroup's: a cell's workgroup is the query's
30
- assert.equal(BRICK_CELL_WORKGROUP_SIZE, BVH_QUERY_AABB_WORKGROUP_SIZE, 'a taken cell\'s workgroup runs the cooperative query');
31
-
32
- const resources = new ShaderResourceSetDescriptor();
33
-
34
- resources.setImmediate("settings", VGEO_BRICK_SETTINGS);
35
-
36
- resources.createGroup()
37
- .add(BRICK_TAKE_RESOURCE)
38
- .add(BRICK_RING_RESOURCE)
39
- .addUniform("brick_levels", CLIPMAP_LEVEL_ARRAY)
40
- .addStorageBuffer("vgeo_brick_statistics", WebGPUArray.from(atomic_u32), true);
41
-
42
- resources.createGroup()
43
- .addStorageBuffer("tlas", BVH_STRUCT)
44
- .addStorageBuffer("scene_database", WebGPUArray.from(u32))
45
- .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
46
- .addStorageBuffer("vg_geometries", WebGPUArray.from(u32));
47
-
48
- resources.createGroup()
49
- // the pair records, a cut's instance records, in the order the cells reserve them
50
- .addStorageBuffer("instances", WebGPUArray.from(u32), true)
51
- .addStorageBuffer("claim_widths", COLLECTION_U32_STRUCT_WRITE, true)
52
- // the taken cells' lists, whose counts the gather starts at zero for the cells it takes
53
- .addStorageBuffer("vgeo_brick_cells", WebGPUArray.from(atomic_u32), true);
54
-
55
- const body = CodeChunk.from(
56
- //language=WGSL
57
- `
58
- const VGEO_BRICK_CELL_WORDS = ${VGEO_BRICK_CELL_WORDS}u;
59
-
60
- /** the cascade's voxel, the same for the whole workgroup: what the gather's resolution cull weighs a box by */
61
- var<private> vgeo_brick_voxel: f32;
62
-
63
- var<workgroup> cell_taken: u32;
64
-
65
- fn bvh_query_aabb_node(index: u32) -> ${BVH2_NODE_STRUCT.wgsl_ref} {
66
- return tlas.nodes[index];
67
- }
68
-
69
- fn bvh_query_aabb_accept_leaf(payload: u32, bounds: array<f32, 6>) -> bool {
70
- return vgeo_brick_accept(payload, bounds, vgeo_brick_voxel);
71
- }
72
-
73
- @compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
74
- fn main(
75
- @builtin(workgroup_id) workgroup_id: vec3<u32>,
76
- @builtin(local_invocation_index) lane: u32,
77
- ) {
78
- let build = folded_workgroup_index(workgroup_id);
79
-
80
- if (lane == 0u) {
81
- cell_taken = brick_take[BRICK_TAKE_COUNT];
82
- }
83
-
84
- // a folded dispatch's tail leaves whole
85
- if (build >= workgroupUniformLoad(&cell_taken)) {
86
- return;
87
- }
88
-
89
- let key = brick_provider_key(build, settings.ring_capacity);
90
- let at = brick_provider_cell(key, settings.resolution);
91
-
92
- vgeo_brick_voxel = at.voxel;
93
-
94
- // this cell's list, empty and waiting on nothing before the cut fills it, and the key it is the list of: only the
95
- // taken cells' lists are read
96
- if (lane == 0u) {
97
- let list = build * VGEO_BRICK_CELL_WORDS;
98
-
99
- atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.COUNT}u], 0u);
100
- atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.KEY}u], key);
101
- atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.WAITS}u], 0u);
102
- }
103
-
104
- // every vgeo instance whose box comes within the band of the cell, and the box each is cut in
105
- let lower = at.corner - vec3<f32>(at.band);
106
- let upper = at.far + vec3<f32>(at.band);
107
-
108
- let gathered = bvh_query_aabb_cooperative(tlas.root, array<f32, 6>(lower.x, lower.y, lower.z, upper.x, upper.y, upper.z), lane);
109
-
110
- // a lane a candidate, over the query's whole list
111
- for (var i = lane; i < gathered.candidate_count; i += ${BRICK_CELL_WORKGROUP_SIZE}u) {
112
- if (!vgeo_brick_pair(bvh_query_aabb_candidates[i], build, lower, upper, at.voxel, settings.pair_capacity)) {
113
- atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_PAIRS_DROPPED}u], 1u);
114
- }
115
- }
116
-
117
- if (lane == 0u) {
118
- if (gathered.candidates_dropped > 0u) {
119
- atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_CANDIDATES_DROPPED}u], gathered.candidates_dropped);
120
- }
121
-
122
- if (gathered.nodes_dropped > 0u) {
123
- atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_NODES_DROPPED}u], gathered.nodes_dropped);
124
- }
125
- }
126
- }
127
- `, [
128
- chunk_brick_clipmap,
129
- chunk_brick_provider,
130
- chunk_folded_workgroup_index,
131
- chunk_bvh_query_aabb_cooperative,
132
- chunk_vgeo_brick_pair,
133
- ]);
134
-
135
- body.addExtension(WebGPUExtensionType.Subgroups);
136
-
137
- /**
138
- * The vgeo provider's gather (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a 64-lane workgroup a taken cell,
139
- * dispatched by take. A cooperative TLAS query with the cell grown by the cascade's band, every leaf filtered by
140
- * `vgeo_brick_accept`, and a pair record for each candidate (`vgeo_brick_pair`): the instance cut at a world error
141
- * under half the cascade's voxel, within the cell grown by the band. The records and their claim widths are a cut's
142
- * collect, so the camera cut's scan, seed and descent run them. Pairs past the records' capacity, and what the query
143
- * itself dropped, are counted.
144
- *
145
- * @type {ComputeShader}
146
- */
147
- export const shader_vgeo_brick_gather = ComputeShader.from({
148
- label: "Brick Clipmap VGeo Gather",
149
- resources,
150
- body,
151
- });
@@ -1,13 +0,0 @@
1
- /**
2
- * The vgeo provider's box cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): the camera cut's descent
3
- * (`chunk_vgeo_cut_descent`) over the gather's pair records, culled against each pair's box, at the world error
4
- * its record's projection constant sets against a τ of 1. A cluster in the cut, a stand-in for a page not yet
5
- * resident too, goes onto its taken cell's list; a clamp wants its page through the cut's own feedback slot, as
6
- * the camera's do. A cell's first stand-in goes into its list's header with what its want was made of, so that
7
- * the wait can want that page again while the cell waits (`VGEO_BRICK_WAIT_OFFSET`).
8
- *
9
- * @type {ComputeShader}
10
- */
11
- export const shader_vgeo_brick_traverse: ComputeShader;
12
- import { ComputeShader } from "../../../../shader/ComputeShader.js";
13
- //# sourceMappingURL=shader_vgeo_brick_traverse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader_vgeo_brick_traverse.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js"],"names":[],"mappings":"AAsHA;;;;;;;;;GASG;AACH,yCAFU,aAAa,CAMpB;8BA3H2B,qCAAqC"}
@@ -1,133 +0,0 @@
1
- import { WebGPUExtensionType } from "../../../../../descriptor/WebGPUExtensionType.js";
2
- import { chunk_vgeo_cut_access } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js";
3
- import { chunk_vgeo_cut_descent } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js";
4
- import { VGEO_CUT_PARAMS_STRUCT } from "../../../../geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js";
5
- import { VGEO_CUT_STAT } from "../../../../geometry/virtual/runtime/layout/VGEO_CUT_STAT.js";
6
- import { VGEO_PAGE_ROW_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js";
7
- import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
8
- import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
9
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
10
- import { ComputeShader } from "../../../../shader/ComputeShader.js";
11
- import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
12
- import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
13
- import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
14
- import { chunk_vgeo_brick_box } from "./chunk_vgeo_brick_box.js";
15
- import { VGEO_INSTANCE_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js";
16
- import {
17
- VGEO_BRICK_CELL_CLUSTERS,
18
- VGEO_BRICK_CELL_OFFSET,
19
- VGEO_BRICK_CELL_WORDS,
20
- VGEO_BRICK_PAIR_BUILD,
21
- VGEO_BRICK_WAIT_OFFSET
22
- } from "./VGEO_BRICK.js";
23
-
24
- const resources = new ShaderResourceSetDescriptor();
25
-
26
- resources.createGroup()
27
- .addUniform("params", VGEO_CUT_PARAMS_STRUCT)
28
- .addStorageBuffer("vg_lookup", WebGPUArray.from(u32), false)
29
- .addStorageBuffer("vg_arena", WebGPUArray.from(u32), false)
30
- ;
31
-
32
- resources.createGroup()
33
- .addStorageBuffer("instances", WebGPUArray.from(u32), false)
34
- .addStorageBuffer("queue_in", COLLECTION_U32_STRUCT_READ, false)
35
- .addStorageBuffer("queue_out", COLLECTION_U32_STRUCT_WRITE, true)
36
- ;
37
-
38
- resources.createGroup()
39
- .addStorageBuffer("claim", WebGPUArray.from(atomic_u32), true)
40
- .addStorageBuffer("feedback", WebGPUArray.from(atomic_u32), true)
41
- .addStorageBuffer("vg_want_stamps", WebGPUArray.from(atomic_u32), true)
42
- // a list a taken cell: its count, its key, then a cluster's pair and meshlet row each
43
- .addStorageBuffer("vgeo_brick_cells", WebGPUArray.from(atomic_u32), true)
44
- // the cells a cluster went onto the list of, each once: the distance pass's
45
- .addStorageBuffer("vgeo_brick_filled", COLLECTION_U32_STRUCT_WRITE, true)
46
- ;
47
-
48
- const body = CodeChunk.from(
49
- //language=WGSL
50
- `
51
- /**
52
- * The rule's culls, against the pair's box in the instance's object space: a subtree whose bound lies wholly
53
- * past one of the box's six faces has nothing within the cell's band. The camera's frustum tests with the box's
54
- * faces for the frustum's planes; conservative where a bound passes the box's corner without crossing any one face.
55
- *
56
- * Against axis-aligned faces a sphere is exactly its cube, so a sphere is tested as one. A cluster's subtree box
57
- * lies within its sphere's cube, so there the box decides; a node, which has only its sphere, is culled by it alone.
58
- */
59
- fn vg_cut_sphere_outside(instance_base: u32, sphere: vec4<f32>) -> bool {
60
- return vg_cut_box_outside(instance_base, sphere.xyz - vec3<f32>(sphere.w), sphere.xyz + vec3<f32>(sphere.w));
61
- }
62
-
63
- fn vg_cut_box_outside(instance_base: u32, lower: vec3<f32>, upper: vec3<f32>) -> bool {
64
- return any(upper < vgeo_brick_box_lower(instance_base)) || any(lower > vgeo_brick_box_upper(instance_base));
65
- }
66
-
67
- /**
68
- * A cluster in the cut, a stand-in's too, onto its cell's list as its pair and its meshlet row. A list keeps
69
- * counting past what it holds, so its reader takes the least of its count and its size. A cell's first cluster
70
- * puts the cell on the distance pass's list, once.
71
- *
72
- * A stand-in, for a page not resident (a clamp) or a group not selectable (held), makes the cell wait: it is built
73
- * again once that page is resident and that group selectable. The cell's first stand-in is the one it waits on; a
74
- * cell rebuilt with others still standing in waits again, on one of them.
75
- */
76
- fn vg_cut_take(instance_base: u32, page_row: u32, verdict: VGVerdict) {
77
- let build = instances[instance_base + ${VGEO_BRICK_PAIR_BUILD}u];
78
- let list = build * ${VGEO_BRICK_CELL_WORDS}u;
79
-
80
- let slot = atomicAdd(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.COUNT}u], 1u);
81
-
82
- if (slot == 0u) {
83
- vgeo_brick_filled.elements[atomicAdd(&vgeo_brick_filled.count, 1u)] = build;
84
- }
85
-
86
- // the first stand-in: what the cell waits on, and what wants it while it is away
87
- if (verdict.kind != VG_VERDICT_TAKE && atomicAdd(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.WAITS}u], 1u) == 0u) {
88
- let wait = list + ${VGEO_BRICK_CELL_OFFSET.WAIT}u;
89
-
90
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.LOOKUP}u], instances[instance_base + ${VGEO_INSTANCE_OFFSET.LOOKUP_WORD_OFFSET}u]);
91
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.PAGE}u], verdict.child_page_index);
92
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.GROUP}u], verdict.child_group);
93
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.SOURCE}u], page_row);
94
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.SOURCE_PAGE}u], vg_page_field(page_row, ${VGEO_PAGE_ROW_OFFSET.PAGE_INDEX}u));
95
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.REF}u], verdict.child_ref);
96
- atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.ERROR}u], bitcast<u32>(verdict.projected));
97
- }
98
-
99
- if (slot >= ${VGEO_BRICK_CELL_CLUSTERS}u) {
100
- vg_stat(${VGEO_CUT_STAT.MESHLETS_DROPPED}u, 1u);
101
- return;
102
- }
103
-
104
- let entry = list + ${VGEO_BRICK_CELL_OFFSET.ENTRIES}u + 2u * slot;
105
-
106
- atomicStore(&vgeo_brick_cells[entry], instance_base / VG_INSTANCE_WORDS);
107
- atomicStore(&vgeo_brick_cells[entry + 1u], vg_page_field(page_row, ${VGEO_PAGE_ROW_OFFSET.MESHLET_BASE}u) + verdict.cluster);
108
-
109
- vg_stat(${VGEO_CUT_STAT.DRAWN}u, 1u);
110
- }
111
- `, [
112
- chunk_vgeo_cut_descent,
113
- chunk_vgeo_cut_access,
114
- chunk_vgeo_brick_box,
115
- ]);
116
-
117
- body.addExtension(WebGPUExtensionType.Subgroups);
118
-
119
- /**
120
- * The vgeo provider's box cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): the camera cut's descent
121
- * (`chunk_vgeo_cut_descent`) over the gather's pair records, culled against each pair's box, at the world error
122
- * its record's projection constant sets against a τ of 1. A cluster in the cut, a stand-in for a page not yet
123
- * resident too, goes onto its taken cell's list; a clamp wants its page through the cut's own feedback slot, as
124
- * the camera's do. A cell's first stand-in goes into its list's header with what its want was made of, so that
125
- * the wait can want that page again while the cell waits (`VGEO_BRICK_WAIT_OFFSET`).
126
- *
127
- * @type {ComputeShader}
128
- */
129
- export const shader_vgeo_brick_traverse = ComputeShader.from({
130
- label: "Brick Clipmap VGeo Cut",
131
- resources,
132
- body,
133
- });
@@ -1,22 +0,0 @@
1
- /**
2
- * Lanes of the wait: a waiting cell each.
3
- * @type {number}
4
- */
5
- export const VGEO_BRICK_WAIT_WORKGROUP_SIZE: number;
6
- /**
7
- * The vgeo provider's wait (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.6 contract 6, §7.8): a thread a cell the last
8
- * frame left waiting, built while a cluster of its cut stood in for a page not resident or a group not selectable.
9
- * A cell whose page is resident and whose group is selectable now is queued again with `brick_clipmap_enqueue`, so
10
- * exactly the cells that stood something in are built again, once what they waited on is there. The rest wait on,
11
- * onto the list this frame's distance pass adds its own to (and counts those past its capacity).
12
- *
13
- * A want lasts the reading it is in (`VGeoResidency.apply` drops what its budgets defer), so a cell waiting on a page
14
- * not resident wants it again, each frame, through the provider's cut's slot (`vg_want`): through the page its
15
- * stand-in was found in, while that row still holds that page. Once it holds another, the cell is queued again
16
- * instead, and its cut finds the way down anew. A group held back carries no want, as in the cut.
17
- *
18
- * @type {ComputeShader}
19
- */
20
- export const shader_vgeo_brick_wait: ComputeShader;
21
- import { ComputeShader } from "../../../../shader/ComputeShader.js";
22
- //# sourceMappingURL=shader_vgeo_brick_wait.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shader_vgeo_brick_wait.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,6CAFU,MAAM,CAEiC;AA2FjD;;;;;;;;;;;;;GAaG;AACH,qCAFU,aAAa,CAMpB;8BA9H2B,qCAAqC"}
@@ -1,135 +0,0 @@
1
- import { chunk_vgeo_cut_arena } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js";
2
- import { chunk_vgeo_cut_want } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js";
3
- import { VGEO_CUT_PARAMS_STRUCT } from "../../../../geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js";
4
- import { VGEO_PAGE_ROW_NONE } from "../../../../geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js";
5
- import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
6
- import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
7
- import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
8
- import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
9
- import { ComputeShader } from "../../../../shader/ComputeShader.js";
10
- import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
11
- import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
12
- import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
13
- import {
14
- BRICK_PENDING_RESOURCE,
15
- BRICK_RING_RESOURCE,
16
- BRICK_STATE_RESOURCE,
17
- chunk_brick_clipmap,
18
- chunk_brick_clipmap_enqueue
19
- } from "../chunk_brick_clipmap.js";
20
- import { VGEO_BRICK_SETTINGS, VGEO_BRICK_WAIT_OFFSET, VGEO_BRICK_WAIT_WORDS } from "./VGEO_BRICK.js";
21
-
22
- /**
23
- * Lanes of the wait: a waiting cell each.
24
- * @type {number}
25
- */
26
- export const VGEO_BRICK_WAIT_WORKGROUP_SIZE = 64;
27
-
28
- const resources = new ShaderResourceSetDescriptor();
29
-
30
- resources.setImmediate("settings", VGEO_BRICK_SETTINGS);
31
-
32
- resources.createGroup()
33
- .addUniform("params", VGEO_CUT_PARAMS_STRUCT)
34
- .addStorageBuffer("vg_lookup", WebGPUArray.from(u32))
35
- .addStorageBuffer("vg_arena", WebGPUArray.from(u32))
36
- // the frame's feedback, where the provider's cut's slot takes the wants, and the frame's want stamps
37
- .addStorageBuffer("feedback", WebGPUArray.from(atomic_u32), true)
38
- .addStorageBuffer("vg_want_stamps", WebGPUArray.from(atomic_u32), true);
39
-
40
- resources.createGroup()
41
- // the cells the last frame left waiting, and the list this frame's leaves
42
- .addStorageBuffer("vgeo_brick_waiting_in", COLLECTION_U32_STRUCT_READ)
43
- .addStorageBuffer("vgeo_brick_waiting", COLLECTION_U32_STRUCT_WRITE, true);
44
-
45
- resources.createGroup()
46
- .add(BRICK_STATE_RESOURCE)
47
- .add(BRICK_RING_RESOURCE)
48
- .add(BRICK_PENDING_RESOURCE);
49
-
50
- const body = CodeChunk.from(
51
- //language=WGSL
52
- `
53
- const VG_PAGE_ROW_NONE = ${VGEO_PAGE_ROW_NONE}u;
54
- const VGEO_BRICK_WAIT_WORDS = ${VGEO_BRICK_WAIT_WORDS}u;
55
-
56
- @compute @workgroup_size(${VGEO_BRICK_WAIT_WORKGROUP_SIZE})
57
- fn main(
58
- @builtin(workgroup_id) workgroup_id: vec3<u32>,
59
- @builtin(local_invocation_index) lane: u32,
60
- ) {
61
- let i = folded_workgroup_index(workgroup_id) * ${VGEO_BRICK_WAIT_WORKGROUP_SIZE}u + lane;
62
-
63
- // the list's count runs past what it holds
64
- if (i >= min(vgeo_brick_waiting_in.count, settings.wait_capacity)) {
65
- return;
66
- }
67
-
68
- let at = VGEO_BRICK_WAIT_WORDS * i;
69
- let key = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.KEY}u];
70
- let lookup = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.LOOKUP}u];
71
- let page = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.PAGE}u];
72
- let group = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.GROUP}u];
73
-
74
- let row = vg_lookup[lookup + page];
75
-
76
- // the page is resident and the group drawable: the cell is built again, whatever its storage cell holds then
77
- if (row != VG_PAGE_ROW_NONE && vg_group_selectable(row, group)) {
78
- brick_clipmap_enqueue(key, settings.ring_capacity);
79
- return;
80
- }
81
-
82
- if (row == VG_PAGE_ROW_NONE) {
83
- let source = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.SOURCE}u];
84
-
85
- // the page it was found through has gone too: the cell is built again, and its cut finds the way down anew
86
- if (vg_lookup[lookup + vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.SOURCE_PAGE}u]] != source) {
87
- brick_clipmap_enqueue(key, settings.ring_capacity);
88
- return;
89
- }
90
-
91
- // a want lasts the reading it is in: the page is wanted again each frame the cell waits on it, as the camera
92
- // cut wants its pages again each frame it draws a stand-in
93
- vg_want(
94
- source,
95
- vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.REF}u],
96
- page,
97
- lookup,
98
- bitcast<f32>(vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.ERROR}u])
99
- );
100
- }
101
-
102
- // within the capacity: the list kept onto was cleared, and holds no more than the one it keeps from
103
- let kept = atomicAdd(&vgeo_brick_waiting.count, 1u);
104
-
105
- for (var w = 0u; w < VGEO_BRICK_WAIT_WORDS; w++) {
106
- vgeo_brick_waiting.elements[VGEO_BRICK_WAIT_WORDS * kept + w] = vgeo_brick_waiting_in.elements[at + w];
107
- }
108
- }
109
- `, [
110
- chunk_brick_clipmap,
111
- chunk_brick_clipmap_enqueue,
112
- chunk_folded_workgroup_index,
113
- chunk_vgeo_cut_arena,
114
- chunk_vgeo_cut_want,
115
- ]);
116
-
117
- /**
118
- * The vgeo provider's wait (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.6 contract 6, §7.8): a thread a cell the last
119
- * frame left waiting, built while a cluster of its cut stood in for a page not resident or a group not selectable.
120
- * A cell whose page is resident and whose group is selectable now is queued again with `brick_clipmap_enqueue`, so
121
- * exactly the cells that stood something in are built again, once what they waited on is there. The rest wait on,
122
- * onto the list this frame's distance pass adds its own to (and counts those past its capacity).
123
- *
124
- * A want lasts the reading it is in (`VGeoResidency.apply` drops what its budgets defer), so a cell waiting on a page
125
- * not resident wants it again, each frame, through the provider's cut's slot (`vg_want`): through the page its
126
- * stand-in was found in, while that row still holds that page. Once it holds another, the cell is queued again
127
- * instead, and its cut finds the way down anew. A group held back carries no want, as in the cut.
128
- *
129
- * @type {ComputeShader}
130
- */
131
- export const shader_vgeo_brick_wait = ComputeShader.from({
132
- label: "Brick Clipmap VGeo Wait",
133
- resources,
134
- body,
135
- });