@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.
- package/package.json +1 -1
- package/src/shade/playground/probe_clipmap/index.html +12 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +5 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +4 -6
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +254 -73
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +181 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +412 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +218 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +4 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +21 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +410 -61
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +16 -42
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +28 -160
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
- package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
- package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
- package/src/view/elements/progress/segmented/playground/index.html +78 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/playground/main.js +173 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
- package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
- 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
|
+
});
|
package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map
CHANGED
|
@@ -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":"
|
|
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"}
|
|
@@ -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,
|
|
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
|
|
110
|
-
*
|
|
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":"
|
|
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
|
|
79
|
-
*
|
|
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
|
-
*
|
|
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,
|
|
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
|
|
171
|
-
assert.lessThanOrEqual(settings.rays_per_probe,
|
|
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
|
-
|
|
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
|
|
374
|
-
*
|
|
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
|
|
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;
|