@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
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { cone_cosine_from_roughness } from "../../../../core/math/physics/brdf/cone_cosine_from_roughness.js";
|
|
3
|
+
import { BSDF_ROUGHNESS_MINIMUM } from "./DEFINES.js";
|
|
4
|
+
import { sphere_probe_lod_to_roughness } from "./sphere_probe_lod_to_roughness.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Samples per texel of level 1. They read a Gaussian-blurred copy of level 0, so the count sets how
|
|
8
|
+
* fine that blur can be and how much of the lobe is the lobe's own. Measured on a 1024 map against
|
|
9
|
+
* level 1 from 8192 point taps (sun lobe 1.315° rms): 64 → sky rms error 0.092, sun 1.345°, a bright
|
|
10
|
+
* texel's share 0.998 ± 0.008; 128 → 0.057, 1.342°, 0.998 ± 0.003, never above 1.
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
export const LEVEL_1_SAMPLE_COUNT = 128;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Gaussian σ per spacing of the points it is sampled at. A Gaussian sampled on a lattice of spacing Δ
|
|
17
|
+
* sums to its integral up to its first alias, 2 exp(-2π² σ²/Δ²): 1e-4 at 0.7. Holds both for the
|
|
18
|
+
* blurred level's own texels and for level 1's samples reading it.
|
|
19
|
+
* @type {number}
|
|
20
|
+
*/
|
|
21
|
+
const SIGMA_PER_SPACING = 0.7;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A Gaussian's weight past 3 σ is under 1.2% of its peak, and its share of the integral in 2D under 1.2%.
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
const RADIUS_IN_SIGMA = 3;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Side of one texel of an octahedral level, as an angle. A skirted level of side `size` holds an
|
|
31
|
+
* n = size - 2 square over 4π steradians, but its texels are not alike: the octahedron's solid angle
|
|
32
|
+
* per unit area of the square is 1 / |p|^3, |p| from 1 at its vertices to 1/√3 at its face centres,
|
|
33
|
+
* so a texel covers 1 to 3√3 times the area-mean density π.
|
|
34
|
+
*
|
|
35
|
+
* @param {number} size
|
|
36
|
+
* @returns {{mean: number, min: number, max: number}}
|
|
37
|
+
*/
|
|
38
|
+
function octahedral_texel_angle(size) {
|
|
39
|
+
const mean = Math.sqrt(4 * Math.PI) / (size - 2);
|
|
40
|
+
|
|
41
|
+
return {
|
|
42
|
+
mean,
|
|
43
|
+
min: mean * Math.sqrt(1 / Math.PI),
|
|
44
|
+
max: mean * Math.sqrt(3 * Math.sqrt(3) / Math.PI),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* How level 1 of a map of side `map_size` is filtered.
|
|
50
|
+
*
|
|
51
|
+
* Level 1's samples are uniform in its cone, so each stands for Ω_s = Ω_cone / N. They read a copy of
|
|
52
|
+
* level 0 blurred by a Gaussian of σ = 0.7 · max(√Ω_s, the copy's largest texel), wide enough that
|
|
53
|
+
* neither the samples nor the copy's texels alias. The copy is level 0 averaged down to level 1's
|
|
54
|
+
* size when that leaves the lobe room for the blur, else level 0's own size.
|
|
55
|
+
*
|
|
56
|
+
* The lobe exp(2 (N·H - 1) / r^4) is a Gaussian of variance 2 r^4 an axis (N·H = cos(θ/2)), and
|
|
57
|
+
* Gaussians add variances, so it is narrowed by what the copy adds: the blur, and the bilinear tent
|
|
58
|
+
* across the copy's texels beyond the one across level 0's. It narrows to the minimum roughness when
|
|
59
|
+
* the map's texels are coarser than the lobe itself, and level 1 is then the blur alone.
|
|
60
|
+
*
|
|
61
|
+
* @param {number} map_size side of the map's level 0
|
|
62
|
+
* @returns {{
|
|
63
|
+
* blurred_size: number,
|
|
64
|
+
* average_first: boolean,
|
|
65
|
+
* sigma: number,
|
|
66
|
+
* radius: number,
|
|
67
|
+
* lobe_roughness: number,
|
|
68
|
+
* }} `average_first`: the copy is level 0 averaged to level 1's size before the blur; `sigma` the
|
|
69
|
+
* blur still to apply (radians), past what averaging adds; `radius` in the copy's texels
|
|
70
|
+
*/
|
|
71
|
+
export function environment_level_1_blur_plan(map_size) {
|
|
72
|
+
assert.isNonNegativeInteger(map_size, 'map_size');
|
|
73
|
+
assert.greaterThanOrEqual(map_size, 6, 'a level 1 needs at least 3 texels');
|
|
74
|
+
|
|
75
|
+
const roughness = Math.max(sphere_probe_lod_to_roughness(1), BSDF_ROUGHNESS_MINIMUM);
|
|
76
|
+
const lobe_variance = 2 * roughness ** 4;
|
|
77
|
+
|
|
78
|
+
const cone_solid_angle = 2 * Math.PI * (1 - cone_cosine_from_roughness(roughness));
|
|
79
|
+
const sample_spacing = Math.sqrt(cone_solid_angle / LEVEL_1_SAMPLE_COUNT);
|
|
80
|
+
|
|
81
|
+
const level_0 = octahedral_texel_angle(map_size);
|
|
82
|
+
|
|
83
|
+
function plan(blurred_size, average_first) {
|
|
84
|
+
const texel = octahedral_texel_angle(blurred_size);
|
|
85
|
+
|
|
86
|
+
const total = (SIGMA_PER_SPACING * Math.max(sample_spacing, texel.max)) ** 2;
|
|
87
|
+
|
|
88
|
+
// averaging boxes a texel of the copy, s^2 / 12 an axis
|
|
89
|
+
const averaged = average_first ? texel.mean ** 2 / 12 : 0;
|
|
90
|
+
const sigma = Math.sqrt(total - averaged);
|
|
91
|
+
|
|
92
|
+
// a bilinear tent across texels of side s is s^2 / 6 an axis; level 0's own is in the lobe already
|
|
93
|
+
const bilinear = (texel.mean ** 2 - level_0.mean ** 2) / 6;
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
blurred_size,
|
|
97
|
+
average_first,
|
|
98
|
+
sigma,
|
|
99
|
+
radius: Math.ceil(RADIUS_IN_SIGMA * sigma / texel.min),
|
|
100
|
+
lobe_variance: lobe_variance - total - bilinear,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let chosen = plan(map_size >> 1, true);
|
|
105
|
+
|
|
106
|
+
if (chosen.lobe_variance <= 0) {
|
|
107
|
+
chosen = plan(map_size, false);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const minimum_variance = 2 * BSDF_ROUGHNESS_MINIMUM ** 4;
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
blurred_size: chosen.blurred_size,
|
|
114
|
+
average_first: chosen.average_first,
|
|
115
|
+
sigma: chosen.sigma,
|
|
116
|
+
radius: chosen.radius,
|
|
117
|
+
lobe_roughness: Math.sqrt(Math.sqrt(Math.max(chosen.lobe_variance, minimum_variance) / 2)),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
|
|
3
|
+
*/
|
|
1
4
|
/**
|
|
2
5
|
* Offer the pipelines {@link execute_filter_environment_map} dispatches — see {@link PipelineEnquiry}.
|
|
3
6
|
*
|
|
@@ -5,21 +8,26 @@
|
|
|
5
8
|
*/
|
|
6
9
|
export function enquire_filter_environment_map_pipelines(enquiry: PipelineEnquiry): void;
|
|
7
10
|
/**
|
|
8
|
-
* The
|
|
9
|
-
*
|
|
10
|
-
* result
|
|
11
|
+
* The scratch levels the prefilter's level 1 reads through: level 0 blurred by a Gaussian, and the
|
|
12
|
+
* plain average it is blurred from when the plan averages first. Textures of their own, so the map
|
|
13
|
+
* keeps its levels 1.. for the filtered result; nothing reads them after the prefilter, so a frame
|
|
14
|
+
* graph holds them transiently.
|
|
11
15
|
*
|
|
12
16
|
* @param {number} map_size side of the map's level 0
|
|
13
|
-
* @returns {TextureResourceDescriptor}
|
|
17
|
+
* @returns {{averaged: TextureResourceDescriptor|null, blurred: TextureResourceDescriptor}}
|
|
14
18
|
*/
|
|
15
|
-
export function
|
|
19
|
+
export function environment_map_scratch_descriptors(map_size: number): {
|
|
20
|
+
averaged: TextureResourceDescriptor | null;
|
|
21
|
+
blurred: TextureResourceDescriptor;
|
|
22
|
+
};
|
|
16
23
|
/**
|
|
17
24
|
*
|
|
18
25
|
* @param {GPUTextureContext} map
|
|
19
|
-
* @param {GPUTextureContext}
|
|
26
|
+
* @param {GPUTextureContext|null} averaged described by {@link environment_map_scratch_descriptors}
|
|
27
|
+
* @param {GPUTextureContext} blurred described by {@link environment_map_scratch_descriptors}
|
|
20
28
|
* @param {ShadeGPUCommandContext} encoder
|
|
21
29
|
*/
|
|
22
|
-
export function execute_filter_environment_map(map: GPUTextureContext,
|
|
30
|
+
export function execute_filter_environment_map(map: GPUTextureContext, averaged: GPUTextureContext | null, blurred: GPUTextureContext, encoder: ShadeGPUCommandContext): void;
|
|
23
31
|
export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
|
|
24
32
|
import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
|
|
25
33
|
//# sourceMappingURL=execute_filter_environment_map.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/execute_filter_environment_map.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/execute_filter_environment_map.js"],"names":[],"mappings":"AAUA;;GAEG;AAEH;;;;GAIG;AACH,kEAFW,eAAe,QAOzB;AAcD;;;;;;;;GAQG;AACH,8DAHW,MAAM,GACJ;IAAC,QAAQ,EAAE,yBAAyB,GAAC,IAAI,CAAC;IAAC,OAAO,EAAE,yBAAyB,CAAA;CAAC,CAS1F;AAED;;;;;;GAMG;AACH,iFAJW,oBAAkB,IAAI,qEA2HhC;8BA3KY,OAAO,6CAA6C,EAAE,eAAe;0CATxC,oDAAoD"}
|
|
@@ -1,26 +1,17 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
2
|
import { TextureViewDescriptor } from "../../../descriptor/texture/TextureViewDescriptor.js";
|
|
3
3
|
import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { SPHERE_PROBE_MIPMAP_LEVELS } from "./DEFINES.js";
|
|
5
|
+
import { environment_level_1_blur_plan } from "./environment_level_1_blur_plan.js";
|
|
6
|
+
import { shader_blur_environment_map } from "./shader_blur_environment_map.js";
|
|
6
7
|
import { shader_convolve_reflection_map } from "./shader_convolve_reflection_map.js";
|
|
7
|
-
import {
|
|
8
|
-
CONVOLVE_FROM_AVERAGES_SAMPLE_COUNT,
|
|
9
|
-
shader_convolve_reflection_map_from_averages
|
|
10
|
-
} from "./shader_convolve_reflection_map_from_averages.js";
|
|
8
|
+
import { shader_convolve_reflection_map_from_blurred } from "./shader_convolve_reflection_map_from_blurred.js";
|
|
11
9
|
import { shader_downsample_environment_map } from "./shader_downsample_environment_map.js";
|
|
12
|
-
import { sphere_probe_lod_to_roughness } from "./sphere_probe_lod_to_roughness.js";
|
|
13
10
|
|
|
14
11
|
/**
|
|
15
12
|
* @typedef {import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
|
|
16
13
|
*/
|
|
17
14
|
|
|
18
|
-
/**
|
|
19
|
-
* The smallest side a skirted level of the averages goes down to: two interior texels.
|
|
20
|
-
* @type {number}
|
|
21
|
-
*/
|
|
22
|
-
const AVERAGES_MIN_SIZE = 4;
|
|
23
|
-
|
|
24
15
|
/**
|
|
25
16
|
* Offer the pipelines {@link execute_filter_environment_map} dispatches — see {@link PipelineEnquiry}.
|
|
26
17
|
*
|
|
@@ -28,76 +19,56 @@ const AVERAGES_MIN_SIZE = 4;
|
|
|
28
19
|
*/
|
|
29
20
|
export function enquire_filter_environment_map_pipelines(enquiry) {
|
|
30
21
|
enquiry.compute.push(shader_downsample_environment_map.pipeline);
|
|
31
|
-
enquiry.compute.push(
|
|
22
|
+
enquiry.compute.push(shader_blur_environment_map.pipeline);
|
|
23
|
+
enquiry.compute.push(shader_convolve_reflection_map_from_blurred.pipeline);
|
|
32
24
|
enquiry.compute.push(shader_convolve_reflection_map.pipeline);
|
|
33
25
|
}
|
|
34
26
|
|
|
35
27
|
/**
|
|
36
|
-
*
|
|
37
|
-
* it stands for, and the coarsest it asks for is where the octahedron's texels are smallest
|
|
38
|
-
* (|d|_1 = 1): the lod `shader_convolve_reflection_map_from_averages` takes, at its largest. 3 for a
|
|
39
|
-
* 1024 map, one more for each doubling.
|
|
40
|
-
*
|
|
41
|
-
* @param {number} map_size side of the map's level 0
|
|
42
|
-
* @returns {number}
|
|
43
|
-
*/
|
|
44
|
-
function averages_read_by_level_1(map_size) {
|
|
45
|
-
const roughness = Math.max(sphere_probe_lod_to_roughness(1), BSDF_ROUGHNESS_MINIMUM);
|
|
46
|
-
const cone_solid_angle = 2 * Math.PI * (1 - cone_cosine_from_roughness(roughness));
|
|
47
|
-
const sample_solid_angle = cone_solid_angle / CONVOLVE_FROM_AVERAGES_SAMPLE_COUNT;
|
|
48
|
-
|
|
49
|
-
const interior = map_size - 2;
|
|
50
|
-
const smallest_texel_solid_angle = 4 / (interior * interior);
|
|
51
|
-
|
|
52
|
-
return Math.max(1, Math.ceil(0.5 * Math.log2(sample_solid_angle / smallest_texel_solid_angle)));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* The plain averages of a map's level 0 the prefilter's level 1 samples from: level 1 down as far as
|
|
57
|
-
* its samples reach, as a texture of their own, so the map keeps its levels 1.. for the filtered
|
|
58
|
-
* result. Nothing reads them after the prefilter, so a frame graph holds them transiently.
|
|
59
|
-
*
|
|
60
|
-
* @param {number} map_size side of the map's level 0
|
|
28
|
+
* @param {number} size
|
|
61
29
|
* @returns {TextureResourceDescriptor}
|
|
62
30
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const size = map_size >> 1;
|
|
67
|
-
|
|
68
|
-
let available = 0;
|
|
69
|
-
for (let s = size; s >= AVERAGES_MIN_SIZE; s >>= 1) {
|
|
70
|
-
available++;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
assert.greaterThanOrEqual(available, 1, 'environment map too small to average');
|
|
74
|
-
|
|
75
|
-
const mipLevelCount = Math.min(available, averages_read_by_level_1(map_size));
|
|
76
|
-
|
|
77
|
-
const descriptor = TextureResourceDescriptor.from({
|
|
31
|
+
function scratch_level_descriptor(size) {
|
|
32
|
+
return TextureResourceDescriptor.from({
|
|
78
33
|
resolution: [size, size],
|
|
79
34
|
format: "rgba16float",
|
|
80
35
|
usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.STORAGE_BINDING,
|
|
81
36
|
});
|
|
37
|
+
}
|
|
82
38
|
|
|
83
|
-
|
|
39
|
+
/**
|
|
40
|
+
* The scratch levels the prefilter's level 1 reads through: level 0 blurred by a Gaussian, and the
|
|
41
|
+
* plain average it is blurred from when the plan averages first. Textures of their own, so the map
|
|
42
|
+
* keeps its levels 1.. for the filtered result; nothing reads them after the prefilter, so a frame
|
|
43
|
+
* graph holds them transiently.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} map_size side of the map's level 0
|
|
46
|
+
* @returns {{averaged: TextureResourceDescriptor|null, blurred: TextureResourceDescriptor}}
|
|
47
|
+
*/
|
|
48
|
+
export function environment_map_scratch_descriptors(map_size) {
|
|
49
|
+
const plan = environment_level_1_blur_plan(map_size);
|
|
84
50
|
|
|
85
|
-
return
|
|
51
|
+
return {
|
|
52
|
+
averaged: plan.average_first ? scratch_level_descriptor(plan.blurred_size) : null,
|
|
53
|
+
blurred: scratch_level_descriptor(plan.blurred_size),
|
|
54
|
+
};
|
|
86
55
|
}
|
|
87
56
|
|
|
88
57
|
/**
|
|
89
58
|
*
|
|
90
59
|
* @param {GPUTextureContext} map
|
|
91
|
-
* @param {GPUTextureContext}
|
|
60
|
+
* @param {GPUTextureContext|null} averaged described by {@link environment_map_scratch_descriptors}
|
|
61
|
+
* @param {GPUTextureContext} blurred described by {@link environment_map_scratch_descriptors}
|
|
92
62
|
* @param {ShadeGPUCommandContext} encoder
|
|
93
63
|
*/
|
|
94
64
|
export function execute_filter_environment_map(
|
|
95
65
|
map,
|
|
96
|
-
|
|
66
|
+
averaged,
|
|
67
|
+
blurred,
|
|
97
68
|
encoder
|
|
98
69
|
) {
|
|
99
70
|
assert.defined(map);
|
|
100
|
-
assert.defined(
|
|
71
|
+
assert.defined(blurred);
|
|
101
72
|
assert.defined(encoder);
|
|
102
73
|
|
|
103
74
|
/*
|
|
@@ -121,35 +92,50 @@ export function execute_filter_environment_map(
|
|
|
121
92
|
return;
|
|
122
93
|
}
|
|
123
94
|
|
|
124
|
-
const
|
|
95
|
+
const plan = environment_level_1_blur_plan(map.size[0]);
|
|
96
|
+
|
|
97
|
+
assert.equal(blurred.size[0], plan.blurred_size, 'blurred level is not the size the plan blurs at');
|
|
98
|
+
|
|
99
|
+
const single_level = TextureViewDescriptor.from({
|
|
125
100
|
baseMipLevel: 0,
|
|
126
101
|
mipLevelCount: 1,
|
|
127
|
-
})
|
|
102
|
+
});
|
|
128
103
|
|
|
129
|
-
|
|
130
|
-
const
|
|
104
|
+
const level_0 = map.obtainView(single_level);
|
|
105
|
+
const blurred_group_count = Math.max(1, Math.ceil(plan.blurred_size / 16));
|
|
131
106
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
107
|
+
let unblurred = level_0;
|
|
108
|
+
|
|
109
|
+
if (plan.average_first) {
|
|
110
|
+
assert.defined(averaged, 'averaged');
|
|
135
111
|
|
|
136
112
|
shader_downsample_environment_map.dispatch({
|
|
137
113
|
encoder,
|
|
138
|
-
group_count_x:
|
|
139
|
-
group_count_y:
|
|
114
|
+
group_count_x: blurred_group_count,
|
|
115
|
+
group_count_y: blurred_group_count,
|
|
140
116
|
bindings: {
|
|
141
|
-
input:
|
|
142
|
-
|
|
143
|
-
mipLevelCount: 1,
|
|
144
|
-
})),
|
|
145
|
-
output: averages.obtainView(TextureViewDescriptor.from({
|
|
146
|
-
baseMipLevel: i,
|
|
147
|
-
mipLevelCount: 1
|
|
148
|
-
}))
|
|
117
|
+
input: level_0,
|
|
118
|
+
output: averaged.obtainView(single_level)
|
|
149
119
|
}
|
|
150
120
|
});
|
|
121
|
+
|
|
122
|
+
unblurred = averaged.obtainView(single_level);
|
|
151
123
|
}
|
|
152
124
|
|
|
125
|
+
shader_blur_environment_map.dispatch({
|
|
126
|
+
encoder,
|
|
127
|
+
group_count_x: blurred_group_count,
|
|
128
|
+
group_count_y: blurred_group_count,
|
|
129
|
+
bindings: {
|
|
130
|
+
settings: {
|
|
131
|
+
inverse_two_sigma_squared: 1 / (2 * plan.sigma * plan.sigma),
|
|
132
|
+
radius: plan.radius,
|
|
133
|
+
},
|
|
134
|
+
input: unblurred,
|
|
135
|
+
output: blurred.obtainView(single_level)
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
153
139
|
for (let i = 1; i < mips; i++) {
|
|
154
140
|
const target_width = map.size[0] >> i;
|
|
155
141
|
const target_height = map.size[1] >> i;
|
|
@@ -165,17 +151,14 @@ export function execute_filter_environment_map(
|
|
|
165
151
|
}));
|
|
166
152
|
|
|
167
153
|
if (i === 1) {
|
|
168
|
-
//
|
|
169
|
-
|
|
154
|
+
// level 0 is too fine for the taps that cover level 1's cone; its blurred copy is not
|
|
155
|
+
shader_convolve_reflection_map_from_blurred.dispatch({
|
|
170
156
|
encoder,
|
|
171
157
|
group_count_x: dispatch_x,
|
|
172
158
|
group_count_y: dispatch_y,
|
|
173
159
|
bindings: {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
baseMipLevel: 0,
|
|
177
|
-
mipLevelCount: average_levels,
|
|
178
|
-
})),
|
|
160
|
+
lobe_roughness: plan.lobe_roughness,
|
|
161
|
+
blurred: blurred.obtainView(single_level),
|
|
179
162
|
output
|
|
180
163
|
}
|
|
181
164
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/graph_filter_environment_map.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH;IAJ+B,KAAK,EAAzB,UAAU;IACM,GAAG,EAAnB,MAAM;IACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_filter_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/graph_filter_environment_map.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH;IAJ+B,KAAK,EAAzB,UAAU;IACM,GAAG,EAAnB,MAAM;IACJ,MAAM,CA4ClB;AAED;;;;;;GAMG;AACH,6GAYC;2BA7E0B,8DAA8D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FrameGraph } from "../../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
2
2
|
import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
environment_map_scratch_descriptors,
|
|
5
5
|
execute_filter_environment_map
|
|
6
6
|
} from "./execute_filter_environment_map.js";
|
|
7
7
|
|
|
@@ -32,17 +32,26 @@ export function graph_filter_environment_map({
|
|
|
32
32
|
*/
|
|
33
33
|
const map = resources.get(data.map);
|
|
34
34
|
|
|
35
|
-
execute_filter_environment_map(
|
|
35
|
+
execute_filter_environment_map(
|
|
36
|
+
map,
|
|
37
|
+
data.averaged === undefined ? null : resources.get(data.averaged),
|
|
38
|
+
resources.get(data.blurred),
|
|
39
|
+
context.encoder
|
|
40
|
+
);
|
|
36
41
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
const builder = graph.add("filter env map", data, execute);
|
|
40
45
|
|
|
41
46
|
data.map = builder.read(map);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
)
|
|
47
|
+
|
|
48
|
+
const scratch = environment_map_scratch_descriptors(graph.getDescriptor(map).resolution[0]);
|
|
49
|
+
|
|
50
|
+
if (scratch.averaged !== null) {
|
|
51
|
+
data.averaged = builder.create("env map averaged", scratch.averaged);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
data.blurred = builder.create("env map blurred", scratch.blurred);
|
|
46
55
|
|
|
47
56
|
return builder.write(map);
|
|
48
57
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_blur_environment_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_blur_environment_map.js"],"names":[],"mappings":"AA0GA,wDAII;8BAvG0B,+BAA+B"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chunk_uv_octahedral_unit_decode
|
|
3
|
+
} from "../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
|
|
4
|
+
import {
|
|
5
|
+
chunk_texture_octahedral_wrap_texel_coordinates
|
|
6
|
+
} from "../../shader/chunk/texture/octahedral/chunk_texture_octahedral_wrap_texel_coordinates.js";
|
|
7
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
8
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
9
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
10
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
11
|
+
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
12
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
13
|
+
|
|
14
|
+
const BLUR_SETTINGS = WebGPUStruct.from({
|
|
15
|
+
// 1 / (2 σ²), σ in radians
|
|
16
|
+
inverse_two_sigma_squared: f32,
|
|
17
|
+
// texels either side, enough for 3 σ where the octahedron's texels are smallest
|
|
18
|
+
radius: u32,
|
|
19
|
+
}, 'EnvironmentBlurSettings');
|
|
20
|
+
|
|
21
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
22
|
+
|
|
23
|
+
resources.setImmediate("settings", BLUR_SETTINGS);
|
|
24
|
+
|
|
25
|
+
resources.createGroup()
|
|
26
|
+
.addTexture("input", "float")
|
|
27
|
+
.addStorageTexture("output", "rgba16float")
|
|
28
|
+
;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A skirted octahedral level blurred by a Gaussian on the sphere, into a level of the same size:
|
|
32
|
+
* each texel the mean of the texels within `radius`, weighted by exp(-θ² / 2σ²) of the angle θ
|
|
33
|
+
* between them and by their solid angle. The octahedral square wraps at its edges, so the kernel is
|
|
34
|
+
* the same on either side of a fold.
|
|
35
|
+
*
|
|
36
|
+
* A Gaussian, not a box, because level 1 reads this through a lobe that is itself a Gaussian, and
|
|
37
|
+
* the two compose into a Gaussian whose variance is the sum: the lobe narrows by exactly what the
|
|
38
|
+
* blur adds (see environment_level_1_blur_plan).
|
|
39
|
+
*
|
|
40
|
+
* @type {CodeChunk}
|
|
41
|
+
*/
|
|
42
|
+
const body = CodeChunk.from(
|
|
43
|
+
//language=WGSL
|
|
44
|
+
`
|
|
45
|
+
@compute @workgroup_size(16,16,1)
|
|
46
|
+
fn main(
|
|
47
|
+
@builtin(global_invocation_id) global_invocation_id : vec3<u32>,
|
|
48
|
+
){
|
|
49
|
+
let output_size = textureDimensions(output);
|
|
50
|
+
|
|
51
|
+
let output_texel_i = global_invocation_id.xy;
|
|
52
|
+
|
|
53
|
+
if(any(output_texel_i >= output_size)){
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let interior = i32(output_size.x) - 2;
|
|
58
|
+
|
|
59
|
+
// the skirt too: a skirt texel takes its interior twin, so it is that texel, computed again
|
|
60
|
+
let centre = texture_octahedral_wrap_texel_coordinates(vec2<i32>(output_texel_i) - 1, interior);
|
|
61
|
+
let centre_direction = uv_octahedral_unit_decode((vec2<f32>(centre) + 0.5) / f32(interior));
|
|
62
|
+
|
|
63
|
+
let radius = i32(settings.radius);
|
|
64
|
+
|
|
65
|
+
var sum = vec4(0.0);
|
|
66
|
+
var weight_sum = 0.0;
|
|
67
|
+
|
|
68
|
+
for (var y = -radius; y <= radius; y++) {
|
|
69
|
+
for (var x = -radius; x <= radius; x++) {
|
|
70
|
+
let unwrapped = vec2<i32>(centre) + vec2(x, y);
|
|
71
|
+
let texel = texture_octahedral_wrap_texel_coordinates(unwrapped, interior);
|
|
72
|
+
|
|
73
|
+
// near the middle of the square's edge the fold maps the window onto itself, so a tap that
|
|
74
|
+
// wraps can land on a texel the window reaches directly: count every texel once
|
|
75
|
+
let wrapped = any(unwrapped < vec2(0)) || any(unwrapped >= vec2(interior));
|
|
76
|
+
let in_window = all(abs(vec2<i32>(texel) - vec2<i32>(centre)) <= vec2(radius));
|
|
77
|
+
|
|
78
|
+
if (wrapped && in_window) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let direction = uv_octahedral_unit_decode((vec2<f32>(texel) + 0.5) / f32(interior));
|
|
83
|
+
|
|
84
|
+
// θ² from the chord c: θ = 2 asin(c / 2), so θ² = c² + c⁴ / 12 + ...
|
|
85
|
+
let chord = direction - centre_direction;
|
|
86
|
+
let chord_squared = dot(chord, chord);
|
|
87
|
+
let theta_squared = chord_squared * (1.0 + chord_squared / 12.0);
|
|
88
|
+
|
|
89
|
+
// the octahedron's solid angle per unit area of the square is |d|_1^3 along unit d
|
|
90
|
+
let l1 = dot(abs(direction), vec3(1.0));
|
|
91
|
+
|
|
92
|
+
let weight = exp(-theta_squared * settings.inverse_two_sigma_squared) * l1 * l1 * l1;
|
|
93
|
+
|
|
94
|
+
sum += textureLoad(input, texel + 1u, 0) * weight;
|
|
95
|
+
weight_sum += weight;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
textureStore(output, output_texel_i, sum / weight_sum);
|
|
100
|
+
}
|
|
101
|
+
`, [
|
|
102
|
+
chunk_texture_octahedral_wrap_texel_coordinates,
|
|
103
|
+
chunk_uv_octahedral_unit_decode,
|
|
104
|
+
]
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
export const shader_blur_environment_map = new ComputeShader(ShaderDescriptor.from({
|
|
108
|
+
label: 'Blur environment map',
|
|
109
|
+
body,
|
|
110
|
+
resources
|
|
111
|
+
}));
|
package/src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_convolve_reflection_map_from_blurred.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_convolve_reflection_map_from_blurred.js"],"names":[],"mappings":"AA2HA,wEAII;8BA7G0B,+BAA+B"}
|