@woosh/meep-engine 3.59.0 → 3.60.1
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 +10 -9
- 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 +32 -39
- 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 +65 -19
- package/src/view/elements/progress/segmented/GhostTrail.d.ts +116 -0
- package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/GhostTrail.js +280 -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 +163 -10
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +442 -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
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
|
|
3
|
-
* @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
|
|
7
|
-
* {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
|
|
8
|
-
*
|
|
9
|
-
* Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
|
|
10
|
-
* cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
|
|
11
|
-
* their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
|
|
12
|
-
* `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
|
|
13
|
-
* {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
|
|
14
|
-
* camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
|
|
15
|
-
* list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
|
|
16
|
-
*
|
|
17
|
-
* A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
|
|
18
|
-
* each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
|
|
19
|
-
* (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
|
|
20
|
-
* Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
|
|
21
|
-
*
|
|
22
|
-
* It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
|
|
23
|
-
* rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
|
|
24
|
-
* frame, it records nothing.
|
|
25
|
-
*/
|
|
26
|
-
export class VGeoBrickProvider {
|
|
27
|
-
/**
|
|
28
|
-
* @param {GPUDevice} device
|
|
29
|
-
*/
|
|
30
|
-
constructor(device: GPUDevice);
|
|
31
|
-
/**
|
|
32
|
-
* @returns {GPUBuffer}
|
|
33
|
-
*/
|
|
34
|
-
get statistics(): GPUBuffer;
|
|
35
|
-
/**
|
|
36
|
-
* The box cut, whose `stats` say what the last reading of its slot counted.
|
|
37
|
-
* @returns {VGeoViewCut}
|
|
38
|
-
*/
|
|
39
|
-
get cut(): VGeoViewCut;
|
|
40
|
-
/**
|
|
41
|
-
* The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
|
|
42
|
-
* `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
|
|
43
|
-
* list holds; read the least of the two.
|
|
44
|
-
* @returns {number}
|
|
45
|
-
*/
|
|
46
|
-
get cells(): number;
|
|
47
|
-
/**
|
|
48
|
-
* The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
|
|
49
|
-
* out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
|
|
50
|
-
* records.
|
|
51
|
-
* @returns {GPUBuffer|undefined}
|
|
52
|
-
*/
|
|
53
|
-
get waiting(): any;
|
|
54
|
-
/**
|
|
55
|
-
* @param {FrameGraph} graph
|
|
56
|
-
* @param {BrickProviderContext} context
|
|
57
|
-
*/
|
|
58
|
-
graph_write_bricks(graph: FrameGraph, context: BrickProviderContext): void;
|
|
59
|
-
destroy(): void;
|
|
60
|
-
#private;
|
|
61
|
-
}
|
|
62
|
-
export type BrickProviderContext = import("../GPUBrickClipmap.js").BrickProviderContext;
|
|
63
|
-
export type FrameGraph = import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
64
|
-
import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
|
|
65
|
-
//# sourceMappingURL=VGeoBrickProvider.d.ts.map
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VGeoBrickProvider.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js"],"names":[],"mappings":"AA0BA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IA6CI;;OAEG;IACH,+BAWC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,oBAEC;IAED;;;;;OAKG;IACH,mBAEC;IAED;;;OAGG;IACH,0BAHW,UAAU,WACV,oBAAoB,QAuH9B;IA4GD,gBAcC;;CACJ;mCA7WY,OAAO,uBAAuB,EAAE,oBAAoB;yBACpD,OAAO,oEAAoE,EAAE,UAAU;4BAtBxE,qDAAqD"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js
DELETED
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
-
import { BufferDescriptor } from "../../../../../descriptor/buffer/BufferDescriptor.js";
|
|
3
|
-
import { BufferResourceDescriptor } from "../../../../../device/graph/BufferResourceDescriptor.js";
|
|
4
|
-
import { graph_vgeo_cut_descent } from "../../../../geometry/virtual/runtime/graph_vgeo_cut_descent.js";
|
|
5
|
-
import { graph_build_indirect_dispatch_command } from "../../../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
6
|
-
import { VGEO_INSTANCE_WORDS } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_WORDS.js";
|
|
7
|
-
import { VGeoViewCut } from "../../../../geometry/virtual/runtime/VGeoViewCut.js";
|
|
8
|
-
import {
|
|
9
|
-
graph_prefix_scan_csdldf,
|
|
10
|
-
prefix_scan_csdldf_output_descriptor
|
|
11
|
-
} from "../../../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
|
|
12
|
-
import { graph_create_buffer } from "../../../../shader/graph/graph_create_buffer.js";
|
|
13
|
-
import { graph_import_buffer } from "../../../../shader/graph/graph_import_buffer.js";
|
|
14
|
-
import { BRICK_TAKE_CELL_DISPATCH } from "../BRICK_CLIPMAP.js";
|
|
15
|
-
import { shader_vgeo_brick_distance } from "./shader_vgeo_brick_distance.js";
|
|
16
|
-
import { shader_vgeo_brick_gather } from "./shader_vgeo_brick_gather.js";
|
|
17
|
-
import { shader_vgeo_brick_traverse } from "./shader_vgeo_brick_traverse.js";
|
|
18
|
-
import { shader_vgeo_brick_wait, VGEO_BRICK_WAIT_WORKGROUP_SIZE } from "./shader_vgeo_brick_wait.js";
|
|
19
|
-
import {
|
|
20
|
-
VGEO_BRICK_CELL_WORDS,
|
|
21
|
-
VGEO_BRICK_PAIRS_PER_CELL,
|
|
22
|
-
VGEO_BRICK_STATISTIC_WORDS,
|
|
23
|
-
VGEO_BRICK_WAIT_WORDS,
|
|
24
|
-
VGEO_BRICK_WAITS_PER_CELL
|
|
25
|
-
} from "./VGEO_BRICK.js";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @typedef {import("../GPUBrickClipmap.js").BrickProviderContext} BrickProviderContext
|
|
29
|
-
* @typedef {import("../../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* The world's bricks from virtual geometry, which has no cached field (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a
|
|
34
|
-
* {@link BrickProvider} like any plugin, which the probe clipmap GI runs after the mesh provider.
|
|
35
|
-
*
|
|
36
|
-
* Per taken cell, the vgeo instances in the SDF world whose boxes reach it are cut at a world error under half the
|
|
37
|
-
* cascade's voxel, within the cell grown by the field's band, by the camera cut's own descent. The gather writes
|
|
38
|
-
* their pair records as a cut's collect would; `graph_vgeo_cut_descent` runs the box cut,
|
|
39
|
-
* `shader_vgeo_brick_traverse`, which puts each cluster in the cut onto its cell's list. The cut is a
|
|
40
|
-
* {@link VGeoViewCut} of its own, so its wants reach the residency through its own feedback slot, ranked with the
|
|
41
|
-
* camera's, and its counters come back to it ({@link cut}'s `stats`). Then `shader_vgeo_brick_distance` takes each
|
|
42
|
-
* list's triangles near its cell and merges the cell's texels into the staging (contracts 1 to 3).
|
|
43
|
-
*
|
|
44
|
-
* A cell built while a cluster of its cut stood in for a page not resident, or a group not selectable, waits:
|
|
45
|
-
* each frame `shader_vgeo_brick_wait` queues it again once that page is resident and that group selectable
|
|
46
|
-
* (contract 6), so exactly the cells that stood something in are built again, once what they waited on arrived.
|
|
47
|
-
* Until then it wants the page again each frame, in the cut's slot, since a want lasts one reading.
|
|
48
|
-
*
|
|
49
|
-
* It reads the view's scene through the context: the TLAS over the mesh rows, the scene database, the geometries'
|
|
50
|
-
* rows, the materials, the meshlets and the scene's virtual geometry runtime. With no runtime, or none open this
|
|
51
|
-
* frame, it records nothing.
|
|
52
|
-
*/
|
|
53
|
-
export class VGeoBrickProvider {
|
|
54
|
-
/** @type {GPUDevice} */
|
|
55
|
-
#device;
|
|
56
|
-
|
|
57
|
-
/** @type {VGeoViewCut} */
|
|
58
|
-
#cut;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Counts that accumulate: pairs dropped, and candidates and subtrees the gather dropped
|
|
62
|
-
* (`VGEO_BRICK_STATISTIC_*`).
|
|
63
|
-
* @type {GPUBuffer}
|
|
64
|
-
*/
|
|
65
|
-
#statistics;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The two waiting lists: the one the next frame's wait reads, `#waiting_read`, and the one it keeps onto, which the
|
|
69
|
-
* distance pass adds its own to. They trade places each frame the provider records.
|
|
70
|
-
* @type {GPUBuffer[]}
|
|
71
|
-
*/
|
|
72
|
-
#waiting = [];
|
|
73
|
-
#waiting_read = 0;
|
|
74
|
-
#waiting_capacity = 0;
|
|
75
|
-
|
|
76
|
-
#settings = { ring_capacity: 0, resolution: 0, pair_capacity: 0, wait_capacity: 0 };
|
|
77
|
-
#wait_data = { command: -1, waiting_in: -1, waiting: -1, feedback: -1, state: -1 };
|
|
78
|
-
#wait_bindings = {};
|
|
79
|
-
#gather_data = { take: -1, instances: -1, claim_widths: -1, cells: -1 };
|
|
80
|
-
#gather_bindings = {};
|
|
81
|
-
#distance_data = { command: -1, filled: -1, cells: -1, instances: -1, waiting: -1, staging: -1 };
|
|
82
|
-
#distance_bindings = {};
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* The taken cells' lists as the last recorded frame's cut left them, or -1.
|
|
86
|
-
* @type {number}
|
|
87
|
-
*/
|
|
88
|
-
#cells = -1;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* The context of the frame being recorded, as its passes execute.
|
|
92
|
-
* @type {BrickProviderContext|null}
|
|
93
|
-
*/
|
|
94
|
-
#context = null;
|
|
95
|
-
|
|
96
|
-
#destroyed = false;
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* @param {GPUDevice} device
|
|
100
|
-
*/
|
|
101
|
-
constructor(device) {
|
|
102
|
-
assert.defined(device, 'device');
|
|
103
|
-
|
|
104
|
-
this.#device = device;
|
|
105
|
-
this.#cut = new VGeoViewCut({ device, label: 'probe clipmap vgeo bricks' });
|
|
106
|
-
|
|
107
|
-
this.#statistics = device.createBuffer(BufferDescriptor.fromJSON({
|
|
108
|
-
label: 'Probe clipmap / vgeo brick statistics',
|
|
109
|
-
size: 4 * VGEO_BRICK_STATISTIC_WORDS,
|
|
110
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
|
|
111
|
-
}));
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* @returns {GPUBuffer}
|
|
116
|
-
*/
|
|
117
|
-
get statistics() {
|
|
118
|
-
return this.#statistics;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* The box cut, whose `stats` say what the last reading of its slot counted.
|
|
123
|
-
* @returns {VGeoViewCut}
|
|
124
|
-
*/
|
|
125
|
-
get cut() {
|
|
126
|
-
return this.#cut;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* The taken cells' lists of the frame last recorded, a resource of its graph, or -1 when it recorded none:
|
|
131
|
-
* `VGEO_BRICK_CELL_WORDS` words a taken cell, laid out as `VGEO_BRICK_CELL_OFFSET`. A count runs past what its
|
|
132
|
-
* list holds; read the least of the two.
|
|
133
|
-
* @returns {number}
|
|
134
|
-
*/
|
|
135
|
-
get cells() {
|
|
136
|
-
return this.#cells;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* The waiting list the next recorded frame's wait reads: a count, then `VGEO_BRICK_WAIT_WORDS` words a cell, laid
|
|
141
|
-
* out as `VGEO_BRICK_WAIT_OFFSET`. The count runs past what the list holds. Undefined before the provider first
|
|
142
|
-
* records.
|
|
143
|
-
* @returns {GPUBuffer|undefined}
|
|
144
|
-
*/
|
|
145
|
-
get waiting() {
|
|
146
|
-
return this.#waiting[this.#waiting_read];
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* @param {FrameGraph} graph
|
|
151
|
-
* @param {BrickProviderContext} context
|
|
152
|
-
*/
|
|
153
|
-
graph_write_bricks(graph, context) {
|
|
154
|
-
assert.notOk(this.#destroyed, 'destroyed');
|
|
155
|
-
assert.defined(context.scene, 'context.scene');
|
|
156
|
-
|
|
157
|
-
this.#cells = -1;
|
|
158
|
-
|
|
159
|
-
const runtime = context.scene.virtual_geometry;
|
|
160
|
-
|
|
161
|
-
if (runtime === undefined || !runtime.frame_open) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const pair_capacity = context.budget * VGEO_BRICK_PAIRS_PER_CELL;
|
|
166
|
-
|
|
167
|
-
// this frame's slot for the cut, and its params: a τ of 1, since its records carry the error's own scale
|
|
168
|
-
const slot = runtime.slot_of(this.#cut);
|
|
169
|
-
|
|
170
|
-
this.#cut.write_params({ runtime, slot, tau: 1 });
|
|
171
|
-
|
|
172
|
-
const wait_capacity = context.budget * VGEO_BRICK_WAITS_PER_CELL;
|
|
173
|
-
|
|
174
|
-
this.#ensure_waiting(wait_capacity);
|
|
175
|
-
|
|
176
|
-
this.#settings.ring_capacity = context.ring_capacity;
|
|
177
|
-
this.#settings.resolution = context.resolution;
|
|
178
|
-
this.#settings.pair_capacity = pair_capacity;
|
|
179
|
-
this.#settings.wait_capacity = wait_capacity;
|
|
180
|
-
this.#context = context;
|
|
181
|
-
|
|
182
|
-
// ----- the wait: the cells the last frame left waiting, queued again once what they waited on is there -----
|
|
183
|
-
|
|
184
|
-
const waiting_in = graph_import_buffer(graph, this.#waiting[this.#waiting_read], "vgeo brick waiting");
|
|
185
|
-
const waiting_out = graph_import_buffer(graph, this.#waiting[1 - this.#waiting_read], "vgeo brick waiting next");
|
|
186
|
-
|
|
187
|
-
this.#waiting_read = 1 - this.#waiting_read;
|
|
188
|
-
|
|
189
|
-
const wait_command = graph_build_indirect_dispatch_command(graph, waiting_in, VGEO_BRICK_WAIT_WORKGROUP_SIZE, true);
|
|
190
|
-
|
|
191
|
-
// the frame's feedback, imported first: the first graph of a frame to import it records its clear there
|
|
192
|
-
const feedback = runtime.feedback_in(graph);
|
|
193
|
-
|
|
194
|
-
const wait_data = this.#wait_data;
|
|
195
|
-
const wait = graph.add("Brick Clipmap VGeo Wait", wait_data, this.#execute_wait);
|
|
196
|
-
|
|
197
|
-
wait_data.command = wait.read(wait_command);
|
|
198
|
-
wait_data.waiting_in = wait.read(waiting_in);
|
|
199
|
-
wait_data.waiting = wait.write(waiting_out);
|
|
200
|
-
|
|
201
|
-
// it wants the pages its cells wait on, in the cut's slot of the frame's feedback, ahead of the cut's own wants
|
|
202
|
-
wait_data.feedback = wait.write(feedback);
|
|
203
|
-
runtime.publish_feedback(graph, wait_data.feedback);
|
|
204
|
-
|
|
205
|
-
// it queues cells: what writes the queue after it comes after it
|
|
206
|
-
wait_data.state = wait.write(context.state);
|
|
207
|
-
context.state = wait_data.state;
|
|
208
|
-
|
|
209
|
-
// ----- gather: a pair record for each vgeo instance whose box reaches a taken cell -----
|
|
210
|
-
|
|
211
|
-
const data = this.#gather_data;
|
|
212
|
-
const gather = graph.add("Brick Clipmap VGeo Gather", data, this.#execute_gather);
|
|
213
|
-
|
|
214
|
-
data.take = gather.read(context.take);
|
|
215
|
-
data.instances = gather.create("vgeo brick pairs", BufferResourceDescriptor.from(
|
|
216
|
-
pair_capacity * VGEO_INSTANCE_WORDS * 4, GPUBufferUsage.STORAGE
|
|
217
|
-
));
|
|
218
|
-
data.claim_widths = gather.create("vgeo brick claim widths", BufferResourceDescriptor.from(
|
|
219
|
-
16 + pair_capacity * 4, GPUBufferUsage.STORAGE, 0, 16
|
|
220
|
-
));
|
|
221
|
-
data.cells = gather.create("vgeo brick cells", BufferResourceDescriptor.from(
|
|
222
|
-
context.budget * VGEO_BRICK_CELL_WORDS * 4, GPUBufferUsage.STORAGE
|
|
223
|
-
));
|
|
224
|
-
|
|
225
|
-
// ----- the cut: the pairs' claim widths scanned into bases, then the camera cut's own descent -----
|
|
226
|
-
|
|
227
|
-
const prefix_sums = graph_prefix_scan_csdldf({
|
|
228
|
-
graph,
|
|
229
|
-
input: data.claim_widths,
|
|
230
|
-
output: graph_create_buffer(graph, "vgeo brick claim offsets", prefix_scan_csdldf_output_descriptor(pair_capacity)),
|
|
231
|
-
element_max_count: pair_capacity,
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
// the cells the cut puts a cluster on the list of, each once: what the distances follow
|
|
235
|
-
const filled = graph_create_buffer(graph, "vgeo brick filled", BufferResourceDescriptor.from(
|
|
236
|
-
16 + context.budget * 4, GPUBufferUsage.STORAGE, 0, 16
|
|
237
|
-
));
|
|
238
|
-
|
|
239
|
-
const descent = graph_vgeo_cut_descent({
|
|
240
|
-
graph,
|
|
241
|
-
runtime,
|
|
242
|
-
cut: this.#cut,
|
|
243
|
-
instances: data.instances,
|
|
244
|
-
prefix_sums,
|
|
245
|
-
feedback: runtime.feedback_in(graph),
|
|
246
|
-
traverse: shader_vgeo_brick_traverse,
|
|
247
|
-
outputs: { vgeo_brick_cells: data.cells, vgeo_brick_filled: filled },
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
runtime.publish_feedback(graph, descent.feedback);
|
|
251
|
-
|
|
252
|
-
this.#cells = descent.outputs.vgeo_brick_cells;
|
|
253
|
-
|
|
254
|
-
// ----- the distances: a workgroup a filled cell, its list's triangles near it, its texels merged -----
|
|
255
|
-
|
|
256
|
-
const command = graph_build_indirect_dispatch_command(graph, descent.outputs.vgeo_brick_filled, 1, true);
|
|
257
|
-
|
|
258
|
-
const distance_data = this.#distance_data;
|
|
259
|
-
const distance = graph.add("Brick Clipmap VGeo Distance", distance_data, this.#execute_distance);
|
|
260
|
-
|
|
261
|
-
distance_data.command = distance.read(command);
|
|
262
|
-
distance_data.filled = distance.read(descent.outputs.vgeo_brick_filled);
|
|
263
|
-
distance_data.cells = distance.read(this.#cells);
|
|
264
|
-
distance_data.instances = distance.read(descent.instances);
|
|
265
|
-
distance_data.waiting = distance.write(wait_data.waiting);
|
|
266
|
-
distance_data.staging = distance.write(context.staging);
|
|
267
|
-
|
|
268
|
-
// the next provider and the store come after this one's merge
|
|
269
|
-
context.staging = distance_data.staging;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
#execute_gather = (data, resources, execution) => {
|
|
273
|
-
const context = this.#context;
|
|
274
|
-
const scene = context.scene;
|
|
275
|
-
const take = resources.get(data.take);
|
|
276
|
-
const b = this.#gather_bindings;
|
|
277
|
-
|
|
278
|
-
b.settings = this.#settings;
|
|
279
|
-
b.brick_take = take;
|
|
280
|
-
b.brick_ring = context.ring;
|
|
281
|
-
b.brick_levels = context.levels;
|
|
282
|
-
b.vgeo_brick_statistics = this.#statistics;
|
|
283
|
-
b.tlas = scene.tlas.buffer;
|
|
284
|
-
b.scene_database = scene.scene_database_buffer;
|
|
285
|
-
b.geometries = scene.geometries.buffer_metadata;
|
|
286
|
-
b.vg_geometries = scene.virtual_geometry.pool.buffer_geometries;
|
|
287
|
-
b.instances = resources.get(data.instances);
|
|
288
|
-
b.claim_widths = resources.get(data.claim_widths);
|
|
289
|
-
b.vgeo_brick_cells = resources.get(data.cells);
|
|
290
|
-
|
|
291
|
-
shader_vgeo_brick_gather.dispatchIndirect({
|
|
292
|
-
encoder: execution.encoder,
|
|
293
|
-
command: take,
|
|
294
|
-
command_offset: 4 * BRICK_TAKE_CELL_DISPATCH,
|
|
295
|
-
bindings: b,
|
|
296
|
-
});
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
#execute_distance = (data, resources, execution) => {
|
|
300
|
-
const context = this.#context;
|
|
301
|
-
const scene = context.scene;
|
|
302
|
-
const meshlets = scene.geometries.meshlets;
|
|
303
|
-
const b = this.#distance_bindings;
|
|
304
|
-
|
|
305
|
-
b.settings = this.#settings;
|
|
306
|
-
b.brick_staging = resources.get(data.staging);
|
|
307
|
-
b.brick_levels = context.levels;
|
|
308
|
-
b.vgeo_brick_statistics = this.#statistics;
|
|
309
|
-
b.vgeo_brick_filled = resources.get(data.filled);
|
|
310
|
-
b.vgeo_brick_cells = resources.get(data.cells);
|
|
311
|
-
b.vgeo_brick_waiting = resources.get(data.waiting);
|
|
312
|
-
b.instances = resources.get(data.instances);
|
|
313
|
-
b.scene_database = scene.scene_database_buffer;
|
|
314
|
-
b.materials = scene.materials.metadata_table.buffer;
|
|
315
|
-
b.meshlet_metadata = meshlets.buffer_metadata;
|
|
316
|
-
b.meshlet_data = meshlets.buffer_data;
|
|
317
|
-
|
|
318
|
-
shader_vgeo_brick_distance.dispatchIndirect({
|
|
319
|
-
encoder: execution.encoder,
|
|
320
|
-
command: resources.get(data.command),
|
|
321
|
-
command_offset: 0,
|
|
322
|
-
bindings: b,
|
|
323
|
-
});
|
|
324
|
-
};
|
|
325
|
-
|
|
326
|
-
#execute_wait = (data, resources, execution) => {
|
|
327
|
-
const context = this.#context;
|
|
328
|
-
const pool = context.scene.virtual_geometry.pool;
|
|
329
|
-
const waiting = resources.get(data.waiting);
|
|
330
|
-
const b = this.#wait_bindings;
|
|
331
|
-
|
|
332
|
-
// this frame's list starts empty: the wait keeps its cells onto it, then the distances add theirs
|
|
333
|
-
execution.encoder.clearBuffer(waiting, 0, 16);
|
|
334
|
-
|
|
335
|
-
b.settings = this.#settings;
|
|
336
|
-
b.params = this.#cut.params_buffer;
|
|
337
|
-
b.vg_lookup = pool.buffer_lookup;
|
|
338
|
-
b.vg_arena = pool.buffer_arena;
|
|
339
|
-
b.feedback = resources.get(data.feedback);
|
|
340
|
-
b.vg_want_stamps = pool.buffer_want_stamps;
|
|
341
|
-
b.vgeo_brick_waiting_in = resources.get(data.waiting_in);
|
|
342
|
-
b.vgeo_brick_waiting = waiting;
|
|
343
|
-
b.brick_state = resources.get(data.state);
|
|
344
|
-
b.brick_ring = context.ring;
|
|
345
|
-
b.brick_pending = context.pending;
|
|
346
|
-
|
|
347
|
-
shader_vgeo_brick_wait.dispatchIndirect({
|
|
348
|
-
encoder: execution.encoder,
|
|
349
|
-
command: resources.get(data.command),
|
|
350
|
-
command_offset: 0,
|
|
351
|
-
bindings: b,
|
|
352
|
-
});
|
|
353
|
-
};
|
|
354
|
-
|
|
355
|
-
/**
|
|
356
|
-
* Waiting lists of `capacity` cells each, made again when the capacity changes. A list made again holds no cell:
|
|
357
|
-
* those that waited are built again only as anything else queues them.
|
|
358
|
-
* @param {number} capacity
|
|
359
|
-
*/
|
|
360
|
-
#ensure_waiting(capacity) {
|
|
361
|
-
if (capacity === this.#waiting_capacity) {
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
for (const list of this.#waiting) {
|
|
366
|
-
list.destroy();
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
this.#waiting = [0, 1].map(i => this.#device.createBuffer(BufferDescriptor.fromJSON({
|
|
370
|
-
label: `Probe clipmap / vgeo brick waiting ${i}`,
|
|
371
|
-
size: 16 + 4 * VGEO_BRICK_WAIT_WORDS * capacity,
|
|
372
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC,
|
|
373
|
-
})));
|
|
374
|
-
this.#waiting_read = 0;
|
|
375
|
-
this.#waiting_capacity = capacity;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
destroy() {
|
|
379
|
-
if (this.#destroyed) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
this.#destroyed = true;
|
|
384
|
-
this.#statistics.destroy();
|
|
385
|
-
this.#cut.destroy();
|
|
386
|
-
|
|
387
|
-
for (const list of this.#waiting) {
|
|
388
|
-
list.destroy();
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
this.#waiting = [];
|
|
392
|
-
}
|
|
393
|
-
}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
|
|
3
|
-
* field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
|
|
4
|
-
*
|
|
5
|
-
* ```wgsl
|
|
6
|
-
* fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
|
|
7
|
-
* fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
|
|
8
|
-
* ```
|
|
9
|
-
*
|
|
10
|
-
* `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
|
|
11
|
-
* as `array<u32>`.
|
|
12
|
-
*
|
|
13
|
-
* @type {CodeChunk}
|
|
14
|
-
*/
|
|
15
|
-
export const chunk_vgeo_brick_box: CodeChunk;
|
|
16
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
17
|
-
//# sourceMappingURL=chunk_vgeo_brick_box.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_vgeo_brick_box.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AACH,mCAFU,SAAS,CAoBhB;0BAnCuB,0CAA0C"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { VGEO_BRICK_PAIR_BOX } from "./VGEO_BRICK.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* A pair record's box ({@link VGEO_BRICK_PAIR_BOX}) as `vgeo_brick_pair` writes it: the taken cell grown by the
|
|
6
|
-
* field's band, in the instance's object space (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8).
|
|
7
|
-
*
|
|
8
|
-
* ```wgsl
|
|
9
|
-
* fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32>
|
|
10
|
-
* fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32>
|
|
11
|
-
* ```
|
|
12
|
-
*
|
|
13
|
-
* `pair_base` is the record's first word. Requires the importing shader to declare `instances`, the pair records,
|
|
14
|
-
* as `array<u32>`.
|
|
15
|
-
*
|
|
16
|
-
* @type {CodeChunk}
|
|
17
|
-
*/
|
|
18
|
-
export const chunk_vgeo_brick_box = CodeChunk.from(
|
|
19
|
-
//language=WGSL
|
|
20
|
-
`
|
|
21
|
-
fn vgeo_brick_box_lower(pair_base: u32) -> vec3<f32> {
|
|
22
|
-
return vec3<f32>(
|
|
23
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX}u]),
|
|
24
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 1}u]),
|
|
25
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 2}u])
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
fn vgeo_brick_box_upper(pair_base: u32) -> vec3<f32> {
|
|
30
|
-
return vec3<f32>(
|
|
31
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 3}u]),
|
|
32
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 4}u]),
|
|
33
|
-
bitcast<f32>(instances[pair_base + ${VGEO_BRICK_PAIR_BOX + 5}u])
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
`);
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What the vgeo provider asks of a `meshes` row (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8), on the scene database
|
|
3
|
-
* and the vgeo geometry rows:
|
|
4
|
-
*
|
|
5
|
-
* ```wgsl
|
|
6
|
-
* fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool
|
|
7
|
-
* fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool
|
|
8
|
-
* ```
|
|
9
|
-
*
|
|
10
|
-
* `vgeo_brick_accept` is the gather's leaf filter, with `bounds` the row's world box and `voxel` the cascade's: the
|
|
11
|
-
* row is in the SDF world, its geometry is virtual (the mesh provider's rows are the others), and its box resolves
|
|
12
|
-
* in the cascade.
|
|
13
|
-
*
|
|
14
|
-
* `vgeo_brick_pair` writes the pair's record, a cut's instance record under `capacity`:
|
|
15
|
-
* - cut at a world error under half the voxel, at any distance: `k` is σ_max over half the voxel and the distance
|
|
16
|
-
* weight 0, so `vg_project` is the world error over half the voxel, against a τ of 1;
|
|
17
|
-
* - within the world box [lower, upper], put in the instance's object space as the bounds of its eight corners;
|
|
18
|
-
* - for taken cell `build`.
|
|
19
|
-
*
|
|
20
|
-
* It is false where the instance's transform flattens it or the records are full, which the caller counts.
|
|
21
|
-
*
|
|
22
|
-
* Requires the importing shader to declare `scene_database`, `geometries`, `vg_geometries`, `instances` and
|
|
23
|
-
* `claim_widths`.
|
|
24
|
-
*
|
|
25
|
-
* @type {CodeChunk}
|
|
26
|
-
*/
|
|
27
|
-
export const chunk_vgeo_brick_pair: CodeChunk;
|
|
28
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
29
|
-
//# sourceMappingURL=chunk_vgeo_brick_pair.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_vgeo_brick_pair.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,oCAFU,SAAS,CAyEhB;0BArGuB,0CAA0C"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { chunk_vgeo_cut_instance } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js";
|
|
2
|
-
import { VGEO_GEOMETRY_ROW_NONE } from "../../../../geometry/virtual/runtime/layout/VGEO_GEOMETRY_ROW_NONE.js";
|
|
3
|
-
import { VGEO_INSTANCE_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js";
|
|
4
|
-
import { chunk_scene_database_access } from "../../../../scene/chunk_scene_database_access.js";
|
|
5
|
-
import { MESH_FLAG_SDF_WORLD } from "../../../../scene/MESH_INSTANCE_METADATA_STRUCT.js";
|
|
6
|
-
import { chunk_mat4_inverse } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_inverse.js";
|
|
7
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
8
|
-
import { chunk_brick_provider_resolves } from "../chunk_brick_provider.js";
|
|
9
|
-
import { VGEO_BRICK_PAIR_BOX, VGEO_BRICK_PAIR_BUILD } from "./VGEO_BRICK.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* What the vgeo provider asks of a `meshes` row (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8), on the scene database
|
|
13
|
-
* and the vgeo geometry rows:
|
|
14
|
-
*
|
|
15
|
-
* ```wgsl
|
|
16
|
-
* fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool
|
|
17
|
-
* fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* `vgeo_brick_accept` is the gather's leaf filter, with `bounds` the row's world box and `voxel` the cascade's: the
|
|
21
|
-
* row is in the SDF world, its geometry is virtual (the mesh provider's rows are the others), and its box resolves
|
|
22
|
-
* in the cascade.
|
|
23
|
-
*
|
|
24
|
-
* `vgeo_brick_pair` writes the pair's record, a cut's instance record under `capacity`:
|
|
25
|
-
* - cut at a world error under half the voxel, at any distance: `k` is σ_max over half the voxel and the distance
|
|
26
|
-
* weight 0, so `vg_project` is the world error over half the voxel, against a τ of 1;
|
|
27
|
-
* - within the world box [lower, upper], put in the instance's object space as the bounds of its eight corners;
|
|
28
|
-
* - for taken cell `build`.
|
|
29
|
-
*
|
|
30
|
-
* It is false where the instance's transform flattens it or the records are full, which the caller counts.
|
|
31
|
-
*
|
|
32
|
-
* Requires the importing shader to declare `scene_database`, `geometries`, `vg_geometries`, `instances` and
|
|
33
|
-
* `claim_widths`.
|
|
34
|
-
*
|
|
35
|
-
* @type {CodeChunk}
|
|
36
|
-
*/
|
|
37
|
-
export const chunk_vgeo_brick_pair = CodeChunk.from(
|
|
38
|
-
//language=WGSL
|
|
39
|
-
`
|
|
40
|
-
const VG_GEOMETRY_ROW_NONE = ${VGEO_GEOMETRY_ROW_NONE}u;
|
|
41
|
-
|
|
42
|
-
fn vgeo_brick_accept(row: u32, bounds: array<f32, 6>, voxel: f32) -> bool {
|
|
43
|
-
let mesh = scene_read_mesh(&scene_database, row);
|
|
44
|
-
|
|
45
|
-
if ((mesh.flags & ${MESH_FLAG_SDF_WORLD}u) == 0u) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (geometries[mesh.geometry].vg_row == VG_GEOMETRY_ROW_NONE) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return brick_provider_resolves(bounds, voxel);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
fn vgeo_brick_pair(row: u32, build: u32, lower: vec3<f32>, upper: vec3<f32>, voxel: f32, capacity: u32) -> bool {
|
|
57
|
-
let mesh = scene_read_mesh(&scene_database, row);
|
|
58
|
-
let global = scene_read_node(&scene_database, mesh.node).global;
|
|
59
|
-
|
|
60
|
-
let stretch = vg_instance_stretch(global);
|
|
61
|
-
|
|
62
|
-
if (!(stretch.y > 0.0)) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
let base = vg_instance_record(row, geometries[mesh.geometry].vg_row, capacity);
|
|
67
|
-
|
|
68
|
-
if (base == VG_INSTANCE_RECORD_NONE) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// no eye: at a distance weight of 0 the projection is the world error itself, wherever the pair is
|
|
73
|
-
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE}u, 0.0);
|
|
74
|
-
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 1}u, 0.0);
|
|
75
|
-
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 2}u, 0.0);
|
|
76
|
-
vg_store(base, ${VGEO_INSTANCE_OFFSET.PROJECTION_K}u, stretch.x / (0.5 * voxel));
|
|
77
|
-
vg_store(base, ${VGEO_INSTANCE_OFFSET.DISTANCE_WEIGHT}u, 0.0);
|
|
78
|
-
|
|
79
|
-
let to_object = mat4_inverse(global);
|
|
80
|
-
|
|
81
|
-
var box_lower = vec3<f32>(3.4e38);
|
|
82
|
-
var box_upper = vec3<f32>(-3.4e38);
|
|
83
|
-
|
|
84
|
-
for (var corner = 0u; corner < 8u; corner++) {
|
|
85
|
-
let world = select(lower, upper, vec3<bool>((corner & 1u) != 0u, (corner & 2u) != 0u, (corner & 4u) != 0u));
|
|
86
|
-
let object = (to_object * vec4<f32>(world, 1.0)).xyz;
|
|
87
|
-
|
|
88
|
-
box_lower = min(box_lower, object);
|
|
89
|
-
box_upper = max(box_upper, object);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX}u, box_lower.x);
|
|
93
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX + 1}u, box_lower.y);
|
|
94
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX + 2}u, box_lower.z);
|
|
95
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX + 3}u, box_upper.x);
|
|
96
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX + 4}u, box_upper.y);
|
|
97
|
-
vg_store(base, ${VGEO_BRICK_PAIR_BOX + 5}u, box_upper.z);
|
|
98
|
-
|
|
99
|
-
instances[base + ${VGEO_BRICK_PAIR_BUILD}u] = build;
|
|
100
|
-
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
`, [
|
|
104
|
-
chunk_scene_database_access,
|
|
105
|
-
chunk_vgeo_cut_instance,
|
|
106
|
-
chunk_mat4_inverse,
|
|
107
|
-
chunk_brick_provider_resolves,
|
|
108
|
-
]);
|