@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
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { chunk_slot_stack } from "../../../gpu_primitive/slot_stack/chunk_slot_stack.js";
|
|
2
|
+
import { chunk_subgroup_atomic_add } from "../../../shader/chunk/subgroup/chunk_subgroup_atomic_add.js";
|
|
3
|
+
import { chunk_subgroup_atomic_load } from "../../../shader/chunk/subgroup/chunk_subgroup_atomic_load.js";
|
|
4
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { atomic_u32, u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
8
|
+
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
9
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
10
|
+
import { chunk_tile_atlas_slot_origin } from "../../../texture/atlas/chunk_tile_atlas_slot_origin.js";
|
|
11
|
+
import { chunk_mesh_sdf_brick_key } from "../chunk_mesh_sdf_brick_key.js";
|
|
12
|
+
import { MESH_SDF_BRICK_TEXEL_COUNT } from "../MESH_SDF.js";
|
|
13
|
+
import { MESH_SDF_ATLAS_RESOURCE } from "../MESH_SDF_RESOURCES.js";
|
|
14
|
+
import { chunk_mesh_sdf_bake, chunk_mesh_sdf_range_find, MESH_SDF_ARENA_RESOURCE, MESH_SDF_RANGES_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
|
+
/** An uploaded brick's record in `mesh_sdf_upload_bricks`: its content key. */
|
|
23
|
+
const MESH_SDF_UPLOAD_KEY = 0;
|
|
24
|
+
/** An uploaded brick's record: the slot find found under its key, then the slot it takes. */
|
|
25
|
+
const MESH_SDF_UPLOAD_SLOT = 1;
|
|
26
|
+
/** An uploaded brick's record: 1 when its slot is fresh, which store fills. */
|
|
27
|
+
const MESH_SDF_UPLOAD_FRESH = 2;
|
|
28
|
+
/** An uploaded brick's record: its texels whose bytes differ from the slot's it found. */
|
|
29
|
+
const MESH_SDF_UPLOAD_DIFFERS = 3;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Words of an uploaded brick's record in `mesh_sdf_upload_bricks`: its content key, its slot, 1 when
|
|
33
|
+
* the slot is fresh, and its texels whose bytes differ from the slot's it found.
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
export const MESH_SDF_UPLOAD_BRICK_WORDS = 4;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Words of an uploaded brick's bytes in `mesh_sdf_upload_bytes`, four bytes a word, texel t in byte
|
|
40
|
+
* `t % 4` of word `t / 4`.
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
43
|
+
export const MESH_SDF_UPLOAD_BYTE_WORDS = MESH_SDF_BRICK_TEXEL_COUNT / 4;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @type {WebGPUStruct}
|
|
47
|
+
*/
|
|
48
|
+
export const MESH_SDF_UPLOAD_SETTINGS = WebGPUStruct.from({
|
|
49
|
+
/** bricks uploaded */
|
|
50
|
+
brick_count: u32,
|
|
51
|
+
/** 1 when the bricks share slots with what is resident and are listed for later bricks to share */
|
|
52
|
+
deduplicate: u32,
|
|
53
|
+
/** slots the stack holds */
|
|
54
|
+
slot_capacity: u32,
|
|
55
|
+
/** runs in `mesh_sdf_ranges`: an uploaded field's entries each */
|
|
56
|
+
range_count: u32,
|
|
57
|
+
/** entries over every run */
|
|
58
|
+
entry_count: u32,
|
|
59
|
+
/** workgroups along x, the rest folded into y */
|
|
60
|
+
groups_x: u32,
|
|
61
|
+
}, "MeshSDFUploadSettings");
|
|
62
|
+
|
|
63
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
64
|
+
|
|
65
|
+
resources.setImmediate("settings", MESH_SDF_UPLOAD_SETTINGS);
|
|
66
|
+
|
|
67
|
+
resources.createGroup()
|
|
68
|
+
.addStorageBuffer("mesh_sdf_upload_bytes", WebGPUArray.u32)
|
|
69
|
+
.addStorageBuffer("mesh_sdf_upload_bricks", WebGPUArray.from(atomic_u32), true)
|
|
70
|
+
.add(MESH_SDF_ARENA_RESOURCE)
|
|
71
|
+
.addStorageBuffer("mesh_sdf_slots", WebGPUArray.u32, true)
|
|
72
|
+
.add(MESH_SDF_CONTENTS_RESOURCE)
|
|
73
|
+
.add(MESH_SDF_CONTENT_TABLE_RESOURCE)
|
|
74
|
+
.add(MESH_SDF_RANGES_RESOURCE)
|
|
75
|
+
.addStorageTexture("mesh_sdf_atlas_store", "r8unorm", "3d", "write-only");
|
|
76
|
+
|
|
77
|
+
const compare_resources = new ShaderResourceSetDescriptor();
|
|
78
|
+
|
|
79
|
+
compare_resources.setImmediate("settings", MESH_SDF_UPLOAD_SETTINGS);
|
|
80
|
+
|
|
81
|
+
compare_resources.createGroup()
|
|
82
|
+
.addStorageBuffer("mesh_sdf_upload_bytes", WebGPUArray.u32)
|
|
83
|
+
.addStorageBuffer("mesh_sdf_upload_bricks", WebGPUArray.from(atomic_u32), true)
|
|
84
|
+
.add(MESH_SDF_ATLAS_RESOURCE);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* What the upload's passes share: the thread a workgroup and lane are, folded over y, and an
|
|
88
|
+
* uploaded brick's record and bytes. A pass a thread a texel has a workgroup's 64 lanes, and so each
|
|
89
|
+
* of its subgroups, of one brick, whose words it loads once a subgroup (`chunk_subgroup_atomic_load`).
|
|
90
|
+
*/
|
|
91
|
+
const chunk_mesh_sdf_upload = CodeChunk.from(
|
|
92
|
+
//language=WGSL
|
|
93
|
+
`
|
|
94
|
+
const MESH_SDF_UPLOAD_BRICK_WORDS = ${MESH_SDF_UPLOAD_BRICK_WORDS}u;
|
|
95
|
+
const MESH_SDF_UPLOAD_BYTE_WORDS = ${MESH_SDF_UPLOAD_BYTE_WORDS}u;
|
|
96
|
+
const MESH_SDF_UPLOAD_KEY = ${MESH_SDF_UPLOAD_KEY}u;
|
|
97
|
+
const MESH_SDF_UPLOAD_SLOT = ${MESH_SDF_UPLOAD_SLOT}u;
|
|
98
|
+
const MESH_SDF_UPLOAD_FRESH = ${MESH_SDF_UPLOAD_FRESH}u;
|
|
99
|
+
const MESH_SDF_UPLOAD_DIFFERS = ${MESH_SDF_UPLOAD_DIFFERS}u;
|
|
100
|
+
|
|
101
|
+
fn mesh_sdf_upload_thread(workgroup_id: vec3<u32>, lane: u32) -> u32 {
|
|
102
|
+
return (workgroup_id.y * settings.groups_x + workgroup_id.x) * MESH_SDF_BAKE_WORKGROUP_SIZE + lane;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
fn mesh_sdf_upload_byte(brick: u32, texel: u32) -> u32 {
|
|
106
|
+
return (mesh_sdf_upload_bytes[brick * MESH_SDF_UPLOAD_BYTE_WORDS + texel / 4u] >> (8u * (texel % 4u))) & 0xffu;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
fn mesh_sdf_upload_key(brick: u32) -> u32 {
|
|
110
|
+
return atomicLoad(&mesh_sdf_upload_bricks[brick * MESH_SDF_UPLOAD_BRICK_WORDS + MESH_SDF_UPLOAD_KEY]);
|
|
111
|
+
}
|
|
112
|
+
`, [
|
|
113
|
+
chunk_mesh_sdf_bake,
|
|
114
|
+
]);
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {string} label
|
|
118
|
+
* @param {string} text the body of `main`, after `thread`
|
|
119
|
+
* @param {CodeChunk[]} dependencies
|
|
120
|
+
* @param {string} [before] code ahead of `main`
|
|
121
|
+
* @param {ShaderResourceSetDescriptor} [set]
|
|
122
|
+
* @returns {{body: CodeChunk, shader: ComputeShader}}
|
|
123
|
+
*/
|
|
124
|
+
function upload_pass(label, text, dependencies, before = "", set = resources) {
|
|
125
|
+
const body = CodeChunk.from(
|
|
126
|
+
//language=WGSL
|
|
127
|
+
`
|
|
128
|
+
${before}
|
|
129
|
+
@compute @workgroup_size(${MESH_SDF_BAKE_WORKGROUP_SIZE})
|
|
130
|
+
fn main(
|
|
131
|
+
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
132
|
+
@builtin(local_invocation_index) lane: u32,
|
|
133
|
+
) {
|
|
134
|
+
let thread = mesh_sdf_upload_thread(workgroup_id, lane);
|
|
135
|
+
${text}
|
|
136
|
+
}
|
|
137
|
+
`, [chunk_mesh_sdf_upload, ...dependencies]);
|
|
138
|
+
|
|
139
|
+
return { body, shader: ComputeShader.from({ label, resources: set, body }) };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const key_pass = upload_pass("Mesh SDF Upload Key", `
|
|
143
|
+
if (thread >= settings.brick_count * ${MESH_SDF_BRICK_TEXEL_COUNT}u) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let brick = thread / ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
148
|
+
let texel = thread % ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
149
|
+
|
|
150
|
+
subgroup_atomic_add_u32(&mesh_sdf_upload_bricks[brick * MESH_SDF_UPLOAD_BRICK_WORDS + MESH_SDF_UPLOAD_KEY], mesh_sdf_brick_key_term(texel, mesh_sdf_upload_byte(brick, texel)));
|
|
151
|
+
`, [chunk_mesh_sdf_brick_key, chunk_subgroup_atomic_add]);
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Upload, first pass, key, when deduplicating: a thread a texel of the bricks uploaded, its term of
|
|
155
|
+
* its brick's content key added into the brick's record (`MESH_SDF_BRICK_KEY.js`), as the bake's key
|
|
156
|
+
* pass does.
|
|
157
|
+
*
|
|
158
|
+
* @type {ComputeShader}
|
|
159
|
+
*/
|
|
160
|
+
export const shader_mesh_sdf_upload_key = key_pass.shader;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Upload, second pass, find, when deduplicating: a thread a brick uploaded, which finds a slot listed
|
|
164
|
+
* under its key (`chunk_mesh_sdf_contents`), or none.
|
|
165
|
+
*
|
|
166
|
+
* @type {ComputeShader}
|
|
167
|
+
*/
|
|
168
|
+
export const shader_mesh_sdf_upload_find = upload_pass("Mesh SDF Upload Find", `
|
|
169
|
+
if (thread >= settings.brick_count) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
atomicStore(&mesh_sdf_upload_bricks[thread * MESH_SDF_UPLOAD_BRICK_WORDS + MESH_SDF_UPLOAD_SLOT], mesh_sdf_content_find(mesh_sdf_upload_key(thread)));
|
|
174
|
+
`, [chunk_mesh_sdf_contents]).shader;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Upload, third pass, compare, when deduplicating: a thread a texel of the bricks uploaded. A brick
|
|
178
|
+
* that found a slot holds each of its bytes against the byte the slot holds there, and a texel that
|
|
179
|
+
* differs marks the brick's record.
|
|
180
|
+
*
|
|
181
|
+
* @type {ComputeShader}
|
|
182
|
+
*/
|
|
183
|
+
export const shader_mesh_sdf_upload_compare = upload_pass("Mesh SDF Upload Compare", `
|
|
184
|
+
if (thread >= settings.brick_count * ${MESH_SDF_BRICK_TEXEL_COUNT}u) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let brick = thread / ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
189
|
+
let texel = thread % ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
190
|
+
let word = brick * MESH_SDF_UPLOAD_BRICK_WORDS;
|
|
191
|
+
let slot = subgroup_atomic_load_u32(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_SLOT]);
|
|
192
|
+
|
|
193
|
+
if (slot == MESH_SDF_NO_CONTENT) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let t = MESH_SDF_BRICK_TEXELS;
|
|
198
|
+
let slots = textureDimensions(mesh_sdf_atlas) / t;
|
|
199
|
+
let origin = tile_atlas_slot_origin(slot, slots.xy, vec3<u32>(t));
|
|
200
|
+
|
|
201
|
+
// r8unorm reads a byte back as byte / 255
|
|
202
|
+
let held = u32(round(textureLoad(mesh_sdf_atlas, origin + vec3<u32>(texel % t, (texel / t) % t, texel / (t * t)), 0).x * 255.0));
|
|
203
|
+
|
|
204
|
+
subgroup_atomic_add_u32(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_DIFFERS], select(0u, 1u, mesh_sdf_upload_byte(brick, texel) != held));
|
|
205
|
+
`, [chunk_subgroup_atomic_add, chunk_subgroup_atomic_load, chunk_tile_atlas_slot_origin], "", compare_resources).shader;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Upload, fourth pass, fresh: a thread a brick uploaded. A brick that found a slot holding its bytes
|
|
209
|
+
* takes it; the rest pop a fresh slot, which store fills. Deduplicating, a brick that found no slot
|
|
210
|
+
* lists its own under its key, so later bricks of the same bytes share it, and one whose bytes differ
|
|
211
|
+
* from the slot's it found keeps its own listed nowhere: its key is another bytes' too. Two bricks of
|
|
212
|
+
* one key that found nothing are both listed, and a find takes the first. The host grew the atlas for
|
|
213
|
+
* every brick uploaded, so no pop here is refused.
|
|
214
|
+
*
|
|
215
|
+
* @type {ComputeShader}
|
|
216
|
+
*/
|
|
217
|
+
export const shader_mesh_sdf_upload_fresh = upload_pass("Mesh SDF Upload Fresh", `
|
|
218
|
+
if (thread >= settings.brick_count) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
let word = thread * MESH_SDF_UPLOAD_BRICK_WORDS;
|
|
223
|
+
let found = settings.deduplicate != 0u && atomicLoad(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_SLOT]) != MESH_SDF_NO_CONTENT;
|
|
224
|
+
|
|
225
|
+
if (found && atomicLoad(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_DIFFERS]) == 0u) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
let slot = slot_stack_pop(&mesh_sdf_indirection[MESH_SDF_COUNTER_SLOTS], &mesh_sdf_slots, settings.slot_capacity);
|
|
230
|
+
|
|
231
|
+
if (settings.deduplicate != 0u && !found) {
|
|
232
|
+
mesh_sdf_content_list(slot, mesh_sdf_upload_key(thread));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
atomicStore(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_SLOT], slot);
|
|
236
|
+
atomicStore(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_FRESH], 1u);
|
|
237
|
+
`, [chunk_mesh_sdf_contents, chunk_slot_stack]).shader;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Upload, fifth pass, store: a thread a texel of the bricks uploaded, a fresh brick's byte into its
|
|
241
|
+
* slot.
|
|
242
|
+
*
|
|
243
|
+
* @type {ComputeShader}
|
|
244
|
+
*/
|
|
245
|
+
export const shader_mesh_sdf_upload_store = upload_pass("Mesh SDF Upload Store", `
|
|
246
|
+
if (thread >= settings.brick_count * ${MESH_SDF_BRICK_TEXEL_COUNT}u) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
let brick = thread / ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
251
|
+
let texel = thread % ${MESH_SDF_BRICK_TEXEL_COUNT}u;
|
|
252
|
+
let word = brick * MESH_SDF_UPLOAD_BRICK_WORDS;
|
|
253
|
+
|
|
254
|
+
if (subgroup_atomic_load_u32(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_FRESH]) == 0u) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
let t = MESH_SDF_BRICK_TEXELS;
|
|
259
|
+
let slots = textureDimensions(mesh_sdf_atlas_store) / t;
|
|
260
|
+
let origin = tile_atlas_slot_origin(subgroup_atomic_load_u32(&mesh_sdf_upload_bricks[word + MESH_SDF_UPLOAD_SLOT]), slots.xy, vec3<u32>(t));
|
|
261
|
+
|
|
262
|
+
textureStore(
|
|
263
|
+
mesh_sdf_atlas_store,
|
|
264
|
+
origin + vec3<u32>(texel % t, (texel / t) % t, texel / (t * t)),
|
|
265
|
+
vec4<f32>(f32(mesh_sdf_upload_byte(brick, texel)) / 255.0, 0.0, 0.0, 0.0)
|
|
266
|
+
);
|
|
267
|
+
`, [chunk_subgroup_atomic_load, chunk_tile_atlas_slot_origin]).shader;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Upload, last pass, link: a thread an entry of the fields uploaded, a run each in `mesh_sdf_ranges`
|
|
271
|
+
* as `(first thread, first entry)`. An entry naming an uploaded brick, by its place in the upload,
|
|
272
|
+
* holds the brick's slot instead, one entry more (`chunk_mesh_sdf_contents`); an EMPTY one is left.
|
|
273
|
+
* Runs before free in its bake, so a field dropped since its upload gives back slots, never places.
|
|
274
|
+
*
|
|
275
|
+
* @type {ComputeShader}
|
|
276
|
+
*/
|
|
277
|
+
export const shader_mesh_sdf_upload_link = upload_pass("Mesh SDF Upload Link", `
|
|
278
|
+
if (thread >= settings.entry_count) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
let range = mesh_sdf_range_find(settings.range_count, thread);
|
|
283
|
+
let at = mesh_sdf_ranges[range].y + thread - mesh_sdf_ranges[range].x;
|
|
284
|
+
let entry = atomicLoad(&mesh_sdf_indirection[at]);
|
|
285
|
+
|
|
286
|
+
if (!mesh_sdf_entry_holds_slot(entry)) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
let slot = atomicLoad(&mesh_sdf_upload_bricks[entry * MESH_SDF_UPLOAD_BRICK_WORDS + MESH_SDF_UPLOAD_SLOT]);
|
|
291
|
+
|
|
292
|
+
mesh_sdf_content_hold(slot);
|
|
293
|
+
atomicStore(&mesh_sdf_indirection[at], slot);
|
|
294
|
+
`, [chunk_mesh_sdf_contents, chunk_mesh_sdf_range_find]).shader;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "MCBN", read as a little-endian u32.
|
|
3
|
+
* @type {number}
|
|
4
|
+
*/
|
|
5
|
+
export const MODEL_CACHE_BUNDLE_MAGIC: number;
|
|
6
|
+
/**
|
|
7
|
+
* The format this code writes.
|
|
8
|
+
* @type {number}
|
|
9
|
+
*/
|
|
10
|
+
export const MODEL_CACHE_BUNDLE_FORMAT_VERSION: number;
|
|
11
|
+
/**
|
|
12
|
+
* The oldest reader that takes what this code writes.
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
export const MODEL_CACHE_BUNDLE_MIN_READER_VERSION: number;
|
|
16
|
+
//# sourceMappingURL=MODEL_CACHE_BUNDLE.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MODEL_CACHE_BUNDLE.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.js"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,uCAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,gDAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,oDAFU,MAAM,CAEuC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
A ModelCacheBundle as bytes, little-endian, every count before what it counts:
|
|
3
|
+
|
|
4
|
+
header u32 magic, u16 format version, u16 version a reader needs at least
|
|
5
|
+
f32 voxel_size, u32 max_bricks
|
|
6
|
+
u32 bricks, u32 fields, u32 caches
|
|
7
|
+
bricks MESH_SDF_BRICK_TEXEL_COUNT bytes each
|
|
8
|
+
field f32×3 origin, f32 voxel, u32×3 bricks, u32 level_count, u32 two_sided
|
|
9
|
+
u32 entries, u32 each: a brick's index, or MESH_SDF_EMPTY or MESH_SDF_EMPTY_INSIDE
|
|
10
|
+
u32 stored, u32 each: the entry of stored brick n
|
|
11
|
+
u32 blocks, u32 table words (0 or stored), u32 each
|
|
12
|
+
cache u32 field, u32 texels, u32×3 codes by plane
|
|
13
|
+
u32 presence words, u32 each
|
|
14
|
+
for each plane, in SURFACE_MATERIAL.js's order: u32 words, u32 each
|
|
15
|
+
|
|
16
|
+
A reader takes a file whose version a reader needs is at most its own, and refuses one that names a
|
|
17
|
+
brick, an entry or a field it does not hold.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* "MCBN", read as a little-endian u32.
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
export const MODEL_CACHE_BUNDLE_MAGIC = 0x4E42434D;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The format this code writes.
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
export const MODEL_CACHE_BUNDLE_FORMAT_VERSION = 1;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The oldest reader that takes what this code writes.
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
export const MODEL_CACHE_BUNDLE_MIN_READER_VERSION = 1;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A geometry's Model SDF in a {@link ModelCacheBundle}: its layout as its header holds it, its entries
|
|
3
|
+
* naming the bundle's bricks, the order its stored bricks were numbered in, and the block table its
|
|
4
|
+
* Model Surface Caches are laid out by.
|
|
5
|
+
*/
|
|
6
|
+
export class ModelCacheBundleField {
|
|
7
|
+
/**
|
|
8
|
+
* The grid's smallest corner, the geometry's local units.
|
|
9
|
+
* @type {Float32Array}
|
|
10
|
+
*/
|
|
11
|
+
origin: Float32Array;
|
|
12
|
+
/**
|
|
13
|
+
* Level 0's voxel, local units.
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
voxel: number;
|
|
17
|
+
/**
|
|
18
|
+
* Level 0's bricks along x, y and z.
|
|
19
|
+
* @type {Uint32Array}
|
|
20
|
+
*/
|
|
21
|
+
bricks: Uint32Array;
|
|
22
|
+
/**
|
|
23
|
+
* @type {number}
|
|
24
|
+
*/
|
|
25
|
+
level_count: number;
|
|
26
|
+
/**
|
|
27
|
+
* 1 when baked for a holder that draws both sides, which nothing is inside of.
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
two_sided: number;
|
|
31
|
+
/**
|
|
32
|
+
* Every brick's entry, level after level in `MeshSDFLayout`'s order: a brick of the bundle's, by
|
|
33
|
+
* index, or `MESH_SDF_EMPTY` or `MESH_SDF_EMPTY_INSIDE`.
|
|
34
|
+
* @type {Uint32Array}
|
|
35
|
+
*/
|
|
36
|
+
entries: Uint32Array;
|
|
37
|
+
/**
|
|
38
|
+
* The field's stored bricks by number: brick n's entry index. Every entry naming a brick is numbered
|
|
39
|
+
* once.
|
|
40
|
+
* @type {Uint32Array}
|
|
41
|
+
*/
|
|
42
|
+
numbered: Uint32Array;
|
|
43
|
+
/**
|
|
44
|
+
* Blocks its stored bricks keep (`MESH_SURFACE_BLOCK.js`), 0 without a table.
|
|
45
|
+
* @type {number}
|
|
46
|
+
*/
|
|
47
|
+
blocks: number;
|
|
48
|
+
/**
|
|
49
|
+
* Its block table, a word a stored brick by number, or empty when no cache of it kept a plane.
|
|
50
|
+
* @type {Uint32Array}
|
|
51
|
+
*/
|
|
52
|
+
table: Uint32Array;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A (geometry, material) pair's Model Surface Cache in a {@link ModelCacheBundle}, laid out by one of
|
|
56
|
+
* the bundle's fields.
|
|
57
|
+
*/
|
|
58
|
+
export class ModelCacheBundleCache {
|
|
59
|
+
/**
|
|
60
|
+
* The field of the bundle it is laid out by, by index.
|
|
61
|
+
* @type {number}
|
|
62
|
+
*/
|
|
63
|
+
field: number;
|
|
64
|
+
/**
|
|
65
|
+
* Bit `1 << plane` for each plane it keeps blocks of (`SURFACE_MATERIAL.js`).
|
|
66
|
+
* @type {number}
|
|
67
|
+
*/
|
|
68
|
+
texels: number;
|
|
69
|
+
/**
|
|
70
|
+
* Each plane's code, by plane: what a plane it keeps no blocks of holds everywhere.
|
|
71
|
+
* @type {Uint32Array}
|
|
72
|
+
*/
|
|
73
|
+
codes: Uint32Array;
|
|
74
|
+
/**
|
|
75
|
+
* Its presence, `MESH_SURFACE_PRESENCE_BLOCK_WORDS` a block for each of its field's blocks, or empty
|
|
76
|
+
* when it keeps no plane.
|
|
77
|
+
* @type {Uint32Array}
|
|
78
|
+
*/
|
|
79
|
+
presence: Uint32Array;
|
|
80
|
+
/**
|
|
81
|
+
* Each plane's blocks, by plane, `MESH_SURFACE_PLANE_BLOCK_WORDS` a block for each of its field's
|
|
82
|
+
* blocks, or empty for a plane it does not keep.
|
|
83
|
+
* @type {Uint32Array[]}
|
|
84
|
+
*/
|
|
85
|
+
planes: Uint32Array[];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Model SDFs and Model Surface Caches in one package: the bricks once each, the fields naming them by
|
|
89
|
+
* index, so a brick two fields hold is kept once, and the caches naming their fields. Baked at
|
|
90
|
+
* `voxel_size` and `max_bricks`, the configuration of the `GPUGeometrySDFManager` that made it, which
|
|
91
|
+
* takes it only at the same.
|
|
92
|
+
*
|
|
93
|
+
* `GPUGeometrySDFManager.export_bundle` makes one of what is resident; `upload_bundle` takes one back,
|
|
94
|
+
* with or without sharing its bricks with those resident; `model_cache_bundle_write` and
|
|
95
|
+
* `model_cache_bundle_read` keep it as bytes.
|
|
96
|
+
*/
|
|
97
|
+
export class ModelCacheBundle {
|
|
98
|
+
/**
|
|
99
|
+
* The voxel the fields were baked at, `GPUGeometrySDFManager.configure`'s.
|
|
100
|
+
* @type {number}
|
|
101
|
+
*/
|
|
102
|
+
voxel_size: number;
|
|
103
|
+
/**
|
|
104
|
+
* The cap on bricks along a geometry's longest axis they were baked under.
|
|
105
|
+
* @type {number}
|
|
106
|
+
*/
|
|
107
|
+
max_bricks: number;
|
|
108
|
+
/**
|
|
109
|
+
* The bricks the fields hold, `MESH_SDF_BRICK_TEXEL_COUNT` bytes each, texel x + 8y + 64z.
|
|
110
|
+
* @type {Uint8Array}
|
|
111
|
+
*/
|
|
112
|
+
bricks: Uint8Array;
|
|
113
|
+
/**
|
|
114
|
+
* @type {ModelCacheBundleField[]}
|
|
115
|
+
*/
|
|
116
|
+
fields: ModelCacheBundleField[];
|
|
117
|
+
/**
|
|
118
|
+
* @type {ModelCacheBundleCache[]}
|
|
119
|
+
*/
|
|
120
|
+
caches: ModelCacheBundleCache[];
|
|
121
|
+
/**
|
|
122
|
+
* @returns {number}
|
|
123
|
+
*/
|
|
124
|
+
get brick_count(): number;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=ModelCacheBundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelCacheBundle.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH;IACI;;;OAGG;IACH,QAFU,YAAY,CAEO;IAE7B;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,QAFU,WAAW,CAEO;IAE5B;;OAEG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;;OAIG;IACH,UAFU,WAAW,CAES;IAE9B;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,OAFU,WAAW,CAEM;CAC9B;AAED;;;GAGG;AACH;IACI;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,OAFU,WAAW,CAEM;IAE3B;;;;OAIG;IACH,UAFU,WAAW,CAES;IAE9B;;;;OAIG;IACH,QAFU,WAAW,EAAE,CAE+C;CACzE;AAED;;;;;;;;;GASG;AACH;IACI;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,QAFU,UAAU,CAEO;IAE3B;;OAEG;IACH,QAFU,qBAAqB,EAAE,CAErB;IAEZ;;OAEG;IACH,QAFU,qBAAqB,EAAE,CAErB;IAEZ;;OAEG;IACH,0BAEC;CACJ"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { MESH_SDF_BRICK_TEXEL_COUNT } from "../MESH_SDF.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A geometry's Model SDF in a {@link ModelCacheBundle}: its layout as its header holds it, its entries
|
|
5
|
+
* naming the bundle's bricks, the order its stored bricks were numbered in, and the block table its
|
|
6
|
+
* Model Surface Caches are laid out by.
|
|
7
|
+
*/
|
|
8
|
+
export class ModelCacheBundleField {
|
|
9
|
+
/**
|
|
10
|
+
* The grid's smallest corner, the geometry's local units.
|
|
11
|
+
* @type {Float32Array}
|
|
12
|
+
*/
|
|
13
|
+
origin = new Float32Array(3);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Level 0's voxel, local units.
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
voxel = 0;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Level 0's bricks along x, y and z.
|
|
23
|
+
* @type {Uint32Array}
|
|
24
|
+
*/
|
|
25
|
+
bricks = new Uint32Array(3);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
level_count = 0;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 1 when baked for a holder that draws both sides, which nothing is inside of.
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
two_sided = 0;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Every brick's entry, level after level in `MeshSDFLayout`'s order: a brick of the bundle's, by
|
|
40
|
+
* index, or `MESH_SDF_EMPTY` or `MESH_SDF_EMPTY_INSIDE`.
|
|
41
|
+
* @type {Uint32Array}
|
|
42
|
+
*/
|
|
43
|
+
entries = new Uint32Array(0);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The field's stored bricks by number: brick n's entry index. Every entry naming a brick is numbered
|
|
47
|
+
* once.
|
|
48
|
+
* @type {Uint32Array}
|
|
49
|
+
*/
|
|
50
|
+
numbered = new Uint32Array(0);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Blocks its stored bricks keep (`MESH_SURFACE_BLOCK.js`), 0 without a table.
|
|
54
|
+
* @type {number}
|
|
55
|
+
*/
|
|
56
|
+
blocks = 0;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Its block table, a word a stored brick by number, or empty when no cache of it kept a plane.
|
|
60
|
+
* @type {Uint32Array}
|
|
61
|
+
*/
|
|
62
|
+
table = new Uint32Array(0);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* A (geometry, material) pair's Model Surface Cache in a {@link ModelCacheBundle}, laid out by one of
|
|
67
|
+
* the bundle's fields.
|
|
68
|
+
*/
|
|
69
|
+
export class ModelCacheBundleCache {
|
|
70
|
+
/**
|
|
71
|
+
* The field of the bundle it is laid out by, by index.
|
|
72
|
+
* @type {number}
|
|
73
|
+
*/
|
|
74
|
+
field = 0;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Bit `1 << plane` for each plane it keeps blocks of (`SURFACE_MATERIAL.js`).
|
|
78
|
+
* @type {number}
|
|
79
|
+
*/
|
|
80
|
+
texels = 0;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Each plane's code, by plane: what a plane it keeps no blocks of holds everywhere.
|
|
84
|
+
* @type {Uint32Array}
|
|
85
|
+
*/
|
|
86
|
+
codes = new Uint32Array(3);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Its presence, `MESH_SURFACE_PRESENCE_BLOCK_WORDS` a block for each of its field's blocks, or empty
|
|
90
|
+
* when it keeps no plane.
|
|
91
|
+
* @type {Uint32Array}
|
|
92
|
+
*/
|
|
93
|
+
presence = new Uint32Array(0);
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Each plane's blocks, by plane, `MESH_SURFACE_PLANE_BLOCK_WORDS` a block for each of its field's
|
|
97
|
+
* blocks, or empty for a plane it does not keep.
|
|
98
|
+
* @type {Uint32Array[]}
|
|
99
|
+
*/
|
|
100
|
+
planes = [new Uint32Array(0), new Uint32Array(0), new Uint32Array(0)];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Model SDFs and Model Surface Caches in one package: the bricks once each, the fields naming them by
|
|
105
|
+
* index, so a brick two fields hold is kept once, and the caches naming their fields. Baked at
|
|
106
|
+
* `voxel_size` and `max_bricks`, the configuration of the `GPUGeometrySDFManager` that made it, which
|
|
107
|
+
* takes it only at the same.
|
|
108
|
+
*
|
|
109
|
+
* `GPUGeometrySDFManager.export_bundle` makes one of what is resident; `upload_bundle` takes one back,
|
|
110
|
+
* with or without sharing its bricks with those resident; `model_cache_bundle_write` and
|
|
111
|
+
* `model_cache_bundle_read` keep it as bytes.
|
|
112
|
+
*/
|
|
113
|
+
export class ModelCacheBundle {
|
|
114
|
+
/**
|
|
115
|
+
* The voxel the fields were baked at, `GPUGeometrySDFManager.configure`'s.
|
|
116
|
+
* @type {number}
|
|
117
|
+
*/
|
|
118
|
+
voxel_size = 0;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The cap on bricks along a geometry's longest axis they were baked under.
|
|
122
|
+
* @type {number}
|
|
123
|
+
*/
|
|
124
|
+
max_bricks = 0;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The bricks the fields hold, `MESH_SDF_BRICK_TEXEL_COUNT` bytes each, texel x + 8y + 64z.
|
|
128
|
+
* @type {Uint8Array}
|
|
129
|
+
*/
|
|
130
|
+
bricks = new Uint8Array(0);
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @type {ModelCacheBundleField[]}
|
|
134
|
+
*/
|
|
135
|
+
fields = [];
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @type {ModelCacheBundleCache[]}
|
|
139
|
+
*/
|
|
140
|
+
caches = [];
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @returns {number}
|
|
144
|
+
*/
|
|
145
|
+
get brick_count() {
|
|
146
|
+
return this.bricks.length / MESH_SDF_BRICK_TEXEL_COUNT;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A bundle from bytes (`MODEL_CACHE_BUNDLE.js`). Throws on a file of another kind, one that needs a
|
|
3
|
+
* newer reader, or one whose references or lengths do not hold together.
|
|
4
|
+
*
|
|
5
|
+
* @param {Uint8Array} bytes
|
|
6
|
+
* @returns {ModelCacheBundle}
|
|
7
|
+
*/
|
|
8
|
+
export function model_cache_bundle_read(bytes: Uint8Array): ModelCacheBundle;
|
|
9
|
+
import { ModelCacheBundle } from "./ModelCacheBundle.js";
|
|
10
|
+
//# sourceMappingURL=model_cache_bundle_read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model_cache_bundle_read.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.js"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,+CAHW,UAAU,GACR,gBAAgB,CA6G5B;iCAxI8E,uBAAuB"}
|