@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
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
5
|
-
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
6
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
7
|
-
import { chunk_mesh_sdf_bake, MESH_SDF_ARENA_RESOURCE } from "../bake/chunk_mesh_sdf_bake.js";
|
|
8
|
-
import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "../bake/MESH_SDF_BAKE.js";
|
|
9
|
-
import { MESH_SDF_HEADERS_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
10
|
-
import { chunk_mesh_cards } from "./chunk_mesh_cards.js";
|
|
11
|
-
import { MESH_CARD_DIRECTIONS } from "./MESH_CARDS.js";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @type {WebGPUStruct}
|
|
15
|
-
*/
|
|
16
|
-
export const MESH_CARDS_MERGE_SETTINGS = WebGPUStruct.from({
|
|
17
|
-
/** the geometry whose cards are placed */
|
|
18
|
-
geometry: u32,
|
|
19
|
-
/** where in `mesh_sdf_take` the page pass's dispatch goes, in words */
|
|
20
|
-
dispatch: u32,
|
|
21
|
-
}, "MeshCardsMergeSettings");
|
|
22
|
-
|
|
23
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
24
|
-
|
|
25
|
-
resources.setImmediate("settings", MESH_CARDS_MERGE_SETTINGS);
|
|
26
|
-
|
|
27
|
-
resources.createGroup()
|
|
28
|
-
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
29
|
-
.add(MESH_SDF_ARENA_RESOURCE)
|
|
30
|
-
.addStorageBuffer("mesh_sdf_take", WebGPUArray.u32, true);
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Card placement, step 3 (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6.5): one thread. The six directions'
|
|
34
|
-
* splits are taken in order of gain, as the greedy search over all six would take them, until the
|
|
35
|
-
* gains run out or the geometry has MESH_CARD_MAX cards. Every run start is then covered, or the
|
|
36
|
-
* ceiling has left some uncovered, which read the material mean.
|
|
37
|
-
*
|
|
38
|
-
* The cards are written direction by direction, each direction's cards by their near layer. Each
|
|
39
|
-
* card records its direction, its slab, and where its column table starts: a word for each column of
|
|
40
|
-
* its direction, laid out card after card. The layout's header gets the card count, each direction's
|
|
41
|
-
* first card, and the columns over every card. The page pass's dispatch goes to `mesh_sdf_take`: a
|
|
42
|
-
* thread a column.
|
|
43
|
-
*
|
|
44
|
-
* @type {ComputeShader}
|
|
45
|
-
*/
|
|
46
|
-
export const shader_mesh_cards_merge = ComputeShader.from({
|
|
47
|
-
label: "Mesh Cards Merge",
|
|
48
|
-
resources,
|
|
49
|
-
body: CodeChunk.from(
|
|
50
|
-
//language=WGSL
|
|
51
|
-
`
|
|
52
|
-
@compute @workgroup_size(1)
|
|
53
|
-
fn main() {
|
|
54
|
-
let header = mesh_sdf_headers[settings.geometry];
|
|
55
|
-
let parts = mesh_card_placement_of(header.bricks);
|
|
56
|
-
let base = header.cards;
|
|
57
|
-
|
|
58
|
-
// each direction's next split, and its card starts so far: layer 0 starts the whole-grid card
|
|
59
|
-
var next = array<u32, ${MESH_CARD_DIRECTIONS}>();
|
|
60
|
-
var bounds = array<vec2<u32>, ${MESH_CARD_DIRECTIONS}>();
|
|
61
|
-
|
|
62
|
-
for (var d = 0u; d < MESH_CARD_DIRECTIONS; d++) {
|
|
63
|
-
bounds[d] = vec2<u32>(1u, 0u);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
for (var taken = 0u; taken < MESH_CARD_SPLITS_MAX; taken++) {
|
|
67
|
-
var best = MESH_CARD_DIRECTIONS;
|
|
68
|
-
var best_gain = 0u;
|
|
69
|
-
|
|
70
|
-
for (var d = 0u; d < MESH_CARD_DIRECTIONS; d++) {
|
|
71
|
-
if (next[d] >= MESH_CARD_SPLITS_MAX) {
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
let gain = atomicLoad(&mesh_sdf_indirection[base + parts.splits + (d * MESH_CARD_SPLITS_MAX + next[d]) * 2u]);
|
|
76
|
-
|
|
77
|
-
if (gain > best_gain) {
|
|
78
|
-
best_gain = gain;
|
|
79
|
-
best = d;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (best == MESH_CARD_DIRECTIONS) {
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
let layer = atomicLoad(&mesh_sdf_indirection[base + parts.splits + (best * MESH_CARD_SPLITS_MAX + next[best]) * 2u + 1u]);
|
|
88
|
-
|
|
89
|
-
bounds[best][layer >> 5u] |= 1u << (layer & 31u);
|
|
90
|
-
next[best]++;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
var cards = 0u;
|
|
94
|
-
var columns = 0u;
|
|
95
|
-
|
|
96
|
-
for (var d = 0u; d < MESH_CARD_DIRECTIONS; d++) {
|
|
97
|
-
let extent = mesh_card_extent(header.bricks, d);
|
|
98
|
-
let bound = bounds[d];
|
|
99
|
-
|
|
100
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_DIRECTION_FIRST + d], cards);
|
|
101
|
-
|
|
102
|
-
var near = 0u;
|
|
103
|
-
|
|
104
|
-
while (near < extent.x) {
|
|
105
|
-
var far = near + 1u;
|
|
106
|
-
|
|
107
|
-
while (far < extent.x && ((bound[far >> 5u] >> (far & 31u)) & 1u) == 0u) {
|
|
108
|
-
far++;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
let record = base + MESH_CARD_LAYOUT_RECORDS + cards * MESH_CARD_RECORD_WORDS;
|
|
112
|
-
|
|
113
|
-
atomicStore(&mesh_sdf_indirection[record + MESH_CARD_RECORD_DIRECTION], d);
|
|
114
|
-
atomicStore(&mesh_sdf_indirection[record + MESH_CARD_RECORD_NEAR], near);
|
|
115
|
-
atomicStore(&mesh_sdf_indirection[record + MESH_CARD_RECORD_FAR], far);
|
|
116
|
-
atomicStore(&mesh_sdf_indirection[record + MESH_CARD_RECORD_TABLE], columns);
|
|
117
|
-
|
|
118
|
-
cards++;
|
|
119
|
-
columns += extent.y * extent.z;
|
|
120
|
-
near = far;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_CARD_COUNT], cards);
|
|
125
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_COLUMN_COUNT], columns);
|
|
126
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_PAGE_COUNT], 0u);
|
|
127
|
-
|
|
128
|
-
mesh_sdf_take[settings.dispatch] = (columns + ${MESH_SDF_BAKE_WORKGROUP_SIZE - 1}u) / ${MESH_SDF_BAKE_WORKGROUP_SIZE}u;
|
|
129
|
-
mesh_sdf_take[settings.dispatch + 1u] = 1u;
|
|
130
|
-
mesh_sdf_take[settings.dispatch + 2u] = 1u;
|
|
131
|
-
}
|
|
132
|
-
`, [
|
|
133
|
-
chunk_mesh_sdf_bake,
|
|
134
|
-
chunk_mesh_cards,
|
|
135
|
-
]),
|
|
136
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @type {WebGPUStruct}
|
|
3
|
-
*/
|
|
4
|
-
export const MESH_CARDS_PAGES_SETTINGS: WebGPUStruct;
|
|
5
|
-
/**
|
|
6
|
-
* Card placement, step 4 (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6.5): a thread a column of every card,
|
|
7
|
-
* dispatched by the merge. A card has a page in a column when its slab holds an occupied brick
|
|
8
|
-
* there; the page is the column's 8×8 texels on the corner lattice of the bricks' faces.
|
|
9
|
-
*
|
|
10
|
-
* A column with a page takes the next page index, and writes it into its card's column table and
|
|
11
|
-
* itself into the page list: its card, then its column's u and v, a byte each. A column without one
|
|
12
|
-
* writes MESH_CARD_NO_PAGE. The pages come out in whatever order the threads take them. Capture
|
|
13
|
-
* walks the page list and a hit reads the column table, so neither needs another order.
|
|
14
|
-
*
|
|
15
|
-
* @type {ComputeShader}
|
|
16
|
-
*/
|
|
17
|
-
export const shader_mesh_cards_pages: ComputeShader;
|
|
18
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
19
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
20
|
-
//# sourceMappingURL=shader_mesh_cards_pages.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_cards_pages.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js"],"names":[],"mappings":"AAUA;;GAEG;AACH,wCAFU,YAAY,CAKO;AAU7B;;;;;;;;;;;GAWG;AACH,sCAFU,aAAa,CAmEpB;6BAnG0B,sCAAsC;8BAHrC,kCAAkC"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
5
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
6
|
-
import { chunk_mesh_sdf_bake, MESH_SDF_ARENA_RESOURCE } from "../bake/chunk_mesh_sdf_bake.js";
|
|
7
|
-
import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "../bake/MESH_SDF_BAKE.js";
|
|
8
|
-
import { MESH_SDF_HEADERS_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
9
|
-
import { chunk_mesh_cards } from "./chunk_mesh_cards.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @type {WebGPUStruct}
|
|
13
|
-
*/
|
|
14
|
-
export const MESH_CARDS_PAGES_SETTINGS = WebGPUStruct.from({
|
|
15
|
-
/** the geometry whose cards are placed */
|
|
16
|
-
geometry: u32,
|
|
17
|
-
}, "MeshCardsPagesSettings");
|
|
18
|
-
|
|
19
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
20
|
-
|
|
21
|
-
resources.setImmediate("settings", MESH_CARDS_PAGES_SETTINGS);
|
|
22
|
-
|
|
23
|
-
resources.createGroup()
|
|
24
|
-
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
25
|
-
.add(MESH_SDF_ARENA_RESOURCE);
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Card placement, step 4 (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6.5): a thread a column of every card,
|
|
29
|
-
* dispatched by the merge. A card has a page in a column when its slab holds an occupied brick
|
|
30
|
-
* there; the page is the column's 8×8 texels on the corner lattice of the bricks' faces.
|
|
31
|
-
*
|
|
32
|
-
* A column with a page takes the next page index, and writes it into its card's column table and
|
|
33
|
-
* itself into the page list: its card, then its column's u and v, a byte each. A column without one
|
|
34
|
-
* writes MESH_CARD_NO_PAGE. The pages come out in whatever order the threads take them. Capture
|
|
35
|
-
* walks the page list and a hit reads the column table, so neither needs another order.
|
|
36
|
-
*
|
|
37
|
-
* @type {ComputeShader}
|
|
38
|
-
*/
|
|
39
|
-
export const shader_mesh_cards_pages = ComputeShader.from({
|
|
40
|
-
label: "Mesh Cards Pages",
|
|
41
|
-
resources,
|
|
42
|
-
body: CodeChunk.from(
|
|
43
|
-
//language=WGSL
|
|
44
|
-
`
|
|
45
|
-
@compute @workgroup_size(${MESH_SDF_BAKE_WORKGROUP_SIZE})
|
|
46
|
-
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
47
|
-
let header = mesh_sdf_headers[settings.geometry];
|
|
48
|
-
let base = header.cards;
|
|
49
|
-
let bricks = header.bricks;
|
|
50
|
-
|
|
51
|
-
let thread = id.x;
|
|
52
|
-
let columns = atomicLoad(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_COLUMN_COUNT]);
|
|
53
|
-
|
|
54
|
-
if (thread >= columns) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// the card whose columns hold the thread: the last whose table starts at or before it
|
|
59
|
-
let cards = atomicLoad(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_CARD_COUNT]);
|
|
60
|
-
|
|
61
|
-
var card = 0u;
|
|
62
|
-
|
|
63
|
-
for (var c = 1u; c < cards; c++) {
|
|
64
|
-
if (atomicLoad(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_RECORDS + c * MESH_CARD_RECORD_WORDS + MESH_CARD_RECORD_TABLE]) > thread) {
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
card = c;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
let record = base + MESH_CARD_LAYOUT_RECORDS + card * MESH_CARD_RECORD_WORDS;
|
|
72
|
-
let direction = atomicLoad(&mesh_sdf_indirection[record + MESH_CARD_RECORD_DIRECTION]);
|
|
73
|
-
let near = atomicLoad(&mesh_sdf_indirection[record + MESH_CARD_RECORD_NEAR]);
|
|
74
|
-
let far = atomicLoad(&mesh_sdf_indirection[record + MESH_CARD_RECORD_FAR]);
|
|
75
|
-
let table = atomicLoad(&mesh_sdf_indirection[record + MESH_CARD_RECORD_TABLE]);
|
|
76
|
-
|
|
77
|
-
let extent = mesh_card_extent(bricks, direction);
|
|
78
|
-
let index = thread - table;
|
|
79
|
-
let column = vec2<u32>(index % extent.y, index / extent.y);
|
|
80
|
-
|
|
81
|
-
var seen = false;
|
|
82
|
-
|
|
83
|
-
for (var layer = near; layer < far && !seen; layer++) {
|
|
84
|
-
let brick = mesh_card_brick(bricks, direction, column, layer);
|
|
85
|
-
|
|
86
|
-
seen = mesh_sdf_entry_holds_slot(atomicLoad(&mesh_sdf_indirection[header.indirection + brick.x + bricks.x * (brick.y + bricks.y * brick.z)]));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
var page = MESH_CARD_NO_PAGE;
|
|
90
|
-
|
|
91
|
-
if (seen) {
|
|
92
|
-
page = atomicAdd(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_PAGE_COUNT], 1u);
|
|
93
|
-
|
|
94
|
-
// the page list follows the tables
|
|
95
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_TABLES + columns + page], (card << 16u) | (column.y << 8u) | column.x);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
atomicStore(&mesh_sdf_indirection[base + MESH_CARD_LAYOUT_TABLES + thread], page);
|
|
99
|
-
}
|
|
100
|
-
`, [
|
|
101
|
-
chunk_mesh_sdf_bake,
|
|
102
|
-
chunk_mesh_cards,
|
|
103
|
-
]),
|
|
104
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Threads a workgroup of {@link shader_mesh_cards_raster_args}.
|
|
3
|
-
* @type {number}
|
|
4
|
-
*/
|
|
5
|
-
export const MESH_CARDS_RASTER_ARGS_WORKGROUP_SIZE: number;
|
|
6
|
-
/**
|
|
7
|
-
* @type {WebGPUStruct}
|
|
8
|
-
*/
|
|
9
|
-
export const MESH_CARDS_RASTER_ARGS_SETTINGS: WebGPUStruct;
|
|
10
|
-
/**
|
|
11
|
-
* Card capture by raster, step 1: a thread a run, writing its draw. The draw is every card of the
|
|
12
|
-
* layout times every meshlet of the geometry, as instances, at a meshlet's worth of vertices: the
|
|
13
|
-
* card count is the device's, so the draw follows it rather than {@link MESH_CARD_MAX}.
|
|
14
|
-
*
|
|
15
|
-
* @type {ComputeShader}
|
|
16
|
-
*/
|
|
17
|
-
export const shader_mesh_cards_raster_args: ComputeShader;
|
|
18
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
19
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
20
|
-
//# sourceMappingURL=shader_mesh_cards_raster_args.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_cards_raster_args.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js"],"names":[],"mappings":"AAcA;;;GAGG;AACH,oDAFU,MAAM,CAEwC;AAExD;;GAEG;AACH,8CAFU,YAAY,CAKY;AAclC;;;;;;GAMG;AACH,4CAFU,aAAa,CAkCpB;6BAzE0B,sCAAsC;8BAJrC,kCAAkC"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { STRUCT_UNINDEXED_DRAW_COMMAND } from "../../../gpu_primitive/indirect/STRUCT_UNINDEXED_DRAW_COMMAND.js";
|
|
2
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
3
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
4
|
-
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
5
|
-
import { u32, vec4u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
6
|
-
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
7
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
8
|
-
import { GEOMETRY_METADATA_STRUCT } from "../../GEOMETRY_METADATA_STRUCT.js";
|
|
9
|
-
import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../../meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
|
|
10
|
-
import { MESH_SDF_HEADERS_RESOURCE, MESH_SDF_INDIRECTION_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
11
|
-
import { chunk_mesh_cards } from "./chunk_mesh_cards.js";
|
|
12
|
-
import { MESH_CARD_SETS_RESOURCE } from "./MESH_CARD_RESOURCES.js";
|
|
13
|
-
import { MESH_CARD_SET_STRUCT } from "./MESH_CARD_SET_STRUCT.js";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Threads a workgroup of {@link shader_mesh_cards_raster_args}.
|
|
17
|
-
* @type {number}
|
|
18
|
-
*/
|
|
19
|
-
export const MESH_CARDS_RASTER_ARGS_WORKGROUP_SIZE = 64;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @type {WebGPUStruct}
|
|
23
|
-
*/
|
|
24
|
-
export const MESH_CARDS_RASTER_ARGS_SETTINGS = WebGPUStruct.from({
|
|
25
|
-
/** raster runs this frame */
|
|
26
|
-
run_count: u32,
|
|
27
|
-
}, "MeshCardsRasterArgsSettings");
|
|
28
|
-
|
|
29
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
30
|
-
|
|
31
|
-
resources.setImmediate("settings", MESH_CARDS_RASTER_ARGS_SETTINGS);
|
|
32
|
-
|
|
33
|
-
resources.createGroup()
|
|
34
|
-
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
35
|
-
.add(MESH_SDF_INDIRECTION_RESOURCE)
|
|
36
|
-
.add(MESH_CARD_SETS_RESOURCE)
|
|
37
|
-
.addStorageBuffer("mesh_card_raster_runs", WebGPUArray.from(vec4u))
|
|
38
|
-
.addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
|
|
39
|
-
.addStorageBuffer("mesh_card_raster_draws", WebGPUArray.from(STRUCT_UNINDEXED_DRAW_COMMAND), true);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Card capture by raster, step 1: a thread a run, writing its draw. The draw is every card of the
|
|
43
|
-
* layout times every meshlet of the geometry, as instances, at a meshlet's worth of vertices: the
|
|
44
|
-
* card count is the device's, so the draw follows it rather than {@link MESH_CARD_MAX}.
|
|
45
|
-
*
|
|
46
|
-
* @type {ComputeShader}
|
|
47
|
-
*/
|
|
48
|
-
export const shader_mesh_cards_raster_args = ComputeShader.from({
|
|
49
|
-
label: "Mesh Cards Raster Args",
|
|
50
|
-
resources,
|
|
51
|
-
body: CodeChunk.from(
|
|
52
|
-
//language=WGSL
|
|
53
|
-
`
|
|
54
|
-
@compute @workgroup_size(${MESH_CARDS_RASTER_ARGS_WORKGROUP_SIZE})
|
|
55
|
-
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
56
|
-
let run = id.x;
|
|
57
|
-
|
|
58
|
-
if (run >= settings.run_count) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
let card_set = mesh_card_sets[mesh_card_raster_runs[run].y];
|
|
63
|
-
let cards = mesh_sdf_indirection[mesh_sdf_headers[card_set.geometry].cards + MESH_CARD_LAYOUT_CARD_COUNT];
|
|
64
|
-
|
|
65
|
-
var draw: ${STRUCT_UNINDEXED_DRAW_COMMAND.wgsl_ref};
|
|
66
|
-
|
|
67
|
-
draw.vertexCount = ${GEOMETRY_MESHLET_TRIANGLE_LIMIT * 3}u;
|
|
68
|
-
draw.instanceCount = min(cards, MESH_CARD_MAX) * geometries[card_set.geometry].meshlets_count;
|
|
69
|
-
draw.firstVertex = 0u;
|
|
70
|
-
draw.firstInstance = 0u;
|
|
71
|
-
|
|
72
|
-
mesh_card_raster_draws[run] = draw;
|
|
73
|
-
}
|
|
74
|
-
`, [
|
|
75
|
-
STRUCT_UNINDEXED_DRAW_COMMAND.declaration_chunk,
|
|
76
|
-
GEOMETRY_METADATA_STRUCT.declaration_chunk,
|
|
77
|
-
MESH_CARD_SET_STRUCT.declaration_chunk,
|
|
78
|
-
chunk_mesh_cards,
|
|
79
|
-
]),
|
|
80
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @type {WebGPUStruct}
|
|
3
|
-
*/
|
|
4
|
-
export const MESH_CARDS_RASTER_SCATTER_SETTINGS: WebGPUStruct;
|
|
5
|
-
/**
|
|
6
|
-
* Card capture by raster, step 3: a thread a texel of each page of the frame's raster runs, a whole
|
|
7
|
-
* card set each, moving the texel from its card's cell of the scratch into the page's atlas tile.
|
|
8
|
-
* The thread → (run, page, texel) mapping is the trace's: the runs' first threads are ascending.
|
|
9
|
-
*
|
|
10
|
-
* Page texel (x, y) of column (u, v) is lattice point (7u + x, 7v + y) of the card, texel
|
|
11
|
-
* (7u + x, 7v + y) of its cell: a page's last texel and the next column's first are one texel.
|
|
12
|
-
*
|
|
13
|
-
* @type {ComputeShader}
|
|
14
|
-
*/
|
|
15
|
-
export const shader_mesh_cards_raster_scatter: ComputeShader;
|
|
16
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
17
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
18
|
-
//# sourceMappingURL=shader_mesh_cards_raster_scatter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_cards_raster_scatter.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js"],"names":[],"mappings":"AAcA;;GAEG;AACH,iDAFU,YAAY,CASe;AAgBrC;;;;;;;;;GASG;AACH,+CAFU,aAAa,CAgEpB;6BA1G0B,sCAAsC;8BAJrC,kCAAkC"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { chunk_index_to_grid2d } from "../../../shader/chunk/grid/chunk_index_to_grid2d.js";
|
|
2
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
3
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
4
|
-
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
5
|
-
import { u32, vec4u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
6
|
-
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
7
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
8
|
-
import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "../bake/MESH_SDF_BAKE.js";
|
|
9
|
-
import { MESH_SDF_HEADERS_RESOURCE, MESH_SDF_INDIRECTION_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
10
|
-
import { chunk_mesh_cards } from "./chunk_mesh_cards.js";
|
|
11
|
-
import { MESH_CARD_SETS_RESOURCE } from "./MESH_CARD_RESOURCES.js";
|
|
12
|
-
import { MESH_CARD_SET_STRUCT } from "./MESH_CARD_SET_STRUCT.js";
|
|
13
|
-
import { MESH_CARD_RASTER_CELLS_X } from "./mesh_cards_raster_pass_descriptor.js";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @type {WebGPUStruct}
|
|
17
|
-
*/
|
|
18
|
-
export const MESH_CARDS_RASTER_SCATTER_SETTINGS = WebGPUStruct.from({
|
|
19
|
-
/** raster runs this frame */
|
|
20
|
-
run_count: u32,
|
|
21
|
-
/** texels over every run's pages: the threads that do work */
|
|
22
|
-
thread_count: u32,
|
|
23
|
-
/** workgroups along x, the rest folded into y */
|
|
24
|
-
groups_x: u32,
|
|
25
|
-
}, "MeshCardsRasterScatterSettings");
|
|
26
|
-
|
|
27
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
28
|
-
|
|
29
|
-
resources.setImmediate("settings", MESH_CARDS_RASTER_SCATTER_SETTINGS);
|
|
30
|
-
|
|
31
|
-
resources.createGroup()
|
|
32
|
-
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
33
|
-
.add(MESH_SDF_INDIRECTION_RESOURCE)
|
|
34
|
-
.add(MESH_CARD_SETS_RESOURCE)
|
|
35
|
-
.addStorageBuffer("mesh_card_raster_runs", WebGPUArray.from(vec4u))
|
|
36
|
-
.addTexture("mesh_card_raster_albedo", "float", "2d")
|
|
37
|
-
.addTexture("mesh_card_raster_emissive", "float", "2d")
|
|
38
|
-
.addStorageTexture("mesh_card_albedo", "rgba8unorm", "2d", "write-only")
|
|
39
|
-
.addStorageTexture("mesh_card_emissive", "rgba8unorm", "2d", "write-only");
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Card capture by raster, step 3: a thread a texel of each page of the frame's raster runs, a whole
|
|
43
|
-
* card set each, moving the texel from its card's cell of the scratch into the page's atlas tile.
|
|
44
|
-
* The thread → (run, page, texel) mapping is the trace's: the runs' first threads are ascending.
|
|
45
|
-
*
|
|
46
|
-
* Page texel (x, y) of column (u, v) is lattice point (7u + x, 7v + y) of the card, texel
|
|
47
|
-
* (7u + x, 7v + y) of its cell: a page's last texel and the next column's first are one texel.
|
|
48
|
-
*
|
|
49
|
-
* @type {ComputeShader}
|
|
50
|
-
*/
|
|
51
|
-
export const shader_mesh_cards_raster_scatter = ComputeShader.from({
|
|
52
|
-
label: "Mesh Cards Raster Scatter",
|
|
53
|
-
resources,
|
|
54
|
-
body: CodeChunk.from(
|
|
55
|
-
//language=WGSL
|
|
56
|
-
`
|
|
57
|
-
@compute @workgroup_size(${MESH_SDF_BAKE_WORKGROUP_SIZE})
|
|
58
|
-
fn main(
|
|
59
|
-
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
60
|
-
@builtin(local_invocation_index) lane: u32,
|
|
61
|
-
) {
|
|
62
|
-
let thread = (workgroup_id.y * settings.groups_x + workgroup_id.x) * ${MESH_SDF_BAKE_WORKGROUP_SIZE}u + lane;
|
|
63
|
-
|
|
64
|
-
if (thread >= settings.thread_count) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// the run the thread falls in: the last whose first thread is at or below it
|
|
69
|
-
var low = 0u;
|
|
70
|
-
var high = settings.run_count;
|
|
71
|
-
|
|
72
|
-
while (high - low > 1u) {
|
|
73
|
-
let middle = (low + high) / 2u;
|
|
74
|
-
|
|
75
|
-
if (mesh_card_raster_runs[middle].x <= thread) {
|
|
76
|
-
low = middle;
|
|
77
|
-
} else {
|
|
78
|
-
high = middle;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
let run = mesh_card_raster_runs[low];
|
|
83
|
-
let card_set = mesh_card_sets[run.y];
|
|
84
|
-
|
|
85
|
-
let page_texels = MESH_CARD_PAGE_TEXELS * MESH_CARD_PAGE_TEXELS;
|
|
86
|
-
let within = thread - run.x;
|
|
87
|
-
let page = within / page_texels;
|
|
88
|
-
let texel = vec2<u32>(within % MESH_CARD_PAGE_TEXELS, (within / MESH_CARD_PAGE_TEXELS) % MESH_CARD_PAGE_TEXELS);
|
|
89
|
-
|
|
90
|
-
let header = mesh_sdf_headers[card_set.geometry];
|
|
91
|
-
let columns = mesh_sdf_indirection[header.cards + MESH_CARD_LAYOUT_COLUMN_COUNT];
|
|
92
|
-
|
|
93
|
-
// the page list follows the tables
|
|
94
|
-
let listed = mesh_sdf_indirection[header.cards + MESH_CARD_LAYOUT_TABLES + columns + page];
|
|
95
|
-
let card = listed >> 16u;
|
|
96
|
-
let column = vec2<u32>(listed & 0xffu, (listed >> 8u) & 0xffu);
|
|
97
|
-
|
|
98
|
-
let corner = vec2<u32>(run.z & 0xffffu, run.z >> 16u)
|
|
99
|
-
+ vec2<u32>(card % ${MESH_CARD_RASTER_CELLS_X}u, card / ${MESH_CARD_RASTER_CELLS_X}u) * run.w;
|
|
100
|
-
let drawn = corner + column * MESH_SDF_BRICK_VOXELS + texel;
|
|
101
|
-
|
|
102
|
-
let tiles_per_row = textureDimensions(mesh_card_albedo).x / MESH_CARD_PAGE_TEXELS;
|
|
103
|
-
let stored = index_to_grid2d(card_set.page_base + page, tiles_per_row) * MESH_CARD_PAGE_TEXELS + texel;
|
|
104
|
-
|
|
105
|
-
textureStore(mesh_card_albedo, stored, textureLoad(mesh_card_raster_albedo, drawn, 0));
|
|
106
|
-
textureStore(mesh_card_emissive, stored, textureLoad(mesh_card_raster_emissive, drawn, 0));
|
|
107
|
-
}
|
|
108
|
-
`, [
|
|
109
|
-
MESH_CARD_SET_STRUCT.declaration_chunk,
|
|
110
|
-
chunk_mesh_cards,
|
|
111
|
-
chunk_index_to_grid2d,
|
|
112
|
-
]),
|
|
113
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @type {WebGPUStruct}
|
|
3
|
-
*/
|
|
4
|
-
export const MESH_CARDS_SPLIT_SETTINGS: WebGPUStruct;
|
|
5
|
-
/**
|
|
6
|
-
* Card placement, step 2 (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §6.5): a thread a direction runs its
|
|
7
|
-
* greedy search. The direction starts with one card over the whole grid, its outer projection, and
|
|
8
|
-
* each split takes the layer that newly covers the most run starts.
|
|
9
|
-
*
|
|
10
|
-
* Within a direction the cards partition the layers. A run start (m, z) lies in the card whose
|
|
11
|
-
* layers hold z, and is covered when that card's near face is at or before m. A split of card
|
|
12
|
-
* [k₀, k₁) at layer s gives the far part [s, k₁), which newly covers the uncovered run starts with
|
|
13
|
-
* k₀ < m ≤ s ≤ z < k₁. The near part keeps its own, so coverage never shrinks. That count is a
|
|
14
|
-
* rectangle of the (m, z) histogram, read from its 2-D prefix sums in four loads.
|
|
15
|
-
*
|
|
16
|
-
* A direction's gains never grow from one split to the next, and splits along one direction leave
|
|
17
|
-
* the others' gains alone. Merging the six directions' sequences by gain is therefore the greedy
|
|
18
|
-
* search over all six, which the merge does. The splits are written in the order taken, (gain,
|
|
19
|
-
* layer) each, MESH_CARD_SPLITS_MAX at most; the first gain of 0 ends the sequence.
|
|
20
|
-
*
|
|
21
|
-
* Runs on the device as the bake does, a pass with nothing to wait on, though the six threads do
|
|
22
|
-
* work a frame's passes must not: the prefix sums over every (m, z) of the direction, and up to 26
|
|
23
|
-
* scans of its layers. It runs once for each geometry that turns resident.
|
|
24
|
-
*
|
|
25
|
-
* @type {ComputeShader}
|
|
26
|
-
*/
|
|
27
|
-
export const shader_mesh_cards_split: ComputeShader;
|
|
28
|
-
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
29
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
30
|
-
//# sourceMappingURL=shader_mesh_cards_split.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_cards_split.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js"],"names":[],"mappings":"AAUA;;GAEG;AACH,wCAFU,YAAY,CAKO;AAU7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,sCAFU,aAAa,CAmGpB;6BA7I0B,sCAAsC;8BAHrC,kCAAkC"}
|