@woosh/meep-engine 3.39.0 → 3.40.0
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/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +17 -4
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +14 -17
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +100 -110
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +36 -38
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +3 -3
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -46
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
- package/src/engine/graphics3/WaterSystem.d.ts +21 -74
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +174 -367
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +10 -9
- package/src/format/image/avif/api/decode_avif.d.ts +2 -2
- package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_avif.js +1 -1
- package/src/shade/playground/ssr_reprojection/README.md +111 -103
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
- package/src/shade/playground/ssr_reprojection/index.html +80 -79
- package/src/shade/playground/ssr_reprojection/main.js +256 -247
- package/src/shade/playground/ssr_variance/capture.js +96 -96
- package/src/shade/playground/ssr_variance/reference.js +78 -78
- package/src/shade/playground/vsm/README.md +96 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
- package/src/shade/playground/vsm/clipmap_panel.js +138 -0
- package/src/shade/playground/vsm/index.html +170 -0
- package/src/shade/playground/vsm/main.d.ts +2 -0
- package/src/shade/playground/vsm/main.d.ts.map +1 -0
- package/src/shade/playground/vsm/main.js +389 -0
- package/src/shade/playground/vsm/scenes.d.ts +52 -0
- package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
- package/src/shade/playground/vsm/scenes.js +320 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
- package/src/shade/playground/vsm/verify_vsm.js +305 -0
- package/src/shade/playground/water_refraction/README.md +57 -9
- package/src/shade/playground/water_refraction/main.js +12 -3
- package/src/shade/playground/water_refraction/world.d.ts +1 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +15 -5
- package/src/shade/renderer/Renderer.d.ts +19 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +72 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +8 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +18 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +62 -4
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +5 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +3 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -1
- package/src/shade/renderer/medium/ParticipatingMedium.js +7 -0
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +2 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +11 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +1 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +54 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +502 -10
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -2
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +17 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +282 -116
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
- package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
- package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
- package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +49 -49
- package/src/shade/renderer/water/chunk_water_transport.js +3 -3
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +11 -25
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -116
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +1 -20
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -42
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +1 -5
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -1
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -30
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -123
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -1
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -74
- package/src/shade/renderer/water/shader_water.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +490 -406
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +12 -85
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -408
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +3 -5
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -48
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
- package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
- package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +0 -14
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +0 -20
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -147
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -10
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -8
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -102
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -26
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -184
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -230
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -127
- package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +0 -23
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +0 -1
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +0 -18
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +0 -12
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +0 -27
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +0 -14
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +0 -49
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +0 -9
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +0 -47
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +0 -10
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +0 -51
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +0 -12
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +0 -54
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +0 -13
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +0 -1
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +0 -39
|
@@ -35,5 +35,8 @@ export class MeshletGeometry {
|
|
|
35
35
|
equals(other: MeshletGeometry): boolean;
|
|
36
36
|
isMeshletGeometry: boolean;
|
|
37
37
|
}
|
|
38
|
+
export namespace MeshletGeometry {
|
|
39
|
+
let typeName: string;
|
|
40
|
+
}
|
|
38
41
|
import { MeshletBatch } from "./meshlet/MeshletBatch.js";
|
|
39
42
|
//# sourceMappingURL=MeshletGeometry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshletGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometry.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACI,WAAkB;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV,2BAAmC;IACnC,8BAAsC;IAEtC;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB,wBAGC;IAED;;OAEG;IACH,UAFU,YAAY,CAEQ;IAE9B;;;;OAIG;IACH,KAFU,WAAW,CAEG;IAExB,eAEC;IAED;;;OAGG;IACH,cAFW,eAAe,WAMzB;IAGL,2BAA2C;CAF1C
|
|
1
|
+
{"version":3,"file":"MeshletGeometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometry.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACI,WAAkB;IAElB;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV,2BAAmC;IACnC,8BAAsC;IAEtC;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB,wBAGC;IAED;;OAEG;IACH,UAFU,YAAY,CAEQ;IAE9B;;;;OAIG;IACH,KAFU,WAAW,CAEG;IAExB,eAEC;IAED;;;OAGG;IACH,cAFW,eAAe,WAMzB;IAGL,2BAA2C;CAF1C;;;;6BAxD4B,2BAA2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LIGHT_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/LIGHT_DATABASE_SPEC.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LIGHT_DATABASE_SPEC.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/light/LIGHT_DATABASE_SPEC.js"],"names":[],"mappings":"AAYA,wDAkCG;sCA7CmC,0CAA0C"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { vec4f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
1
|
+
import { u32, vec2i, vec4f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
2
|
import { GPUDatabaseDefinition } from "../buffer/table/GPUDatabaseDefinition.js";
|
|
3
3
|
import { SCENE_DATABASE_SPEC } from "../scene/SCENE_DATABASE_SPEC.js";
|
|
4
4
|
import { DIRECTIONAL_LIGHT_STRUCT } from "../shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js";
|
|
5
5
|
import { POINT_LIGHT_STRUCT } from "../shader/chunk/light/POINT_LIGHT_STRUCT.js";
|
|
6
6
|
import { SPOT_LIGHT_STRUCT } from "../shader/chunk/light/SPOT_LIGHT_STRUCT.js";
|
|
7
7
|
import { CSM_CASCADE_STRUCT } from "../shadow/map/csm/CSM_CASCADE_STRUCT.js";
|
|
8
|
-
import {
|
|
8
|
+
import { DIRECTIONAL_SHADOWMAP_STRUCT } from "../shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js";
|
|
9
9
|
import { SHADOWMAP_VIEW_METADATA_STRUCT } from "../shadow/map/shader/SHADOWMAP_VIEW_METADATA_STRUCT.js";
|
|
10
|
+
import { VSM_RECORD_STRUCT } from "../shadow/vsm/VSM_RECORD_STRUCT.js";
|
|
11
|
+
import { VSM_SLOT_STRUCT } from "../shadow/vsm/VSM_SLOT_STRUCT.js";
|
|
10
12
|
|
|
11
13
|
export const LIGHT_DATABASE_SPEC = GPUDatabaseDefinition.from({
|
|
12
14
|
light_point: POINT_LIGHT_STRUCT,
|
|
@@ -16,15 +18,71 @@ export const LIGHT_DATABASE_SPEC = GPUDatabaseDefinition.from({
|
|
|
16
18
|
// shadow metadata, indexed by `light.shadow_id` from the matching light record.
|
|
17
19
|
// Point lights store only the atlas rect — sampling is direction-based and uses no
|
|
18
20
|
// projection. Spot lights store atlas + projection for their one view. Directional lights
|
|
19
|
-
// store where their cascades are, as a range over `shadow_cascade
|
|
21
|
+
// store where their cascades are, as a range over `shadow_cascade`, or which virtual shadow map
|
|
22
|
+
// they have, as a link into `shadow_virtual`.
|
|
20
23
|
shadow_point: vec4f,
|
|
21
24
|
shadow_spot: SHADOWMAP_VIEW_METADATA_STRUCT,
|
|
22
|
-
shadow_directional:
|
|
25
|
+
shadow_directional: DIRECTIONAL_SHADOWMAP_STRUCT,
|
|
23
26
|
|
|
24
27
|
// one row per cascade of a directional shadow map, a map's cascades a run of consecutive rows
|
|
25
28
|
// claimed and released by the shadow context: atlas + projection from the CPU, and what the GPU
|
|
26
29
|
// measured of the casters in front of the cascade, read back to fit the next frame's near plane
|
|
27
30
|
shadow_cascade: CSM_CASCADE_STRUCT,
|
|
31
|
+
|
|
32
|
+
// one row per virtual shadow map: its light space, clipmap windows, pool, and the main view it
|
|
33
|
+
// selects levels for
|
|
34
|
+
shadow_virtual: VSM_RECORD_STRUCT,
|
|
35
|
+
|
|
36
|
+
// a virtual shadow map's clipmap windows, a run per map, one row per level: the corner of the
|
|
37
|
+
// level's window in its own pages — written by the CPU when the window scrolls
|
|
38
|
+
shadow_virtual_level: vec2i,
|
|
39
|
+
|
|
40
|
+
// a virtual shadow map's page table, a run per map, one page-table entry per cell of every
|
|
41
|
+
// level's window — written by the CPU as pages are installed, evicted and scrolled away
|
|
42
|
+
shadow_virtual_page: u32,
|
|
43
|
+
|
|
44
|
+
// what each slot of a virtual shadow map's pool holds, a run per map — written by the CPU with
|
|
45
|
+
// the page table, read by the pass that finds pages under moving casters
|
|
46
|
+
shadow_virtual_slot: VSM_SLOT_STRUCT,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// A directional light's virtual shadow map. Not owning, for the reason the cascade range is not.
|
|
50
|
+
LIGHT_DATABASE_SPEC.add_link({
|
|
51
|
+
table: 'shadow_directional',
|
|
52
|
+
field: 'virtual_map',
|
|
53
|
+
target_database: LIGHT_DATABASE_SPEC,
|
|
54
|
+
target_table: 'shadow_virtual',
|
|
55
|
+
nullable: true,
|
|
56
|
+
owning: false,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// A virtual shadow map's level, page table and slot rows. The shadow context claims the runs with the
|
|
60
|
+
// map and gives them back when it evicts it.
|
|
61
|
+
LIGHT_DATABASE_SPEC.add_range({
|
|
62
|
+
table: 'shadow_virtual',
|
|
63
|
+
first_field: 'first_level',
|
|
64
|
+
count_field: 'level_count',
|
|
65
|
+
target_database: LIGHT_DATABASE_SPEC,
|
|
66
|
+
target_table: 'shadow_virtual_level',
|
|
67
|
+
owning: false,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
LIGHT_DATABASE_SPEC.add_range({
|
|
71
|
+
table: 'shadow_virtual',
|
|
72
|
+
first_field: 'first_page',
|
|
73
|
+
count_field: 'page_count',
|
|
74
|
+
target_database: LIGHT_DATABASE_SPEC,
|
|
75
|
+
target_table: 'shadow_virtual_page',
|
|
76
|
+
owning: false,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
LIGHT_DATABASE_SPEC.add_range({
|
|
80
|
+
table: 'shadow_virtual',
|
|
81
|
+
first_field: 'first_slot',
|
|
82
|
+
count_field: 'slot_count',
|
|
83
|
+
target_database: LIGHT_DATABASE_SPEC,
|
|
84
|
+
target_table: 'shadow_virtual_slot',
|
|
85
|
+
owning: false,
|
|
28
86
|
});
|
|
29
87
|
|
|
30
88
|
// A directional shadow map's cascades. Not owning: the shadow context holds the run for the life of
|
|
@@ -48,7 +48,7 @@ export function parse_rgbe(
|
|
|
48
48
|
case BinaryDataType.Float16:
|
|
49
49
|
|
|
50
50
|
numElements = image_rgba_data.length / 4;
|
|
51
|
-
const halfArray = new
|
|
51
|
+
const halfArray = new Float16Array(numElements * 4);
|
|
52
52
|
|
|
53
53
|
for (let j = 0; j < numElements; j++) {
|
|
54
54
|
|
|
@@ -76,4 +76,4 @@ export function parse_rgbe(
|
|
|
76
76
|
type: type
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
}
|
|
79
|
+
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
*
|
|
3
3
|
* @param {Uint8Array} sourceArray
|
|
4
4
|
* @param {number} sourceOffset
|
|
5
|
-
* @param {
|
|
5
|
+
* @param {Float16Array} destArray
|
|
6
6
|
* @param {number} destOffset
|
|
7
7
|
*/
|
|
8
|
-
export function rgbe_byte_to_rgb_half(sourceArray: Uint8Array, sourceOffset: number, destArray:
|
|
8
|
+
export function rgbe_byte_to_rgb_half(sourceArray: Uint8Array, sourceOffset: number, destArray: Float16Array, destOffset: number): void;
|
|
9
9
|
//# sourceMappingURL=rgbe_byte_to_rgb_half.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rgbe_byte_to_rgb_half.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rgbe_byte_to_rgb_half.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,mDALW,UAAU,gBACV,MAAM,uCAEN,MAAM,QAchB"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
import { to_half_float_uint16 } from "../../../../../core/binary/to_half_float_uint16.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Precomputed for simplicity
|
|
5
|
-
* @type {number}
|
|
6
|
-
*/
|
|
7
|
-
const F16_1 = to_half_float_uint16(1);
|
|
8
|
-
|
|
9
1
|
/**
|
|
10
2
|
*
|
|
11
3
|
* @param {Uint8Array} sourceArray
|
|
12
4
|
* @param {number} sourceOffset
|
|
13
|
-
* @param {
|
|
5
|
+
* @param {Float16Array} destArray
|
|
14
6
|
* @param {number} destOffset
|
|
15
7
|
*/
|
|
16
8
|
export function rgbe_byte_to_rgb_half(sourceArray, sourceOffset, destArray, destOffset) {
|
|
@@ -19,10 +11,10 @@ export function rgbe_byte_to_rgb_half(sourceArray, sourceOffset, destArray, dest
|
|
|
19
11
|
const scale = Math.pow(2.0, e - 128.0) / 255.0;
|
|
20
12
|
|
|
21
13
|
// clamping to 65504, the maximum representable value in float16
|
|
22
|
-
destArray[destOffset + 0] =
|
|
23
|
-
destArray[destOffset + 1] =
|
|
24
|
-
destArray[destOffset + 2] =
|
|
14
|
+
destArray[destOffset + 0] = Math.min(sourceArray[sourceOffset + 0] * scale, 65504);
|
|
15
|
+
destArray[destOffset + 1] = Math.min(sourceArray[sourceOffset + 1] * scale, 65504);
|
|
16
|
+
destArray[destOffset + 2] = Math.min(sourceArray[sourceOffset + 2] * scale, 65504);
|
|
25
17
|
|
|
26
|
-
destArray[destOffset + 3] =
|
|
18
|
+
destArray[destOffset + 3] = 1;
|
|
27
19
|
|
|
28
|
-
}
|
|
20
|
+
}
|
package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_sh_exp_workgroup_sum.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,oCAFU,MAAM,CAEyB;
|
|
1
|
+
{"version":3,"file":"chunk_sh_exp_workgroup_sum.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,oCAFU,MAAM,CAEyB;AAMzC;;;;;;;;;GASG;AACH,yCAFU,SAAS,CA8BhB;0BArDuB,uCAAuC"}
|
|
@@ -10,6 +10,10 @@ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
|
10
10
|
*/
|
|
11
11
|
export const SH_EXP_WORKGROUP_SIZE = 256;
|
|
12
12
|
|
|
13
|
+
|
|
14
|
+
const MIN_SUBGROUP_SIZE = 4;
|
|
15
|
+
const MAX_PARTIALS_SIZE = Math.ceil(SH_EXP_WORKGROUP_SIZE / MIN_SUBGROUP_SIZE);
|
|
16
|
+
|
|
13
17
|
/**
|
|
14
18
|
* Sum of a `vec4` over the workgroup, subgroup first: `subgroupAdd`, then one elected lane per
|
|
15
19
|
* subgroup claims a slot — invocation indices need not map to subgroups in contiguous blocks — and
|
|
@@ -24,7 +28,7 @@ export const chunk_sh_exp_workgroup_sum = CodeChunk.from(
|
|
|
24
28
|
//language=WGSL
|
|
25
29
|
`
|
|
26
30
|
var<workgroup> sh_exp_partial_count: atomic<u32>;
|
|
27
|
-
var<workgroup> sh_exp_partials: array<vec4<f32>, ${
|
|
31
|
+
var<workgroup> sh_exp_partials: array<vec4<f32>, ${MAX_PARTIALS_SIZE}>;
|
|
28
32
|
|
|
29
33
|
fn sh_exp_workgroup_sum(value: vec4<f32>, local_index: u32) -> vec4<f32> {
|
|
30
34
|
let subgroup_sum = subgroupAdd(value);
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#259@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -48,6 +48,8 @@ export class ParticipatingMedium {
|
|
|
48
48
|
* @type {number}
|
|
49
49
|
*/
|
|
50
50
|
priority: number;
|
|
51
|
+
/** Authored coefficients changed; resident consumers can queue a write without polling. */
|
|
52
|
+
onChanged: Signal;
|
|
51
53
|
/**
|
|
52
54
|
* Bumped whenever something that reaches the GPU changes, so the resident media table knows to
|
|
53
55
|
* repack this medium — the contract {@link ShadeMaterial#version} has. {@link add_lobe} and
|
|
@@ -105,4 +107,5 @@ export class ParticipatingMedium {
|
|
|
105
107
|
export type MediumPhaseFunction = import("./phase/MediumPhaseFunction.js").MediumPhaseFunction;
|
|
106
108
|
export type MediumPhaseLobeRecord = import("./phase/MediumPhaseFunction.js").MediumPhaseLobeRecord;
|
|
107
109
|
export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
|
|
110
|
+
import Signal from "../../../core/events/signal/Signal.js";
|
|
108
111
|
//# sourceMappingURL=ParticipatingMedium.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticipatingMedium.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/medium/ParticipatingMedium.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticipatingMedium.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/medium/ParticipatingMedium.js"],"names":[],"mappings":"AAwBA;;GAEG;AACH;IACI;;;OAGG;IACH,wBAHW,MAAM,EAAE,SACR,mBAAmB,EAa7B;IAVG;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEU;IAE5B;;OAEG;IACH,OAFU,mBAAmB,CAEX;CAEzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH;IACI;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;;;OAKG;IACH,UAFU,MAAM,CAEH;IAYb,2FAA2F;IAC3F,kBAAyB;IAEzB;;;;;;;OAOG;IACH,sBAEC;IAED;;;;OAIG;IACH,gCAKC;IAED;;;OAGG;IACH,gDAEC;IAED;;;OAGG;IACH,6BAQC;IAED;;;;;OAKG;IACH,qBAHW,MAAM,EAAE,SACR,mBAAmB,QAgB7B;IAED;;OAEG;IACH,oBAKC;IAED;;;;OAIG;IACH,iBAFa;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,qBAAqB,EAAE,CAAA;KAAC,CA8BxG;IAGL;;;OAGG;IACH,gCAFU,OAAO,CAEkC;;CANlD;kCAvMY,OAAO,gCAAgC,EAAE,mBAAmB;oCAC5D,OAAO,gCAAgC,EAAE,qBAAqB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;mBAN9C,uCAAuC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import Signal from "../../../core/events/signal/Signal.js";
|
|
2
3
|
import { MEDIUM_PHASE_LOBE_LIMIT } from "./MEDIUM_STRUCT.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -86,6 +87,9 @@ export class ParticipatingMedium {
|
|
|
86
87
|
*/
|
|
87
88
|
#version = 0;
|
|
88
89
|
|
|
90
|
+
/** Authored coefficients changed; resident consumers can queue a write without polling. */
|
|
91
|
+
onChanged = new Signal();
|
|
92
|
+
|
|
89
93
|
/**
|
|
90
94
|
* Bumped whenever something that reaches the GPU changes, so the resident media table knows to
|
|
91
95
|
* repack this medium — the contract {@link ShadeMaterial#version} has. {@link add_lobe} and
|
|
@@ -106,6 +110,7 @@ export class ParticipatingMedium {
|
|
|
106
110
|
set needsUpdate(value) {
|
|
107
111
|
if (value) {
|
|
108
112
|
this.#version++;
|
|
113
|
+
this.onChanged.dispatch();
|
|
109
114
|
}
|
|
110
115
|
}
|
|
111
116
|
|
|
@@ -150,6 +155,7 @@ export class ParticipatingMedium {
|
|
|
150
155
|
this.#lobes.push(new ParticipatingMediumLobe(scattering.slice(), phase));
|
|
151
156
|
|
|
152
157
|
this.#version++;
|
|
158
|
+
this.onChanged.dispatch();
|
|
153
159
|
}
|
|
154
160
|
|
|
155
161
|
/**
|
|
@@ -159,6 +165,7 @@ export class ParticipatingMedium {
|
|
|
159
165
|
this.#lobes.length = 0;
|
|
160
166
|
|
|
161
167
|
this.#version++;
|
|
168
|
+
this.onChanged.dispatch();
|
|
162
169
|
}
|
|
163
170
|
|
|
164
171
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_autoexposure_build_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_autoexposure_build_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js"],"names":[],"mappings":"AA8FA,gEAIE;8BA7F4B,+BAA+B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { chunk_inverse_lerp } from "../../shader/chunk/math/chunk_inverse_lerp.js";
|
|
2
2
|
import { chunk_rgb_to_luminance } from "../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
3
|
+
import { chunk_screen_importance } from "../../shader/chunk/screen_space/chunk_screen_importance.js";
|
|
3
4
|
import { chunk_texel_coordinate_to_uv } from "../../shader/chunk/texture/chunk_texel_coordinate_to_uv.js";
|
|
4
5
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
5
6
|
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
@@ -18,36 +19,6 @@ const LUMINANCE_MIN = Math.pow(2, AUTOEXPOSURE_HISTOGRAM_LOG_MIN);
|
|
|
18
19
|
const LUMINANCE_MAX = Math.pow(2, AUTOEXPOSURE_HISTOGRAM_LOG_MAX);
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
/**
|
|
22
|
-
* Exposure metering mask (see https://www.unrealengine.com/en-US/tech-blog/how-epic-games-is-handling-auto-exposure-in-4-25)
|
|
23
|
-
* Prioritize pixels away from the edge of the screen
|
|
24
|
-
* @type {CodeChunk}
|
|
25
|
-
*/
|
|
26
|
-
const chunk_compute_vignette = CodeChunk.from(
|
|
27
|
-
//language=WGSL
|
|
28
|
-
`
|
|
29
|
-
fn compute_vignette(
|
|
30
|
-
uv: vec2<f32>,
|
|
31
|
-
vertical_aspect: f32,
|
|
32
|
-
border_fraction: f32
|
|
33
|
-
) -> f32{
|
|
34
|
-
|
|
35
|
-
let fov = border_fraction * vec2(vertical_aspect, 1.0);
|
|
36
|
-
|
|
37
|
-
let border = smoothstep(vec2(0.0, 0.0), fov, uv) * (1.0 - smoothstep(vec2(1.0, 1.0) - fov, vec2(1.0, 1.0), uv));
|
|
38
|
-
let vignette = border.x * border.y;
|
|
39
|
-
|
|
40
|
-
return vignette;
|
|
41
|
-
}
|
|
42
|
-
`
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* How many distinct steps to use for quantization?
|
|
47
|
-
* @type {number}
|
|
48
|
-
*/
|
|
49
|
-
const MASKING_QUANTIZATION_STEPS = 64;
|
|
50
|
-
|
|
51
22
|
/**
|
|
52
23
|
* NOTE: we do not explicitly initialize groupshared memory, as spec guarantees it to be initialized to default value of 0 already.
|
|
53
24
|
* @type {CodeChunk}
|
|
@@ -93,10 +64,9 @@ fn main(
|
|
|
93
64
|
let bin_index = u32( t * ${ (SCENE_LUMINANCE_HISTOGRAM_BIN_COUNT - 1) });
|
|
94
65
|
|
|
95
66
|
let uv = texel_coordinate_to_uv(vec2<f32>(global_id.xy), size);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
let quantized = max(1u, u32(vignette * ${MASKING_QUANTIZATION_STEPS}));
|
|
67
|
+
|
|
68
|
+
// the metering mask: pixels away from the edge of the screen count for more
|
|
69
|
+
let quantized = screen_importance_weight(uv, f32(size.y) / f32(size.x));
|
|
100
70
|
|
|
101
71
|
atomicAdd(&group_histogram.bins[bin_index], quantized);
|
|
102
72
|
|
|
@@ -118,7 +88,7 @@ fn main(
|
|
|
118
88
|
chunk_rgb_to_luminance,
|
|
119
89
|
chunk_inverse_lerp,
|
|
120
90
|
chunk_texel_coordinate_to_uv,
|
|
121
|
-
|
|
91
|
+
chunk_screen_importance,
|
|
122
92
|
]
|
|
123
93
|
)
|
|
124
94
|
|
|
@@ -53,7 +53,7 @@ export class NSS {
|
|
|
53
53
|
* @returns {number}
|
|
54
54
|
*/
|
|
55
55
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
56
|
-
static "__#
|
|
56
|
+
static "__#190@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
57
57
|
/**
|
|
58
58
|
* @param {GraphicsContext} graphics
|
|
59
59
|
*/
|
|
@@ -5,9 +5,13 @@ export class SSR {
|
|
|
5
5
|
*/
|
|
6
6
|
constructor(graphics: import("../../GraphicsContext.js").GraphicsContext);
|
|
7
7
|
frame_index: number;
|
|
8
|
-
set
|
|
9
|
-
/**
|
|
10
|
-
|
|
8
|
+
set tile_denoising_enabled(value: boolean);
|
|
9
|
+
/**
|
|
10
|
+
* Opt-in constant-neighborhood coverage tiles. Classification adds overhead;
|
|
11
|
+
* measure the scene/device before enabling it, particularly at low resolutions.
|
|
12
|
+
* @returns {boolean}
|
|
13
|
+
*/
|
|
14
|
+
get tile_denoising_enabled(): boolean;
|
|
11
15
|
set reset_history(value: boolean);
|
|
12
16
|
/**
|
|
13
17
|
* When set, will disregard history buffer
|
|
@@ -15,6 +19,9 @@ export class SSR {
|
|
|
15
19
|
* @type {boolean}
|
|
16
20
|
*/
|
|
17
21
|
get reset_history(): boolean;
|
|
22
|
+
set spatial_denoising_enabled(value: boolean);
|
|
23
|
+
/** Toggle the three spatial passes independently of temporal reprojection. @returns {boolean} */
|
|
24
|
+
get spatial_denoising_enabled(): boolean;
|
|
18
25
|
set reprojection_mode(value: number);
|
|
19
26
|
/** @returns {SSRReprojectionMode} */
|
|
20
27
|
get reprojection_mode(): number;
|
|
@@ -47,7 +54,7 @@ export class SSR {
|
|
|
47
54
|
* @param {import("../../view/GPUViewContext.js").GPUViewContext} [options.view_ctx]
|
|
48
55
|
* @param {ArrayLike<number>} [options.jitter] Raster jitter in internal pixels
|
|
49
56
|
* @param {number} [options.mip] Higher mip = lower resolution trace
|
|
50
|
-
* @returns {{final:number, trace:number, reflections:number, denoised:number, denoised_1:number}}
|
|
57
|
+
* @returns {{final:number, trace:number, reflections:number, denoised:number, denoised_1:number, denoise_tiles:number}}
|
|
51
58
|
*/
|
|
52
59
|
graph_pass({ graph, input_depth, input_depth_previous, view_ctx, jitter, input_hzb, input_scene_color, input_pbr, input_normal, input_velocity, input_occlusion, input_albedo, resolution, camera_current, camera_previous, input_environment, indirect_lighting_mode, lpv, brick4, mip, }: {
|
|
53
60
|
graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
@@ -76,6 +83,7 @@ export class SSR {
|
|
|
76
83
|
reflections: number;
|
|
77
84
|
denoised: number;
|
|
78
85
|
denoised_1: number;
|
|
86
|
+
denoise_tiles: number;
|
|
79
87
|
};
|
|
80
88
|
#private;
|
|
81
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SSR.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/SSR.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SSR.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/SSR.js"],"names":[],"mappings":"AAmBA;IAwEI;;;OAGG;IACH,sBAFW,OAAO,0BAA0B,EAAE,eAAe,EAkB5D;IA1ED,oBAAgB;IAWhB,2CAMC;IAZD;;;;OAIG;IACH,sCAAqE;IAoCrE,kCAMC;IAZD;;;;OAIG;IACH,6BAAmD;IAxBnD,8CAOC;IATD,iGAAiG;IACjG,yCAA2E;IAY3E,qCAMC;IARD,qCAAqC;IACrC,gCAA2D;IA6C3D;;;;OAIG;IACH,UAHW,MAAM,KACN,MAAM,QAUhB;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH;QAtBsG,KAAK,EAAhG,OAAO,8DAA8D,EAAE,UAAU;QACjE,WAAW,EAA3B,MAAM;QACW,oBAAoB,GAArC,MAAM;QACU,SAAS,EAAzB,MAAM;QACU,iBAAiB,EAAjC,MAAM;QACU,YAAY,EAA5B,MAAM;QACU,SAAS,EAAzB,MAAM;QACU,YAAY,EAA5B,MAAM;QACU,cAAc,EAA9B,MAAM;QACU,eAAe,EAA/B,MAAM;QACW,iBAAiB,GAAlC,MAAM;QACqB,UAAU,EAArC,UAAU,MAAM,CAAC;QACD,cAAc,EAA9B,MAAM;QACU,eAAe,EAA/B,MAAM;QAC8B,sBAAsB,GAA1D,yBAAyB;QAC6D,MAAM,GAA5F,OAAO,oDAAoD,EAAE,cAAc;QACkB,GAAG,GAAhG,OAAO,sDAAsD,EAAE,mBAAmB;QAClB,QAAQ,GAAxE,OAAO,8BAA8B,EAAE,cAAc;QACzB,MAAM,GAAlC,UAAU,MAAM,CAAC;QACA,GAAG,GAApB,MAAM;QACJ;QAAC,KAAK,EAAC,MAAM,CAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAC,WAAW,EAAC,MAAM,CAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAC,UAAU,EAAC,MAAM,CAAC;QAAC,aAAa,EAAC,MAAM,CAAA;KAAC,CA+QtH;;CACJ;0CAvayC,oCAAoC"}
|
|
@@ -11,9 +11,11 @@ import { ssr_resolve_shader_LPV } from "./resolve/ssr_resolve_shader_LPV.js";
|
|
|
11
11
|
import { ssr_combine_shader } from "./ssr_combine_shader.js";
|
|
12
12
|
import { ssr_graph_prefilter_color } from "./ssr_graph_prefilter_color.js";
|
|
13
13
|
import { SSR_PREFILTER_MIP_COUNT } from "./SSR_PREFILTER_MIP_COUNT.js";
|
|
14
|
-
import { ssr_reproject_shader } from "./ssr_reproject_shader.js";
|
|
15
|
-
import { ssr_spatial_denoise_shader, ssr_spatial_denoise_metadata_shader
|
|
14
|
+
import { ssr_reproject_shader, ssr_reproject_tile_shader } from "./ssr_reproject_shader.js";
|
|
15
|
+
import { ssr_spatial_denoise_shader, ssr_spatial_denoise_metadata_shader,
|
|
16
|
+
ssr_spatial_denoise_tile_shader, ssr_spatial_denoise_metadata_tile_shader } from "./ssr_spatial_denoise_shader.js";
|
|
16
17
|
import { ssr_trace_shader } from "./ssr_trace_shader.js";
|
|
18
|
+
import { ssr_graph_denoise_tiles } from "./ssr_graph_denoise_tiles.js";
|
|
17
19
|
|
|
18
20
|
export class SSR {
|
|
19
21
|
|
|
@@ -36,6 +38,21 @@ export class SSR {
|
|
|
36
38
|
frame_index = 0;
|
|
37
39
|
#reprojection_mode = SSRReprojectionMode.Parallax;
|
|
38
40
|
#spatial_denoising_enabled = true;
|
|
41
|
+
#tile_denoising_enabled = false;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Opt-in constant-neighborhood coverage tiles. Classification adds overhead;
|
|
45
|
+
* measure the scene/device before enabling it, particularly at low resolutions.
|
|
46
|
+
* @returns {boolean}
|
|
47
|
+
*/
|
|
48
|
+
get tile_denoising_enabled() { return this.#tile_denoising_enabled; }
|
|
49
|
+
set tile_denoising_enabled(value) {
|
|
50
|
+
assert.isBoolean(value, 'tile_denoising_enabled');
|
|
51
|
+
if (value !== this.#tile_denoising_enabled) {
|
|
52
|
+
this.#tile_denoising_enabled = value;
|
|
53
|
+
this.reset_history = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
39
56
|
|
|
40
57
|
/** Toggle the three spatial passes independently of temporal reprojection. @returns {boolean} */
|
|
41
58
|
get spatial_denoising_enabled() { return this.#spatial_denoising_enabled; }
|
|
@@ -132,7 +149,7 @@ export class SSR {
|
|
|
132
149
|
* @param {import("../../view/GPUViewContext.js").GPUViewContext} [options.view_ctx]
|
|
133
150
|
* @param {ArrayLike<number>} [options.jitter] Raster jitter in internal pixels
|
|
134
151
|
* @param {number} [options.mip] Higher mip = lower resolution trace
|
|
135
|
-
* @returns {{final:number, trace:number, reflections:number, denoised:number, denoised_1:number}}
|
|
152
|
+
* @returns {{final:number, trace:number, reflections:number, denoised:number, denoised_1:number, denoise_tiles:number}}
|
|
136
153
|
*/
|
|
137
154
|
graph_pass({
|
|
138
155
|
graph,
|
|
@@ -282,7 +299,13 @@ export class SSR {
|
|
|
282
299
|
},
|
|
283
300
|
});
|
|
284
301
|
|
|
285
|
-
|
|
302
|
+
const tile_denoising = this.#tile_denoising_enabled
|
|
303
|
+
&& (this.#spatial_denoising_enabled || this.#reprojection_mode !== SSRReprojectionMode.CurrentFrame);
|
|
304
|
+
const denoise_tiles = tile_denoising ? ssr_graph_denoise_tiles({
|
|
305
|
+
graph, resolution, input: reflections, metadata: reflection_metadata,
|
|
306
|
+
history, history_metadata, velocity: input_velocity, history_valid: valid, jitter_delta,
|
|
307
|
+
}) : -1;
|
|
308
|
+
const tile_inputs = denoise_tiles >= 0 ? { tDenoiseTiles: denoise_tiles } : {};
|
|
286
309
|
|
|
287
310
|
// denoise
|
|
288
311
|
|
|
@@ -295,9 +318,10 @@ export class SSR {
|
|
|
295
318
|
if (this.#spatial_denoising_enabled) {
|
|
296
319
|
[denoised, denoised_metadata] = graph_image_pass({
|
|
297
320
|
graph,
|
|
298
|
-
shader: ssr_spatial_denoise_metadata_shader,
|
|
321
|
+
shader: tile_denoising ? ssr_spatial_denoise_metadata_tile_shader : ssr_spatial_denoise_metadata_shader,
|
|
299
322
|
output_resolution: resolution,
|
|
300
323
|
inputs: {
|
|
324
|
+
...tile_inputs,
|
|
301
325
|
tInput: denoised,
|
|
302
326
|
tMetadata: denoised_metadata,
|
|
303
327
|
tDepth: input_depth,
|
|
@@ -313,9 +337,10 @@ export class SSR {
|
|
|
313
337
|
|
|
314
338
|
[denoised, denoised_metadata] = graph_image_pass({
|
|
315
339
|
graph,
|
|
316
|
-
shader: ssr_reproject_shader,
|
|
340
|
+
shader: tile_denoising ? ssr_reproject_tile_shader : ssr_reproject_shader,
|
|
317
341
|
output: [output, output_metadata, output_geometry],
|
|
318
342
|
inputs: {
|
|
343
|
+
...tile_inputs,
|
|
319
344
|
tInput: denoised,
|
|
320
345
|
tMetadata: denoised_metadata,
|
|
321
346
|
tHistory: history,
|
|
@@ -337,9 +362,10 @@ export class SSR {
|
|
|
337
362
|
// 2 more spatial denoise steps
|
|
338
363
|
[denoised] = graph_image_pass({
|
|
339
364
|
graph,
|
|
340
|
-
shader: ssr_spatial_denoise_shader,
|
|
365
|
+
shader: tile_denoising ? ssr_spatial_denoise_tile_shader : ssr_spatial_denoise_shader,
|
|
341
366
|
output_resolution: resolution,
|
|
342
367
|
inputs: {
|
|
368
|
+
...tile_inputs,
|
|
343
369
|
tInput: denoised,
|
|
344
370
|
tDepth: input_depth,
|
|
345
371
|
tNormal: input_normal,
|
|
@@ -352,9 +378,10 @@ export class SSR {
|
|
|
352
378
|
|
|
353
379
|
[denoised] = graph_image_pass({
|
|
354
380
|
graph,
|
|
355
|
-
shader: ssr_spatial_denoise_shader,
|
|
381
|
+
shader: tile_denoising ? ssr_spatial_denoise_tile_shader : ssr_spatial_denoise_shader,
|
|
356
382
|
output_resolution: resolution,
|
|
357
383
|
inputs: {
|
|
384
|
+
...tile_inputs,
|
|
358
385
|
tInput: denoised,
|
|
359
386
|
tDepth: input_depth,
|
|
360
387
|
tNormal: input_normal,
|
|
@@ -391,6 +418,7 @@ export class SSR {
|
|
|
391
418
|
denoised,
|
|
392
419
|
denoised_1,
|
|
393
420
|
reflections,
|
|
421
|
+
denoise_tiles,
|
|
394
422
|
};
|
|
395
423
|
}
|
|
396
424
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSR_DENOISE_TILE_SIZE.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,sCAAuC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A miss can still contain varying GI radiance or useful history. Only a constant,
|
|
3
|
+
* stationary, zero-uncertainty neighborhood may take the denoiser's copy path.
|
|
4
|
+
* Texture names are supplied by shader_ssr_denoise_tile_classify.
|
|
5
|
+
*/
|
|
6
|
+
export const chunk_ssr_denoise_tile_active: CodeChunk;
|
|
7
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
8
|
+
//# sourceMappingURL=chunk_ssr_denoise_tile_active.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_ssr_denoise_tile_active.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,sDA8B8C;0BAvCpB,oCAAoC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_is_finite } from "../../shader/chunk/math/chunk_is_finite.js";
|
|
3
|
+
import { chunk_rgb_to_luminance } from "../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A miss can still contain varying GI radiance or useful history. Only a constant,
|
|
7
|
+
* stationary, zero-uncertainty neighborhood may take the denoiser's copy path.
|
|
8
|
+
* Texture names are supplied by shader_ssr_denoise_tile_classify.
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_ssr_denoise_tile_active = CodeChunk.from(/* language=WGSL */ `
|
|
11
|
+
fn ssr_denoise_tile_active(p: vec2i, history_valid: bool, jitter_delta: vec2f) -> u32 {
|
|
12
|
+
// The halo covers ordinary raster jitter, not an arbitrary jump in raster grids.
|
|
13
|
+
if (!is_finite(jitter_delta.x) || !is_finite(jitter_delta.y)
|
|
14
|
+
|| any(abs(jitter_delta) > vec2f(1.0))) { return 1u; }
|
|
15
|
+
let current = textureLoad(tInput, p, 0);
|
|
16
|
+
let metadata = textureLoad(tMetadata, p, 0).rg;
|
|
17
|
+
let velocity = textureLoad(tVelocity, p, 0).rg;
|
|
18
|
+
if (!is_finite(current.x) || !is_finite(current.y) || !is_finite(current.z) || !is_finite(current.w)
|
|
19
|
+
|| !is_finite(metadata.x) || !is_finite(metadata.y)
|
|
20
|
+
|| !is_finite(velocity.x) || !is_finite(velocity.y)) { return 1u; }
|
|
21
|
+
// Velocity is already in INTERNAL PIXELS. Depth clipping can select a neighboring
|
|
22
|
+
// velocity; the dilated mask protects that neighbor's moving coverage too.
|
|
23
|
+
if (any(velocity != vec2f(0.0)) || current.w != 0.0 || any(metadata != vec2f(0.0))) { return 1u; }
|
|
24
|
+
if (any(current.rgb < vec3f(0.0))) { return 1u; }
|
|
25
|
+
let size = vec2i(textureDimensions(tInput));
|
|
26
|
+
// Every horizontal/vertical color boundary has an owner. The tile halo then
|
|
27
|
+
// covers both sides, including boundaries between tiles and isoluminant colors.
|
|
28
|
+
if (p.x + 1 < size.x && any(textureLoad(tInput, p + vec2i(1,0), 0).rgb != current.rgb)) { return 1u; }
|
|
29
|
+
if (p.y + 1 < size.y && any(textureLoad(tInput, p + vec2i(0,1), 0).rgb != current.rgb)) { return 1u; }
|
|
30
|
+
if (history_valid) {
|
|
31
|
+
let old = textureLoad(tHistory, p, 0);
|
|
32
|
+
let old_metadata = textureLoad(tHistoryMetadata, p, 0);
|
|
33
|
+
// Comparisons also keep invalid history active. A hard reset never loads it.
|
|
34
|
+
if (!all(old == current) || !all(old_metadata.rg == metadata)
|
|
35
|
+
|| !is_finite(old_metadata.x) || !is_finite(old_metadata.z)
|
|
36
|
+
|| !(old_metadata.w == rgb_to_luminance(current.rgb))) { return 1u; }
|
|
37
|
+
}
|
|
38
|
+
return 0u;
|
|
39
|
+
}
|
|
40
|
+
`, [chunk_is_finite, chunk_rgb_to_luminance]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_ssr_temporal_accumulate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js"],"names":[],"mappings":"AAUA,gGAAgG;AAChG,
|
|
1
|
+
{"version":3,"file":"chunk_ssr_temporal_accumulate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js"],"names":[],"mappings":"AAUA,gGAAgG;AAChG,sDA0IuH;0BArJ7F,uCAAuC"}
|