@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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,117 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
### Probe clipmap GI: a probe ray's hit reads one texel of the brick material, drawn by its weight
|
|
6
|
+
|
|
7
|
+
- **Changed:** the shade takes a hit's diffuse albedo and emissive from one of the 8 brick material texels about its
|
|
8
|
+
surface point, drawn in proportion to its weight in their blend (`probe_clipmap_hit_material_pick`,
|
|
9
|
+
`brick_material_surface_pick`, `surface_material_pick` over `sample_discrete_wrs_mat2x4`), where it blended
|
|
10
|
+
the 8: the blend on average, which the probe's blend of its rays takes. The draw comes from the ray's slot and
|
|
11
|
+
direction, apart from the light pass's draws. On Sponza the shade costs 0.62 ms at the median where it cost 0.84
|
|
12
|
+
on an AMD RDNA2 iGPU (40 µs where 50 on an RTX 4090), and the converged indirect diffuse differs from the blend's
|
|
13
|
+
by less than two runs of the blend differ. The brick material debug view and the gather into world texels keep
|
|
14
|
+
the blend.
|
|
15
|
+
- **Added:** `chunk_surface_material_pick` (`surface_material_pick`, `surface_material_surface_at`,
|
|
16
|
+
`SURFACE_MATERIAL_NO_CORNER`), `chunk_brick_material_surface_pick`, `chunk_probe_clipmap_hit_material_pick`.
|
|
17
|
+
|
|
18
|
+
### Model SDF: bricks of the same bytes share a slot, and fields and surface caches go in bundles
|
|
19
|
+
|
|
20
|
+
- **Changed:** a field brick takes the slot already holding its bytes. After evaluate, a pass a texel a thread
|
|
21
|
+
sums each brick's u32 content key (`MESH_SDF_BRICK_KEY.js`). Resolve's find takes the first slot listed under
|
|
22
|
+
the key in a content table (`chunk_mesh_sdf_contents`), or claims the key in the frame's claims, the first
|
|
23
|
+
brick of the key its representative; compare, a texel a thread, holds the brick's bytes against the slot's or
|
|
24
|
+
the representative's; fresh gives a representative a fresh slot listed under its key, and a brick whose bytes
|
|
25
|
+
differ a slot of its own listed nowhere (`GPUGeometrySDFManager.bricks_collided`). A key only finds candidates:
|
|
26
|
+
two bricks share a slot once their 512 bytes compare equal, never on their keys alone. A slot counts the
|
|
27
|
+
entries holding it, and free gives it back with the last; a grown atlas's content table takes the old one's
|
|
28
|
+
records (`shader_mesh_sdf_content_rehash`). On Sponza 57% of the field's 115,978 stored bricks are copies of
|
|
29
|
+
another: they take 49,823 slots where they took 115,978, the atlas 32 MiB where it took 64, the field 38.51 MiB
|
|
30
|
+
where it took 69.26, and every entry reads the same bytes as before; no two of the 49,823 distinct bricks share
|
|
31
|
+
a key. The fill's frames cost 29 µs more at the median, beside evaluate's 1.4 ms.
|
|
32
|
+
- **Added:** `ModelCacheBundle` (`geometry/sdf/bundle/`): Model SDFs and Model Surface Caches in one package,
|
|
33
|
+
each brick once, the fields naming bricks and the caches naming fields, kept as bytes by
|
|
34
|
+
`model_cache_bundle_write` and `model_cache_bundle_read` (`MODEL_CACHE_BUNDLE.js`).
|
|
35
|
+
`GPUGeometrySDFManager.export_bundle` reads resident ones out; `upload_bundle` takes one back as the fields of
|
|
36
|
+
geometries that have none, placed by the next bake (`shader_mesh_sdf_upload`), sharing its bricks with those
|
|
37
|
+
resident, by key and compare as the bake does, or not, and offers its caches to the surface caches, which take
|
|
38
|
+
one where the material keeps the same planes (`GPUMeshSurfaceCaches.adopt_layout`). On Sponza a bundle of the
|
|
39
|
+
scene is 54.7 MB; taken back on a fresh page, with sharing or without, its fields hold what the bake's did and
|
|
40
|
+
export again as they were, and only the fields admitted before the upload were baked.
|
|
41
|
+
- **Added:** `chunk_hash_table_atomic`, inserts, finds and removes on the device over `cpu_build_hash_table`'s
|
|
42
|
+
table, which holds at least `HASH_TABLE_PROBE_LIMIT` records, on the probe sequence
|
|
43
|
+
`chunk_generate_next_linear_congruential_index` it now shares with `chunk_hash_table_get`;
|
|
44
|
+
`HASH_TABLE_PROBE_LIMIT` is exported. `chunk_subgroup_atomic_load` loads an atomic every lane of a subgroup
|
|
45
|
+
reads once a subgroup, where `atomicLoad` is a read-modify-write (D3D12): on Sponza the key pass's 24 µs a
|
|
46
|
+
frame fell to 6. `GPUMeshSurfaceCaches.material_of` names a cache's material.
|
|
47
|
+
- **Changed:** `chunk_subgroup_atomic_add` takes calls behind returns its caller knows to be subgroup-uniform:
|
|
48
|
+
its uniformity diagnostic is off.
|
|
49
|
+
- **Breaking:** the bake's arena keeps a record of `MESH_SDF_TAKEN_WORDS` for each brick taken, then the frame's
|
|
50
|
+
claims; evaluate binds no slot stack and takes no `slot_capacity`; store takes `tally_offset`; the log has
|
|
51
|
+
`MESH_SDF_LOG_SHARED` and `MESH_SDF_LOG_COLLIDED`, and take writes `MESH_SDF_TAKE_COUNT`. Free binds
|
|
52
|
+
`mesh_sdf_contents` and `mesh_sdf_content_table`.
|
|
53
|
+
|
|
54
|
+
### Probe clipmap GI: a Model Surface Cache keeps 4³ blocks, block-coded, where its field can hold surface
|
|
55
|
+
|
|
56
|
+
- **Changed:** a field's bricks are surveyed once, when one of its caches first keeps a plane: each brick keeps
|
|
57
|
+
those of its eight 4³ blocks some texel of which can hold surface, numbered in the geometry's block table, a word a
|
|
58
|
+
brick, and the count is read back. Every cache of the geometry keeps its blocks by those numbers, and only those.
|
|
59
|
+
- **Changed:** each plane a cache keeps is block-coded. The diffuse albedo is two subsets of the block's texels, each
|
|
60
|
+
a line through their square roots with 888 endpoints, and a subset bit and a 3-bit index a texel (48 B a block): the
|
|
61
|
+
subsets start split about the mean of r + g + b, then each texel moves to the nearer line until none moves. The
|
|
62
|
+
metalness and roughness is a line of 4-bit endpoints and a 2-bit index a texel (20 B), the emissive a code a texel
|
|
63
|
+
(256 B), the presence a bit a texel (8 B). A bake lists, traces into a staging, and codes a workgroup a block. On
|
|
64
|
+
Sponza the caches take 34.55 MiB where they took 299.8 MiB, and the albedo the probes' hits read is as far off the
|
|
65
|
+
G-buffer's as before (0.0359 and 0.0879 on two views).
|
|
66
|
+
- **Changed:** the caches' tables and blocks are one storage buffer, `mesh_surface_data`, in place of the planes'
|
|
67
|
+
atlases and the presence words: readers bind it and the records.
|
|
68
|
+
- **Breaking:** `MESH_SURFACE_STRUCT` is 52 bytes: `tiles`, `blocks`, `texels`, `table`, each run's word
|
|
69
|
+
(`presence_blocks`, `albedo_blocks`, `metal_rough_blocks`, `emissive_blocks`) and each plane's code.
|
|
70
|
+
`GPUMeshSurfaceCaches.atlas_at` and `presence` are gone for `data`; `set_blocks` hands a survey's count over,
|
|
71
|
+
and `blocks_of` reads it. `MESH_SURFACE_PRESENCE_RESOURCE` and the planes' texture resources are gone for
|
|
72
|
+
`MESH_SURFACE_DATA_RESOURCE`; `MESH_SURFACE_TEXEL_STRUCT` names its staging slot in place of its tiles.
|
|
73
|
+
|
|
74
|
+
### Probe clipmap GI: a Model Surface Cache keeps a plane only where it varies
|
|
75
|
+
|
|
76
|
+
- **Changed:** each plane of a Model Surface Cache — diffuse albedo, metalness and roughness, emissive — is its own
|
|
77
|
+
atlas, and a cache keeps texels of a plane only where its material makes it vary over the surface, as the bake's
|
|
78
|
+
material sample does: an albedo texture, vertex colors or a metalness that varies vary the diffuse albedo, an ORM
|
|
79
|
+
texture the metalness and roughness, an emissive texture under a factor that is not 0 the emissive. Every other
|
|
80
|
+
plane is one code in the cache's record, the material's own value, and a cache that varies in no plane is never
|
|
81
|
+
baked. On Sponza, where no material is emissive and one lacks an ORM texture, the caches take 299.8 MiB where they
|
|
82
|
+
took 515.75 MiB.
|
|
83
|
+
- **Changed:** which texels hold a material is a presence bit a texel, beside the planes (`mesh_surface_presence`,
|
|
84
|
+
16 words a brick), set by the bake where it found surface; readers blend those alone. The brick clipmap's own
|
|
85
|
+
material still says it in its albedo plane.
|
|
86
|
+
- **Added:** `albedo_compress` and `metal_rough_compress` on the host, giving the shader codecs' codes, and
|
|
87
|
+
`meshlet_batch_colored`, whether a batch's vertices carry a color other than white.
|
|
88
|
+
- **Breaking:** `MESH_SURFACE_STRUCT` is 44 bytes: `tiles`, `texels` (bit `1 << plane` for each plane kept),
|
|
89
|
+
the presence's tile and each plane's, and each plane's code, where it held `tile_base` and `tiles`.
|
|
90
|
+
`GPUMeshSurfaceCaches.atlas` is `atlas_at(plane)`, with `presence` beside it, and `set_layout` takes whether
|
|
91
|
+
the geometry is colored. Readers of the caches bind `mesh_surface_presence`. `surface_material_corners` takes
|
|
92
|
+
the surface point (`surface_material_point`) and a presence mask, which `surface_material_present` makes from an
|
|
93
|
+
albedo plane, and `surface_material_surface` and `surface_material_metal_rough` take the tile's origin.
|
|
94
|
+
`NEUTRAL_SURFACE` is a module of its own.
|
|
95
|
+
|
|
96
|
+
### Probe clipmap GI: the mesh cards are gone; every hit reads the brick material
|
|
97
|
+
|
|
98
|
+
- **Changed:** the probes' hits always read the brick material, gathered as each clipmap brick is built from the
|
|
99
|
+
Model Surface Cache of the `meshes` row nearest each texel (`geometry/sdf/surface/`, added the change before). The
|
|
100
|
+
brick material is made with the clipmaps, and the scene holds keep a surface cache for each (geometry, material) pair
|
|
101
|
+
the SDF world draws. On Sponza the hits' albedo is 0.0288 and 0.0301 off the G-buffer's on two views, against the
|
|
102
|
+
cards' 0.0294 and 0.0306; the caches take 512 MiB where the cards took 111.5 MiB.
|
|
103
|
+
- **Changed:** the brick clipmap keeps no object cells, which named a hit's row for the cards: no 64 rows a slot, no
|
|
104
|
+
object merge in the mesh provider's batches and resolve, no row looked up by the probe trace. The probe ray record's
|
|
105
|
+
`row` is `albedo`, which shade writes.
|
|
106
|
+
- **Changed:** a field's header loses its `cards` word, the bake log's records are three words, and the take four.
|
|
107
|
+
- **Breaking:** gone are `geometry/sdf/cards/` (`GPUMeshCardSets`, `MeshCardCaptureMode`, the placement and capture
|
|
108
|
+
passes, `chunk_mesh_card_surface`), `GPUGeometrySDFManager.cards` and `graph_bake`'s `capture_budget` and
|
|
109
|
+
`material_contexts`, `ProbeClipmapHitMaterial`, `PROBE_CLIPMAP_HIT_MATERIAL`, `chunk_probe_clipmap_hit_surface`,
|
|
110
|
+
the settings `hit_material`, `card_capture_budget` and `card_capture_mode`, `ProbeClipmapSceneHolds`'s `surfaces`
|
|
111
|
+
option, `card_set_of` and `card_rows_buffer`, `GPUProbeClipmap.graph_update`'s `card_rows` and `hit_material`,
|
|
112
|
+
`GPUBrickClipmap.objects`, `BRICK_OBJECT_CELLS`, `BRICK_OBJECTS_RESOURCE` and `chunk_brick_clipmap_object`.
|
|
113
|
+
`probe_clipmap_hit_material` and `probe_clipmap_hit_metal_rough` take no row. `ProbeClipmapDebugView.MeshCards` is
|
|
114
|
+
`MeshSurfaces`, at the same value, and shows each row's surface cache.
|
|
115
|
+
|
|
5
116
|
### Network: a client ahead of the host repays its lead in seconds
|
|
6
117
|
|
|
7
118
|
- **Fixed:** a client that found itself far ahead of the host — the host lost time: a hidden or hitched
|
package/package.json
CHANGED
|
@@ -224,6 +224,10 @@ export class SimActionExecutor {
|
|
|
224
224
|
/**
|
|
225
225
|
* Execute an action: capture prior state of affected components, apply, log.
|
|
226
226
|
*
|
|
227
|
+
* Not re-entrant: calling `execute` or {@link record} from inside `affected_components`,
|
|
228
|
+
* {@link authorize}, `apply`, `announce` or {@link on_component_written} is illegal (the
|
|
229
|
+
* executor is passed to actions for `slot_table` / `current_sender_id` reads only).
|
|
230
|
+
*
|
|
227
231
|
* @param {SimAction} action
|
|
228
232
|
* @param {number} [sender_id] peer that originated this action.
|
|
229
233
|
* Defaults to {@link SENDER_LOCAL} for locally-originated actions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimActionExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/sim/SimActionExecutor.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,2BAFU,MAAM,CAEiB;AAEjC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,6BAFU,MAAM,CAEmB;AAEnC;;;;;;;;;;GAUG;AACH,8BAFU,MAAM,CAEoB;AAEpC;;;;;;;;;;;;GAYG;AACH,+BAFU,MAAM,CAEqB;AAErC;;;;;;GAMG;AACH,0BAFU,MAAM,CAEgB;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IA2EI;;;;;;;;;OASG;IACH,sGATW;QACV,KAAS,yBAAyB;QAClC,UAAc,YAAY;QAC1B,eAAmB,oBAAoB;QACvC,kBAAsB,8BAA8B;QACpD,UAAc,uBAAuB;QACrC,gBAAoB,CAAC,mBAAmB;KACrC,EAyFH;IAjKD;;;;;;;;;OASG;IACH,gBAFU,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAEP;IAEtB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,WAFU,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,KAAK,OAAO,CAAC,GAAG,IAAI,CAEtE;IAEjB;;;;;;;;;;;;;;;OAeG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;;;;OAOG;IACH,sBAFU,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAE7C;IAaxB;;OAEG;IACH,8BAAkB;IAElB;;OAEG;IACH,sBAA4B;IAE5B;;OAEG;IACH,mCAAsC;IAEtC;;OAEG;IACH,gDAA4C;IAE5C;;;;OAIG;IACH,iCAA4B;IAE5B;;;;;;;;;;;OAWG;IACH,kBAFU,mBAAiB,IAAI,CAES;IA4BxC;;;;;;;OAOG;IACH,mBAFU,MAAM,CAEqB;IAErC;;;;;;;OAOG;IACH,kBAFU,MAAM,CAEoB;IAGxC
|
|
1
|
+
{"version":3,"file":"SimActionExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/sim/SimActionExecutor.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,2BAFU,MAAM,CAEiB;AAEjC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,6BAFU,MAAM,CAEmB;AAEnC;;;;;;;;;;GAUG;AACH,8BAFU,MAAM,CAEoB;AAEpC;;;;;;;;;;;;GAYG;AACH,+BAFU,MAAM,CAEqB;AAErC;;;;;;GAMG;AACH,0BAFU,MAAM,CAEgB;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IA2EI;;;;;;;;;OASG;IACH,sGATW;QACV,KAAS,yBAAyB;QAClC,UAAc,YAAY;QAC1B,eAAmB,oBAAoB;QACvC,kBAAsB,8BAA8B;QACpD,UAAc,uBAAuB;QACrC,gBAAoB,CAAC,mBAAmB;KACrC,EAyFH;IAjKD;;;;;;;;;OASG;IACH,gBAFU,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAEP;IAEtB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,WAFU,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,WAAW,KAAK,OAAO,CAAC,GAAG,IAAI,CAEtE;IAEjB;;;;;;;;;;;;;;;OAeG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;;;;OAOG;IACH,sBAFU,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAE7C;IAaxB;;OAEG;IACH,8BAAkB;IAElB;;OAEG;IACH,sBAA4B;IAE5B;;OAEG;IACH,mCAAsC;IAEtC;;OAEG;IACH,gDAA4C;IAE5C;;;;OAIG;IACH,iCAA4B;IAE5B;;;;;;;;;;;OAWG;IACH,kBAFU,mBAAiB,IAAI,CAES;IA4BxC;;;;;;;OAOG;IACH,mBAFU,MAAM,CAEqB;IAErC;;;;;;;OAOG;IACH,kBAFU,MAAM,CAEoB;IAGxC;;;;;;;;;;;;;;OAcG;IACH,uCAPW,MAAM,GAGJ,OAAO,CA0KnB;IAkCD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,gCAwCC;IAED;;;;;;;;;;;;;OAaG;IACH,4BAFW,MAAM,QAqChB;IAED;;;;;;;;OAQG;IACH,sBAJW,UAAU,UACV,MAAM,UACN,MAAM,QAchB;;CACJ;mBAjnBkB,uCAAuC"}
|
|
@@ -274,6 +274,10 @@ export class SimActionExecutor {
|
|
|
274
274
|
/**
|
|
275
275
|
* Execute an action: capture prior state of affected components, apply, log.
|
|
276
276
|
*
|
|
277
|
+
* Not re-entrant: calling `execute` or {@link record} from inside `affected_components`,
|
|
278
|
+
* {@link authorize}, `apply`, `announce` or {@link on_component_written} is illegal (the
|
|
279
|
+
* executor is passed to actions for `slot_table` / `current_sender_id` reads only).
|
|
280
|
+
*
|
|
277
281
|
* @param {SimAction} action
|
|
278
282
|
* @param {number} [sender_id] peer that originated this action.
|
|
279
283
|
* Defaults to {@link SENDER_LOCAL} for locally-originated actions.
|
|
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
66
66
|
/**
|
|
67
67
|
* @param {FluidComponent} fluid
|
|
68
68
|
*/
|
|
69
|
-
static "__#
|
|
69
|
+
static "__#488@#refresh_masks"(fluid: FluidComponent): void;
|
|
70
70
|
/**
|
|
71
71
|
* @param {FluidComponent} fluid
|
|
72
72
|
*/
|
|
73
|
-
static "__#
|
|
73
|
+
static "__#488@#clear_field"(fluid: FluidComponent): void;
|
|
74
74
|
/**
|
|
75
75
|
* Mark every cell of `fluid` whose centre lies within `inflation` of the
|
|
76
76
|
* posed shape as solid. Iteration is clipped to the shape's world AABB
|
|
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
82
82
|
* @param {number} inflation world-units SDF threshold
|
|
83
83
|
* @param {Float64Array} point length-3 scratch
|
|
84
84
|
*/
|
|
85
|
-
static "__#
|
|
85
|
+
static "__#488@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
|
|
86
86
|
/**
|
|
87
87
|
* Write the obstacle's translation velocity onto every face of every cell
|
|
88
88
|
* it voxelized — the moving-wall boundary condition. Runs AFTER the mask
|
|
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
102
102
|
* @param {number} wvy
|
|
103
103
|
* @param {number} wvz
|
|
104
104
|
*/
|
|
105
|
-
static "__#
|
|
105
|
+
static "__#488@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
|
|
106
106
|
constructor();
|
|
107
107
|
dependencies: (typeof FluidObstacle)[];
|
|
108
108
|
components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof FluidObstacle> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof FluidComponent>)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foliage_atlas_cutout.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/material/foliage_atlas_cutout.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"foliage_atlas_cutout.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/material/foliage_atlas_cutout.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;GAYG;AACH,mDARW,kBAAkB,WAClB,MAAM,WACN,UAAU,WACV,UAAU,gBACV,MAAM,SACN,MAAM,WACN,MAAM,QAiHhB;AAED;;;;;;;;GAQG;AACH,oDANW,kBAAkB,WAClB,MAAM,SACN,YAAY,SACZ,MAAM,WACN,MAAM,QAkBhB;AAED;;;;;;;;GAQG;AACH,8CAJW,OAAO,gCAAgC,EAAE,iBAAiB,QAC1D,kBAAkB,GAChB,kBAAkB,CAqB9B;mCA3L4D,yBAAyB"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
import { HashMap } from "../../../core/collection/map/HashMap.js";
|
|
1
2
|
import { convex_hull_fixed_count_2d_relaxation } from "../../../core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js";
|
|
2
3
|
import { convex_hull_monotone_2d } from "../../../core/geom/2d/convex-hull/convex_hull_monotone_2d.js";
|
|
3
4
|
import { polygon2_clip_axis_halfplane } from "../../../core/geom/2d/polygon/polygon2_clip_axis_halfplane.js";
|
|
4
5
|
import { polygon2_is_counter_clockwise } from "../../../core/geom/2d/polygon/polygon2_is_counter_clockwise.js";
|
|
5
6
|
import { clamp } from "../../../core/math/clamp.js";
|
|
7
|
+
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
6
8
|
import { CUTOUT_HULL_VERTEX_COUNT, FoliageAtlasCutout } from "./FoliageAtlasCutout.js";
|
|
7
9
|
import { foliage_tile_layout, foliage_tile_raster } from "./foliage_tile.js";
|
|
8
10
|
|
|
11
|
+
/** @type {HashMap<TreeSpeciesConfig, FoliageAtlasCutout>} */
|
|
12
|
+
const CUTOUT_CACHE = new HashMap();
|
|
13
|
+
|
|
9
14
|
/**
|
|
10
15
|
* Fits one tile's hull from the texel rows its silhouette covers. Each covered row contributes the outer corners of
|
|
11
16
|
* its first and last covered texel, so the hull holds every texel with any coverage at all: no alpha threshold, and
|
|
@@ -169,11 +174,22 @@ export function foliage_atlas_cutout_fit_alpha(out, variant, alpha, width, heigh
|
|
|
169
174
|
* @returns {FoliageAtlasCutout}
|
|
170
175
|
*/
|
|
171
176
|
export function foliage_atlas_cutout(species, out = new FoliageAtlasCutout()) {
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
+
const key = new TreeSpeciesConfig();
|
|
178
|
+
key.seed = 0;
|
|
179
|
+
key.foliage.copy(species.foliage);
|
|
180
|
+
key.foliage_material.copy(species.foliage_material);
|
|
181
|
+
let cached = CUTOUT_CACHE.get(key);
|
|
182
|
+
if (cached === undefined) {
|
|
183
|
+
const layout = foliage_tile_layout(key);
|
|
184
|
+
cached = new FoliageAtlasCutout().resize(layout.variant_count);
|
|
185
|
+
for (let v = 0; v < layout.variant_count; v++) {
|
|
186
|
+
const raster = foliage_tile_raster(key, layout, v, true);
|
|
187
|
+
foliage_atlas_cutout_fit_alpha(cached, v, raster.alpha, layout.resolution);
|
|
188
|
+
}
|
|
189
|
+
CUTOUT_CACHE.set(key, cached);
|
|
177
190
|
}
|
|
191
|
+
out.resize(cached.variant_count);
|
|
192
|
+
out.hulls.set(cached.hulls);
|
|
193
|
+
out.coverage.set(cached.coverage);
|
|
178
194
|
return out;
|
|
179
195
|
}
|
|
@@ -81,6 +81,14 @@ export type CutShape = {
|
|
|
81
81
|
* its tile's, at its LOD's texel
|
|
82
82
|
*/
|
|
83
83
|
bytes: number;
|
|
84
|
+
/**
|
|
85
|
+
* its tile's width in texels
|
|
86
|
+
*/
|
|
87
|
+
tw: number;
|
|
88
|
+
/**
|
|
89
|
+
* its tile's height in texels
|
|
90
|
+
*/
|
|
91
|
+
th: number;
|
|
84
92
|
};
|
|
85
93
|
/**
|
|
86
94
|
* One LOD's cluster cards, and the error it is drawn to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree_cluster_representatives.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/tree_cluster_representatives.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree_cluster_representatives.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/mesh/tree_cluster_representatives.js"],"names":[],"mappings":"AA6CA;;;;;;;GAOG;AAEH;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,uDATW,OAAO,6BAA6B,EAAE,YAAY,eAClD,OAAO,kCAAkC,EAAE,oBAAoB,UAC/D,OAAO,8CAA8C,EAAE,QAAQ,QAC/D,cAAc,EAAE,cAChB,MAAM,iBACN,MAAM,UACN,MAAM,GACJ,0BAA0B,CAoHtC;;;;;SAhMa,MAAM;;;;UACN,MAAM;;;;;UACN,MAAM;cAEN,MAAM;;;;cACN,MAAM;;;;iBACN,MAAM;;;;YACN,MAAM;YACN,MAAM;;;;WACN,MAAM;;;;QACN,MAAM;;;;QACN,MAAM;;;;;;cAmBN,OAAO,oBAAoB,EAAE,WAAW,EAAE;WAC1C,OAAO,yBAAyB,EAAE,eAAe,EAAE;;;;WACnD,MAAM;;;;;;;;;WAON,OAAO,yBAAyB,EAAE,eAAe,EAAE;;;;YACnD,YAAY;;;;aACZ,MAAM,EAAE,EAAE;;;;;;gBACV,MAAM;QAAC,GAAG,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAC,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { tree_cluster_atlas_pack } from "../material/tree_cluster_atlas_pack.js";
|
|
3
3
|
import { tree_cluster_press } from "../material/tree_cluster_press.js";
|
|
4
|
-
import { tree_cluster_tiles } from "../material/tree_cluster_tiles.js";
|
|
5
4
|
import { foliage_scale_spread } from "./foliage_scale_spread.js";
|
|
6
5
|
|
|
7
6
|
/**
|
|
@@ -28,6 +27,8 @@ const SCRATCH_B = new Float32Array(3);
|
|
|
28
27
|
* @property {number} hang_u where it hangs, on its plane along its tile's u, m from its origin
|
|
29
28
|
* @property {number} hang_v
|
|
30
29
|
* @property {number} bytes its tile's, at its LOD's texel
|
|
30
|
+
* @property {number} tw its tile's width in texels
|
|
31
|
+
* @property {number} th its tile's height in texels
|
|
31
32
|
*/
|
|
32
33
|
|
|
33
34
|
/**
|
|
@@ -99,52 +100,78 @@ export function tree_cluster_representatives(skeleton, attachments, leaves, lods
|
|
|
99
100
|
assert.greaterThan(fine_texel, 0, 'fine_texel');
|
|
100
101
|
assert.greaterThan(legible_texel, 0, 'legible_texel');
|
|
101
102
|
|
|
102
|
-
// every cut's leaves pressed onto it, whatever the texel
|
|
103
|
+
// every cut's leaves pressed onto it, whatever the texel, and its frame, unpadded extent, shown area and hang
|
|
103
104
|
const pressed_lods = lods.map(lod => tree_cluster_press(leaves, attachments, lod.cards));
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* The representatives at LOD0's texel `leaf_texel` (`tree_cluster_representatives`), or `null` when the atlas cannot
|
|
113
|
-
* hold tiles that draw every cut at a size the tree grows.
|
|
114
|
-
*
|
|
115
|
-
* @returns {TreeClusterRepresentatives|null}
|
|
116
|
-
*/
|
|
117
|
-
function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, budget) {
|
|
118
|
-
|
|
119
|
-
// ---- every cut's shape and tile, at its LOD's texel
|
|
120
|
-
const lod_texels = lods.map((lod, k) => k === 0 ? leaf_texel : Math.max(leaf_texel, lods[k - 1].error));
|
|
121
|
-
/** @type {CutShape[]} */
|
|
122
|
-
const shapes = [];
|
|
123
|
-
const lod_first = [];
|
|
124
|
-
const lod_tiles = [];
|
|
125
|
-
for (let k = 0; k < lods.length; k++) {
|
|
126
|
-
const { clusters, cards } = lods[k];
|
|
127
|
-
lod_first.push(shapes.length);
|
|
105
|
+
const index = leaves.index.data;
|
|
106
|
+
const tris_per_leaf = index.length / 3 / attachments.count;
|
|
107
|
+
const nodes = [], edges = [];
|
|
108
|
+
const lod_geom = lods.map(({ clusters, cards }, k) => {
|
|
128
109
|
const pressed = pressed_lods[k];
|
|
129
|
-
const texel = lod_texels[k];
|
|
130
|
-
const tiles = tree_cluster_tiles(skeleton, cards, pressed, cards.map(() => texel));
|
|
131
|
-
lod_tiles.push(tiles);
|
|
132
110
|
const P = pressed.positions;
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
const
|
|
136
|
-
|
|
111
|
+
const verts_per_leaf = pressed.verts_per_leaf;
|
|
112
|
+
const count = cards.length;
|
|
113
|
+
const frames = new Float64Array(count * 12);
|
|
114
|
+
const bounds = new Float64Array(count * 4);
|
|
115
|
+
const areas = new Float64Array(count);
|
|
116
|
+
const hang_u = new Float64Array(count);
|
|
117
|
+
const hang_v = new Float64Array(count);
|
|
118
|
+
for (let i = 0; i < count; i++) {
|
|
137
119
|
const card = cards[i];
|
|
120
|
+
const ox = card.origin[0], oy = card.origin[1], oz = card.origin[2];
|
|
121
|
+
const nx = card.normal[0], ny = card.normal[1], nz = card.normal[2];
|
|
122
|
+
const e1x = card.axis[0], e1y = card.axis[1], e1z = card.axis[2];
|
|
123
|
+
const e2x = ny * e1z - nz * e1y, e2y = nz * e1x - nx * e1z, e2z = nx * e1y - ny * e1x;
|
|
138
124
|
const f = i * 12;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
125
|
+
frames[f] = ox;
|
|
126
|
+
frames[f + 1] = oy;
|
|
127
|
+
frames[f + 2] = oz;
|
|
128
|
+
frames[f + 3] = e1x;
|
|
129
|
+
frames[f + 4] = e1y;
|
|
130
|
+
frames[f + 5] = e1z;
|
|
131
|
+
frames[f + 6] = e2x;
|
|
132
|
+
frames[f + 7] = e2y;
|
|
133
|
+
frames[f + 8] = e2z;
|
|
134
|
+
frames[f + 9] = nx;
|
|
135
|
+
frames[f + 10] = ny;
|
|
136
|
+
frames[f + 11] = nz;
|
|
137
|
+
|
|
138
|
+
let min1 = Infinity, max1 = -Infinity, min2 = Infinity, max2 = -Infinity;
|
|
139
|
+
for (let v = pressed.first[i] * verts_per_leaf; v < pressed.first[i + 1] * verts_per_leaf; v++) {
|
|
140
|
+
const x = P[v * 3], y = P[v * 3 + 1], z = P[v * 3 + 2];
|
|
141
|
+
const a = (x - ox) * e1x + (y - oy) * e1y + (z - oz) * e1z;
|
|
142
|
+
const b = (x - ox) * e2x + (y - oy) * e2y + (z - oz) * e2z;
|
|
143
|
+
if (a < min1) min1 = a;
|
|
144
|
+
if (a > max1) max1 = a;
|
|
145
|
+
if (b < min2) min2 = b;
|
|
146
|
+
if (b > max2) max2 = b;
|
|
147
|
+
}
|
|
148
|
+
for (let s2 = 0; s2 < card.segments.length; s2 += 2) {
|
|
149
|
+
skeleton.collect_branch_chain(card.segments[s2], nodes, edges);
|
|
150
|
+
for (const v of [nodes[card.segments[s2 + 1]], nodes[card.segments[s2 + 1] + 1]]) {
|
|
151
|
+
skeleton.node_read_position(SCRATCH_A, 0, v);
|
|
152
|
+
const pad = skeleton.node_read_radius(v);
|
|
153
|
+
const a = (SCRATCH_A[0] - ox) * e1x + (SCRATCH_A[1] - oy) * e1y + (SCRATCH_A[2] - oz) * e1z;
|
|
154
|
+
const b = (SCRATCH_A[0] - ox) * e2x + (SCRATCH_A[1] - oy) * e2y + (SCRATCH_A[2] - oz) * e2z;
|
|
155
|
+
if (a - pad < min1) min1 = a - pad;
|
|
156
|
+
if (a + pad > max1) max1 = a + pad;
|
|
157
|
+
if (b - pad < min2) min2 = b - pad;
|
|
158
|
+
if (b + pad > max2) max2 = b + pad;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (!(max1 >= min1)) {
|
|
162
|
+
min1 = max1 = min2 = max2 = 0;
|
|
163
|
+
}
|
|
164
|
+
bounds[i * 4] = min1;
|
|
165
|
+
bounds[i * 4 + 1] = min2;
|
|
166
|
+
bounds[i * 4 + 2] = max1;
|
|
167
|
+
bounds[i * 4 + 3] = max2;
|
|
168
|
+
|
|
142
169
|
// pressed flat, a leaf's triangles show their whole area
|
|
143
170
|
let area = 0;
|
|
144
171
|
for (let j = 0; j < card.leaves.length; j++) {
|
|
145
172
|
const c = card.leaves[j];
|
|
146
173
|
// from the leaf's vertices to the card's pressed copy's
|
|
147
|
-
const shift = (pressed.first[i] + j - c) *
|
|
174
|
+
const shift = (pressed.first[i] + j - c) * verts_per_leaf;
|
|
148
175
|
for (let t = c * tris_per_leaf; t < (c + 1) * tris_per_leaf; t++) {
|
|
149
176
|
const i0 = (index[t * 3] + shift) * 3, i1 = (index[t * 3 + 1] + shift) * 3, i2 = (index[t * 3 + 2] + shift) * 3;
|
|
150
177
|
const ax = P[i1] - P[i0], ay = P[i1 + 1] - P[i0 + 1], az = P[i1 + 2] - P[i0 + 2];
|
|
@@ -153,40 +180,82 @@ function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, b
|
|
|
153
180
|
}
|
|
154
181
|
}
|
|
155
182
|
// a twig shows its length on the plane by its diameter
|
|
156
|
-
const n = card.normal;
|
|
157
183
|
for (let s2 = 0; s2 < card.segments.length; s2 += 2) {
|
|
158
184
|
skeleton.collect_branch_chain(card.segments[s2], nodes, edges);
|
|
159
185
|
const va = nodes[card.segments[s2 + 1]], vb = nodes[card.segments[s2 + 1] + 1];
|
|
160
186
|
skeleton.node_read_position(SCRATCH_A, 0, va);
|
|
161
187
|
skeleton.node_read_position(SCRATCH_B, 0, vb);
|
|
162
188
|
const ex = SCRATCH_B[0] - SCRATCH_A[0], ey = SCRATCH_B[1] - SCRATCH_A[1], ez = SCRATCH_B[2] - SCRATCH_A[2];
|
|
163
|
-
const along = ex *
|
|
164
|
-
const shown = Math.hypot(ex - along *
|
|
189
|
+
const along = ex * nx + ey * ny + ez * nz;
|
|
190
|
+
const shown = Math.hypot(ex - along * nx, ey - along * ny, ez - along * nz);
|
|
165
191
|
area += shown * (skeleton.node_read_radius(va) + skeleton.node_read_radius(vb));
|
|
166
192
|
}
|
|
167
|
-
|
|
193
|
+
areas[i] = area;
|
|
194
|
+
|
|
168
195
|
const H = clusters[card.cluster].position;
|
|
169
|
-
const dx = H[0] -
|
|
170
|
-
|
|
171
|
-
|
|
196
|
+
const dx = H[0] - ox, dy = H[1] - oy, dz = H[2] - oz;
|
|
197
|
+
hang_u[i] = dx * e1x + dy * e1y + dz * e1z;
|
|
198
|
+
hang_v[i] = dx * e2x + dy * e2y + dz * e2z;
|
|
199
|
+
}
|
|
200
|
+
return { frames, bounds, areas, hang_u, hang_v };
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
const spread = foliage_scale_spread(attachments.scales, attachments.scales.length);
|
|
204
|
+
const shrink = Math.log(spread.low);
|
|
205
|
+
const grow = Math.log(spread.high);
|
|
206
|
+
|
|
207
|
+
// Ends: a cut's size is never under a texel, so once a texel is as large as every cut, one tile draws them all
|
|
208
|
+
for (let texel = Math.min(fine_texel, legible_texel); ; texel = texel < legible_texel ? Math.min(2 * texel, legible_texel) : 2 * texel) {
|
|
209
|
+
const representatives = choose(lods, lod_geom, shrink, grow, texel, budget);
|
|
210
|
+
if (representatives !== null) return representatives;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The representatives at LOD0's texel `leaf_texel` (`tree_cluster_representatives`), or `null` when the atlas cannot
|
|
216
|
+
* hold tiles that draw every cut at a size the tree grows.
|
|
217
|
+
*
|
|
218
|
+
* @returns {TreeClusterRepresentatives|null}
|
|
219
|
+
*/
|
|
220
|
+
function choose(lods, lod_geom, shrink, grow, leaf_texel, budget) {
|
|
221
|
+
|
|
222
|
+
// ---- every cut's shape and tile, at its LOD's texel
|
|
223
|
+
const lod_texels = lods.map((lod, k) => k === 0 ? leaf_texel : Math.max(leaf_texel, lods[k - 1].error));
|
|
224
|
+
/** @type {CutShape[]} */
|
|
225
|
+
const shapes = [];
|
|
226
|
+
const lod_first = [];
|
|
227
|
+
for (let k = 0; k < lods.length; k++) {
|
|
228
|
+
const { cards } = lods[k];
|
|
229
|
+
lod_first.push(shapes.length);
|
|
230
|
+
const texel = lod_texels[k];
|
|
231
|
+
const { bounds, areas, hang_u, hang_v } = lod_geom[k];
|
|
232
|
+
for (let i = 0; i < cards.length; i++) {
|
|
233
|
+
const min1 = bounds[i * 4], min2 = bounds[i * 4 + 1], max1 = bounds[i * 4 + 2], max2 = bounds[i * 4 + 3];
|
|
234
|
+
const tw = Math.ceil((max1 - min1) / texel) + 2;
|
|
235
|
+
const th = Math.ceil((max2 - min2) / texel) + 2;
|
|
236
|
+
const w = (min1 - texel + tw * texel) - (min1 - texel) - 2 * texel;
|
|
237
|
+
const h = (min2 - texel + th * texel) - (min2 - texel) - 2 * texel;
|
|
238
|
+
const span = Math.max(texel * texel, w * h);
|
|
239
|
+
const area = areas[i];
|
|
240
|
+
const size = Math.sqrt(Math.max(texel * texel, area));
|
|
241
|
+
const hu = hang_u[i], hv = hang_v[i];
|
|
172
242
|
shapes.push({
|
|
173
243
|
lod: k,
|
|
174
244
|
card: i,
|
|
175
245
|
size,
|
|
176
246
|
log_size: Math.log(size),
|
|
177
247
|
coverage: area / span,
|
|
178
|
-
hang_offset: Math.hypot(
|
|
179
|
-
hang_u,
|
|
180
|
-
hang_v,
|
|
181
|
-
bytes:
|
|
248
|
+
hang_offset: Math.hypot(hu, hv) / Math.sqrt(span),
|
|
249
|
+
hang_u: hu,
|
|
250
|
+
hang_v: hv,
|
|
251
|
+
bytes: tw * th * CLUSTER_TEXEL_BYTES,
|
|
252
|
+
tw,
|
|
253
|
+
th
|
|
182
254
|
});
|
|
183
255
|
}
|
|
184
256
|
}
|
|
185
257
|
|
|
186
258
|
// ---- the fewest representatives that draw every cut at a size the tree's own leaves grow to, while the atlas fits
|
|
187
|
-
const spread = foliage_scale_spread(attachments.scales, attachments.scales.length);
|
|
188
|
-
const shrink = Math.log(spread.low);
|
|
189
|
-
const grow = Math.log(spread.high);
|
|
190
259
|
// whether representative `r` draws cut `c` as the tree would grow it: no finer LOD's cut, its leaves magnified
|
|
191
260
|
// within their own spread
|
|
192
261
|
const draws = (c, r) => {
|
|
@@ -233,40 +302,60 @@ function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, b
|
|
|
233
302
|
}
|
|
234
303
|
return lo;
|
|
235
304
|
};
|
|
305
|
+
const from_ranks = new Int32Array(n);
|
|
306
|
+
const to_ranks = new Int32Array(n);
|
|
307
|
+
for (let r = 0; r < n; r++) {
|
|
308
|
+
from_ranks[r] = first_rank(shapes[r].log_size, shrink, false);
|
|
309
|
+
to_ranks[r] = first_rank(shapes[r].log_size, grow, true);
|
|
310
|
+
}
|
|
236
311
|
const counts = new Int32Array(n);
|
|
237
312
|
const window = new Int32Array(n);
|
|
313
|
+
const unlikes = new Float64Array(n).fill(NaN);
|
|
314
|
+
let counts_dirty = true;
|
|
238
315
|
while (undrawn > 0) {
|
|
239
316
|
// the one that draws the most cuts not yet drawn, the least unlike them where several do
|
|
240
317
|
let pick_count = 0;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
count
|
|
318
|
+
if (counts_dirty) {
|
|
319
|
+
unlikes.fill(NaN);
|
|
320
|
+
for (let r = 0; r < n; r++) {
|
|
321
|
+
counts[r] = 0;
|
|
322
|
+
if (taken[r]) continue;
|
|
323
|
+
if (chosen.length === 0 ? affordable && shapes[r].bytes > budget : spent + shapes[r].bytes > budget) continue;
|
|
324
|
+
const s = shapes[r];
|
|
325
|
+
const from = from_ranks[r];
|
|
326
|
+
const to = to_ranks[r];
|
|
327
|
+
let count = 0;
|
|
328
|
+
for (let k = s.lod; k < lods.length; k++) {
|
|
329
|
+
count += fenwick_sum(undrawn_of_lod[k], to) - fenwick_sum(undrawn_of_lod[k], from);
|
|
330
|
+
}
|
|
331
|
+
counts[r] = count;
|
|
332
|
+
if (count > pick_count) pick_count = count;
|
|
333
|
+
}
|
|
334
|
+
counts_dirty = false;
|
|
335
|
+
} else {
|
|
336
|
+
for (let r = 0; r < n; r++) {
|
|
337
|
+
if (counts[r] > pick_count) pick_count = counts[r];
|
|
251
338
|
}
|
|
252
|
-
counts[r] = count;
|
|
253
|
-
if (count > pick_count) pick_count = count;
|
|
254
339
|
}
|
|
255
340
|
let pick = -1, pick_unlike = Infinity;
|
|
256
341
|
if (pick_count > 0) {
|
|
257
342
|
for (let r = 0; r < n; r++) {
|
|
258
343
|
if (counts[r] !== pick_count) continue;
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
344
|
+
let unlike = unlikes[r];
|
|
345
|
+
if (Number.isNaN(unlike)) {
|
|
346
|
+
// the cuts it draws, from its window, summed in the order of the cuts
|
|
347
|
+
const s = shapes[r];
|
|
348
|
+
const to = to_ranks[r];
|
|
349
|
+
let w = 0;
|
|
350
|
+
for (let i = from_ranks[r]; i < to; i++) {
|
|
351
|
+
const c = by_size[i];
|
|
352
|
+
if (!drawn[c] && shapes[c].lod >= s.lod) window[w++] = c;
|
|
353
|
+
}
|
|
354
|
+
window.subarray(0, w).sort();
|
|
355
|
+
unlike = 0;
|
|
356
|
+
for (let i = 0; i < w; i++) unlike += cut_distance(shapes[window[i]], s);
|
|
357
|
+
unlikes[r] = unlike;
|
|
266
358
|
}
|
|
267
|
-
window.subarray(0, w).sort();
|
|
268
|
-
let unlike = 0;
|
|
269
|
-
for (let i = 0; i < w; i++) unlike += cut_distance(shapes[window[i]], s);
|
|
270
359
|
if (unlike < pick_unlike) {
|
|
271
360
|
pick = r;
|
|
272
361
|
pick_unlike = unlike;
|
|
@@ -275,18 +364,29 @@ function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, b
|
|
|
275
364
|
}
|
|
276
365
|
if (pick < 0) break;
|
|
277
366
|
const s = shapes[pick];
|
|
278
|
-
|
|
367
|
+
const tw = s.tw, th = s.th;
|
|
279
368
|
taken[pick] = 1;
|
|
369
|
+
counts[pick] = 0;
|
|
280
370
|
if (chosen.length > 0) {
|
|
371
|
+
chosen_sizes.push(tw, th);
|
|
281
372
|
const packed = tree_cluster_atlas_pack(chosen_sizes, chosen.length + 1);
|
|
282
373
|
if (packed.atlas_w * packed.atlas_h * CLUSTER_TEXEL_BYTES > budget) {
|
|
283
374
|
// its tile fits the sum but not the packing
|
|
284
375
|
chosen_sizes.length -= 2;
|
|
376
|
+
for (let r = 0; r < n; r++) {
|
|
377
|
+
if (shapes[r].tw === tw && shapes[r].th === th) {
|
|
378
|
+
taken[r] = 1;
|
|
379
|
+
counts[r] = 0;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
285
382
|
continue;
|
|
286
383
|
}
|
|
384
|
+
} else {
|
|
385
|
+
chosen_sizes.push(tw, th);
|
|
287
386
|
}
|
|
288
387
|
chosen.push(pick);
|
|
289
388
|
spent += s.bytes;
|
|
389
|
+
counts_dirty = true;
|
|
290
390
|
for (let c = lod_first[s.lod]; c < n; c++) {
|
|
291
391
|
if (!drawn[c] && draws(c, pick)) {
|
|
292
392
|
drawn[c] = 1;
|
|
@@ -303,7 +403,7 @@ function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, b
|
|
|
303
403
|
const count = lods[k].cards.length;
|
|
304
404
|
const rep = new Int32Array(count);
|
|
305
405
|
const frames = new Float64Array(count * 12);
|
|
306
|
-
const
|
|
406
|
+
const tile_frames = lod_geom[k].frames;
|
|
307
407
|
for (let i = 0; i < count; i++) {
|
|
308
408
|
const own = lod_first[k] + i;
|
|
309
409
|
const c = shapes[own];
|
|
@@ -331,11 +431,11 @@ function choose(skeleton, attachments, leaves, lods, pressed_lods, leaf_texel, b
|
|
|
331
431
|
const tv = c.hang_v - (sin * s.hang_u + cos * s.hang_v);
|
|
332
432
|
const f = i * 12;
|
|
333
433
|
for (let d = 0; d < 3; d++) {
|
|
334
|
-
const e1 =
|
|
335
|
-
frames[f + d] =
|
|
434
|
+
const e1 = tile_frames[f + 3 + d], e2 = tile_frames[f + 6 + d];
|
|
435
|
+
frames[f + d] = tile_frames[f + d] + e1 * tu + e2 * tv;
|
|
336
436
|
frames[f + 3 + d] = e1 * cos + e2 * sin;
|
|
337
437
|
frames[f + 6 + d] = -e1 * sin + e2 * cos;
|
|
338
|
-
frames[f + 9 + d] =
|
|
438
|
+
frames[f + 9 + d] = tile_frames[f + 9 + d];
|
|
339
439
|
}
|
|
340
440
|
}
|
|
341
441
|
placements.push({ rep, frames });
|