@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,140 @@
|
|
|
1
|
+
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
2
|
+
import { MESH_SDF_BRICK_TEXEL_COUNT, MESH_SDF_EMPTY, MESH_SDF_EMPTY_INSIDE } from "../MESH_SDF.js";
|
|
3
|
+
import { MESH_SURFACE_PLANE_BLOCK_WORDS, MESH_SURFACE_PRESENCE_BLOCK_WORDS } from "../surface/MESH_SURFACE_BLOCK.js";
|
|
4
|
+
import { ModelCacheBundle, ModelCacheBundleCache, ModelCacheBundleField } from "./ModelCacheBundle.js";
|
|
5
|
+
import { MODEL_CACHE_BUNDLE_FORMAT_VERSION, MODEL_CACHE_BUNDLE_MAGIC } from "./MODEL_CACHE_BUNDLE.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {BinaryBuffer} buffer
|
|
9
|
+
* @param {string} what
|
|
10
|
+
* @returns {Uint32Array}
|
|
11
|
+
*/
|
|
12
|
+
function read_words(buffer, what) {
|
|
13
|
+
const length = buffer.readUint32();
|
|
14
|
+
|
|
15
|
+
if (4 * length > buffer.data.byteLength - buffer.position) {
|
|
16
|
+
throw new Error(`model cache bundle: ${what} runs past the end`);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const words = new Uint32Array(length);
|
|
20
|
+
|
|
21
|
+
buffer.readUint32Array(words, 0, length);
|
|
22
|
+
|
|
23
|
+
return words;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A bundle from bytes (`MODEL_CACHE_BUNDLE.js`). Throws on a file of another kind, one that needs a
|
|
28
|
+
* newer reader, or one whose references or lengths do not hold together.
|
|
29
|
+
*
|
|
30
|
+
* @param {Uint8Array} bytes
|
|
31
|
+
* @returns {ModelCacheBundle}
|
|
32
|
+
*/
|
|
33
|
+
export function model_cache_bundle_read(bytes) {
|
|
34
|
+
const buffer = new BinaryBuffer();
|
|
35
|
+
|
|
36
|
+
buffer.fromArrayBuffer(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));
|
|
37
|
+
|
|
38
|
+
if (buffer.readUint32() !== MODEL_CACHE_BUNDLE_MAGIC) {
|
|
39
|
+
throw new Error("model cache bundle: not a bundle");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
buffer.readUint16();
|
|
43
|
+
|
|
44
|
+
const needs = buffer.readUint16();
|
|
45
|
+
|
|
46
|
+
if (needs > MODEL_CACHE_BUNDLE_FORMAT_VERSION) {
|
|
47
|
+
throw new Error(`model cache bundle: needs a reader of version ${needs}, this one is ${MODEL_CACHE_BUNDLE_FORMAT_VERSION}`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const bundle = new ModelCacheBundle();
|
|
51
|
+
|
|
52
|
+
bundle.voxel_size = buffer.readFloat32();
|
|
53
|
+
bundle.max_bricks = buffer.readUint32();
|
|
54
|
+
|
|
55
|
+
const brick_count = buffer.readUint32();
|
|
56
|
+
const field_count = buffer.readUint32();
|
|
57
|
+
const cache_count = buffer.readUint32();
|
|
58
|
+
|
|
59
|
+
bundle.bricks = new Uint8Array(brick_count * MESH_SDF_BRICK_TEXEL_COUNT);
|
|
60
|
+
buffer.readBytes(bundle.bricks, 0, bundle.bricks.length);
|
|
61
|
+
|
|
62
|
+
for (let f = 0; f < field_count; f++) {
|
|
63
|
+
const field = new ModelCacheBundleField();
|
|
64
|
+
|
|
65
|
+
for (let i = 0; i < 3; i++) {
|
|
66
|
+
field.origin[i] = buffer.readFloat32();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
field.voxel = buffer.readFloat32();
|
|
70
|
+
|
|
71
|
+
for (let i = 0; i < 3; i++) {
|
|
72
|
+
field.bricks[i] = buffer.readUint32();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
field.level_count = buffer.readUint32();
|
|
76
|
+
field.two_sided = buffer.readUint32();
|
|
77
|
+
field.entries = read_words(buffer, "a field's entries");
|
|
78
|
+
field.numbered = read_words(buffer, "a field's numbering");
|
|
79
|
+
field.blocks = buffer.readUint32();
|
|
80
|
+
field.table = read_words(buffer, "a field's table");
|
|
81
|
+
|
|
82
|
+
let stored = 0;
|
|
83
|
+
|
|
84
|
+
for (let i = 0; i < field.entries.length; i++) {
|
|
85
|
+
const entry = field.entries[i];
|
|
86
|
+
|
|
87
|
+
if (entry === MESH_SDF_EMPTY || entry === MESH_SDF_EMPTY_INSIDE) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (entry >= brick_count) {
|
|
92
|
+
throw new Error(`model cache bundle: field ${f} names brick ${entry} of ${brick_count}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
stored++;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (field.numbered.length !== stored || field.numbered.some(entry => entry >= field.entries.length)) {
|
|
99
|
+
throw new Error(`model cache bundle: field ${f}'s numbering does not name its ${stored} stored bricks`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (field.table.length !== 0 && field.table.length !== stored) {
|
|
103
|
+
throw new Error(`model cache bundle: field ${f}'s table holds ${field.table.length} words for ${stored} stored bricks`);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
bundle.fields.push(field);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
for (let c = 0; c < cache_count; c++) {
|
|
110
|
+
const cache = new ModelCacheBundleCache();
|
|
111
|
+
|
|
112
|
+
cache.field = buffer.readUint32();
|
|
113
|
+
cache.texels = buffer.readUint32();
|
|
114
|
+
|
|
115
|
+
for (let p = 0; p < 3; p++) {
|
|
116
|
+
cache.codes[p] = buffer.readUint32();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
cache.presence = read_words(buffer, "a cache's presence");
|
|
120
|
+
|
|
121
|
+
for (let p = 0; p < 3; p++) {
|
|
122
|
+
cache.planes[p] = read_words(buffer, "a cache's plane");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (cache.field >= field_count) {
|
|
126
|
+
throw new Error(`model cache bundle: cache ${c} names field ${cache.field} of ${field_count}`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const blocks = cache.texels === 0 ? 0 : bundle.fields[cache.field].blocks;
|
|
130
|
+
|
|
131
|
+
if (cache.presence.length !== blocks * MESH_SURFACE_PRESENCE_BLOCK_WORDS
|
|
132
|
+
|| cache.planes.some((words, p) => words.length !== ((cache.texels & (1 << p)) === 0 ? 0 : blocks * MESH_SURFACE_PLANE_BLOCK_WORDS[p]))) {
|
|
133
|
+
throw new Error(`model cache bundle: cache ${c}'s blocks are not its field's ${blocks}`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
bundle.caches.push(cache);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return bundle;
|
|
140
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A bundle as bytes (`MODEL_CACHE_BUNDLE.js`).
|
|
3
|
+
*
|
|
4
|
+
* @param {import("./ModelCacheBundle.js").ModelCacheBundle} bundle
|
|
5
|
+
* @returns {Uint8Array}
|
|
6
|
+
*/
|
|
7
|
+
export function model_cache_bundle_write(bundle: import("./ModelCacheBundle.js").ModelCacheBundle): Uint8Array;
|
|
8
|
+
//# sourceMappingURL=model_cache_bundle_write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model_cache_bundle_write.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.js"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,iDAHW,OAAO,uBAAuB,EAAE,gBAAgB,GAC9C,UAAU,CAuDtB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
2
|
+
import {
|
|
3
|
+
MODEL_CACHE_BUNDLE_FORMAT_VERSION,
|
|
4
|
+
MODEL_CACHE_BUNDLE_MAGIC,
|
|
5
|
+
MODEL_CACHE_BUNDLE_MIN_READER_VERSION
|
|
6
|
+
} from "./MODEL_CACHE_BUNDLE.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {BinaryBuffer} buffer
|
|
10
|
+
* @param {Uint32Array} words
|
|
11
|
+
*/
|
|
12
|
+
function write_words(buffer, words) {
|
|
13
|
+
buffer.writeUint32(words.length);
|
|
14
|
+
buffer.writeUint32Array(words, 0, words.length);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A bundle as bytes (`MODEL_CACHE_BUNDLE.js`).
|
|
19
|
+
*
|
|
20
|
+
* @param {import("./ModelCacheBundle.js").ModelCacheBundle} bundle
|
|
21
|
+
* @returns {Uint8Array}
|
|
22
|
+
*/
|
|
23
|
+
export function model_cache_bundle_write(bundle) {
|
|
24
|
+
const buffer = new BinaryBuffer();
|
|
25
|
+
|
|
26
|
+
buffer.writeUint32(MODEL_CACHE_BUNDLE_MAGIC);
|
|
27
|
+
buffer.writeUint16(MODEL_CACHE_BUNDLE_FORMAT_VERSION);
|
|
28
|
+
buffer.writeUint16(MODEL_CACHE_BUNDLE_MIN_READER_VERSION);
|
|
29
|
+
buffer.writeFloat32(bundle.voxel_size);
|
|
30
|
+
buffer.writeUint32(bundle.max_bricks);
|
|
31
|
+
buffer.writeUint32(bundle.brick_count);
|
|
32
|
+
buffer.writeUint32(bundle.fields.length);
|
|
33
|
+
buffer.writeUint32(bundle.caches.length);
|
|
34
|
+
|
|
35
|
+
buffer.writeBytes(bundle.bricks, 0, bundle.bricks.length);
|
|
36
|
+
|
|
37
|
+
for (const field of bundle.fields) {
|
|
38
|
+
for (let i = 0; i < 3; i++) {
|
|
39
|
+
buffer.writeFloat32(field.origin[i]);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
buffer.writeFloat32(field.voxel);
|
|
43
|
+
|
|
44
|
+
for (let i = 0; i < 3; i++) {
|
|
45
|
+
buffer.writeUint32(field.bricks[i]);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
buffer.writeUint32(field.level_count);
|
|
49
|
+
buffer.writeUint32(field.two_sided);
|
|
50
|
+
|
|
51
|
+
write_words(buffer, field.entries);
|
|
52
|
+
write_words(buffer, field.numbered);
|
|
53
|
+
|
|
54
|
+
buffer.writeUint32(field.blocks);
|
|
55
|
+
write_words(buffer, field.table);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
for (const cache of bundle.caches) {
|
|
59
|
+
buffer.writeUint32(cache.field);
|
|
60
|
+
buffer.writeUint32(cache.texels);
|
|
61
|
+
|
|
62
|
+
for (let p = 0; p < 3; p++) {
|
|
63
|
+
buffer.writeUint32(cache.codes[p]);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
write_words(buffer, cache.presence);
|
|
67
|
+
|
|
68
|
+
for (let p = 0; p < 3; p++) {
|
|
69
|
+
write_words(buffer, cache.planes[p]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
buffer.trim();
|
|
74
|
+
|
|
75
|
+
return new Uint8Array(buffer.data);
|
|
76
|
+
}
|
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
* fn mesh_sdf_level_bricks(header: MeshSDF, level: u32) -> vec3<u32>
|
|
8
8
|
* fn mesh_sdf_level_offset(header: MeshSDF, level: u32) -> u32 // the level's first entry
|
|
9
9
|
* fn mesh_sdf_level_voxel(header: MeshSDF, level: u32) -> f32
|
|
10
|
+
* fn mesh_sdf_brick_count(header: MeshSDF) -> u32 // every level's bricks
|
|
11
|
+
* fn mesh_sdf_numbers(header: MeshSDF) -> u32 // the first brick's number
|
|
12
|
+
* fn mesh_sdf_numbered(header: MeshSDF) -> u32 // the brick numbered 0
|
|
10
13
|
* fn mesh_sdf_brick_of(header: MeshSDF, brick: u32) -> vec4<u32> // level, then x, y, z
|
|
11
14
|
* fn mesh_sdf_brick_corner(header: MeshSDF, brick: vec4<u32>) -> vec3<f32> // texel 0's point
|
|
12
15
|
* fn mesh_sdf_encode(distance: f32, voxel: f32) -> f32 // saturate(d / 2R + 0.5)
|
|
@@ -14,6 +17,12 @@
|
|
|
14
17
|
* fn mesh_sdf_entry_holds_slot(entry: u32) -> bool // not EMPTY, on either side
|
|
15
18
|
* ```
|
|
16
19
|
*
|
|
20
|
+
* A geometry's range in the indirection, n being its brick count: its stored count at `indirection - 2`,
|
|
21
|
+
* its pending word at `indirection - 1` (`MESH_SDF_BAKE.js`), its n entries from `indirection` in the
|
|
22
|
+
* layout's order, then each brick's number among the bricks given a slot ({@link MESH_SDF_UNNUMBERED}
|
|
23
|
+
* for one with none) from `mesh_sdf_numbers`, then the bricks by number from `mesh_sdf_numbered`, as
|
|
24
|
+
* many as the stored count says.
|
|
25
|
+
*
|
|
17
26
|
* @type {CodeChunk}
|
|
18
27
|
*/
|
|
19
28
|
export const chunk_mesh_sdf: CodeChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_mesh_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_mesh_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,6BAFU,SAAS,CAiGZ;0BAtImB,oCAAoC"}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
MESH_SDF_BRICK_VOXELS,
|
|
6
6
|
MESH_SDF_EMPTY,
|
|
7
7
|
MESH_SDF_EMPTY_INSIDE,
|
|
8
|
+
MESH_SDF_UNNUMBERED,
|
|
8
9
|
MeshSDFState
|
|
9
10
|
} from "./MESH_SDF.js";
|
|
10
11
|
import { MESH_SDF_STRUCT } from "./MESH_SDF_STRUCT.js";
|
|
@@ -18,6 +19,9 @@ import { MESH_SDF_STRUCT } from "./MESH_SDF_STRUCT.js";
|
|
|
18
19
|
* fn mesh_sdf_level_bricks(header: MeshSDF, level: u32) -> vec3<u32>
|
|
19
20
|
* fn mesh_sdf_level_offset(header: MeshSDF, level: u32) -> u32 // the level's first entry
|
|
20
21
|
* fn mesh_sdf_level_voxel(header: MeshSDF, level: u32) -> f32
|
|
22
|
+
* fn mesh_sdf_brick_count(header: MeshSDF) -> u32 // every level's bricks
|
|
23
|
+
* fn mesh_sdf_numbers(header: MeshSDF) -> u32 // the first brick's number
|
|
24
|
+
* fn mesh_sdf_numbered(header: MeshSDF) -> u32 // the brick numbered 0
|
|
21
25
|
* fn mesh_sdf_brick_of(header: MeshSDF, brick: u32) -> vec4<u32> // level, then x, y, z
|
|
22
26
|
* fn mesh_sdf_brick_corner(header: MeshSDF, brick: vec4<u32>) -> vec3<f32> // texel 0's point
|
|
23
27
|
* fn mesh_sdf_encode(distance: f32, voxel: f32) -> f32 // saturate(d / 2R + 0.5)
|
|
@@ -25,6 +29,12 @@ import { MESH_SDF_STRUCT } from "./MESH_SDF_STRUCT.js";
|
|
|
25
29
|
* fn mesh_sdf_entry_holds_slot(entry: u32) -> bool // not EMPTY, on either side
|
|
26
30
|
* ```
|
|
27
31
|
*
|
|
32
|
+
* A geometry's range in the indirection, n being its brick count: its stored count at `indirection - 2`,
|
|
33
|
+
* its pending word at `indirection - 1` (`MESH_SDF_BAKE.js`), its n entries from `indirection` in the
|
|
34
|
+
* layout's order, then each brick's number among the bricks given a slot ({@link MESH_SDF_UNNUMBERED}
|
|
35
|
+
* for one with none) from `mesh_sdf_numbers`, then the bricks by number from `mesh_sdf_numbered`, as
|
|
36
|
+
* many as the stored count says.
|
|
37
|
+
*
|
|
28
38
|
* @type {CodeChunk}
|
|
29
39
|
*/
|
|
30
40
|
export const chunk_mesh_sdf = CodeChunk.from(
|
|
@@ -35,6 +45,7 @@ const MESH_SDF_BRICK_TEXELS = ${MESH_SDF_BRICK_TEXELS}u;
|
|
|
35
45
|
const MESH_SDF_BAND_VOXELS = ${MESH_SDF_BAND_VOXELS}.0;
|
|
36
46
|
const MESH_SDF_EMPTY = ${MESH_SDF_EMPTY}u;
|
|
37
47
|
const MESH_SDF_EMPTY_INSIDE = ${MESH_SDF_EMPTY_INSIDE}u;
|
|
48
|
+
const MESH_SDF_UNNUMBERED = ${MESH_SDF_UNNUMBERED}u;
|
|
38
49
|
const MESH_SDF_STATE_NONE = ${MeshSDFState.None}u;
|
|
39
50
|
const MESH_SDF_STATE_BAKING = ${MeshSDFState.Baking}u;
|
|
40
51
|
const MESH_SDF_STATE_RESIDENT = ${MeshSDFState.Resident}u;
|
|
@@ -63,6 +74,18 @@ fn mesh_sdf_level_voxel(header: ${MESH_SDF_STRUCT.wgsl_ref}, level: u32) -> f32
|
|
|
63
74
|
return header.voxel * f32(1u << level);
|
|
64
75
|
}
|
|
65
76
|
|
|
77
|
+
fn mesh_sdf_brick_count(header: ${MESH_SDF_STRUCT.wgsl_ref}) -> u32 {
|
|
78
|
+
return mesh_sdf_level_offset(header, header.level_count) - header.indirection;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
fn mesh_sdf_numbers(header: ${MESH_SDF_STRUCT.wgsl_ref}) -> u32 {
|
|
82
|
+
return header.indirection + mesh_sdf_brick_count(header);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
fn mesh_sdf_numbered(header: ${MESH_SDF_STRUCT.wgsl_ref}) -> u32 {
|
|
86
|
+
return header.indirection + 2u * mesh_sdf_brick_count(header);
|
|
87
|
+
}
|
|
88
|
+
|
|
66
89
|
fn mesh_sdf_brick_of(header: ${MESH_SDF_STRUCT.wgsl_ref}, brick: u32) -> vec4<u32> {
|
|
67
90
|
var rest = brick;
|
|
68
91
|
var level = 0u;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A texel's term of its brick's content key (`MESH_SDF_BRICK_KEY.js`): the key is the sum of its
|
|
3
|
+
* texels' terms. The WGSL twin of `mesh_sdf_brick_key`.
|
|
4
|
+
*
|
|
5
|
+
* ```wgsl
|
|
6
|
+
* fn mesh_sdf_brick_key_term(texel: u32, byte: u32) -> u32 // texel x + 8y + 64z
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* @type {CodeChunk}
|
|
10
|
+
*/
|
|
11
|
+
export const chunk_mesh_sdf_brick_key: CodeChunk;
|
|
12
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
13
|
+
//# sourceMappingURL=chunk_mesh_sdf_brick_key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_mesh_sdf_brick_key.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.js"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,uCAFU,SAAS,CAUZ;0BArBmB,oCAAoC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
2
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { MESH_SDF_BRICK_KEY_SEED } from "./MESH_SDF_BRICK_KEY.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A texel's term of its brick's content key (`MESH_SDF_BRICK_KEY.js`): the key is the sum of its
|
|
7
|
+
* texels' terms. The WGSL twin of `mesh_sdf_brick_key`.
|
|
8
|
+
*
|
|
9
|
+
* ```wgsl
|
|
10
|
+
* fn mesh_sdf_brick_key_term(texel: u32, byte: u32) -> u32 // texel x + 8y + 64z
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_mesh_sdf_brick_key = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
fn mesh_sdf_brick_key_term(texel: u32, byte: u32) -> u32 {
|
|
19
|
+
return hash_lowbias32(((texel << 8u) | byte) ^ 0x${MESH_SDF_BRICK_KEY_SEED.toString(16)}u);
|
|
20
|
+
}
|
|
21
|
+
`, [
|
|
22
|
+
chunk_hash_lowbias32,
|
|
23
|
+
]);
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Surface Caches: one (geometry, material) pair's surface material (`SURFACE_MATERIAL.js`) on its
|
|
3
|
+
* geometry's field, by cache id, the storage of which {@link GPUGeometrySDFManager} keeps beside the
|
|
4
|
+
* fields.
|
|
5
|
+
*
|
|
6
|
+
* - **Blocks.** A field's bricks are surveyed once (`MESH_SURFACE_BAKE.js`): a brick keeps each of its
|
|
7
|
+
* eight 4³ blocks (`MESH_SURFACE_BLOCK.js`) some texel of which can hold surface, numbered in the
|
|
8
|
+
* geometry's block table, a word a brick, and the count read back. Every cache of the geometry keeps
|
|
9
|
+
* its blocks by those numbers.
|
|
10
|
+
* - **What a cache keeps** follows its material and its geometry (`mesh_surface_channels`): each plane
|
|
11
|
+
* that varies over the surface keeps its blocks, coded, and each other plane only its code in the
|
|
12
|
+
* record, the value every texel takes. A cache that keeps any plane keeps a block of presence for each
|
|
13
|
+
* block: which texels a bake found surface under. A cache that keeps no plane is never baked.
|
|
14
|
+
* - **Storage** is one buffer of words, `mesh_surface_data`, for the tables and for each cache's run of
|
|
15
|
+
* blocks in its presence and each plane it keeps, each run its own allocation. The record
|
|
16
|
+
* (`MESH_SURFACE_STRUCT`) is written when the runs are given.
|
|
17
|
+
*
|
|
18
|
+
* **Lifetime.** {@link acquire} makes a cache for a pair and {@link release} gives it back; the caller
|
|
19
|
+
* keeps one per pair. A cache of an aliased geometry ({@link alias}) is its source's, baked from the
|
|
20
|
+
* source's triangles. A cache waits until its geometry's field is resident ({@link set_layout}) and,
|
|
21
|
+
* when it keeps a plane, surveyed ({@link set_blocks}); it is then baked, and turns resident on the frame
|
|
22
|
+
* its last brick is recorded: the bake's writes come before any later pass reads it. Every bake recorded
|
|
23
|
+
* in full sends {@link onBaked}, the first and each one after. A field that goes ({@link drop_layout})
|
|
24
|
+
* withdraws its caches ({@link onWithdrawn}) back to waiting.
|
|
25
|
+
*
|
|
26
|
+
* **A frame** ({@link graph_bake}) takes at most `budget` bricks: surveys first, then first bakes in the
|
|
27
|
+
* order they were asked for, then bakes again in the order queued. A bake is a thread a texel of each
|
|
28
|
+
* brick, then a workgroup a texel that holds surface, then a workgroup a block. A survey's or a bake's
|
|
29
|
+
* bricks may span frames. {@link recapture} takes a cache's material as it is now: a resident cache
|
|
30
|
+
* keeping the same planes is queued again and reads its last bake until the new one is done, a cache
|
|
31
|
+
* whose bake is under way starts it again, and one keeping other planes than before is withdrawn and
|
|
32
|
+
* laid out anew. The rays read the geometry's BLAS and the material's resident row: what reads a cache
|
|
33
|
+
* needs neither.
|
|
34
|
+
*/
|
|
35
|
+
export class GPUMeshSurfaceCaches {
|
|
36
|
+
/**
|
|
37
|
+
* @param {GPUDevice} device
|
|
38
|
+
*/
|
|
39
|
+
constructor(device: GPUDevice);
|
|
40
|
+
/**
|
|
41
|
+
* Sent with a cache id each time a bake of it is recorded in full, its first and each one after:
|
|
42
|
+
* what was taken from its last one is to be taken again.
|
|
43
|
+
* @type {Signal<number>}
|
|
44
|
+
*/
|
|
45
|
+
onBaked: any;
|
|
46
|
+
/**
|
|
47
|
+
* Sent with a resident cache's id when what it holds goes: its field went, or its material now
|
|
48
|
+
* varies in other planes. It is baked again.
|
|
49
|
+
* @type {Signal<number>}
|
|
50
|
+
*/
|
|
51
|
+
onWithdrawn: any;
|
|
52
|
+
/**
|
|
53
|
+
* Caches given out: acquired and not yet released.
|
|
54
|
+
* @returns {number}
|
|
55
|
+
*/
|
|
56
|
+
get count(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Caches readers may use.
|
|
59
|
+
* @returns {number}
|
|
60
|
+
*/
|
|
61
|
+
get resident_count(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Bricks baked since this was made, every bake's.
|
|
64
|
+
* @returns {number}
|
|
65
|
+
*/
|
|
66
|
+
get bricks_baked(): number;
|
|
67
|
+
/**
|
|
68
|
+
* Whether a frame has anything to do: bricks to survey or bake, or caches turned resident with
|
|
69
|
+
* nothing to bake, still to be announced.
|
|
70
|
+
* @returns {boolean}
|
|
71
|
+
*/
|
|
72
|
+
get has_pending_bake(): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Whether readers may use the cache: baked at least once, and its field still there.
|
|
75
|
+
*
|
|
76
|
+
* @param {number} id
|
|
77
|
+
* @returns {boolean}
|
|
78
|
+
*/
|
|
79
|
+
is_resident(id: number): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* The cache's geometry id: the source's, for an aliased geometry.
|
|
82
|
+
*
|
|
83
|
+
* @param {number} id
|
|
84
|
+
* @returns {number}
|
|
85
|
+
*/
|
|
86
|
+
geometry_of(id: number): number;
|
|
87
|
+
/**
|
|
88
|
+
* The material the cache was acquired for: what a bundle exported with it names it by, to offer it
|
|
89
|
+
* back (`GPUGeometrySDFManager.upload_bundle`).
|
|
90
|
+
*
|
|
91
|
+
* @param {number} id
|
|
92
|
+
* @returns {ShadeMaterial}
|
|
93
|
+
*/
|
|
94
|
+
material_of(id: number): ShadeMaterial;
|
|
95
|
+
/**
|
|
96
|
+
* The blocks a surveyed field's bricks keep, or undefined before its survey is read back.
|
|
97
|
+
*
|
|
98
|
+
* @param {number} geometry
|
|
99
|
+
* @returns {number|undefined}
|
|
100
|
+
*/
|
|
101
|
+
blocks_of(geometry: number): number | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Every cache's record, by id. Replaced when it grows; take it each frame.
|
|
104
|
+
* @returns {GPUBuffer}
|
|
105
|
+
*/
|
|
106
|
+
get records(): GPUBuffer;
|
|
107
|
+
/**
|
|
108
|
+
* The caches' words: the block tables and the caches' blocks. Replaced when it grows; take it each
|
|
109
|
+
* frame.
|
|
110
|
+
* @returns {GPUBuffer}
|
|
111
|
+
*/
|
|
112
|
+
get data(): GPUBuffer;
|
|
113
|
+
/**
|
|
114
|
+
* Put what the caches' readers (`chunk_mesh_surface_sample`) take into their bindings, under the
|
|
115
|
+
* names they take. The records and the words are replaced as they grow: take them each frame.
|
|
116
|
+
*
|
|
117
|
+
* @param {Object} bindings
|
|
118
|
+
* @returns {Object} bindings
|
|
119
|
+
*/
|
|
120
|
+
write_bindings(bindings: any): any;
|
|
121
|
+
/**
|
|
122
|
+
* A cache for a pair. The caller keeps one per pair.
|
|
123
|
+
*
|
|
124
|
+
* @param {number} geometry the geometry id the pair draws; an aliased one's cache is its source's ({@link alias})
|
|
125
|
+
* @param {ShadeMaterial} material
|
|
126
|
+
* @returns {number} cache id
|
|
127
|
+
*/
|
|
128
|
+
acquire(geometry: number, material: ShadeMaterial): number;
|
|
129
|
+
/**
|
|
130
|
+
* @param {number} id
|
|
131
|
+
*/
|
|
132
|
+
release(id: number): void;
|
|
133
|
+
/**
|
|
134
|
+
* The cache's material has changed (its version moved): take it as it is now. A cache that keeps the
|
|
135
|
+
* same planes as before is baked again, and a resident one reads its last bake until the new one is
|
|
136
|
+
* done; one that keeps none has its record's codes rewritten and is announced at once. A cache that
|
|
137
|
+
* keeps other planes than before is withdrawn and laid out anew.
|
|
138
|
+
*
|
|
139
|
+
* @param {number} id
|
|
140
|
+
*/
|
|
141
|
+
recapture(id: number): void;
|
|
142
|
+
/**
|
|
143
|
+
* A geometry's field is resident, having stored `stored` bricks: its caches that keep no plane are
|
|
144
|
+
* laid out at once, and the first that keeps one has its bricks queued to be surveyed.
|
|
145
|
+
*
|
|
146
|
+
* @param {number} geometry
|
|
147
|
+
* @param {number} stored
|
|
148
|
+
* @param {boolean} colored whether the geometry has vertices of a color other than white, which the
|
|
149
|
+
* diffuse albedo varies with (`meshlet_batch_colored`)
|
|
150
|
+
*/
|
|
151
|
+
set_layout(geometry: number, stored: number, colored: boolean): void;
|
|
152
|
+
/**
|
|
153
|
+
* A geometry's field is resident, taken from a bundle (`ModelCacheBundle`) with the survey its
|
|
154
|
+
* caches were laid out by: `blocks` blocks numbered in `table`, a word a stored brick, or no table
|
|
155
|
+
* when no cache of it kept a plane, which leaves a cache that keeps one to have the field surveyed.
|
|
156
|
+
* Each of `provisions` offers a cache of the bundle to the geometry's cache of its material, for as
|
|
157
|
+
* long as this field is the geometry's: a cache whose material makes it keep the planes the bundle's
|
|
158
|
+
* did, with the same codes, takes the bundle's blocks and is resident without a bake; any other is
|
|
159
|
+
* baked as `set_layout` would have it.
|
|
160
|
+
*
|
|
161
|
+
* @param {number} geometry
|
|
162
|
+
* @param {number} stored
|
|
163
|
+
* @param {boolean} colored whether the geometry has vertices of a color other than white
|
|
164
|
+
* @param {number} blocks
|
|
165
|
+
* @param {Uint32Array} table `stored` words, or none
|
|
166
|
+
* @param {{material: ShadeMaterial, cache: ModelCacheBundleCache}[]} provisions
|
|
167
|
+
*/
|
|
168
|
+
adopt_layout(geometry: number, stored: number, colored: boolean, blocks: number, table: Uint32Array, provisions: {
|
|
169
|
+
material: ShadeMaterial;
|
|
170
|
+
cache: ModelCacheBundleCache;
|
|
171
|
+
}[]): void;
|
|
172
|
+
/**
|
|
173
|
+
* The block table of a geometry's field as the storage holds it, read back whole as `words`: its
|
|
174
|
+
* blocks and words, or 0 and none before a survey.
|
|
175
|
+
*
|
|
176
|
+
* @param {number} geometry
|
|
177
|
+
* @param {Uint32Array} words `data` read back
|
|
178
|
+
* @returns {{blocks: number, table: Uint32Array}}
|
|
179
|
+
*/
|
|
180
|
+
export_table(geometry: number, words: Uint32Array): {
|
|
181
|
+
blocks: number;
|
|
182
|
+
table: Uint32Array;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* A resident cache as a bundle's cache laid out by bundle field `field`, its blocks as the storage
|
|
186
|
+
* holds them, read back whole as `words`.
|
|
187
|
+
*
|
|
188
|
+
* @param {number} id
|
|
189
|
+
* @param {number} field
|
|
190
|
+
* @param {Uint32Array} words `data` read back
|
|
191
|
+
* @param {ModelCacheBundleCache} out
|
|
192
|
+
* @returns {ModelCacheBundleCache} out
|
|
193
|
+
*/
|
|
194
|
+
export_cache(id: number, field: number, words: Uint32Array, out: ModelCacheBundleCache): ModelCacheBundleCache;
|
|
195
|
+
/**
|
|
196
|
+
* A geometry's survey is read back: its field's bricks keep `blocks` blocks, numbered in its table.
|
|
197
|
+
* Its caches that keep a plane are laid out.
|
|
198
|
+
*
|
|
199
|
+
* @param {number} geometry
|
|
200
|
+
* @param {number} blocks
|
|
201
|
+
*/
|
|
202
|
+
set_blocks(geometry: number, blocks: number): void;
|
|
203
|
+
/**
|
|
204
|
+
* A geometry's field is gone: its caches wait for the next.
|
|
205
|
+
*
|
|
206
|
+
* @param {number} geometry
|
|
207
|
+
*/
|
|
208
|
+
drop_layout(geometry: number): void;
|
|
209
|
+
/**
|
|
210
|
+
* The geometry `clone` is drawn as `source` from here on: its caches, and those acquired for it after,
|
|
211
|
+
* follow `source`'s field and are baked from `source`'s triangles, the two being in one local space.
|
|
212
|
+
* A cache of `clone` waits for `source`'s field, as one acquired for `source` does.
|
|
213
|
+
*
|
|
214
|
+
* @param {number} clone
|
|
215
|
+
* @param {number} source
|
|
216
|
+
*/
|
|
217
|
+
alias(clone: number, source: number): void;
|
|
218
|
+
/**
|
|
219
|
+
* `clone` is no longer aliased: caches acquired for it from here on follow its own field. Those it has
|
|
220
|
+
* keep following its source's until they are given back.
|
|
221
|
+
*
|
|
222
|
+
* @param {number} clone
|
|
223
|
+
*/
|
|
224
|
+
unalias(clone: number): void;
|
|
225
|
+
/**
|
|
226
|
+
* Record the frame's surveys and bake: at most `budget` bricks. Records nothing when nothing waits.
|
|
227
|
+
* Caches whose bake this completes are announced through {@link onBaked}, resident from here; the
|
|
228
|
+
* surveys it completes are read back.
|
|
229
|
+
*
|
|
230
|
+
* @param {Object} options
|
|
231
|
+
* @param {FrameGraph} options.graph
|
|
232
|
+
* @param {number} options.budget bricks surveyed and baked at most, `surface_bake_budget`: a frame
|
|
233
|
+
* lists every texel of its bricks in one storage binding
|
|
234
|
+
* @param {number} options.arena graph handle of the fields' indirection, as the frame's bake left it
|
|
235
|
+
* @param {GPUBuffer} options.headers the fields' headers
|
|
236
|
+
* @param {GPUTextureView} options.field_atlas the fields' atlas
|
|
237
|
+
* @param {GPUResidentMaterialContext} options.materials what the trace shades with: each baked
|
|
238
|
+
* material is made resident, and the rows committed, before the trace is recorded
|
|
239
|
+
* @param {Object} options.blas the geometry bindings `ray_query_blas_nearest` reads
|
|
240
|
+
*/
|
|
241
|
+
graph_bake({ graph, budget, arena, headers, field_atlas, materials, blas }: {
|
|
242
|
+
graph: FrameGraph;
|
|
243
|
+
budget: number;
|
|
244
|
+
arena: number;
|
|
245
|
+
headers: GPUBuffer;
|
|
246
|
+
field_atlas: GPUTextureView;
|
|
247
|
+
materials: GPUResidentMaterialContext;
|
|
248
|
+
blas: any;
|
|
249
|
+
}): void;
|
|
250
|
+
/**
|
|
251
|
+
* @returns {number} bytes
|
|
252
|
+
*/
|
|
253
|
+
get gpu_memory_usage(): number;
|
|
254
|
+
destroy(): void;
|
|
255
|
+
#private;
|
|
256
|
+
}
|
|
257
|
+
export type FrameGraph = import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
258
|
+
export type ShadeMaterial = import("../../../material/ShadeMaterial.js").ShadeMaterial;
|
|
259
|
+
export type GPUResidentMaterialContext = import("../../../material/resident/GPUResidentMaterialContext.js").GPUResidentMaterialContext;
|
|
260
|
+
export type Allocation = import("../../../../../core/binary/allocator/OffsetAllocator.js").Allocation;
|
|
261
|
+
export type ModelCacheBundleCache = import("../bundle/ModelCacheBundle.js").ModelCacheBundleCache;
|
|
262
|
+
//# sourceMappingURL=GPUMeshSurfaceCaches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUMeshSurfaceCaches.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.js"],"names":[],"mappings":"AAuHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH;IAkNI;;OAEG;IACH,+BAIC;IAlND;;;;OAIG;IACH,aAAuB;IAEvB;;;;OAIG;IACH,iBAA2B;IAwM3B;;;OAGG;IACH,oBAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;OAGG;IACH,2BAEC;IAED;;;;OAIG;IACH,gCAKC;IAED;;;;;OAKG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,gBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,gBAHW,MAAM,GACJ,aAAa,CAIzB;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,MAAM,GAAC,SAAS,CAI5B;IAED;;;OAGG;IACH,yBAIC;IAED;;;;OAIG;IACH,sBAIC;IAED;;;;;;OAMG;IACH,mCAOC;IAED;;;;;;OAMG;IACH,kBAJW,MAAM,YACN,aAAa,GACX,MAAM,CAkClB;IAED;;OAEG;IACH,YAFW,MAAM,QA4BhB;IAED;;;;;;;OAOG;IACH,cAFW,MAAM,QAiDhB;IAED;;;;;;;;OAQG;IACH,qBALW,MAAM,UACN,MAAM,WACN,OAAO,QAuBjB;IAED;;;;;;;;;;;;;;;OAeG;IACH,uBAPW,MAAM,UACN,MAAM,WACN,OAAO,UACP,MAAM,SACN,WAAW,cACX;QAAC,QAAQ,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,qBAAqB,CAAA;KAAC,EAAE,QA+BnE;IA2CD;;;;;;;OAOG;IACH,uBAJW,MAAM,SACN,WAAW,GACT;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAC,CAWhD;IAED;;;;;;;;;OASG;IACH,iBANW,MAAM,SACN,MAAM,SACN,WAAW,OACX,qBAAqB,GACnB,qBAAqB,CAqBjC;IA6BD;;;;;;OAMG;IACH,qBAHW,MAAM,UACN,MAAM,QAWhB;IAED;;;;OAIG;IACH,sBAFW,MAAM,QA0ChB;IAED;;;;;;;OAOG;IACH,aAHW,MAAM,UACN,MAAM,QAoChB;IAED;;;;;OAKG;IACH,eAFW,MAAM,QAIhB;IA8bD;;;;;;;;;;;;;;;OAeG;IACH;QAV+B,KAAK,EAAzB,UAAU;QACM,MAAM,EAAtB,MAAM;QAEU,KAAK,EAArB,MAAM;QACa,OAAO;QACF,WAAW;QACC,SAAS,EAA7C,0BAA0B;QAEV,IAAI;aAiE9B;IA6UD;;OAEG;IACH,+BAUC;IAED,gBAgBC;;CACJ;yBApvDY,OAAO,iEAAiE,EAAE,UAAU;4BACpF,OAAO,oCAAoC,EAAE,aAAa;yCAC1D,OAAO,0DAA0D,EAAE,0BAA0B;yBAC7F,OAAO,yDAAyD,EAAE,UAAU;oCAC5E,OAAO,+BAA+B,EAAE,qBAAqB"}
|