@woosh/meep-engine 3.61.1 → 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/network/sim/SimActionExecutor.d.ts +4 -0
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.js +4 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_atlas_cutout.js +21 -5
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +178 -78
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +178 -97
- package/src/generation/foliage/skeleton/ShootLightField.d.ts +1 -0
- package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootLightField.js +88 -17
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts +5 -2
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootWoodHash.js +191 -25
- 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 +4 -5
- package/src/shade/playground/probe_clipmap_box/README.md +55 -0
- package/src/shade/playground/probe_clipmap_box/index.html +185 -0
- package/src/shade/playground/probe_clipmap_box/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap_box/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap_box/main.js +323 -0
- package/src/shade/playground/probe_clipmap_box/scene.d.ts +93 -0
- package/src/shade/playground/probe_clipmap_box/scene.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap_box/scene.js +256 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +56 -12
- 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/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.d.ts +12 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_decode.js +49 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.d.ts +12 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_brick4_sh3_color_encode.js +50 -19
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_sh3_compress.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v2/chunk_sh3_compress.js +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +89 -20
- 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 +23 -12
- 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 +72 -52
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +32 -0
- 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 +37 -0
- 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 +55 -23
- 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 +134 -69
- 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 +4 -3
- 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 +19 -24
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +14 -19
- 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_accumulate.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +8 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +5 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +18 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.js +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +4 -6
- 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 +9 -8
- 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_project.d.ts +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +14 -13
- 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 -6
- 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 +19 -21
- 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/light/environment/shader_downsample_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_downsample_environment_map.js +5 -1
- 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/eye/GPUCameraExposureManager.d.ts +26 -8
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +170 -142
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +5 -8
- 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/filter/chunk_multiscale_mean.d.ts +15 -4
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +33 -7
- 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/noise/chunk_sobol_sample_vec2.d.ts +40 -0
- package/src/shade/renderer/shader/chunk/noise/chunk_sobol_sample_vec2.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/chunk_sobol_sample_vec2.js +75 -0
- package/src/shade/renderer/shader/chunk/noise/chunk_vdc_radical_inverse.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_vdc_radical_inverse.js +3 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.d.ts +28 -0
- package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_hash_lk.js +41 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.js +24 -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/irradiance_clipmap/GPUIrradianceClipmap.d.ts +3 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +4 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +2 -5
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +3 -20
- 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/chunk_water_gi.d.ts +1 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +6 -8
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +76 -32
- package/src/core/math/hash/squirrel3.d.ts +0 -17
- package/src/core/math/hash/squirrel3.d.ts.map +0 -1
- package/src/core/math/hash/squirrel3.js +0 -30
- 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/shader/chunk/random/chunk_hash_squirrel3.d.ts +0 -12
- package/src/shade/renderer/shader/chunk/random/chunk_hash_squirrel3.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_squirrel3.js +0 -30
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { chunk_generate_next_linear_congruential_index } from "../../../gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.js";
|
|
2
|
+
import { chunk_slot_stack } from "../../../gpu_primitive/slot_stack/chunk_slot_stack.js";
|
|
3
|
+
import { chunk_hash_lowbias32 } from "../../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
4
|
+
import { chunk_subgroup_atomic_add } from "../../../shader/chunk/subgroup/chunk_subgroup_atomic_add.js";
|
|
5
|
+
import { chunk_subgroup_atomic_load } from "../../../shader/chunk/subgroup/chunk_subgroup_atomic_load.js";
|
|
6
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
7
|
+
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
8
|
+
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
9
|
+
import { u32, vec4u } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
10
|
+
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
11
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
12
|
+
import { chunk_tile_atlas_slot_origin } from "../../../texture/atlas/chunk_tile_atlas_slot_origin.js";
|
|
13
|
+
import { MESH_SDF_ATLAS_RESOURCE, MESH_SDF_HEADERS_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
14
|
+
import { chunk_mesh_sdf_bake, MESH_SDF_ARENA_RESOURCE } from "./chunk_mesh_sdf_bake.js";
|
|
15
|
+
import {
|
|
16
|
+
chunk_mesh_sdf_contents,
|
|
17
|
+
MESH_SDF_CONTENT_TABLE_RESOURCE,
|
|
18
|
+
MESH_SDF_CONTENTS_RESOURCE
|
|
19
|
+
} from "./chunk_mesh_sdf_contents.js";
|
|
20
|
+
import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "./MESH_SDF_BAKE.js";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @type {WebGPUStruct}
|
|
24
|
+
*/
|
|
25
|
+
export const MESH_SDF_RESOLVE_SETTINGS = WebGPUStruct.from({
|
|
26
|
+
/** entries of `mesh_sdf_ring`, a power of two; the staging starts here */
|
|
27
|
+
ring_capacity: u32,
|
|
28
|
+
/** slots the stack holds */
|
|
29
|
+
slot_capacity: u32,
|
|
30
|
+
/** where the frame's log starts in the arena */
|
|
31
|
+
log_offset: u32,
|
|
32
|
+
/** where the records of the frame's bricks taken start in the arena, MESH_SDF_TAKEN_WORDS each */
|
|
33
|
+
tally_offset: u32,
|
|
34
|
+
/** where the frame's claims start in the arena */
|
|
35
|
+
claim_offset: u32,
|
|
36
|
+
/** records of the frame's claims, a power of two, no fewer than the probe limit */
|
|
37
|
+
claim_size: u32,
|
|
38
|
+
}, "MeshSDFResolveSettings");
|
|
39
|
+
|
|
40
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
41
|
+
|
|
42
|
+
resources.setImmediate("settings", MESH_SDF_RESOLVE_SETTINGS);
|
|
43
|
+
|
|
44
|
+
resources.createGroup()
|
|
45
|
+
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
46
|
+
.addStorageBuffer("mesh_sdf_ring", WebGPUArray.from(vec4u))
|
|
47
|
+
.addStorageBuffer("mesh_sdf_take", WebGPUArray.u32)
|
|
48
|
+
.add(MESH_SDF_ARENA_RESOURCE)
|
|
49
|
+
.addStorageBuffer("mesh_sdf_slots", WebGPUArray.u32, true)
|
|
50
|
+
.add(MESH_SDF_CONTENTS_RESOURCE)
|
|
51
|
+
.add(MESH_SDF_CONTENT_TABLE_RESOURCE);
|
|
52
|
+
|
|
53
|
+
const compare_resources = new ShaderResourceSetDescriptor();
|
|
54
|
+
|
|
55
|
+
compare_resources.setImmediate("settings", MESH_SDF_RESOLVE_SETTINGS);
|
|
56
|
+
|
|
57
|
+
compare_resources.createGroup()
|
|
58
|
+
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
59
|
+
.addStorageBuffer("mesh_sdf_ring", WebGPUArray.from(vec4u))
|
|
60
|
+
.addStorageBuffer("mesh_sdf_take", WebGPUArray.u32)
|
|
61
|
+
.add(MESH_SDF_ARENA_RESOURCE)
|
|
62
|
+
.add(MESH_SDF_ATLAS_RESOURCE);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* What the passes of resolve share: the brick a thread is of, by its place in the take, its record's
|
|
66
|
+
* word, its content key and its staged bytes.
|
|
67
|
+
*
|
|
68
|
+
* ```wgsl
|
|
69
|
+
* fn mesh_sdf_resolve_entry(taken: u32) -> u32 // the brick's entry when it is PENDING, else MESH_SDF_NO_CONTENT
|
|
70
|
+
* fn mesh_sdf_resolve_record(taken: u32) -> u32 // its record's first word
|
|
71
|
+
* fn mesh_sdf_resolve_key(record: u32) -> u32 // its content key
|
|
72
|
+
* fn mesh_sdf_resolve_byte(taken: u32, texel: u32) -> u32 // a texel's byte as evaluate staged it, texel x + 8y + 64z
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
const chunk_mesh_sdf_resolve = CodeChunk.from(
|
|
76
|
+
//language=WGSL
|
|
77
|
+
`
|
|
78
|
+
fn mesh_sdf_resolve_entry(taken: u32) -> u32 {
|
|
79
|
+
if (taken >= mesh_sdf_take[MESH_SDF_TAKE_COUNT]) {
|
|
80
|
+
return MESH_SDF_NO_CONTENT;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
let item = mesh_sdf_ring[(mesh_sdf_take[MESH_SDF_TAKE_START] + taken) & (settings.ring_capacity - 1u)];
|
|
84
|
+
let header = mesh_sdf_headers[item.x];
|
|
85
|
+
|
|
86
|
+
if (header.state != MESH_SDF_STATE_BAKING || header.generation != item.y) {
|
|
87
|
+
return MESH_SDF_NO_CONTENT;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let entry = header.indirection + item.z;
|
|
91
|
+
|
|
92
|
+
if (atomicLoad(&mesh_sdf_indirection[entry]) != MESH_SDF_PENDING) {
|
|
93
|
+
return MESH_SDF_NO_CONTENT;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return entry;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
fn mesh_sdf_resolve_record(taken: u32) -> u32 {
|
|
100
|
+
return settings.tally_offset + taken * MESH_SDF_TAKEN_WORDS;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
fn mesh_sdf_resolve_key(record: u32) -> u32 {
|
|
104
|
+
return atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_KEY]);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
fn mesh_sdf_resolve_byte(taken: u32, texel: u32) -> u32 {
|
|
108
|
+
// a word a texel, four words an entry of the staging
|
|
109
|
+
return mesh_sdf_ring[settings.ring_capacity + taken * MESH_SDF_STAGING_VEC4S + texel / 4u][texel % 4u];
|
|
110
|
+
}
|
|
111
|
+
`, [
|
|
112
|
+
chunk_mesh_sdf_bake,
|
|
113
|
+
]);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @param {string} label
|
|
117
|
+
* @param {string} text the pass's body, in `main` after `taken`
|
|
118
|
+
* @param {CodeChunk[]} dependencies
|
|
119
|
+
* @returns {ComputeShader}
|
|
120
|
+
*/
|
|
121
|
+
function resolve_pass(label, text, dependencies) {
|
|
122
|
+
return ComputeShader.from({
|
|
123
|
+
label,
|
|
124
|
+
resources,
|
|
125
|
+
body: CodeChunk.from(
|
|
126
|
+
//language=WGSL
|
|
127
|
+
`
|
|
128
|
+
@compute @workgroup_size(${MESH_SDF_BAKE_WORKGROUP_SIZE})
|
|
129
|
+
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
130
|
+
let taken = id.x;
|
|
131
|
+
${text}
|
|
132
|
+
}
|
|
133
|
+
`, [chunk_mesh_sdf_resolve, chunk_mesh_sdf_contents, ...dependencies]),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Bake step 5, resolve, first pass, find: a thread a brick taken, over the frame's budget. A PENDING
|
|
139
|
+
* brick finds a slot listed under its content key (`chunk_mesh_sdf_contents`), which compare holds its
|
|
140
|
+
* bytes against, and keeps it in its record. One that finds none claims its key in the frame's
|
|
141
|
+
* claims, a table of the frame's bricks by key: the first to claim a key is its representative, which
|
|
142
|
+
* fresh gives a slot, and every brick names its key's representative in its record, whose bytes
|
|
143
|
+
* compare holds its own against.
|
|
144
|
+
*
|
|
145
|
+
* The keys are key's, read after its dispatch. No list shares this dispatch, so every find meets the
|
|
146
|
+
* table as the last frame left it.
|
|
147
|
+
*
|
|
148
|
+
* @type {ComputeShader}
|
|
149
|
+
*/
|
|
150
|
+
export const shader_mesh_sdf_resolve_find = resolve_pass("Mesh SDF Resolve Find", `
|
|
151
|
+
let entry = mesh_sdf_resolve_entry(taken);
|
|
152
|
+
|
|
153
|
+
if (entry == MESH_SDF_NO_CONTENT) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
let record = mesh_sdf_resolve_record(taken);
|
|
158
|
+
let key = mesh_sdf_resolve_key(record);
|
|
159
|
+
let slot = mesh_sdf_content_find(key);
|
|
160
|
+
|
|
161
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT], slot);
|
|
162
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP], taken);
|
|
163
|
+
|
|
164
|
+
if (slot != MESH_SDF_NO_CONTENT) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// the frame's first brick of the key, by claim: a bucket holds a brick's place + 1
|
|
169
|
+
let mask = settings.claim_size - 1u;
|
|
170
|
+
|
|
171
|
+
var bucket = hash_lowbias32(key) & mask;
|
|
172
|
+
|
|
173
|
+
for (var probe = 0u; probe < HASH_TABLE_PROBE_LIMIT; probe++) {
|
|
174
|
+
let word = settings.claim_offset + bucket;
|
|
175
|
+
let stored = atomicLoad(&mesh_sdf_indirection[word]);
|
|
176
|
+
|
|
177
|
+
if (stored == 0u) {
|
|
178
|
+
let claim = atomicCompareExchangeWeak(&mesh_sdf_indirection[word], 0u, taken + 1u);
|
|
179
|
+
|
|
180
|
+
if (claim.exchanged) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (claim.old_value == 0u) {
|
|
185
|
+
// a weak exchange may fail on a bucket still empty: the same bucket again
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (mesh_sdf_resolve_key(mesh_sdf_resolve_record(claim.old_value - 1u)) == key) {
|
|
190
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP], claim.old_value - 1u);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
} else if (mesh_sdf_resolve_key(mesh_sdf_resolve_record(stored - 1u)) == key) {
|
|
194
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP], stored - 1u);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
bucket = generate_next_linear_congruential_index(bucket, mask);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// claims run out: its own representative, its bytes in a slot of their own
|
|
202
|
+
`, [chunk_hash_lowbias32, chunk_generate_next_linear_congruential_index]);
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Bake step 5, resolve, second pass, compare: a thread a texel of each brick taken, eight workgroups a
|
|
206
|
+
* brick, dispatched by take. A PENDING brick that found a slot holds each of its staged bytes against
|
|
207
|
+
* the byte the slot holds there, and one that names a representative other than itself against the
|
|
208
|
+
* representative's staged byte, and the texels that differ are counted in the brick's record. A key
|
|
209
|
+
* finds the bricks its bytes may be those of; this pass says whether they are.
|
|
210
|
+
*
|
|
211
|
+
* A subgroup's lanes are of one brick, a workgroup's 64 texels being, so the brick's words are loaded
|
|
212
|
+
* and its count added once a subgroup (`chunk_subgroup_atomic_load`, `chunk_subgroup_atomic_add`).
|
|
213
|
+
*
|
|
214
|
+
* @type {ComputeShader}
|
|
215
|
+
*/
|
|
216
|
+
export const shader_mesh_sdf_resolve_compare = ComputeShader.from({
|
|
217
|
+
label: "Mesh SDF Resolve Compare",
|
|
218
|
+
resources: compare_resources,
|
|
219
|
+
body: CodeChunk.from(
|
|
220
|
+
//language=WGSL
|
|
221
|
+
`
|
|
222
|
+
@compute @workgroup_size(${MESH_SDF_BAKE_WORKGROUP_SIZE})
|
|
223
|
+
fn main(
|
|
224
|
+
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
225
|
+
@builtin(local_invocation_index) lane: u32,
|
|
226
|
+
) {
|
|
227
|
+
let taken = workgroup_id.x / MESH_SDF_GROUPS_PER_BRICK;
|
|
228
|
+
let item = mesh_sdf_ring[(mesh_sdf_take[MESH_SDF_TAKE_START] + taken) & (settings.ring_capacity - 1u)];
|
|
229
|
+
let header = mesh_sdf_headers[item.x];
|
|
230
|
+
|
|
231
|
+
// the same for every lane of the workgroup, and of each of its subgroups: one brick
|
|
232
|
+
if (header.state != MESH_SDF_STATE_BAKING || header.generation != item.y) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (subgroup_atomic_load_u32(&mesh_sdf_indirection[header.indirection + item.z]) != MESH_SDF_PENDING) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
let record = mesh_sdf_resolve_record(taken);
|
|
241
|
+
let slot = subgroup_atomic_load_u32(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT]);
|
|
242
|
+
let rep = subgroup_atomic_load_u32(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP]);
|
|
243
|
+
let texel = (workgroup_id.x % MESH_SDF_GROUPS_PER_BRICK) * MESH_SDF_BAKE_WORKGROUP_SIZE + lane;
|
|
244
|
+
|
|
245
|
+
var other: u32;
|
|
246
|
+
|
|
247
|
+
if (slot != MESH_SDF_NO_CONTENT) {
|
|
248
|
+
let t = MESH_SDF_BRICK_TEXELS;
|
|
249
|
+
let slots = textureDimensions(mesh_sdf_atlas) / t;
|
|
250
|
+
let origin = tile_atlas_slot_origin(slot, slots.xy, vec3<u32>(t));
|
|
251
|
+
|
|
252
|
+
// r8unorm reads a byte back as byte / 255
|
|
253
|
+
other = u32(round(textureLoad(mesh_sdf_atlas, origin + vec3<u32>(texel % t, (texel / t) % t, texel / (t * t)), 0).x * 255.0));
|
|
254
|
+
} else if (rep != taken) {
|
|
255
|
+
other = mesh_sdf_resolve_byte(rep, texel);
|
|
256
|
+
} else {
|
|
257
|
+
// a representative: the first of its key in the frame, nothing to hold it against
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
subgroup_atomic_add_u32(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_DIFFERS], select(0u, 1u, mesh_sdf_resolve_byte(taken, texel) != other));
|
|
262
|
+
}
|
|
263
|
+
`, [
|
|
264
|
+
chunk_mesh_sdf_resolve,
|
|
265
|
+
chunk_subgroup_atomic_add,
|
|
266
|
+
chunk_subgroup_atomic_load,
|
|
267
|
+
chunk_tile_atlas_slot_origin,
|
|
268
|
+
]),
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Bake step 5, resolve, third pass, fresh: a thread a brick taken. A representative pops a slot and
|
|
273
|
+
* lists it under its key, and its record says the slot is fresh, which store fills. A brick whose
|
|
274
|
+
* bytes differ from those it was compared with pops a fresh slot of its own, listed nowhere, so no
|
|
275
|
+
* brick after shares it: its key is another bytes' too, and the log counts it collided. Take held the
|
|
276
|
+
* frame's bricks to the free slots, and a brick pops one slot at most, so no pop here is refused.
|
|
277
|
+
*
|
|
278
|
+
* @type {ComputeShader}
|
|
279
|
+
*/
|
|
280
|
+
export const shader_mesh_sdf_resolve_fresh = resolve_pass("Mesh SDF Resolve Fresh", `
|
|
281
|
+
let entry = mesh_sdf_resolve_entry(taken);
|
|
282
|
+
|
|
283
|
+
if (entry == MESH_SDF_NO_CONTENT) {
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
let record = mesh_sdf_resolve_record(taken);
|
|
288
|
+
let differs = atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_DIFFERS]) != 0u;
|
|
289
|
+
|
|
290
|
+
// the slot found, or the representative's, is the brick's
|
|
291
|
+
if (!differs
|
|
292
|
+
&& (atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT]) != MESH_SDF_NO_CONTENT
|
|
293
|
+
|| atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP]) != taken)) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
let slot = slot_stack_pop(&mesh_sdf_indirection[MESH_SDF_COUNTER_SLOTS], &mesh_sdf_slots, settings.slot_capacity);
|
|
298
|
+
|
|
299
|
+
if (differs) {
|
|
300
|
+
atomicAdd(&mesh_sdf_indirection[settings.log_offset + MESH_SDF_LOG_COLLIDED], 1u);
|
|
301
|
+
} else {
|
|
302
|
+
mesh_sdf_content_list(slot, mesh_sdf_resolve_key(record));
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT], slot);
|
|
306
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_FRESH], 1u);
|
|
307
|
+
`, [chunk_slot_stack]);
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Bake step 5, resolve, last pass, hold: a thread a brick taken. A PENDING brick takes its slot, the
|
|
311
|
+
* one it found or popped, or its representative's when it has none, holds it one entry more, and its
|
|
312
|
+
* entry holds it. Logs the bricks that took a slot already holding their bytes, or their
|
|
313
|
+
* representative's.
|
|
314
|
+
*
|
|
315
|
+
* @type {ComputeShader}
|
|
316
|
+
*/
|
|
317
|
+
export const shader_mesh_sdf_resolve_hold = resolve_pass("Mesh SDF Resolve Hold", `
|
|
318
|
+
let entry = mesh_sdf_resolve_entry(taken);
|
|
319
|
+
|
|
320
|
+
if (entry == MESH_SDF_NO_CONTENT) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
let record = mesh_sdf_resolve_record(taken);
|
|
325
|
+
|
|
326
|
+
var slot = atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT]);
|
|
327
|
+
|
|
328
|
+
if (slot == MESH_SDF_NO_CONTENT) {
|
|
329
|
+
let rep = atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_REP]);
|
|
330
|
+
|
|
331
|
+
slot = atomicLoad(&mesh_sdf_indirection[mesh_sdf_resolve_record(rep) + MESH_SDF_TAKEN_SLOT]);
|
|
332
|
+
|
|
333
|
+
atomicStore(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT], slot);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
mesh_sdf_content_hold(slot);
|
|
337
|
+
|
|
338
|
+
atomicStore(&mesh_sdf_indirection[entry], slot);
|
|
339
|
+
|
|
340
|
+
if (atomicLoad(&mesh_sdf_indirection[record + MESH_SDF_TAKEN_FRESH]) == 0u) {
|
|
341
|
+
atomicAdd(&mesh_sdf_indirection[settings.log_offset + MESH_SDF_LOG_SHARED], 1u);
|
|
342
|
+
}
|
|
343
|
+
`, []);
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const MESH_SDF_STORE_SETTINGS: WebGPUStruct;
|
|
5
5
|
/**
|
|
6
|
-
* Bake step
|
|
7
|
-
* take. A brick
|
|
8
|
-
* one write nothing.
|
|
6
|
+
* Bake step 6, store: a thread a texel of each brick taken, eight workgroups a brick, dispatched by
|
|
7
|
+
* take. A brick resolve gave a fresh slot has its staged bytes written there; one that took a slot
|
|
8
|
+
* holding its bytes already, an EMPTY one and a stale one write nothing.
|
|
9
9
|
*
|
|
10
10
|
* The bytes go back as `byte / 255`, which `r8unorm` stores as the same byte, so the atlas holds what
|
|
11
11
|
* evaluate rounded and no second rounding.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_sdf_store.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js"],"names":[],"mappings":"AAWA;;GAEG;AACH,sCAFU,YAAY,
|
|
1
|
+
{"version":3,"file":"shader_mesh_sdf_store.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js"],"names":[],"mappings":"AAWA;;GAEG;AACH,sCAFU,YAAY,CAOK;AAa3B;;;;;;;;;GASG;AACH,oCAFU,aAAa,CA+CpB;6BAlF0B,sCAAsC;8BAJrC,kCAAkC"}
|
|
@@ -15,6 +15,8 @@ import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "./MESH_SDF_BAKE.js";
|
|
|
15
15
|
export const MESH_SDF_STORE_SETTINGS = WebGPUStruct.from({
|
|
16
16
|
/** entries of `mesh_sdf_ring`, a power of two; the staging starts here */
|
|
17
17
|
ring_capacity: u32,
|
|
18
|
+
/** where the records of the frame's bricks taken start in the arena, MESH_SDF_TAKEN_WORDS each */
|
|
19
|
+
tally_offset: u32,
|
|
18
20
|
}, "MeshSDFStoreSettings");
|
|
19
21
|
|
|
20
22
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -29,9 +31,9 @@ resources.createGroup()
|
|
|
29
31
|
.addStorageTexture("mesh_sdf_atlas_store", "r8unorm", "3d", "write-only");
|
|
30
32
|
|
|
31
33
|
/**
|
|
32
|
-
* Bake step
|
|
33
|
-
* take. A brick
|
|
34
|
-
* one write nothing.
|
|
34
|
+
* Bake step 6, store: a thread a texel of each brick taken, eight workgroups a brick, dispatched by
|
|
35
|
+
* take. A brick resolve gave a fresh slot has its staged bytes written there; one that took a slot
|
|
36
|
+
* holding its bytes already, an EMPTY one and a stale one write nothing.
|
|
35
37
|
*
|
|
36
38
|
* The bytes go back as `byte / 255`, which `r8unorm` stores as the same byte, so the atlas holds what
|
|
37
39
|
* evaluate rounded and no second rounding.
|
|
@@ -57,12 +59,14 @@ fn main(
|
|
|
57
59
|
return;
|
|
58
60
|
}
|
|
59
61
|
|
|
60
|
-
let
|
|
62
|
+
let record = settings.tally_offset + taken * MESH_SDF_TAKEN_WORDS;
|
|
61
63
|
|
|
62
|
-
if (
|
|
64
|
+
if (mesh_sdf_indirection[record + MESH_SDF_TAKEN_FRESH] == 0u) {
|
|
63
65
|
return;
|
|
64
66
|
}
|
|
65
67
|
|
|
68
|
+
let slot = mesh_sdf_indirection[record + MESH_SDF_TAKEN_SLOT];
|
|
69
|
+
|
|
66
70
|
// a word a texel, four words an entry of the staging
|
|
67
71
|
let texel = (workgroup_id.x % MESH_SDF_GROUPS_PER_BRICK) * MESH_SDF_BAKE_WORKGROUP_SIZE + lane;
|
|
68
72
|
let byte = mesh_sdf_ring[settings.ring_capacity + taken * MESH_SDF_STAGING_VEC4S + texel / 4u][texel % 4u];
|
|
@@ -8,8 +8,8 @@ export const MESH_SDF_TAKE_SETTINGS: WebGPUStruct;
|
|
|
8
8
|
* bound no pop of evaluate's can fail. A take held back by the slots logs itself starved, which is
|
|
9
9
|
* how the host learns to grow the atlas.
|
|
10
10
|
*
|
|
11
|
-
* Writes the dispatch evaluate and store share, eight workgroups a brick,
|
|
12
|
-
* frame's bricks start; logs what it took and what is left queued.
|
|
11
|
+
* Writes the dispatch evaluate, key and store share, eight workgroups a brick, where on the ring the
|
|
12
|
+
* frame's bricks start, and how many resolve walks; logs what it took and what is left queued.
|
|
13
13
|
*
|
|
14
14
|
* @type {ComputeShader}
|
|
15
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_sdf_take.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js"],"names":[],"mappings":"AAQA;;GAEG;AACH,qCAFU,YAAY,CAOI;AAU1B;;;;;;;;;;GAUG;AACH,mCAFU,aAAa,
|
|
1
|
+
{"version":3,"file":"shader_mesh_sdf_take.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js"],"names":[],"mappings":"AAQA;;GAEG;AACH,qCAFU,YAAY,CAOI;AAU1B;;;;;;;;;;GAUG;AACH,mCAFU,aAAa,CAqCpB;6BAnE0B,sCAAsC;8BAJrC,kCAAkC"}
|
|
@@ -30,8 +30,8 @@ resources.createGroup()
|
|
|
30
30
|
* bound no pop of evaluate's can fail. A take held back by the slots logs itself starved, which is
|
|
31
31
|
* how the host learns to grow the atlas.
|
|
32
32
|
*
|
|
33
|
-
* Writes the dispatch evaluate and store share, eight workgroups a brick,
|
|
34
|
-
* frame's bricks start; logs what it took and what is left queued.
|
|
33
|
+
* Writes the dispatch evaluate, key and store share, eight workgroups a brick, where on the ring the
|
|
34
|
+
* frame's bricks start, and how many resolve walks; logs what it took and what is left queued.
|
|
35
35
|
*
|
|
36
36
|
* @type {ComputeShader}
|
|
37
37
|
*/
|
|
@@ -58,6 +58,7 @@ fn main() {
|
|
|
58
58
|
mesh_sdf_take[MESH_SDF_TAKE_DISPATCH + 1u] = 1u;
|
|
59
59
|
mesh_sdf_take[MESH_SDF_TAKE_DISPATCH + 2u] = 1u;
|
|
60
60
|
mesh_sdf_take[MESH_SDF_TAKE_START] = head;
|
|
61
|
+
mesh_sdf_take[MESH_SDF_TAKE_COUNT] = taken;
|
|
61
62
|
|
|
62
63
|
let log = settings.log_offset;
|
|
63
64
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words of an uploaded brick's record in `mesh_sdf_upload_bricks`: its content key, its slot, 1 when
|
|
3
|
+
* the slot is fresh, and its texels whose bytes differ from the slot's it found.
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const MESH_SDF_UPLOAD_BRICK_WORDS: number;
|
|
7
|
+
/**
|
|
8
|
+
* Words of an uploaded brick's bytes in `mesh_sdf_upload_bytes`, four bytes a word, texel t in byte
|
|
9
|
+
* `t % 4` of word `t / 4`.
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const MESH_SDF_UPLOAD_BYTE_WORDS: number;
|
|
13
|
+
/**
|
|
14
|
+
* @type {WebGPUStruct}
|
|
15
|
+
*/
|
|
16
|
+
export const MESH_SDF_UPLOAD_SETTINGS: WebGPUStruct;
|
|
17
|
+
/**
|
|
18
|
+
* Upload, first pass, key, when deduplicating: a thread a texel of the bricks uploaded, its term of
|
|
19
|
+
* its brick's content key added into the brick's record (`MESH_SDF_BRICK_KEY.js`), as the bake's key
|
|
20
|
+
* pass does.
|
|
21
|
+
*
|
|
22
|
+
* @type {ComputeShader}
|
|
23
|
+
*/
|
|
24
|
+
export const shader_mesh_sdf_upload_key: ComputeShader;
|
|
25
|
+
/**
|
|
26
|
+
* Upload, second pass, find, when deduplicating: a thread a brick uploaded, which finds a slot listed
|
|
27
|
+
* under its key (`chunk_mesh_sdf_contents`), or none.
|
|
28
|
+
*
|
|
29
|
+
* @type {ComputeShader}
|
|
30
|
+
*/
|
|
31
|
+
export const shader_mesh_sdf_upload_find: ComputeShader;
|
|
32
|
+
/**
|
|
33
|
+
* Upload, third pass, compare, when deduplicating: a thread a texel of the bricks uploaded. A brick
|
|
34
|
+
* that found a slot holds each of its bytes against the byte the slot holds there, and a texel that
|
|
35
|
+
* differs marks the brick's record.
|
|
36
|
+
*
|
|
37
|
+
* @type {ComputeShader}
|
|
38
|
+
*/
|
|
39
|
+
export const shader_mesh_sdf_upload_compare: ComputeShader;
|
|
40
|
+
/**
|
|
41
|
+
* Upload, fourth pass, fresh: a thread a brick uploaded. A brick that found a slot holding its bytes
|
|
42
|
+
* takes it; the rest pop a fresh slot, which store fills. Deduplicating, a brick that found no slot
|
|
43
|
+
* lists its own under its key, so later bricks of the same bytes share it, and one whose bytes differ
|
|
44
|
+
* from the slot's it found keeps its own listed nowhere: its key is another bytes' too. Two bricks of
|
|
45
|
+
* one key that found nothing are both listed, and a find takes the first. The host grew the atlas for
|
|
46
|
+
* every brick uploaded, so no pop here is refused.
|
|
47
|
+
*
|
|
48
|
+
* @type {ComputeShader}
|
|
49
|
+
*/
|
|
50
|
+
export const shader_mesh_sdf_upload_fresh: ComputeShader;
|
|
51
|
+
/**
|
|
52
|
+
* Upload, fifth pass, store: a thread a texel of the bricks uploaded, a fresh brick's byte into its
|
|
53
|
+
* slot.
|
|
54
|
+
*
|
|
55
|
+
* @type {ComputeShader}
|
|
56
|
+
*/
|
|
57
|
+
export const shader_mesh_sdf_upload_store: ComputeShader;
|
|
58
|
+
/**
|
|
59
|
+
* Upload, last pass, link: a thread an entry of the fields uploaded, a run each in `mesh_sdf_ranges`
|
|
60
|
+
* as `(first thread, first entry)`. An entry naming an uploaded brick, by its place in the upload,
|
|
61
|
+
* holds the brick's slot instead, one entry more (`chunk_mesh_sdf_contents`); an EMPTY one is left.
|
|
62
|
+
* Runs before free in its bake, so a field dropped since its upload gives back slots, never places.
|
|
63
|
+
*
|
|
64
|
+
* @type {ComputeShader}
|
|
65
|
+
*/
|
|
66
|
+
export const shader_mesh_sdf_upload_link: ComputeShader;
|
|
67
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
68
|
+
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
69
|
+
//# sourceMappingURL=shader_mesh_sdf_upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_mesh_sdf_upload.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.js"],"names":[],"mappings":"AA8BA;;;;GAIG;AACH,0CAFU,MAAM,CAE6B;AAE7C;;;;GAIG;AACH,yCAFU,MAAM,CAEyD;AAEzE;;GAEG;AACH,uCAFU,YAAY,CAeM;AA4F5B;;;;;;GAMG;AACH,yCAFU,aAAa,CAEmC;AAE1D;;;;;GAKG;AACH,0CAFU,aAAa,CAQc;AAErC;;;;;;GAMG;AACH,6CAFU,aAAa,CAwBiG;AAExH;;;;;;;;;GASG;AACH,2CAFU,aAAa,CAsBgC;AAEvD;;;;;GAKG;AACH,2CAFU,aAAa,CAwB+C;AAEtE;;;;;;;GAOG;AACH,0CAFU,aAAa,CAmByC;6BA7RnC,sCAAsC;8BAJrC,kCAAkC"}
|