@woosh/meep-engine 3.61.2 → 3.61.3
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/CHANGELOG.md +111 -0
- package/package.json +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/probe_clipmap/README.md +3 -4
- package/src/shade/playground/probe_clipmap/index.html +5 -13
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +0 -5
- package/src/shade/playground/probe_clipmap_box/README.md +1 -1
- package/src/shade/playground/probe_clipmap_box/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +50 -11
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts +10 -0
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.js +54 -0
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +85 -36
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +813 -412
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +7 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/MESH_SDF.js +8 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts +14 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.js +35 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +0 -4
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +55 -10
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +86 -16
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +28 -2
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts +54 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +2 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.js +66 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.js +66 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +5 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +15 -14
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +12 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts +21 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.js +84 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts +53 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.js +343 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +3 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +9 -5
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +3 -2
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts +69 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.js +294 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts +16 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.js +36 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts +126 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js +148 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts +10 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.js +140 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts +8 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.js +76 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +9 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +23 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.js +23 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts +262 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.js +1819 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts +118 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.js +204 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts +66 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.js +103 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.js +23 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.js +70 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.js +35 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.js +111 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.js +49 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.js +35 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts +24 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.js +169 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.js +49 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.js +67 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts +78 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.js +320 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.js +48 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts +51 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.js +109 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.js +51 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts +26 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.js +453 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.js +99 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts +22 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.js +140 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +261 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +2 -2
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +6 -6
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +7 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +82 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +26 -19
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +226 -148
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +25 -52
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +29 -69
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +19 -16
- 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 +24 -21
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +46 -22
- 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 +49 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +3 -2
- 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 +7 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +8 -22
- 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 +15 -51
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +1 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +6 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +0 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +9 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +4 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +15 -39
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +1 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +2 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +5 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js +208 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts +24 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/{graph_probe_clipmap_debug_mesh_cards.js → graph_probe_clipmap_debug_mesh_surfaces.js} +38 -57
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts +61 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js +193 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts +67 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js +142 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts +32 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.js +70 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts +30 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.js +71 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js +176 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +18 -9
- 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 +63 -44
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +21 -1
- 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 +24 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.js +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.js +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +44 -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 +88 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts +43 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.js +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.js +49 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +2 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +10 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.js +50 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +2 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +7 -4
- 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 +30 -26
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +6 -5
- 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 +22 -16
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +6 -6
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts +14 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.js +22 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.js +122 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js +1 -11
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +8 -0
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +6 -4
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +2 -18
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts +17 -0
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.js +16 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +1 -1
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +1 -1
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.js +65 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +1 -1
- package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/albedo_compress.js +26 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.js +22 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.js +23 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.js +25 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.js +36 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts +11 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.js +38 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.js +35 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts +28 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.js +79 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.js +66 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.js +2 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.js +34 -0
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts +18 -0
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.js +31 -23
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +5 -6
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +0 -213
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +0 -1468
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +0 -82
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +0 -127
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +0 -24
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +0 -29
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +0 -12
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +0 -31
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +0 -11
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +0 -21
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +0 -29
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +0 -179
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +0 -17
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +0 -107
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +0 -65
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +0 -376
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +0 -40
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +0 -301
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +0 -19
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +0 -61
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +0 -18
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +0 -102
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +0 -15
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +0 -65
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +0 -22
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +0 -136
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +0 -20
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +0 -104
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +0 -20
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +0 -80
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +0 -18
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +0 -113
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +0 -30
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +0 -146
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +0 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +0 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +0 -82
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js
CHANGED
|
@@ -13,7 +13,7 @@ import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderR
|
|
|
13
13
|
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
14
14
|
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
15
15
|
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
16
|
-
import { BRICK_CELL_WORKGROUP_SIZE
|
|
16
|
+
import { BRICK_CELL_WORKGROUP_SIZE } from "../BRICK_CLIPMAP.js";
|
|
17
17
|
import { BRICK_RING_RESOURCE, BRICK_TAKE_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
|
|
18
18
|
import { chunk_brick_object } from "../chunk_brick_object.js";
|
|
19
19
|
import { chunk_brick_provider } from "../chunk_brick_provider.js";
|
|
@@ -60,10 +60,6 @@ var<workgroup> instances: array<${MESH_BRICK_INSTANCE_STRUCT.wgsl_ref}, MESH_BRI
|
|
|
60
60
|
/** the batch's rows, ascending */
|
|
61
61
|
var<workgroup> batch_rows: array<u32, MESH_BRICK_BATCH>;
|
|
62
62
|
|
|
63
|
-
/** per object cell: its nearest texel's key over the batch, and its lanes done */
|
|
64
|
-
var<workgroup> object_best: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
65
|
-
var<workgroup> object_lanes: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
66
|
-
|
|
67
63
|
/** lane 0's: the batches, and this one's build slot and rows */
|
|
68
64
|
var<workgroup> batch_header: vec3<u32>;
|
|
69
65
|
|
|
@@ -138,36 +134,15 @@ fn main(
|
|
|
138
134
|
let z = lane / 8u;
|
|
139
135
|
let accumulator = mesh_brick_accumulator(build);
|
|
140
136
|
|
|
141
|
-
var best = vec4<u32>(0u);
|
|
142
|
-
|
|
143
137
|
for (var x = 0u; x < 8u; x++) {
|
|
144
138
|
let texel = mesh_brick_texel(at.corner + vec3<f32>(f32(x), f32(y), f32(z)) * at.voxel, count, at.band);
|
|
145
139
|
let byte = brick_encode(texel.distance, at.band);
|
|
140
|
+
let key = brick_object_key(byte, texel.row);
|
|
146
141
|
|
|
147
|
-
// the
|
|
142
|
+
// the texel's least byte over the cell's batches, and the row that gave it, as the largest key; +R
|
|
143
|
+
// raises nothing
|
|
148
144
|
if (byte < 255u) {
|
|
149
|
-
atomicMax(&mesh_brick_accumulators[accumulator + x + 8u * (y + 8u * z)],
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
let o = x / 2u;
|
|
153
|
-
|
|
154
|
-
best[o] = max(best[o], brick_object_key(byte, texel.row));
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// per object cell, its four lanes fold in their texels, and the last bids the batch's nearest
|
|
158
|
-
for (var o = 0u; o < ${BRICK_OBJECT_CELLS_PER_AXIS}u; o++) {
|
|
159
|
-
let object = o + ${BRICK_OBJECT_CELLS_PER_AXIS}u * ((y / 2u) + ${BRICK_OBJECT_CELLS_PER_AXIS}u * (z / 2u));
|
|
160
|
-
|
|
161
|
-
atomicMax(&object_best[object], best[o]);
|
|
162
|
-
|
|
163
|
-
if (atomicAdd(&object_lanes[object], 1u) != 3u) {
|
|
164
|
-
continue;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
let nearest = atomicLoad(&object_best[object]);
|
|
168
|
-
|
|
169
|
-
if (brick_object_key_byte(nearest) < 255u) {
|
|
170
|
-
atomicMax(&mesh_brick_accumulators[accumulator + MESH_BRICK_ACCUMULATOR_OBJECTS + object], nearest);
|
|
145
|
+
atomicMax(&mesh_brick_accumulators[accumulator + x + 8u * (y + 8u * z)], key);
|
|
171
146
|
}
|
|
172
147
|
}
|
|
173
148
|
}
|
|
@@ -189,10 +164,10 @@ fn main(
|
|
|
189
164
|
* Its up to {@link MESH_BRICK_BATCH} rows, sorted ascending (a bitonic network, a lane a pair), become
|
|
190
165
|
* instances in workgroup memory, a lane each (`mesh_brick_instance`), and its cell's 512 texels are
|
|
191
166
|
* sampled over them in that order, eight a lane
|
|
192
|
-
* (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's
|
|
193
|
-
* the cell's accumulators by an atomic maximum
|
|
194
|
-
*
|
|
195
|
-
*
|
|
167
|
+
* (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's key, its byte
|
|
168
|
+
* and its row (`brick_object_key`), goes into the cell's accumulators by an atomic maximum: the least byte
|
|
169
|
+
* and the nearest row over every batch of the cell, whatever order the batches ran in. The staging is the
|
|
170
|
+
* resolve's to write.
|
|
196
171
|
*
|
|
197
172
|
* The order is what keeps a cell of up to {@link MESH_BRICK_BATCH} rows, one batch, the same however the walk
|
|
198
173
|
* found its rows: the box test is exact only where an instance's field is not negative outside its box,
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The mesh provider's resolve (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
|
|
3
3
|
* a cell the walks listed, dispatched by its command after the batches. It merges the cell's
|
|
4
|
-
* accumulators into the staging as any provider merges (§7.6), and leaves its texel
|
|
5
|
-
*
|
|
4
|
+
* accumulators into the staging as any provider merges (§7.6), and leaves its texel words at 0 for the
|
|
5
|
+
* next frame. A taken cell no walk listed, most of them, had no batch and finished its
|
|
6
6
|
* walks: its staging stays as it is, and the resolve spends nothing on it.
|
|
7
7
|
*
|
|
8
8
|
* - A cell a walk of which did not finish sets its retry word (contract 7): free puts its key back on
|
|
9
9
|
* the ring, and the cell is built again.
|
|
10
10
|
* - Contract 2, per texel of a cell a batch reached: the staged byte becomes the least of itself and
|
|
11
11
|
* the batches' byte.
|
|
12
|
-
* - Contract
|
|
13
|
-
*
|
|
14
|
-
* four lanes fold their staged texels in through workgroup atomics, and the last of them decides, so
|
|
15
|
-
* that no lane waits on another.
|
|
12
|
+
* - Contract 8, per texel: where the batches' byte is below the staged one, their row replaces the
|
|
13
|
+
* texel's staged surface row; ties keep the staged row.
|
|
16
14
|
*
|
|
17
15
|
* Eight texels a lane: the staging's two words and the accumulators' eight.
|
|
18
16
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_brick_resolve.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js"],"names":[],"mappings":"AAoBA
|
|
1
|
+
{"version":3,"file":"shader_mesh_brick_resolve.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;GAiBG;AACH,wCAFU,aAAa,CA0EpB;8BA5G2B,qCAAqC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
|
4
4
|
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
5
5
|
import { atomic_u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
6
6
|
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
7
|
-
import { BRICK_CELL_WORKGROUP_SIZE
|
|
7
|
+
import { BRICK_CELL_WORKGROUP_SIZE } from "../BRICK_CLIPMAP.js";
|
|
8
8
|
import { BRICK_STAGING_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
|
|
9
9
|
import { chunk_brick_object } from "../chunk_brick_object.js";
|
|
10
10
|
import { chunk_mesh_brick_walk } from "./chunk_mesh_brick_walk.js";
|
|
@@ -21,18 +21,16 @@ resources.createGroup()
|
|
|
21
21
|
/**
|
|
22
22
|
* The mesh provider's resolve (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
|
|
23
23
|
* a cell the walks listed, dispatched by its command after the batches. It merges the cell's
|
|
24
|
-
* accumulators into the staging as any provider merges (§7.6), and leaves its texel
|
|
25
|
-
*
|
|
24
|
+
* accumulators into the staging as any provider merges (§7.6), and leaves its texel words at 0 for the
|
|
25
|
+
* next frame. A taken cell no walk listed, most of them, had no batch and finished its
|
|
26
26
|
* walks: its staging stays as it is, and the resolve spends nothing on it.
|
|
27
27
|
*
|
|
28
28
|
* - A cell a walk of which did not finish sets its retry word (contract 7): free puts its key back on
|
|
29
29
|
* the ring, and the cell is built again.
|
|
30
30
|
* - Contract 2, per texel of a cell a batch reached: the staged byte becomes the least of itself and
|
|
31
31
|
* the batches' byte.
|
|
32
|
-
* - Contract
|
|
33
|
-
*
|
|
34
|
-
* four lanes fold their staged texels in through workgroup atomics, and the last of them decides, so
|
|
35
|
-
* that no lane waits on another.
|
|
32
|
+
* - Contract 8, per texel: where the batches' byte is below the staged one, their row replaces the
|
|
33
|
+
* texel's staged surface row; ties keep the staged row.
|
|
36
34
|
*
|
|
37
35
|
* Eight texels a lane: the staging's two words and the accumulators' eight.
|
|
38
36
|
*
|
|
@@ -44,10 +42,6 @@ export const shader_mesh_brick_resolve = ComputeShader.from({
|
|
|
44
42
|
body: CodeChunk.from(
|
|
45
43
|
//language=WGSL
|
|
46
44
|
`
|
|
47
|
-
/** per object cell: its staged minimum before the merge (as 255 less the byte), and its lanes done */
|
|
48
|
-
var<workgroup> object_staged: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
49
|
-
var<workgroup> object_lanes: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
50
|
-
|
|
51
45
|
@compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
|
|
52
46
|
fn main(
|
|
53
47
|
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
@@ -71,7 +65,7 @@ fn main(
|
|
|
71
65
|
atomicAdd(&mesh_brick_counters[${MESH_BRICK_STATISTIC_CELLS_RETRIED}u], 1u);
|
|
72
66
|
}
|
|
73
67
|
|
|
74
|
-
// listed for its retry alone: no batch reached it, and its texel
|
|
68
|
+
// listed for its retry alone: no batch reached it, and its texel words are 0
|
|
75
69
|
if ((flags & MESH_BRICK_FLAG_TOUCHED) == 0u) {
|
|
76
70
|
return;
|
|
77
71
|
}
|
|
@@ -81,50 +75,32 @@ fn main(
|
|
|
81
75
|
let z = lane / 8u;
|
|
82
76
|
let first = build * BRICK_STAGING_WORDS + 2u * lane;
|
|
83
77
|
|
|
84
|
-
var staged_min = vec4<u32>(255u);
|
|
85
|
-
|
|
86
78
|
for (var w = 0u; w < 2u; w++) {
|
|
87
79
|
var word = brick_staging[first + w];
|
|
88
80
|
|
|
89
81
|
for (var b = 0u; b < 4u; b++) {
|
|
90
82
|
let x = 4u * w + b;
|
|
91
|
-
let
|
|
83
|
+
let t = x + 8u * (y + 8u * z);
|
|
84
|
+
let texel = accumulator + t;
|
|
92
85
|
let shift = 8u * b;
|
|
93
86
|
let staged = (word >> shift) & 0xffu;
|
|
94
|
-
let
|
|
87
|
+
let key = mesh_brick_accumulators[texel];
|
|
88
|
+
// a texel no batch reached bid nothing: +R
|
|
89
|
+
let byte = select(255u, brick_object_key_byte(key), key != 0u);
|
|
95
90
|
|
|
96
91
|
mesh_brick_accumulators[texel] = 0u;
|
|
97
92
|
|
|
98
93
|
// contract 2: the encoding is monotone, so the minimum of the bytes is the byte of the minimum
|
|
99
94
|
word = (word & ~(0xffu << shift)) | (min(staged, byte) << shift);
|
|
100
95
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
// contract 8: where the batches lowered the byte, their row is the texel's surface; ties keep the staged row
|
|
97
|
+
if (byte < staged) {
|
|
98
|
+
brick_staging[build * BRICK_STAGING_WORDS + BRICK_STAGING_SURFACE_WORDS + t] = brick_object_key_row(key);
|
|
99
|
+
}
|
|
104
100
|
}
|
|
105
101
|
|
|
106
102
|
brick_staging[first + w] = word;
|
|
107
103
|
}
|
|
108
|
-
|
|
109
|
-
// contract 3, per object cell: its four lanes each fold in their staged texels, and the last decides
|
|
110
|
-
for (var o = 0u; o < ${BRICK_OBJECT_CELLS_PER_AXIS}u; o++) {
|
|
111
|
-
let object = o + ${BRICK_OBJECT_CELLS_PER_AXIS}u * ((y / 2u) + ${BRICK_OBJECT_CELLS_PER_AXIS}u * (z / 2u));
|
|
112
|
-
|
|
113
|
-
atomicMax(&object_staged[object], 255u - staged_min[o]);
|
|
114
|
-
|
|
115
|
-
if (atomicAdd(&object_lanes[object], 1u) != 3u) {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
let key = mesh_brick_accumulators[accumulator + MESH_BRICK_ACCUMULATOR_OBJECTS + object];
|
|
120
|
-
|
|
121
|
-
mesh_brick_accumulators[accumulator + MESH_BRICK_ACCUMULATOR_OBJECTS + object] = 0u;
|
|
122
|
-
|
|
123
|
-
// a bid is never 0: only a byte below 255 bids. Ties keep the staged object
|
|
124
|
-
if (key != 0u && brick_object_key_byte(key) < 255u - atomicLoad(&object_staged[object])) {
|
|
125
|
-
brick_staging[build * BRICK_STAGING_WORDS + BRICK_STAGING_DISTANCE_WORDS + object] = brick_object_key_row(key);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
104
|
}
|
|
129
105
|
`, [
|
|
130
106
|
chunk_brick_clipmap,
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Clear (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.5): a thread a staging word of the frame's taken
|
|
3
3
|
* cells, dispatched by take. A distance word becomes four bytes of 255, `+R`, the far side of every
|
|
4
|
-
* provider's minimum;
|
|
4
|
+
* provider's minimum; every other word, the retry word and the surface rows, becomes 0.
|
|
5
5
|
*
|
|
6
6
|
* @type {ComputeShader}
|
|
7
7
|
*/
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js
CHANGED
|
@@ -14,7 +14,7 @@ resources.createGroup()
|
|
|
14
14
|
/**
|
|
15
15
|
* Clear (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.5): a thread a staging word of the frame's taken
|
|
16
16
|
* cells, dispatched by take. A distance word becomes four bytes of 255, `+R`, the far side of every
|
|
17
|
-
* provider's minimum;
|
|
17
|
+
* provider's minimum; every other word, the retry word and the surface rows, becomes 0.
|
|
18
18
|
*
|
|
19
19
|
* @type {ComputeShader}
|
|
20
20
|
*/
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts
CHANGED
|
@@ -9,8 +9,7 @@ export const BRICK_STORE_SETTINGS: WebGPUStruct;
|
|
|
9
9
|
* A cell free marked pops a slot: lane 0 pops it and writes the entry, and the slot reaches the other
|
|
10
10
|
* lanes through the workgroup. Take held the frame to the free slots, so the pop is never refused. A
|
|
11
11
|
* cell that holds a slot, its own or the one just popped, has its 512 staged bytes written into the
|
|
12
|
-
* slot's atlas tile
|
|
13
|
-
* nothing.
|
|
12
|
+
* slot's atlas tile; a cell free made EMPTY writes nothing.
|
|
14
13
|
*
|
|
15
14
|
* @type {ComputeShader}
|
|
16
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick_clipmap_store.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js"],"names":[],"mappings":"AAoBA;;GAEG;AACH,mCAFU,YAAY,CASG;
|
|
1
|
+
{"version":3,"file":"shader_brick_clipmap_store.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js"],"names":[],"mappings":"AAoBA;;GAEG;AACH,mCAFU,YAAY,CASG;AAezB;;;;;;;;;;GAUG;AACH,yCAFU,aAAa,CAoEpB;6BAlH0B,sCAAsC;8BAJrC,kCAAkC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js
CHANGED
|
@@ -26,7 +26,7 @@ export const BRICK_STORE_SETTINGS = WebGPUStruct.from({
|
|
|
26
26
|
ring_capacity: u32,
|
|
27
27
|
/** cells a cascade's window has a side */
|
|
28
28
|
resolution: u32,
|
|
29
|
-
/** slots the atlas
|
|
29
|
+
/** slots the atlas holds: what bounds a pop */
|
|
30
30
|
capacity: u32,
|
|
31
31
|
}, "BrickStoreSettings");
|
|
32
32
|
|
|
@@ -40,7 +40,6 @@ resources.createGroup()
|
|
|
40
40
|
.add(BRICK_RING_RESOURCE)
|
|
41
41
|
.add(BRICK_FREE_RESOURCE)
|
|
42
42
|
.add(BRICK_STAGING_RESOURCE)
|
|
43
|
-
.addStorageBuffer("brick_objects", WebGPUArray.u32, true)
|
|
44
43
|
.addStorageTexture("brick_map", "r32uint", "3d", "read-write")
|
|
45
44
|
.addStorageTexture("brick_atlas_store", "r8unorm", "3d", "write-only");
|
|
46
45
|
|
|
@@ -51,8 +50,7 @@ resources.createGroup()
|
|
|
51
50
|
* A cell free marked pops a slot: lane 0 pops it and writes the entry, and the slot reaches the other
|
|
52
51
|
* lanes through the workgroup. Take held the frame to the free slots, so the pop is never refused. A
|
|
53
52
|
* cell that holds a slot, its own or the one just popped, has its 512 staged bytes written into the
|
|
54
|
-
* slot's atlas tile
|
|
55
|
-
* nothing.
|
|
53
|
+
* slot's atlas tile; a cell free made EMPTY writes nothing.
|
|
56
54
|
*
|
|
57
55
|
* @type {ComputeShader}
|
|
58
56
|
*/
|
|
@@ -115,8 +113,6 @@ fn main(
|
|
|
115
113
|
textureStore(brick_atlas_store, row + vec3<u32>(4u * w + b, 0u, 0u), vec4<f32>(f32(byte) / 255.0, 0.0, 0.0, 0.0));
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
|
-
|
|
119
|
-
brick_objects[slot * BRICK_OBJECT_CELLS + lane] = brick_staging[build * BRICK_STAGING_WORDS + BRICK_STAGING_DISTANCE_WORDS + lane];
|
|
120
116
|
}
|
|
121
117
|
`, [
|
|
122
118
|
chunk_brick_clipmap,
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export const BRICK_TAKE_SETTINGS: WebGPUStruct;
|
|
|
9
9
|
* host grows the capacity, as the mesh bake does (§6.4).
|
|
10
10
|
*
|
|
11
11
|
* Build slot `b` is taken key `b`, at ring position `taken_first + b`. Writes them, and the frame's
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* three dispatches, folded past the per-dimension limit, into `brick_take`: a workgroup a taken cell,
|
|
13
|
+
* a thread a staging word of the taken cells, and a thread a texel of them.
|
|
14
14
|
*
|
|
15
15
|
* @type {ComputeShader}
|
|
16
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick_clipmap_take.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_brick_clipmap_take.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js"],"names":[],"mappings":"AAYA;;GAEG;AACH,kCAFU,YAAY,CAKE;AAUxB;;;;;;;;;;;GAWG;AACH,wCAFU,aAAa,CA6CpB;6BA3E0B,sCAAsC;8BAJrC,kCAAkC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { MESH_SDF_BRICK_TEXELS } from "../../../geometry/sdf/MESH_SDF.js";
|
|
1
2
|
import { chunk_folded_dispatch } from "../../../gpu_primitive/indirect/chunk_folded_dispatch.js";
|
|
2
3
|
import { chunk_divide_round_up_u32 } from "../../../shader/chunk/math/chunk_divide_round_up_u32.js";
|
|
3
4
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
@@ -6,6 +7,7 @@ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderReso
|
|
|
6
7
|
import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
7
8
|
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
8
9
|
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
10
|
+
import { BRICK_THREAD_WORKGROUP_SIZE } from "./BRICK_CLIPMAP.js";
|
|
9
11
|
import { BRICK_STATE_RESOURCE, chunk_brick_clipmap } from "./chunk_brick_clipmap.js";
|
|
10
12
|
|
|
11
13
|
/**
|
|
@@ -31,8 +33,8 @@ resources.createGroup()
|
|
|
31
33
|
* host grows the capacity, as the mesh bake does (§6.4).
|
|
32
34
|
*
|
|
33
35
|
* Build slot `b` is taken key `b`, at ring position `taken_first + b`. Writes them, and the frame's
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
+
* three dispatches, folded past the per-dimension limit, into `brick_take`: a workgroup a taken cell,
|
|
37
|
+
* a thread a staging word of the taken cells, and a thread a texel of them.
|
|
36
38
|
*
|
|
37
39
|
* @type {ComputeShader}
|
|
38
40
|
*/
|
|
@@ -72,6 +74,7 @@ fn main() {
|
|
|
72
74
|
|
|
73
75
|
write_folded_dispatch(BRICK_TAKE_CELL_DISPATCH, taken);
|
|
74
76
|
write_folded_dispatch(BRICK_TAKE_WORD_DISPATCH, divide_round_up_u32(taken * BRICK_STAGING_WORDS, BRICK_THREAD_WORKGROUP_SIZE));
|
|
77
|
+
write_folded_dispatch(BRICK_TAKE_TEXEL_DISPATCH, taken * ${MESH_SDF_BRICK_TEXELS ** 3 / BRICK_THREAD_WORKGROUP_SIZE}u);
|
|
75
78
|
}
|
|
76
79
|
`, [
|
|
77
80
|
chunk_brick_clipmap,
|
package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts
CHANGED
|
@@ -5,7 +5,11 @@ export type ProbeClipmapDebugView = number;
|
|
|
5
5
|
export namespace ProbeClipmapDebugView {
|
|
6
6
|
let None: number;
|
|
7
7
|
let MeshSDF: number;
|
|
8
|
-
let
|
|
8
|
+
let MeshSurfaces: number;
|
|
9
9
|
let BrickClipmap: number;
|
|
10
|
+
let IndirectDiffuse: number;
|
|
11
|
+
let IndirectSpecular: number;
|
|
12
|
+
let BrickMaterial: number;
|
|
13
|
+
let BrickMetalRough: number;
|
|
10
14
|
}
|
|
11
15
|
//# sourceMappingURL=ProbeClipmapDebugView.d.ts.map
|
|
@@ -9,8 +9,22 @@ export const ProbeClipmapDebugView = {
|
|
|
9
9
|
None: 0,
|
|
10
10
|
/** the scene as its geometry caches have it: camera rays marched through every mesh's sparse field */
|
|
11
11
|
MeshSDF: 1,
|
|
12
|
-
/** the same hits, each shown as its row's
|
|
13
|
-
|
|
12
|
+
/** the same hits, each shown as its row's Model Surface Cache holds it: diffuse albedo plus emissive */
|
|
13
|
+
MeshSurfaces: 2,
|
|
14
14
|
/** the scene as the probe clipmap's rays see it: camera rays traced through the brick clipmap */
|
|
15
15
|
BrickClipmap: 3,
|
|
16
|
+
/**
|
|
17
|
+
* the light the probe clipmap's indirect diffuse is made of: the probes' irradiance at the bent normal over π, what
|
|
18
|
+
* a white Lambertian surface would send back, before the surface's albedo, metalness and occlusion
|
|
19
|
+
*/
|
|
20
|
+
IndirectDiffuse: 4,
|
|
21
|
+
/**
|
|
22
|
+
* the light the probe clipmap's indirect specular is made of: the probes' radiance along the surface's lobe, at
|
|
23
|
+
* its roughness, before its reflectance and occlusion
|
|
24
|
+
*/
|
|
25
|
+
IndirectSpecular: 5,
|
|
26
|
+
/** the scene as the probes' rays read its material, the brick material: diffuse albedo plus emissive */
|
|
27
|
+
BrickMaterial: 6,
|
|
28
|
+
/** the same hits' metalness in red and roughness in green */
|
|
29
|
+
BrickMetalRough: 7,
|
|
16
30
|
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Object} options
|
|
3
|
+
* @param {FrameGraph} options.graph
|
|
4
|
+
* @param {GPUViewContext} options.view
|
|
5
|
+
* @param {number[]} options.resolution
|
|
6
|
+
* @param {GPUBrickClipmap} options.brick_clipmap built this frame, before this pass
|
|
7
|
+
* @param {{write_bindings: function(Object): Object}} options.material what binds the brick material's planes
|
|
8
|
+
* @param {ProbeClipmapDebugBrickMaterialChannel} options.channel
|
|
9
|
+
* @returns {number} graph handle of the `rgba8unorm` image
|
|
10
|
+
*/
|
|
11
|
+
export function graph_probe_clipmap_debug_brick_material({ graph, view, resolution, brick_clipmap, material, channel }: {
|
|
12
|
+
graph: FrameGraph;
|
|
13
|
+
view: GPUViewContext;
|
|
14
|
+
resolution: number[];
|
|
15
|
+
brick_clipmap: GPUBrickClipmap;
|
|
16
|
+
material: {
|
|
17
|
+
write_bindings: (arg0: any) => any;
|
|
18
|
+
};
|
|
19
|
+
channel: ProbeClipmapDebugBrickMaterialChannel;
|
|
20
|
+
}): number;
|
|
21
|
+
/**
|
|
22
|
+
* What {@link graph_probe_clipmap_debug_brick_material } shows of each hit.
|
|
23
|
+
*/
|
|
24
|
+
export type ProbeClipmapDebugBrickMaterialChannel = number;
|
|
25
|
+
export namespace ProbeClipmapDebugBrickMaterialChannel {
|
|
26
|
+
let Albedo: number;
|
|
27
|
+
let MetalRough: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The view's scene as the probes' rays read its material: each pixel's camera ray traced through the
|
|
31
|
+
* brick clipmap as {@link ProbeClipmapDebugView.BrickClipmap} traces it, and the hit's material read as
|
|
32
|
+
* the shade reads a probe ray's (`probe_clipmap_hit_material`), from the brick material: its diffuse
|
|
33
|
+
* albedo plus emissive, or its metalness and roughness.
|
|
34
|
+
*
|
|
35
|
+
* Dark red is a hit whose source does not know its surface, black to the probes; dark blue a back
|
|
36
|
+
* face, which they count and do not shade; magenta a ray whose steps ran out.
|
|
37
|
+
*
|
|
38
|
+
* @type {ImageShader}
|
|
39
|
+
*/
|
|
40
|
+
export const shader_probe_clipmap_debug_brick_material: ImageShader;
|
|
41
|
+
export type FrameGraph = import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
42
|
+
export type GPUViewContext = import("../../../view/GPUViewContext.js").GPUViewContext;
|
|
43
|
+
export type GPUBrickClipmap = import("../brick/GPUBrickClipmap.js").GPUBrickClipmap;
|
|
44
|
+
import { ImageShader } from "../../../shader/ImageShader.js";
|
|
45
|
+
//# sourceMappingURL=graph_probe_clipmap_debug_brick_material.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_probe_clipmap_debug_brick_material.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js"],"names":[],"mappings":"AAsJA;;;;;;;;;GASG;AACH;IAR+B,KAAK,EAAzB,UAAU;IACc,IAAI,EAA5B,cAAc;IACI,UAAU,EAA5B,MAAM,EAAE;IACiB,aAAa,EAAtC,eAAe;IACqC,QAAQ,EAA5D;QAAC,cAAc,qBAA0B;KAAC;IACK,OAAO,EAAtD,qCAAqC;IACnC,MAAM,CAiDlB;;;;oDAtKS,MAAM;;;;;AAuFhB;;;;;;;;;;GAUG;AACH,wDAFU,WAAW,CAWlB;yBA1HU,OAAO,iEAAiE,EAAE,UAAU;6BACpF,OAAO,iCAAiC,EAAE,cAAc;8BACxD,OAAO,6BAA6B,EAAE,eAAe;4BAvBtC,gCAAgC"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { TextureResourceDescriptor } from "../../../../device/graph/TextureResourceDescriptor.js";
|
|
3
|
+
import { CAMERA_UNIFORM_STRUCT } from "../../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
4
|
+
import { chunk_camera_ray_from_uv } from "../../../shader/chunk/geometry/ray/chunk_camera_ray_from_uv.js";
|
|
5
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
6
|
+
import { ImageShader } from "../../../shader/ImageShader.js";
|
|
7
|
+
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
8
|
+
import { ShaderDescriptor } from "../../../shader/ShaderDescriptor.js";
|
|
9
|
+
import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
10
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
11
|
+
import {
|
|
12
|
+
BRICK_ATLAS_TEXTURE_RESOURCE,
|
|
13
|
+
BRICK_LEVELS_RESOURCE,
|
|
14
|
+
BRICK_MAP_TEXTURE_RESOURCE,
|
|
15
|
+
BRICK_OCCUPANCY_TEXTURE_RESOURCE,
|
|
16
|
+
BRICK_SAMPLER_RESOURCE,
|
|
17
|
+
chunk_brick_clipmap_trace
|
|
18
|
+
} from "../brick/chunk_brick_clipmap_trace.js";
|
|
19
|
+
import {
|
|
20
|
+
BRICK_MATERIAL_ALBEDO_RESOURCE,
|
|
21
|
+
BRICK_MATERIAL_EMISSIVE_RESOURCE,
|
|
22
|
+
BRICK_MATERIAL_METAL_ROUGH_RESOURCE
|
|
23
|
+
} from "../material/chunk_brick_material.js";
|
|
24
|
+
import { chunk_probe_clipmap_hit_material, chunk_probe_clipmap_hit_metal_rough } from "../probe/chunk_probe_clipmap_hit_material.js";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
28
|
+
* @typedef {import("../../../view/GPUViewContext.js").GPUViewContext} GPUViewContext
|
|
29
|
+
* @typedef {import("../brick/GPUBrickClipmap.js").GPUBrickClipmap} GPUBrickClipmap
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* As far as a camera ray is traced: past every cascade, where the trace has already missed.
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
const FAR = 1e4;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* What {@link graph_probe_clipmap_debug_brick_material} shows of each hit.
|
|
40
|
+
*
|
|
41
|
+
* @readonly
|
|
42
|
+
* @enum {number}
|
|
43
|
+
*/
|
|
44
|
+
export const ProbeClipmapDebugBrickMaterialChannel = {
|
|
45
|
+
/** diffuse albedo plus emissive */
|
|
46
|
+
Albedo: 0,
|
|
47
|
+
/** metalness in red, roughness in green */
|
|
48
|
+
MetalRough: 1,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @type {WebGPUStruct}
|
|
53
|
+
*/
|
|
54
|
+
const DEBUG_BRICK_MATERIAL_SETTINGS = WebGPUStruct.from({
|
|
55
|
+
cascade_count: u32,
|
|
56
|
+
/** a {@link ProbeClipmapDebugBrickMaterialChannel} */
|
|
57
|
+
channel: u32,
|
|
58
|
+
}, "ProbeClipmapDebugBrickMaterialSettings");
|
|
59
|
+
|
|
60
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
61
|
+
|
|
62
|
+
resources.setImmediate("settings", DEBUG_BRICK_MATERIAL_SETTINGS);
|
|
63
|
+
|
|
64
|
+
resources.createGroup()
|
|
65
|
+
.add(BRICK_LEVELS_RESOURCE)
|
|
66
|
+
.add(BRICK_MAP_TEXTURE_RESOURCE)
|
|
67
|
+
.add(BRICK_OCCUPANCY_TEXTURE_RESOURCE)
|
|
68
|
+
.add(BRICK_ATLAS_TEXTURE_RESOURCE)
|
|
69
|
+
.add(BRICK_SAMPLER_RESOURCE);
|
|
70
|
+
|
|
71
|
+
resources.createGroup()
|
|
72
|
+
.add(BRICK_MATERIAL_ALBEDO_RESOURCE)
|
|
73
|
+
.add(BRICK_MATERIAL_METAL_ROUGH_RESOURCE)
|
|
74
|
+
.add(BRICK_MATERIAL_EMISSIVE_RESOURCE)
|
|
75
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT);
|
|
76
|
+
|
|
77
|
+
const body = CodeChunk.from(
|
|
78
|
+
//language=WGSL
|
|
79
|
+
`
|
|
80
|
+
@fragment
|
|
81
|
+
fn main(
|
|
82
|
+
@builtin(position) coord: vec4<f32>,
|
|
83
|
+
@location(0) uv: vec2<f32>,
|
|
84
|
+
) -> @location(0) vec4<f32> {
|
|
85
|
+
let ray = camera_ray_from_uv(uv, camera);
|
|
86
|
+
|
|
87
|
+
let hit = brick_clipmap_trace(ray.origin, ray.direction, 0.0, ${FAR.toFixed(1)}, settings.cascade_count);
|
|
88
|
+
|
|
89
|
+
if (hit.kind == BRICK_TRACE_MISS) {
|
|
90
|
+
return vec4<f32>(0.08, 0.08, 0.1, 1.0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (hit.kind == BRICK_TRACE_UNRESOLVED) {
|
|
94
|
+
// the march ran out of steps
|
|
95
|
+
return vec4<f32>(1.0, 0.0, 1.0, 1.0);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (dot(hit.normal, ray.direction) > 0.0) {
|
|
99
|
+
// a back face: the probes count it and shade nothing (§8.4)
|
|
100
|
+
return vec4<f32>(0.1, 0.1, 0.4, 1.0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (settings.channel == ${ProbeClipmapDebugBrickMaterialChannel.Albedo}u) {
|
|
104
|
+
let material = probe_clipmap_hit_material(hit.position, hit.normal, hit.cascade);
|
|
105
|
+
|
|
106
|
+
if (!material.found) {
|
|
107
|
+
// the source does not know the surface: the hit is black to the probes
|
|
108
|
+
return vec4<f32>(0.3, 0.0, 0.0, 1.0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return vec4<f32>(material.albedo + material.emissive, 1.0);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let metal_rough = probe_clipmap_hit_metal_rough(hit.position, hit.normal, hit.cascade);
|
|
115
|
+
|
|
116
|
+
if (metal_rough.z == 0.0) {
|
|
117
|
+
return vec4<f32>(0.3, 0.0, 0.0, 1.0);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return vec4<f32>(metal_rough.xy, 0.0, 1.0);
|
|
121
|
+
}
|
|
122
|
+
`, [
|
|
123
|
+
chunk_camera_ray_from_uv,
|
|
124
|
+
chunk_brick_clipmap_trace,
|
|
125
|
+
chunk_probe_clipmap_hit_material,
|
|
126
|
+
chunk_probe_clipmap_hit_metal_rough,
|
|
127
|
+
]);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The view's scene as the probes' rays read its material: each pixel's camera ray traced through the
|
|
131
|
+
* brick clipmap as {@link ProbeClipmapDebugView.BrickClipmap} traces it, and the hit's material read as
|
|
132
|
+
* the shade reads a probe ray's (`probe_clipmap_hit_material`), from the brick material: its diffuse
|
|
133
|
+
* albedo plus emissive, or its metalness and roughness.
|
|
134
|
+
*
|
|
135
|
+
* Dark red is a hit whose source does not know its surface, black to the probes; dark blue a back
|
|
136
|
+
* face, which they count and do not shade; magenta a ray whose steps ran out.
|
|
137
|
+
*
|
|
138
|
+
* @type {ImageShader}
|
|
139
|
+
*/
|
|
140
|
+
export const shader_probe_clipmap_debug_brick_material = new ImageShader({
|
|
141
|
+
descriptor: ShaderDescriptor.from({
|
|
142
|
+
label: "Probe Clipmap Debug / Brick Material",
|
|
143
|
+
resources,
|
|
144
|
+
body,
|
|
145
|
+
}),
|
|
146
|
+
targets: [{
|
|
147
|
+
format: "rgba8unorm"
|
|
148
|
+
}]
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @param {Object} options
|
|
153
|
+
* @param {FrameGraph} options.graph
|
|
154
|
+
* @param {GPUViewContext} options.view
|
|
155
|
+
* @param {number[]} options.resolution
|
|
156
|
+
* @param {GPUBrickClipmap} options.brick_clipmap built this frame, before this pass
|
|
157
|
+
* @param {{write_bindings: function(Object): Object}} options.material what binds the brick material's planes
|
|
158
|
+
* @param {ProbeClipmapDebugBrickMaterialChannel} options.channel
|
|
159
|
+
* @returns {number} graph handle of the `rgba8unorm` image
|
|
160
|
+
*/
|
|
161
|
+
export function graph_probe_clipmap_debug_brick_material({
|
|
162
|
+
graph,
|
|
163
|
+
view,
|
|
164
|
+
resolution,
|
|
165
|
+
brick_clipmap,
|
|
166
|
+
material,
|
|
167
|
+
channel
|
|
168
|
+
}) {
|
|
169
|
+
assert.defined(graph, 'graph');
|
|
170
|
+
assert.defined(view, 'view');
|
|
171
|
+
assert.isArrayLike(resolution, 'resolution');
|
|
172
|
+
assert.defined(brick_clipmap, 'brick_clipmap');
|
|
173
|
+
assert.isFunction(material?.write_bindings, 'material.write_bindings');
|
|
174
|
+
assert.enum(channel, ProbeClipmapDebugBrickMaterialChannel, 'channel');
|
|
175
|
+
|
|
176
|
+
const data = {};
|
|
177
|
+
const settings = { cascade_count: brick_clipmap.cascade_count, channel };
|
|
178
|
+
|
|
179
|
+
const pass = graph.add("Probe Clipmap Debug / Brick Material", data, (data, resources, context) => {
|
|
180
|
+
const output = resources.get(data.output);
|
|
181
|
+
const bindings = {
|
|
182
|
+
settings,
|
|
183
|
+
camera: view.camera.buffer,
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
brick_clipmap.write_bindings(bindings);
|
|
187
|
+
material.write_bindings(bindings);
|
|
188
|
+
|
|
189
|
+
shader_probe_clipmap_debug_brick_material.draw({
|
|
190
|
+
encoder: context.encoder,
|
|
191
|
+
bindings,
|
|
192
|
+
colorAttachments: [{
|
|
193
|
+
loadOp: "clear",
|
|
194
|
+
storeOp: "store",
|
|
195
|
+
clearValue: [0, 0, 0, 1],
|
|
196
|
+
view: output.obtainView(),
|
|
197
|
+
}],
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
data.output = pass.create("probe_clipmap_debug", TextureResourceDescriptor.from({
|
|
202
|
+
format: "rgba8unorm",
|
|
203
|
+
resolution,
|
|
204
|
+
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT,
|
|
205
|
+
}));
|
|
206
|
+
|
|
207
|
+
return data.output;
|
|
208
|
+
}
|