@woosh/meep-engine 3.60.3 → 3.60.5
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 +2602 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +3 -0
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +6 -0
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +1 -2
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts +14 -0
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.d.ts.map +1 -0
- package/src/engine/graphics/ecs/trail3d/TRAIL3D_FADE_LINEAR.js +22 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +19 -3
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +31 -4
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +1 -1
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +5 -5
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +6 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +10 -0
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -1
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/cloth/ecs/cloth_geodesic.d.ts +2 -2
- package/src/engine/physics/cloth/ecs/cloth_geodesic.js +2 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/probe_clipmap/README.md +1 -0
- package/src/shade/playground/probe_clipmap/index.html +5 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +16 -2
- package/src/shade/playground/vgeo_scene/README.md +1 -1
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +7 -5
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +4 -6
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +34 -36
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +162 -163
- package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +1 -1
- package/src/shade/renderer/atmosphere/compute_mie_absorption.js +1 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +1 -1
- package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -164
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- 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/sdf/GPUGeometrySDFManager.d.ts +4 -4
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +4 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +2 -2
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +4 -5
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +6 -7
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +2 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +4 -4
- 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 +50 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +6 -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 +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +17 -0
- 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 +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resampled.js +42 -0
- 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 +5 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- 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 +13 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +52 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +250 -0
- 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 +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts +39 -0
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/environment_level_1_blur_plan.js +119 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +15 -7
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +66 -83
- package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/graph_filter_environment_map.js +15 -6
- package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts +3 -0
- package/src/shade/renderer/light/environment/shader_blur_environment_map.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_blur_environment_map.js +111 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts +3 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js +128 -0
- 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 +0 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -3
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +1 -3
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts +5 -6
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS_NETWORK_SCHEMA.js +9 -10
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +48 -49
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +12 -16
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +246 -246
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +1 -2
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +34 -35
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +2 -2
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +2 -2
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_compute_extinction.js +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +1 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.d.ts +3 -3
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_Schlick.js +3 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +9 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +9 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +4 -4
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +5 -5
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +1 -2
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +1 -2
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts +14 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec2.js +19 -6
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts +10 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/chunk_stbn_sample_vec3.js +14 -6
- package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/random/murmur/chunk_murmur3_vec3u.js +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +2 -3
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +7 -8
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +1 -1
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -12
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +2 -2
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +3 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +0 -19
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +2 -52
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -483
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -536
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4225
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts +0 -13
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.d.ts.map +0 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_averages.js +0 -198
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -283
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -339
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -394
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -160
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -932
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -4
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- package/src/shade/wgsl/NOTES.md +0 -4
- package/src/view/elements/progress/segmented/segment_frame_transform.d.ts +0 -15
- package/src/view/elements/progress/segmented/segment_frame_transform.d.ts.map +0 -1
- package/src/view/elements/progress/segmented/segment_frame_transform.js +0 -69
|
@@ -216,8 +216,8 @@ const vertex_code = ShaderDescriptor.from({
|
|
|
216
216
|
|
|
217
217
|
/*
|
|
218
218
|
The template is handed what the G-buffer pass hands it, in the geometry's local space, the card
|
|
219
|
-
being there: real derivatives, as this is a raster with neighbours of its own triangle, unbiased
|
|
220
|
-
|
|
219
|
+
being there: real derivatives, as this is a raster with neighbours of its own triangle, unbiased (mip
|
|
220
|
+
bias at 0). Both functions run first, in uniform control
|
|
221
221
|
flow, so a template may sample with implicit derivatives.
|
|
222
222
|
|
|
223
223
|
Coverage is drawn as the trace draws it, a texel's surface opaque with probability its opacity, from
|
|
@@ -7,7 +7,7 @@ export const MESH_CARDS_HISTOGRAM_SETTINGS: WebGPUStruct;
|
|
|
7
7
|
* six directions, over a resident geometry's level-0 occupancy — a brick is occupied when its entry
|
|
8
8
|
* holds a slot. Walking its column along the direction, a thread finds every run start: an occupied
|
|
9
9
|
* brick at layer z whose predecessor is empty or outside the grid. A run start's m is the layer after
|
|
10
|
-
* the previous run's end, or 0 for the first
|
|
10
|
+
* the previous run's end, or 0 for the first. The thread counts each run start into
|
|
11
11
|
* its direction's histogram by (m, z), which the layout's scratch holds cleared.
|
|
12
12
|
*
|
|
13
13
|
* @type {ComputeShader}
|
|
@@ -31,7 +31,7 @@ resources.createGroup()
|
|
|
31
31
|
* six directions, over a resident geometry's level-0 occupancy — a brick is occupied when its entry
|
|
32
32
|
* holds a slot. Walking its column along the direction, a thread finds every run start: an occupied
|
|
33
33
|
* brick at layer z whose predecessor is empty or outside the grid. A run start's m is the layer after
|
|
34
|
-
* the previous run's end, or 0 for the first
|
|
34
|
+
* the previous run's end, or 0 for the first. The thread counts each run start into
|
|
35
35
|
* its direction's histogram by (m, z), which the layout's scratch holds cleared.
|
|
36
36
|
*
|
|
37
37
|
* @type {ComputeShader}
|
|
@@ -10,8 +10,7 @@ export const BLAS_BAND_VOTE_STRATA: number;
|
|
|
10
10
|
*/
|
|
11
11
|
export const BLAS_BAND_VOTE_RAYS: number;
|
|
12
12
|
/**
|
|
13
|
-
* A geometry's signed distance within a band, signed by
|
|
14
|
-
* `FMeshDistanceFieldAsyncTask::DoWork`):
|
|
13
|
+
* A geometry's signed distance within a band, signed by a hemisphere ray vote:
|
|
15
14
|
*
|
|
16
15
|
* - The nearest point within the band, through the BLAS. With none, the point is a band away, outside,
|
|
17
16
|
* and casts no ray.
|
|
@@ -20,9 +19,9 @@ export const BLAS_BAND_VOTE_RAYS: number;
|
|
|
20
19
|
* than a quarter of them meet a back face.
|
|
21
20
|
* - A two-sided geometry has no back face: it is outside throughout, and casts no ray either.
|
|
22
21
|
*
|
|
23
|
-
* The directions are
|
|
24
|
-
*
|
|
25
|
-
* hemisphere's
|
|
22
|
+
* The directions are made as the LCG stream runs, ray after ray: a seed of 0 drives two
|
|
23
|
+
* 49-sample stratified uniform hemisphere sets on Shirley and Chiu's concentric map, and the second
|
|
24
|
+
* hemisphere's pole is negated (+Y and -Y hemispheres).
|
|
26
25
|
*
|
|
27
26
|
* ```wgsl
|
|
28
27
|
* fn blas_query_band_sdf(point: vec3<f32>, geometry_index: u32, band: f32, two_sided: bool, contact, stack, stack_top: u32) -> f32
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF
|
|
1
|
+
{"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wCAFU,SAAS,CAgHjB;0BAjJwB,oCAAoC"}
|
|
@@ -28,8 +28,7 @@ export const BLAS_BAND_VOTE_STRATA = 7;
|
|
|
28
28
|
export const BLAS_BAND_VOTE_RAYS = 2 * BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_STRATA;
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
* A geometry's signed distance within a band, signed by
|
|
32
|
-
* `FMeshDistanceFieldAsyncTask::DoWork`):
|
|
31
|
+
* A geometry's signed distance within a band, signed by a hemisphere ray vote:
|
|
33
32
|
*
|
|
34
33
|
* - The nearest point within the band, through the BLAS. With none, the point is a band away, outside,
|
|
35
34
|
* and casts no ray.
|
|
@@ -38,9 +37,9 @@ export const BLAS_BAND_VOTE_RAYS = 2 * BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_ST
|
|
|
38
37
|
* than a quarter of them meet a back face.
|
|
39
38
|
* - A two-sided geometry has no back face: it is outside throughout, and casts no ray either.
|
|
40
39
|
*
|
|
41
|
-
* The directions are
|
|
42
|
-
*
|
|
43
|
-
* hemisphere's
|
|
40
|
+
* The directions are made as the LCG stream runs, ray after ray: a seed of 0 drives two
|
|
41
|
+
* 49-sample stratified uniform hemisphere sets on Shirley and Chiu's concentric map, and the second
|
|
42
|
+
* hemisphere's pole is negated (+Y and -Y hemispheres).
|
|
44
43
|
*
|
|
45
44
|
* ```wgsl
|
|
46
45
|
* fn blas_query_band_sdf(point: vec3<f32>, geometry_index: u32, band: f32, two_sided: bool, contact, stack, stack_top: u32) -> f32
|
|
@@ -55,7 +54,7 @@ const BLAS_BAND_VOTE_STRATA = ${BLAS_BAND_VOTE_STRATA}u;
|
|
|
55
54
|
const BLAS_BAND_VOTE_HEMISPHERE = ${BLAS_BAND_VOTE_STRATA * BLAS_BAND_VOTE_STRATA}u;
|
|
56
55
|
const BLAS_BAND_VOTE_RAYS = ${BLAS_BAND_VOTE_RAYS}u;
|
|
57
56
|
|
|
58
|
-
/**
|
|
57
|
+
/** Next LCG fraction in [0, 1) */
|
|
59
58
|
fn blas_band_vote_fraction(seed: ptr<function, u32>) -> f32 {
|
|
60
59
|
*seed = *seed * 196314165u + 907633515u;
|
|
61
60
|
|
|
@@ -145,7 +144,7 @@ fn blas_query_band_sdf(
|
|
|
145
144
|
}
|
|
146
145
|
}
|
|
147
146
|
|
|
148
|
-
//
|
|
147
|
+
// Inside when hits > 0 and back-face hits > 0.25 · samples (the first follows from the second)
|
|
149
148
|
return select(distance, -distance, 4u * back > BLAS_BAND_VOTE_RAYS);
|
|
150
149
|
}
|
|
151
150
|
`, [
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn a virtual geometry into an ordinary meshlet geometry of at most `triangle_limit` triangles: a
|
|
3
|
+
* proxy, for whatever wants a plain mesh of an asset that is only clusters.
|
|
4
|
+
*
|
|
5
|
+
* **No simplification happens here.** The DAG already holds the asset at every level of detail; the
|
|
6
|
+
* proxy is a cut through it, and the cut's clusters are meshlets already (`VGEO_FORMAT.md` §8). The
|
|
7
|
+
* cut starts at the roots and refines, one group at a time, the group whose parents carry the largest
|
|
8
|
+
* `self_error`, and stops at the first refinement that would take it over the limit — so the error is
|
|
9
|
+
* as uniform as the DAG allows.
|
|
10
|
+
*
|
|
11
|
+
* A group is refined only once every one of its parents is in the cut (`group_parent_count`, §6), and
|
|
12
|
+
* then all of them are replaced together, so the cut is watertight at every step, as a view's cut is.
|
|
13
|
+
*
|
|
14
|
+
* Pages are installed as the descent reaches them, down to one band below the cut: a small proxy of a
|
|
15
|
+
* large asset reads the coarse prefix of the file and nothing else.
|
|
16
|
+
*
|
|
17
|
+
* The DAG's roots are as coarse as it goes: a limit below the roots' triangle count gets the roots.
|
|
18
|
+
*
|
|
19
|
+
* @param {VGeoContainerReader} reader an open container, which is one material's geometry; the pages the
|
|
20
|
+
* descent reaches are installed into it and left there
|
|
21
|
+
* @param {number} triangle_limit
|
|
22
|
+
* @returns {Promise<MeshletGeometry>}
|
|
23
|
+
*
|
|
24
|
+
* @author Alex Goldring
|
|
25
|
+
* @copyright Company Named Limited (c) 2026
|
|
26
|
+
*/
|
|
27
|
+
export function vgeo_to_proxy_mesh(reader: VGeoContainerReader, triangle_limit: number): Promise<MeshletGeometry>;
|
|
28
|
+
export type VGeoContainerReader = import("../format/read/VGeoContainerReader.js").VGeoContainerReader;
|
|
29
|
+
export type VGeoPage = import("../format/read/VGeoPage.js").VGeoPage;
|
|
30
|
+
import { MeshletGeometry } from "../../MeshletGeometry.js";
|
|
31
|
+
//# sourceMappingURL=vgeo_to_proxy_mesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_to_proxy_mesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,2CARW,mBAAmB,kBAEnB,MAAM,GACJ,QAAQ,eAAe,CAAC,CAcpC;kCA7CY,OAAO,uCAAuC,EAAE,mBAAmB;uBACnE,OAAO,4BAA4B,EAAE,QAAQ;gCAP1B,0BAA0B"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
3
|
+
import { platform_compute_endianness } from "../../../../../core/binary/platform_compute_endianness.js";
|
|
4
|
+
import { IndexedFloatMaxHeap } from "../../../../../core/collection/heap/IndexedFloatMaxHeap.js";
|
|
5
|
+
import { aabb3_array_combine } from "../../../../../core/geom/3d/aabb/aabb3_array_combine.js";
|
|
6
|
+
import { blas_from_meshlets } from "../../blas_from_meshlets.js";
|
|
7
|
+
import { MESHLET_METADATA_STRUCT } from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
8
|
+
import { MeshletGeometry } from "../../MeshletGeometry.js";
|
|
9
|
+
import { VGEO_NO_CHILD } from "../format/cluster/VGEO_NO_CHILD.js";
|
|
10
|
+
import { VGEO_SAME_PAGE } from "../format/cluster/VGEO_SAME_PAGE.js";
|
|
11
|
+
import { vgeo_meshlet_metadata_write } from "../runtime/vgeo_meshlet_metadata_write.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {import("../format/read/VGeoContainerReader.js").VGeoContainerReader} VGeoContainerReader
|
|
15
|
+
* @typedef {import("../format/read/VGeoPage.js").VGeoPage} VGeoPage
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A page not yet given its groups' ids.
|
|
20
|
+
* @type {number}
|
|
21
|
+
*/
|
|
22
|
+
const NO_BASE = -1;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Turn a virtual geometry into an ordinary meshlet geometry of at most `triangle_limit` triangles: a
|
|
26
|
+
* proxy, for whatever wants a plain mesh of an asset that is only clusters.
|
|
27
|
+
*
|
|
28
|
+
* **No simplification happens here.** The DAG already holds the asset at every level of detail; the
|
|
29
|
+
* proxy is a cut through it, and the cut's clusters are meshlets already (`VGEO_FORMAT.md` §8). The
|
|
30
|
+
* cut starts at the roots and refines, one group at a time, the group whose parents carry the largest
|
|
31
|
+
* `self_error`, and stops at the first refinement that would take it over the limit — so the error is
|
|
32
|
+
* as uniform as the DAG allows.
|
|
33
|
+
*
|
|
34
|
+
* A group is refined only once every one of its parents is in the cut (`group_parent_count`, §6), and
|
|
35
|
+
* then all of them are replaced together, so the cut is watertight at every step, as a view's cut is.
|
|
36
|
+
*
|
|
37
|
+
* Pages are installed as the descent reaches them, down to one band below the cut: a small proxy of a
|
|
38
|
+
* large asset reads the coarse prefix of the file and nothing else.
|
|
39
|
+
*
|
|
40
|
+
* The DAG's roots are as coarse as it goes: a limit below the roots' triangle count gets the roots.
|
|
41
|
+
*
|
|
42
|
+
* @param {VGeoContainerReader} reader an open container, which is one material's geometry; the pages the
|
|
43
|
+
* descent reaches are installed into it and left there
|
|
44
|
+
* @param {number} triangle_limit
|
|
45
|
+
* @returns {Promise<MeshletGeometry>}
|
|
46
|
+
*
|
|
47
|
+
* @author Alex Goldring
|
|
48
|
+
* @copyright Company Named Limited (c) 2026
|
|
49
|
+
*/
|
|
50
|
+
export async function vgeo_to_proxy_mesh(reader, triangle_limit) {
|
|
51
|
+
assert.defined(reader.root, 'reader.root — the container must be open');
|
|
52
|
+
assert.isNonNegativeInteger(triangle_limit, 'triangle_limit');
|
|
53
|
+
|
|
54
|
+
const cut = new ProxyCut(reader);
|
|
55
|
+
|
|
56
|
+
await cut.descend(triangle_limit);
|
|
57
|
+
|
|
58
|
+
return cut.build();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The cut, and the bookkeeping of its descent.
|
|
63
|
+
*
|
|
64
|
+
* Groups are given dense ids as their page is installed, so the per-group state is typed arrays sized
|
|
65
|
+
* once from the header's `total_groups`.
|
|
66
|
+
*/
|
|
67
|
+
class ProxyCut {
|
|
68
|
+
/**
|
|
69
|
+
* @param {VGeoContainerReader} reader
|
|
70
|
+
*/
|
|
71
|
+
constructor(reader) {
|
|
72
|
+
this.reader = reader;
|
|
73
|
+
|
|
74
|
+
const capacity = reader.header.total_groups;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* First group id of each page; {@link NO_BASE} until the page is installed.
|
|
78
|
+
*/
|
|
79
|
+
this.page_base = new Int32Array(reader.header.total_pages).fill(NO_BASE);
|
|
80
|
+
|
|
81
|
+
this.next_base = 0;
|
|
82
|
+
|
|
83
|
+
this.group_page = new Uint32Array(capacity);
|
|
84
|
+
this.group_index = new Uint16Array(capacity);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Parents of the group in the cut so far.
|
|
88
|
+
*/
|
|
89
|
+
this.arrived = new Uint16Array(capacity);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Their triangles: what refining the group takes out of the cut.
|
|
93
|
+
*/
|
|
94
|
+
this.parent_triangles = new Uint32Array(capacity);
|
|
95
|
+
|
|
96
|
+
this.refined = new Uint8Array(capacity);
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Groups whose every parent is in the cut, by the error those parents carry.
|
|
100
|
+
*/
|
|
101
|
+
this.refinable = new IndexedFloatMaxHeap(capacity);
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Every cluster that entered the cut, as the id of its group, its index in its page and the id
|
|
105
|
+
* of its child group (-1 for a leaf). One leaves the cut when its child group is refined.
|
|
106
|
+
* @type {number[]}
|
|
107
|
+
*/
|
|
108
|
+
this.entered_group = [];
|
|
109
|
+
this.entered_cluster = [];
|
|
110
|
+
this.entered_child = [];
|
|
111
|
+
|
|
112
|
+
this.triangle_count = 0;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @param {number} limit
|
|
117
|
+
* @returns {Promise<void>}
|
|
118
|
+
*/
|
|
119
|
+
async descend(limit) {
|
|
120
|
+
const root = this.reader.root;
|
|
121
|
+
|
|
122
|
+
this.#register(root);
|
|
123
|
+
|
|
124
|
+
for (let group = 0; group < root.group_parent_count.length; group++) {
|
|
125
|
+
// no cluster refines into it: the top of the DAG
|
|
126
|
+
if (root.group_parent_count[group] === 0) {
|
|
127
|
+
await this.#enter(this.page_base[root.index] + group);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const refinable = this.refinable;
|
|
132
|
+
|
|
133
|
+
while (refinable.size > 0) {
|
|
134
|
+
const id = refinable.pop_max();
|
|
135
|
+
|
|
136
|
+
if (this.triangle_count - this.parent_triangles[id] + this.#group_triangles(id) > limit) {
|
|
137
|
+
// the largest error left does not fit: refining anywhere finer would make it less uniform
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
this.refined[id] = 1;
|
|
142
|
+
this.triangle_count -= this.parent_triangles[id];
|
|
143
|
+
|
|
144
|
+
await this.#enter(id);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* The cut's clusters as a meshlet geometry: their payloads gathered as they are stored, a metadata
|
|
150
|
+
* row each, and the BVH the mesh path builds.
|
|
151
|
+
*
|
|
152
|
+
* @returns {MeshletGeometry}
|
|
153
|
+
*/
|
|
154
|
+
build() {
|
|
155
|
+
/** @type {VGeoPage[]} */
|
|
156
|
+
const pages = [];
|
|
157
|
+
/** @type {number[]} */
|
|
158
|
+
const clusters = [];
|
|
159
|
+
|
|
160
|
+
let data_size = 0;
|
|
161
|
+
|
|
162
|
+
for (let i = 0; i < this.entered_group.length; i++) {
|
|
163
|
+
const child = this.entered_child[i];
|
|
164
|
+
|
|
165
|
+
if (child !== -1 && this.refined[child] === 1) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const page = this.reader.page(this.group_page[this.entered_group[i]]);
|
|
170
|
+
const cluster = this.entered_cluster[i];
|
|
171
|
+
|
|
172
|
+
pages.push(page);
|
|
173
|
+
clusters.push(cluster);
|
|
174
|
+
|
|
175
|
+
data_size += page.cluster_payload_size[cluster];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const count = clusters.length;
|
|
179
|
+
|
|
180
|
+
const data = new Uint8Array(data_size);
|
|
181
|
+
|
|
182
|
+
const metadata = BinaryBuffer.fromEndianness(platform_compute_endianness());
|
|
183
|
+
|
|
184
|
+
metadata.setCapacity(count * MESHLET_METADATA_STRUCT.size);
|
|
185
|
+
|
|
186
|
+
const result = new MeshletGeometry();
|
|
187
|
+
|
|
188
|
+
const box = result.bounding_box;
|
|
189
|
+
|
|
190
|
+
box.set([Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity]);
|
|
191
|
+
|
|
192
|
+
let address = 0;
|
|
193
|
+
|
|
194
|
+
for (let i = 0; i < count; i++) {
|
|
195
|
+
const page = pages[i];
|
|
196
|
+
const cluster = clusters[i];
|
|
197
|
+
|
|
198
|
+
const start = page.payload_offset + page.cluster_payload_offset[cluster];
|
|
199
|
+
const size = page.cluster_payload_size[cluster];
|
|
200
|
+
|
|
201
|
+
data.set(page.bytes.subarray(start, start + size), address);
|
|
202
|
+
|
|
203
|
+
// §11.8: every payload size is a multiple of four, so each cluster starts on a word
|
|
204
|
+
vgeo_meshlet_metadata_write(metadata, page, cluster, address >>> 2);
|
|
205
|
+
|
|
206
|
+
// `aabb` is the cluster's tight fit, so their union is the proxy's
|
|
207
|
+
aabb3_array_combine(box, 0, box, 0, page.aabb, cluster * 6);
|
|
208
|
+
|
|
209
|
+
address += size;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const batch = result.meshlets;
|
|
213
|
+
|
|
214
|
+
batch.count = count;
|
|
215
|
+
batch.data_buffer = data.buffer;
|
|
216
|
+
batch.metadata_buffer = metadata.data.slice(0, count * MESHLET_METADATA_STRUCT.size);
|
|
217
|
+
|
|
218
|
+
// the box-diagonal sphere `meshlet_geometry_build_from_geometry` gives a mesh
|
|
219
|
+
const sphere = result.bounding_sphere;
|
|
220
|
+
|
|
221
|
+
sphere[0] = (box[0] + box[3]) * 0.5;
|
|
222
|
+
sphere[1] = (box[1] + box[4]) * 0.5;
|
|
223
|
+
sphere[2] = (box[2] + box[5]) * 0.5;
|
|
224
|
+
sphere[3] = 0.5 * Math.hypot(box[3] - box[0], box[4] - box[1], box[5] - box[2]);
|
|
225
|
+
|
|
226
|
+
result.name = this.reader.source.name;
|
|
227
|
+
result.primitive_count = this.triangle_count;
|
|
228
|
+
result.bvh = blas_from_meshlets(batch, result.primitive_count, box);
|
|
229
|
+
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @param {number} id
|
|
235
|
+
* @returns {number}
|
|
236
|
+
*/
|
|
237
|
+
#group_triangles(id) {
|
|
238
|
+
const page = this.reader.page(this.group_page[id]);
|
|
239
|
+
const group = this.group_index[id];
|
|
240
|
+
|
|
241
|
+
const first = page.group_cluster_first[group];
|
|
242
|
+
const end = first + page.group_cluster_count[group];
|
|
243
|
+
|
|
244
|
+
let triangles = 0;
|
|
245
|
+
|
|
246
|
+
for (let cluster = first; cluster < end; cluster++) {
|
|
247
|
+
triangles += page.triangle_count[cluster];
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return triangles;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Give an installed page's groups their ids.
|
|
255
|
+
*
|
|
256
|
+
* @param {VGeoPage} page
|
|
257
|
+
*/
|
|
258
|
+
#register(page) {
|
|
259
|
+
if (this.page_base[page.index] !== NO_BASE) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const base = this.next_base;
|
|
264
|
+
const group_count = page.group_cluster_count.length;
|
|
265
|
+
|
|
266
|
+
this.page_base[page.index] = base;
|
|
267
|
+
|
|
268
|
+
for (let group = 0; group < group_count; group++) {
|
|
269
|
+
this.group_page[base + group] = page.index;
|
|
270
|
+
this.group_index[base + group] = group;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
this.next_base = base + group_count;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Put a group's clusters in the cut, and count each in at its child group, which becomes
|
|
278
|
+
* refinable once its last parent arrives.
|
|
279
|
+
*
|
|
280
|
+
* @param {number} id
|
|
281
|
+
* @returns {Promise<void>}
|
|
282
|
+
*/
|
|
283
|
+
async #enter(id) {
|
|
284
|
+
const reader = this.reader;
|
|
285
|
+
const page = reader.page(this.group_page[id]);
|
|
286
|
+
const group = this.group_index[id];
|
|
287
|
+
|
|
288
|
+
const first = page.group_cluster_first[group];
|
|
289
|
+
const end = first + page.group_cluster_count[group];
|
|
290
|
+
|
|
291
|
+
// the child pages first: a child group's parent count lives in its own page
|
|
292
|
+
const installs = [];
|
|
293
|
+
|
|
294
|
+
for (let cluster = first; cluster < end; cluster++) {
|
|
295
|
+
const child_ref = page.child_ref[cluster];
|
|
296
|
+
|
|
297
|
+
if (child_ref === VGEO_NO_CHILD || child_ref === VGEO_SAME_PAGE) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const child_page = page.child_page_index[child_ref];
|
|
302
|
+
|
|
303
|
+
if (!reader.is_resident(child_page)) {
|
|
304
|
+
installs.push(reader.install(
|
|
305
|
+
child_page, page.child_frame_offset[child_ref], page.child_fetch_size[child_ref]
|
|
306
|
+
));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
for (const child_page of await Promise.all(installs)) {
|
|
311
|
+
this.#register(child_page);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
for (let cluster = first; cluster < end; cluster++) {
|
|
315
|
+
const triangles = page.triangle_count[cluster];
|
|
316
|
+
|
|
317
|
+
this.triangle_count += triangles;
|
|
318
|
+
|
|
319
|
+
this.entered_group.push(id);
|
|
320
|
+
this.entered_cluster.push(cluster);
|
|
321
|
+
|
|
322
|
+
const child_ref = page.child_ref[cluster];
|
|
323
|
+
|
|
324
|
+
if (child_ref === VGEO_NO_CHILD) {
|
|
325
|
+
this.entered_child.push(-1);
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const child_page = reader.page(child_ref === VGEO_SAME_PAGE ? page.index : page.child_page_index[child_ref]);
|
|
330
|
+
const child_group = page.child_group[cluster];
|
|
331
|
+
const child = this.page_base[child_page.index] + child_group;
|
|
332
|
+
|
|
333
|
+
this.entered_child.push(child);
|
|
334
|
+
|
|
335
|
+
this.arrived[child]++;
|
|
336
|
+
this.parent_triangles[child] += triangles;
|
|
337
|
+
|
|
338
|
+
if (this.arrived[child] === child_page.group_parent_count[child_group]) {
|
|
339
|
+
this.refinable.insert(child, page.self_error[cluster]);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One cluster's meshlet metadata row, written at `buffer`'s position.
|
|
3
|
+
*
|
|
4
|
+
* `VGEO_FORMAT.md` §8: the 40-byte rows are synthesized from the cluster record — `aabb` becomes
|
|
5
|
+
* `bounds_box`, the u8 counts widen to u32, `encoding_flags` passes through. Only `address` depends
|
|
6
|
+
* on where the payload went, so the caller says.
|
|
7
|
+
*
|
|
8
|
+
* @param {BinaryBuffer} buffer
|
|
9
|
+
* @param {VGeoPage} page
|
|
10
|
+
* @param {number} cluster index within `page`
|
|
11
|
+
* @param {number} address where the cluster's payload starts in the data the row will be read against, in 4-byte words
|
|
12
|
+
*
|
|
13
|
+
* @author Alex Goldring
|
|
14
|
+
* @copyright Company Named Limited (c) 2026
|
|
15
|
+
*/
|
|
16
|
+
export function vgeo_meshlet_metadata_write(buffer: BinaryBuffer, page: VGeoPage, cluster: number, address: number): void;
|
|
17
|
+
//# sourceMappingURL=vgeo_meshlet_metadata_write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_meshlet_metadata_write.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;GAcG;AACH,2FANW,MAAM,WACN,MAAM,QAahB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { write_wgsl_type_value } from "../../../shader/type/serde/write_gpu_typed_buffer.js";
|
|
2
|
+
import {
|
|
3
|
+
MESHLET_METADATA_STRUCT
|
|
4
|
+
} from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* One cluster's meshlet metadata row, written at `buffer`'s position.
|
|
8
|
+
*
|
|
9
|
+
* `VGEO_FORMAT.md` §8: the 40-byte rows are synthesized from the cluster record — `aabb` becomes
|
|
10
|
+
* `bounds_box`, the u8 counts widen to u32, `encoding_flags` passes through. Only `address` depends
|
|
11
|
+
* on where the payload went, so the caller says.
|
|
12
|
+
*
|
|
13
|
+
* @param {BinaryBuffer} buffer
|
|
14
|
+
* @param {VGeoPage} page
|
|
15
|
+
* @param {number} cluster index within `page`
|
|
16
|
+
* @param {number} address where the cluster's payload starts in the data the row will be read against, in 4-byte words
|
|
17
|
+
*
|
|
18
|
+
* @author Alex Goldring
|
|
19
|
+
* @copyright Company Named Limited (c) 2026
|
|
20
|
+
*/
|
|
21
|
+
export function vgeo_meshlet_metadata_write(buffer, page, cluster, address) {
|
|
22
|
+
write_wgsl_type_value({
|
|
23
|
+
bounds_box: page.aabb.subarray(cluster * 6, cluster * 6 + 6),
|
|
24
|
+
address,
|
|
25
|
+
primitive_count: page.triangle_count[cluster],
|
|
26
|
+
vertex_count: page.vertex_count[cluster],
|
|
27
|
+
flags: page.encoding_flags[cluster],
|
|
28
|
+
}, buffer, MESHLET_METADATA_STRUCT);
|
|
29
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_runtime_meshlet_batch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4DALa,YAAY,
|
|
1
|
+
{"version":3,"file":"vgeo_runtime_meshlet_batch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4DALa,YAAY,CAuCxB;6BAzD4B,+BAA+B"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { assert } from "../../../../../core/assert.js";
|
|
2
2
|
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
3
3
|
import { platform_compute_endianness } from "../../../../../core/binary/platform_compute_endianness.js";
|
|
4
|
-
import { write_wgsl_type_value } from "../../../shader/type/serde/write_gpu_typed_buffer.js";
|
|
5
4
|
import {
|
|
6
5
|
MESHLET_METADATA_STRUCT
|
|
7
6
|
} from "../../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
8
7
|
import { MeshletBatch } from "../../meshlet/MeshletBatch.js";
|
|
8
|
+
import { vgeo_meshlet_metadata_write } from "./vgeo_meshlet_metadata_write.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* A decoded page, as the meshlet pool takes it.
|
|
@@ -46,18 +46,12 @@ export function vgeo_runtime_meshlet_batch(page) {
|
|
|
46
46
|
metadata.setCapacity(count * MESHLET_METADATA_STRUCT.size);
|
|
47
47
|
|
|
48
48
|
for (let cluster = 0; cluster < count; cluster++) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*/
|
|
56
|
-
address: page.cluster_payload_offset[cluster] >>> 2,
|
|
57
|
-
primitive_count: page.triangle_count[cluster],
|
|
58
|
-
vertex_count: page.vertex_count[cluster],
|
|
59
|
-
flags: page.encoding_flags[cluster],
|
|
60
|
-
}, metadata, MESHLET_METADATA_STRUCT);
|
|
49
|
+
/*
|
|
50
|
+
Words, and relative to the page's payload section — `GPUMeshletManager` adds the
|
|
51
|
+
allocation's own offset when it uploads. Format §11.8 makes every payload offset a
|
|
52
|
+
multiple of four, so this division is exact rather than rounded.
|
|
53
|
+
*/
|
|
54
|
+
vgeo_meshlet_metadata_write(metadata, page, cluster, page.cluster_payload_offset[cluster] >>> 2);
|
|
61
55
|
}
|
|
62
56
|
|
|
63
57
|
// `BinaryBuffer.data` is the ArrayBuffer itself, and `setCapacity` may have rounded it up;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUProbeClipmapGI.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IA0DI;;OAEG;IACH,sBAFW,eAAe,EAMzB;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,oCAEC;IAED;;;;;;;;;;;;;;OAcG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACJ,KAAK,EAArB,MAAM;QACU,MAAM,EAAtB,MAAM;QACK,IAAI;QACE,MAAM,GAAvB,MAAM;
|
|
1
|
+
{"version":3,"file":"GPUProbeClipmapGI.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IA0DI;;OAEG;IACH,sBAFW,eAAe,EAMzB;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,qCAEC;IAED;;OAEG;IACH,oCAEC;IAED;;;;;;;;;;;;;;OAcG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACJ,KAAK,EAArB,MAAM;QACU,MAAM,EAAtB,MAAM;QACK,IAAI;QACE,MAAM,GAAvB,MAAM;aA2FhB;IAED;;;OAGG;IACH,0BAEC;IAED;;;;;;;;;OASG;IACH,4CAUC;IAwDD;;;;;;;;;;OAUG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACgB,QAAQ,EAAtC,oBAAoB;QACF,UAAU,EAA5B,MAAM,EAAE;QACN,MAAM,CAmBlB;IAED;;;;;OAKG;IACH,uBAFW,aAAa,QASvB;IAED;;;OAGG;IACH,0BAHW,aAAa,GACX,OAAO,CAanB;IAyCD;;;OAGG;IACH,gBAoBC;IAED,gBAcC;;CACJ;yBA9bY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,0BAA0B,EAAE,eAAe;6BAClD,OAAO,8BAA8B,EAAE,cAAc;mCACrD,OAAO,2BAA2B,EAAE,oBAAoB;4BACxD,OAAO,4BAA4B,EAAE,aAAa;gCAjB/B,4BAA4B;gCAQ5B,4BAA4B;uCAErB,6BAA6B"}
|
|
@@ -180,12 +180,6 @@ export class GPUProbeClipmapGI {
|
|
|
180
180
|
|
|
181
181
|
const scene = view.scene;
|
|
182
182
|
const sdf = scene.geometries.sdf;
|
|
183
|
-
const materials = this.#graphics.materials_resident;
|
|
184
|
-
|
|
185
|
-
// the scene's materials as they are this frame: a repack recaptures its pairs
|
|
186
|
-
materials.ensure_scene_materials(scene);
|
|
187
|
-
materials.update();
|
|
188
|
-
|
|
189
183
|
sdf.configure(settings.mesh_sdf_voxel_size, settings.mesh_sdf_max_bricks);
|
|
190
184
|
sdf.trim();
|
|
191
185
|
sdf.cards.capture_mode = settings.card_capture_mode;
|
|
@@ -193,7 +187,7 @@ export class GPUProbeClipmapGI {
|
|
|
193
187
|
graph,
|
|
194
188
|
budget: settings.mesh_sdf_bake_budget,
|
|
195
189
|
capture_budget: settings.card_capture_budget,
|
|
196
|
-
materials,
|
|
190
|
+
materials: this.#graphics.materials_resident,
|
|
197
191
|
material_contexts: this.#graphics.materials,
|
|
198
192
|
});
|
|
199
193
|
|
|
@@ -235,8 +229,8 @@ export class GPUProbeClipmapGI {
|
|
|
235
229
|
brick_clipmap: this.#brick_clipmap,
|
|
236
230
|
bricks,
|
|
237
231
|
scene,
|
|
238
|
-
materials,
|
|
239
232
|
card_rows: this.#holds.rows_buffer,
|
|
233
|
+
resampling: settings.resampling,
|
|
240
234
|
});
|
|
241
235
|
}
|
|
242
236
|
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* its hold and its pair, the new ones taken before the old ones go, so a cache or card set a row keeps
|
|
16
16
|
* drawing is never let go in between.
|
|
17
17
|
*
|
|
18
|
-
* When the
|
|
19
|
-
*
|
|
18
|
+
* When the material manager restages a material whose version moved, each of that material's pairs
|
|
19
|
+
* is recaptured (§6.5), and the holds of its rows move to the side it draws now.
|
|
20
20
|
*
|
|
21
21
|
* {@link attach} subscribes and walks the rows already there; {@link detach} gives every hold and card
|
|
22
22
|
* set back. Neither trims: a cache with no holder stays until its user trims, so leaving the mode keeps
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
export class ProbeClipmapSceneHolds {
|
|
26
26
|
/**
|
|
27
27
|
* @param {GPUSceneContext} scene
|
|
28
|
-
* @param {GraphicsContext} graphics whose
|
|
28
|
+
* @param {GraphicsContext} graphics whose material manager's restages recapture the pairs of the material
|
|
29
29
|
*/
|
|
30
30
|
constructor(scene: GPUSceneContext, graphics: GraphicsContext);
|
|
31
31
|
/**
|
|
@@ -43,7 +43,7 @@ export class ProbeClipmapSceneHolds {
|
|
|
43
43
|
*/
|
|
44
44
|
get pair_count(): number;
|
|
45
45
|
/**
|
|
46
|
-
* Recaptures asked for, a pair each time its material was
|
|
46
|
+
* Recaptures asked for, a pair each time its material was restaged.
|
|
47
47
|
* @returns {number}
|
|
48
48
|
*/
|
|
49
49
|
get recaptures_requested(): number;
|
|
@@ -79,6 +79,6 @@ export type GPUSceneContext = import("../../scene/GPUSceneContext.js").GPUSceneC
|
|
|
79
79
|
export type MeshletGeometry = import("../../geometry/MeshletGeometry.js").MeshletGeometry;
|
|
80
80
|
export type GPUGeometryMetadata = import("../../geometry/GPUGeometryMetadata.js").GPUGeometryMetadata;
|
|
81
81
|
export type ShadeMaterial = import("../../material/ShadeMaterial.js").ShadeMaterial;
|
|
82
|
-
export type
|
|
82
|
+
export type GPUMaterialManager = import("../../material/GPUMaterialManager.js").GPUMaterialManager;
|
|
83
83
|
export type GraphicsContext = import("../../GraphicsContext.js").GraphicsContext;
|
|
84
84
|
//# sourceMappingURL=ProbeClipmapSceneHolds.d.ts.map
|