@woosh/meep-engine 3.60.5 → 3.60.7
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 +19 -0
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +2 -1
- package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.d.ts +2 -2
- package/src/core/binary/operations/ceil_log2.d.ts.map +1 -0
- package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.js +18 -18
- package/src/core/binary/zstd/ZstdReverseBitReader.d.ts.map +1 -1
- package/src/core/binary/zstd/ZstdReverseBitReader.js +225 -223
- package/src/core/binary/zstd/zstd_fse.d.ts.map +1 -1
- package/src/core/binary/zstd/zstd_fse.js +267 -265
- package/src/core/binary/zstd/zstd_huffman.d.ts.map +1 -1
- package/src/core/binary/zstd/zstd_huffman.js +246 -244
- package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
- package/src/core/bvh2/binary/2/BinaryUint32BVH.js +8 -2
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +8 -7
- package/src/core/collection/PairUint32Map.d.ts.map +1 -1
- package/src/core/collection/PairUint32Map.js +2 -2
- package/src/core/collection/Uint32Map.d.ts.map +1 -1
- package/src/core/collection/Uint32Map.js +2 -4
- package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -1
- package/src/core/collection/heap/FibonacciHeap.js +2 -1
- package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
- package/src/core/geom/2d/r-tree/StaticR2Tree.js +8 -2
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -1
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +2 -3
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -14
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.js +70 -69
- package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.d.ts.map +1 -1
- package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js +2 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
- package/src/engine/graphics3/decal/chunk_decal_record.d.ts +14 -0
- package/src/engine/graphics3/decal/chunk_decal_record.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_record.js +44 -0
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +2 -15
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +3 -16
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +3 -23
- package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js +2 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/queries/shape_cast.js +2 -2
- package/src/format/image/avif/av1/decode/decode_palette.js +442 -442
- package/src/format/image/avif/av1/entropy/SymbolWriter.d.ts.map +1 -1
- package/src/format/image/avif/av1/entropy/SymbolWriter.js +2 -1
- package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_tile.js +2 -1
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +6 -13
- package/src/shade/playground/caldera/main.js +3 -2
- package/src/shade/playground/probe_clipmap/README.md +2 -1
- package/src/shade/playground/probe_clipmap/index.html +7 -2
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +17 -7
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +7 -13
- package/src/shade/playground/vgeo_scene/main.js +2 -1
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -1
- package/src/shade/playground/vsm/VSMDebugOverlay.js +3 -1
- package/src/shade/renderer/Renderer.d.ts +11 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +43 -1
- 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/pressure/shader_fluid_mg_coarsest.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_coarsest.js +5 -4
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +168 -166
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +221 -219
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.js +8 -19
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +26 -43
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +115 -123
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.js +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +20 -2
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +66 -2
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.js +25 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +2 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +2 -1
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +38 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +28 -59
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +84 -789
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.js +10 -31
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.js +9 -15
- package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts +2 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.js +6 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +168 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +98 -57
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +168 -77
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +27 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +12 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +8 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +5 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +5 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.js +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +114 -41
- 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 +424 -207
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +34 -25
- 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 +41 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +7 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +7 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts +47 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.js +84 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts +48 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +58 -4
- 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 +127 -30
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +18 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +39 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +29 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +112 -56
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.js +35 -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 +9 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +8 -12
- 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 +23 -56
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +11 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +173 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts +32 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.js +166 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +3 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +3 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +6 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +15 -65
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +7 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +24 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts +7 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.js +18 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +9 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +9 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +16 -16
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.js +233 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +7 -5
- 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 +5 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +10 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +12 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +1 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +5 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +14 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +25 -35
- package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts +13 -0
- package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.js +12 -0
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +27 -2
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +62 -6
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +10 -19
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.js +6 -3
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -1
- package/src/shade/renderer/hiz/hzb_pick_alignment.js +149 -148
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +4 -2
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +6 -5
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +3 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +3 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +3 -1
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +0 -5
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +0 -7
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +15 -2
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +51 -16
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +3 -2
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +4 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +5 -8
- package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts +17 -0
- package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.js +81 -0
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +5 -48
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -44
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +7 -3
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +26 -13
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +14 -0
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +196 -68
- package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +4 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +42 -28
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +430 -414
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts +16 -0
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +156 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +5 -7
- package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts +17 -0
- package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.js +56 -0
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +2 -22
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +2 -13
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +10 -13
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +39 -38
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +7 -12
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -2
- package/src/shade/renderer/scene/GPUSceneContext.js +5 -5
- package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts +8 -6
- package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js +10 -7
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.js +35 -0
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts +5 -2
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.js +27 -18
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.js +5 -15
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.js +5 -19
- package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.js +3 -22
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +2 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.js +154 -152
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +2 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +3 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +4 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +7 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +54 -47
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +371 -370
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +2 -1
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/lod/shader_water_lod.js +12 -14
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +2 -9
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +2 -1
- package/src/shade/renderer/wind/WIND_FIELD.d.ts +3 -1
- package/src/shade/renderer/wind/WIND_FIELD.d.ts.map +1 -1
- package/src/shade/renderer/wind/WIND_FIELD.js +4 -3
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +8 -2
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +11 -4
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +2 -2
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +13 -4
- package/src/shade/util/texture_mip_extent.d.ts.map +1 -1
- package/src/shade/util/texture_mip_extent.js +88 -87
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +9 -7
- package/src/format/image/avif/av1/util/ceil_log2.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +0 -47
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +0 -80
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +0 -67
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +0 -17
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +0 -145
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +0 -105
- package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts +0 -1
- package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_build_world_light_clusters.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_build_world_light_clusters.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,gEAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,8DAHW,MAAM,GACJ,MAAM,CAKlB;AA4BD;;;;GAIG;AACH,sEAFW,eAAe,QAMzB;AAED;;;;;;;;;;;;;;;GAeG;AACH;IAXsG,KAAK,EAAhG,OAAO,8DAA8D,EAAE,UAAU;IAClB,MAAM,EAArE,OAAO,0BAA0B,EAAE,kBAAkB;IACrC,MAAM,EAAtB,MAAM;IAEU,aAAa,EAA7B,MAAM;IACU,MAAM,EAAtB,MAAM;IAEqB,YAAY,EAAvC,UAAU,MAAM,CAAC;IACU,YAAY,EAAvC,UAAU,MAAM,CAAC;IACf;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAgI1C;8BAtNY,OAAO,6CAA6C,EAAE,eAAe"}
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
WORLD_LIGHT_CLUSTER_CULL_SETTINGS,
|
|
18
18
|
WORLD_LIGHT_CLUSTER_GRID_SIZE,
|
|
19
19
|
WORLD_LIGHT_CLUSTER_LIGHT_CAPACITY,
|
|
20
|
-
WORLD_LIGHT_CLUSTER_MAX_CASCADES,
|
|
21
20
|
WORLD_LIGHT_CLUSTER_MAX_LIGHTS_PER_CELL,
|
|
22
21
|
} from "./WORLD_LIGHT_CLUSTER.js";
|
|
23
22
|
|
|
@@ -37,18 +36,51 @@ const PROXIES_DESCRIPTOR = BufferResourceDescriptor.from(
|
|
|
37
36
|
GPUBufferUsage.STORAGE,
|
|
38
37
|
);
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Bytes of the cluster lookup over a clipmap of so many cascades.
|
|
41
|
+
* @param {number} cascade_count
|
|
42
|
+
* @returns {number}
|
|
43
|
+
*/
|
|
44
|
+
export function world_light_clusters_lookup_size(cascade_count) {
|
|
45
|
+
return cascade_count * WORLD_LIGHT_CLUSTER_CELLS_PER_CASCADE * LIGHT_CLUSTER_METADATA.aligned_size;
|
|
46
|
+
}
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
)
|
|
48
|
+
/**
|
|
49
|
+
* Bytes of the cluster data over a clipmap of so many cascades: the larger of the two, which a host
|
|
50
|
+
* checks against the device's `maxStorageBufferBindingSize` for the cascades it builds.
|
|
51
|
+
* @param {number} cascade_count
|
|
52
|
+
* @returns {number}
|
|
53
|
+
*/
|
|
54
|
+
export function world_light_clusters_data_size(cascade_count) {
|
|
55
|
+
return COLLECTION_U32_STRUCT_WRITE.size
|
|
56
|
+
+ cascade_count * WORLD_LIGHT_CLUSTER_CELLS_PER_CASCADE * WORLD_LIGHT_CLUSTER_MAX_LIGHTS_PER_CELL * u32.size;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The lookup's and the data's descriptors by cascade count, made once a count: a clipmap's count is
|
|
61
|
+
* its structure, so a frame meets the one it met before.
|
|
62
|
+
* @type {Map<number, {lookup: BufferResourceDescriptor, data: BufferResourceDescriptor}>}
|
|
63
|
+
*/
|
|
64
|
+
const descriptors_by_cascade_count = new Map();
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @param {number} cascade_count
|
|
68
|
+
* @returns {{lookup: BufferResourceDescriptor, data: BufferResourceDescriptor}}
|
|
69
|
+
*/
|
|
70
|
+
function descriptors_for(cascade_count) {
|
|
71
|
+
let descriptors = descriptors_by_cascade_count.get(cascade_count);
|
|
72
|
+
|
|
73
|
+
if (descriptors === undefined) {
|
|
74
|
+
descriptors = {
|
|
75
|
+
lookup: BufferResourceDescriptor.from(world_light_clusters_lookup_size(cascade_count), GPUBufferUsage.STORAGE),
|
|
76
|
+
data: BufferResourceDescriptor.from(world_light_clusters_data_size(cascade_count), GPUBufferUsage.STORAGE, 0, 16),
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
descriptors_by_cascade_count.set(cascade_count, descriptors);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return descriptors;
|
|
83
|
+
}
|
|
52
84
|
|
|
53
85
|
/**
|
|
54
86
|
* Offer the pipelines {@link graph_build_world_light_clusters} dispatches — see {@link PipelineEnquiry}.
|
|
@@ -68,8 +100,8 @@ export function enquire_build_world_light_clusters_pipelines(enquiry) {
|
|
|
68
100
|
* @param {object} options
|
|
69
101
|
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
|
|
70
102
|
* @param {import("../GPULightCollection.js").GPULightCollection} options.lights
|
|
71
|
-
* @param {number} options.levels graph handle of a
|
|
72
|
-
*
|
|
103
|
+
* @param {number} options.levels graph handle of a buffer that starts with the clipmap's cascade windows,
|
|
104
|
+
* `cascade_count` `CLIPMAP_LEVEL_STRUCT`s, finest first, read as storage
|
|
73
105
|
* @param {number} options.cascade_count active cascade count
|
|
74
106
|
* @param {number} options.border cells of its own past each face of a cascade's window that its cluster
|
|
75
107
|
* cells cover too
|
|
@@ -193,8 +225,11 @@ export function graph_build_world_light_clusters({
|
|
|
193
225
|
assign_data.levels = assign_pass.read(levels);
|
|
194
226
|
assign_data.culled_lights = assign_pass.read(cull_data.culled_lights);
|
|
195
227
|
assign_data.proxies = assign_pass.read(cull_data.proxies);
|
|
196
|
-
|
|
197
|
-
|
|
228
|
+
// a clipmap of no cascade still binds a lookup and data, of one cascade
|
|
229
|
+
const descriptors = descriptors_for(Math.max(cascade_count, 1));
|
|
230
|
+
|
|
231
|
+
assign_data.lookup = assign_pass.create("World cluster / lookup", descriptors.lookup);
|
|
232
|
+
assign_data.data = assign_pass.create("World cluster / data", descriptors.data);
|
|
198
233
|
|
|
199
234
|
return {
|
|
200
235
|
lookup: assign_data.lookup,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_world_cluster_assign_lights.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js"],"names":[],"mappings":"AAqBA,oEAA4E;AAI5E;;GAEG;AACH,4CAFU,YAAY,CAOW;
|
|
1
|
+
{"version":3,"file":"shader_world_cluster_assign_lights.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js"],"names":[],"mappings":"AAqBA,oEAA4E;AAI5E;;GAEG;AACH,4CAFU,YAAY,CAOW;AAoIjC;;;;;;;GAOG;AACH,iDAFU,aAAa,CAMpB;6BAxK0B,mCAAmC;8BAJlC,+BAA+B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
2
2
|
import { COLLECTION_U32_STRUCT_WRITE } from "../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
3
|
-
import {
|
|
3
|
+
import { CLIPMAP_LEVEL_STRUCT } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
4
4
|
import { chunk_grid3d_to_index } from "../../shader/chunk/grid/chunk_grid3d_to_index.js";
|
|
5
5
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
6
6
|
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
@@ -38,7 +38,8 @@ const resources = new ShaderResourceSetDescriptor();
|
|
|
38
38
|
resources.setImmediate("settings", WORLD_CLUSTER_ASSIGN_SETTINGS);
|
|
39
39
|
|
|
40
40
|
resources.createGroup()
|
|
41
|
-
|
|
41
|
+
// read from the front of whatever buffer holds the clipmap's windows, however many it has
|
|
42
|
+
.addStorageBuffer("levels", WebGPUArray.from(CLIPMAP_LEVEL_STRUCT), false)
|
|
42
43
|
.addStorageBuffer("culled_lights", COLLECTION_U32_STRUCT_READ, false)
|
|
43
44
|
.addStorageBuffer("proxies", WebGPUArray.from(CLUSTER_LIGHT_PROXY), false)
|
|
44
45
|
.addStorageBuffer("world_cluster_lookup", LIGHT_CLUSTER_LOOKUP_STRUCT, true)
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#304@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -38,13 +38,16 @@ export class GPUMaterialManager {
|
|
|
38
38
|
* @param {GPUViewContext} options.view
|
|
39
39
|
* @param {number} options.texture_viz_mesh
|
|
40
40
|
* @param {number} options.texture_viz_triangle
|
|
41
|
+
* @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
|
|
42
|
+
* resolution. The caller owns it so that it outlives the frame: reprojection reads last frame's.
|
|
41
43
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
42
44
|
*/
|
|
43
|
-
graph_viz_render({ graph, view, texture_viz_mesh, texture_viz_triangle, }: {
|
|
45
|
+
graph_viz_render({ graph, view, texture_viz_mesh, texture_viz_triangle, texture_normal, }: {
|
|
44
46
|
graph: FrameGraph;
|
|
45
47
|
view: GPUViewContext;
|
|
46
48
|
texture_viz_mesh: number;
|
|
47
49
|
texture_viz_triangle: number;
|
|
50
|
+
texture_normal: number;
|
|
48
51
|
}): {
|
|
49
52
|
g_pbr: number;
|
|
50
53
|
g_normal: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AA4NA;IA4FI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAiD3B;IAlJD;;;;;OAKG;IACH,wBAAkC;IAOlC;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAyBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAsLD
|
|
1
|
+
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AA4NA;IA4FI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAiD3B;IAlJD;;;;;OAKG;IACH,wBAAkC;IAOlC;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAyBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAsLD;;;;;;;;;;OAUG;IACH;QAR+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,cAAc,EAA9B,MAAM;QAEJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CA4LnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAaC;IAED;;;;;;;OAOG;IACH,0BAFW,eAAe,QAazB;IAED;;;;;;;;;;;OAWG;IACH,kBAHW,qBAAqB,GACnB,QAAQ,IAAI,CAAC,CAMzB;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAuED;;;OAGG;IACH,YAFW,sBAAsB,QAmChC;;CAEJ;8BAl4BY,OAAO,0CAA0C,EAAE,eAAe;6BAClE,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCAtBzE,yBAAyB;mCAjBG,8CAA8C"}
|
|
@@ -467,6 +467,8 @@ export class GPUMaterialManager {
|
|
|
467
467
|
* @param {GPUViewContext} options.view
|
|
468
468
|
* @param {number} options.texture_viz_mesh
|
|
469
469
|
* @param {number} options.texture_viz_triangle
|
|
470
|
+
* @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
|
|
471
|
+
* resolution. The caller owns it so that it outlives the frame: reprojection reads last frame's.
|
|
470
472
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
471
473
|
*/
|
|
472
474
|
graph_viz_render({
|
|
@@ -474,9 +476,11 @@ export class GPUMaterialManager {
|
|
|
474
476
|
view,
|
|
475
477
|
texture_viz_mesh,
|
|
476
478
|
texture_viz_triangle,
|
|
479
|
+
texture_normal,
|
|
477
480
|
}) {
|
|
478
481
|
|
|
479
482
|
assert.defined(graph, 'graph');
|
|
483
|
+
assert.isNonNegativeInteger(texture_normal, 'texture_normal');
|
|
480
484
|
assert.defined(view, 'view');
|
|
481
485
|
|
|
482
486
|
/**
|
|
@@ -620,14 +624,7 @@ export class GPUMaterialManager {
|
|
|
620
624
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
621
625
|
})
|
|
622
626
|
);
|
|
623
|
-
pass_data.g_normal = pass.
|
|
624
|
-
"g-buffer / Normal",
|
|
625
|
-
TextureResourceDescriptor.from({
|
|
626
|
-
format: 'rgba16uint',
|
|
627
|
-
resolution: view.resolution,
|
|
628
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
629
|
-
})
|
|
630
|
-
);
|
|
627
|
+
pass_data.g_normal = pass.write(texture_normal);
|
|
631
628
|
pass_data.g_albedo = pass.create(
|
|
632
629
|
"g-buffer / Albedo",
|
|
633
630
|
TextureResourceDescriptor.from({
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared 88x88 f16-packed Circle-of-Confusion (CoC) workgroup LDS cache (8x8 tile + 40-pixel apron)
|
|
3
|
+
* for Depth-of-Field raymarch and slice compute passes.
|
|
4
|
+
*
|
|
5
|
+
* Expects `tColorCoc: texture_2d<f32>` in scope.
|
|
6
|
+
*
|
|
7
|
+
* ```wgsl
|
|
8
|
+
* fn dof_load_coc(p: vec2<i32>, dims: vec2<i32>) -> f32
|
|
9
|
+
* fn dof_populate_lds_coc(tile_blurred: bool, region_origin: vec2<i32>, lid: u32, dims: vec2<i32>)
|
|
10
|
+
* fn dof_read_coc(xt: vec2<i32>, region_origin: vec2<i32>) -> f32
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_dof_lds_coc_cache: CodeChunk;
|
|
16
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
17
|
+
//# sourceMappingURL=chunk_dof_lds_coc_cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_dof_lds_coc_cache.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;GAaG;AACH,sCAFU,SAAS,CAyDjB;0BAhFwB,uCAAuC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { DOF_LDS_APRON, DOF_LDS_WORKGROUP } from "../DOF_CONFIG.js";
|
|
3
|
+
|
|
4
|
+
// ── Workgroup-LDS cache geometry (derived; see DOF_LDS_* in DOF_CONFIG) ──
|
|
5
|
+
const WG = DOF_LDS_WORKGROUP; // 8 — workgroup side
|
|
6
|
+
const APRON = DOF_LDS_APRON; // 40 — cached skirt, full-res px
|
|
7
|
+
const REGION = WG + 2 * APRON; // 88 — cached square side (even)
|
|
8
|
+
const ROW_U32 = REGION / 2; // 44 — u32 per cached row (2 f16/u32)
|
|
9
|
+
const LDS_U32 = REGION * ROW_U32; // 3872 — total u32 (× 4 B = 15 488 B)
|
|
10
|
+
const WG_THREADS = WG * WG; // 64 — threads per workgroup
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Shared 88x88 f16-packed Circle-of-Confusion (CoC) workgroup LDS cache (8x8 tile + 40-pixel apron)
|
|
14
|
+
* for Depth-of-Field raymarch and slice compute passes.
|
|
15
|
+
*
|
|
16
|
+
* Expects `tColorCoc: texture_2d<f32>` in scope.
|
|
17
|
+
*
|
|
18
|
+
* ```wgsl
|
|
19
|
+
* fn dof_load_coc(p: vec2<i32>, dims: vec2<i32>) -> f32
|
|
20
|
+
* fn dof_populate_lds_coc(tile_blurred: bool, region_origin: vec2<i32>, lid: u32, dims: vec2<i32>)
|
|
21
|
+
* fn dof_read_coc(xt: vec2<i32>, region_origin: vec2<i32>) -> f32
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @type {CodeChunk}
|
|
25
|
+
*/
|
|
26
|
+
export const chunk_dof_lds_coc_cache = CodeChunk.from(
|
|
27
|
+
//language=WGSL
|
|
28
|
+
`
|
|
29
|
+
const WG: i32 = ${WG};
|
|
30
|
+
const APRON: i32 = ${APRON};
|
|
31
|
+
const REGION: i32 = ${REGION};
|
|
32
|
+
const ROW_U32: i32 = ${ROW_U32};
|
|
33
|
+
const LDS_U32: u32 = ${LDS_U32}u;
|
|
34
|
+
const WG_THREADS: u32 = ${WG_THREADS}u;
|
|
35
|
+
|
|
36
|
+
// Workgroup CoC cache: the REGION×REGION (tile + apron) signed-CoC field, two
|
|
37
|
+
// f16 packed per u32. The CoC texture is rgba16float, so packing its already-
|
|
38
|
+
// f16 .a channel round-trips losslessly — the cached march stays bit-identical
|
|
39
|
+
// to the texture march (and to the fragment reference).
|
|
40
|
+
var<workgroup> lds_coc: array<u32, LDS_U32>;
|
|
41
|
+
|
|
42
|
+
// Clamped CoC fetch used by the cooperative load.
|
|
43
|
+
fn dof_load_coc(p: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
44
|
+
return textureLoad(tColorCoc, clamp(p, vec2<i32>(0), dims - vec2<i32>(1)), 0).a;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Cooperative load: pack the tile+apron CoC field into shared memory. Each
|
|
48
|
+
// u32 slot holds two horizontally-adjacent texels of the REGION grid; every
|
|
49
|
+
// slot is written by exactly one thread, so there is no read-modify-write
|
|
50
|
+
// race. Skipped entirely for an in-focus tile (the load is the bulk of the
|
|
51
|
+
// cost the cache is meant to remove).
|
|
52
|
+
fn dof_populate_lds_coc(tile_blurred: bool, region_origin: vec2<i32>, lid: u32, dims: vec2<i32>) {
|
|
53
|
+
if (tile_blurred) {
|
|
54
|
+
for (var s: u32 = lid; s < LDS_U32; s = s + WG_THREADS) {
|
|
55
|
+
let si = i32(s);
|
|
56
|
+
let ry = si / ROW_U32;
|
|
57
|
+
let jx = si % ROW_U32;
|
|
58
|
+
let gy = region_origin.y + ry;
|
|
59
|
+
let gx = region_origin.x + 2 * jx;
|
|
60
|
+
let c0 = dof_load_coc(vec2<i32>(gx, gy), dims);
|
|
61
|
+
let c1 = dof_load_coc(vec2<i32>(gx + 1, gy), dims);
|
|
62
|
+
lds_coc[s] = pack2x16float(vec2<f32>(c0, c1));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Unconditional barrier (uniform control flow): every thread reaches it, so
|
|
66
|
+
// the cache is fully published before any thread reads it.
|
|
67
|
+
workgroupBarrier();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// CoC at a clamped pixel coordinate: the workgroup cache when inside the apron,
|
|
71
|
+
// a texture load for the rare far tap (|offset| in (APRON, MAXR]).
|
|
72
|
+
fn dof_read_coc(xt: vec2<i32>, region_origin: vec2<i32>) -> f32 {
|
|
73
|
+
let rc = xt - region_origin;
|
|
74
|
+
if (rc.x >= 0 && rc.x < REGION && rc.y >= 0 && rc.y < REGION) {
|
|
75
|
+
let pair = unpack2x16float(lds_coc[rc.y * ROW_U32 + (rc.x >> 1)]);
|
|
76
|
+
return select(pair.x, pair.y, (rc.x & 1) != 0);
|
|
77
|
+
}
|
|
78
|
+
return textureLoad(tColorCoc, xt, 0).a;
|
|
79
|
+
}
|
|
80
|
+
`
|
|
81
|
+
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_dof_raymarch_compute.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_dof_raymarch_compute.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js"],"names":[],"mappings":"AA+LA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,0CAFU,aAAa,CAMpB;8BA7N2B,kCAAkC"}
|
|
@@ -6,7 +6,8 @@ import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
|
6
6
|
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
7
|
import { chunk_dof_aperture_shape } from "../chunk_dof_aperture_shape.js";
|
|
8
8
|
import { chunk_dof_sample_offset } from "../chunk_dof_sample_offset.js";
|
|
9
|
-
import { DOF_FOCUS_CUTOFF,
|
|
9
|
+
import { DOF_FOCUS_CUTOFF, DOF_LDS_WORKGROUP, DOF_MAX_COC_RADIUS, DOF_TILE_SIZE } from "../DOF_CONFIG.js";
|
|
10
|
+
import { chunk_dof_lds_coc_cache } from "./chunk_dof_lds_coc_cache.js";
|
|
10
11
|
import { DOF_SETTINGS_STRUCT } from "./DOF_SETTINGS_STRUCT.js";
|
|
11
12
|
|
|
12
13
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -26,13 +27,7 @@ resources.createGroup()
|
|
|
26
27
|
.addStorageTexture("tOut", "rgba16float", "2d", "write-only")
|
|
27
28
|
;
|
|
28
29
|
|
|
29
|
-
// ── Workgroup-LDS cache geometry (derived; see DOF_LDS_* in DOF_CONFIG) ──
|
|
30
30
|
const WG = DOF_LDS_WORKGROUP; // 8 — workgroup side
|
|
31
|
-
const APRON = DOF_LDS_APRON; // 40 — cached skirt, full-res px
|
|
32
|
-
const REGION = WG + 2 * APRON; // 88 — cached square side (even)
|
|
33
|
-
const ROW_U32 = REGION / 2; // 44 — u32 per cached row (2 f16/u32)
|
|
34
|
-
const LDS_U32 = REGION * ROW_U32; // 3872 — total u32 (× 4 B = 15 488 B)
|
|
35
|
-
const WG_THREADS = WG * WG; // 64 — threads per workgroup
|
|
36
31
|
|
|
37
32
|
const body = CodeChunk.from(
|
|
38
33
|
//language=WGSL
|
|
@@ -42,24 +37,6 @@ const CUTOFF: f32 = ${DOF_FOCUS_CUTOFF};
|
|
|
42
37
|
const TILE_SIZE: i32 = ${DOF_TILE_SIZE};
|
|
43
38
|
const MAX_STEPS: u32 = 64u; // bitmask width (vec2<u32>); >= max STEPS (ultra = 48)
|
|
44
39
|
|
|
45
|
-
const WG: i32 = ${WG};
|
|
46
|
-
const APRON: i32 = ${APRON};
|
|
47
|
-
const REGION: i32 = ${REGION};
|
|
48
|
-
const ROW_U32: i32 = ${ROW_U32};
|
|
49
|
-
const LDS_U32: u32 = ${LDS_U32}u;
|
|
50
|
-
const WG_THREADS: u32 = ${WG_THREADS}u;
|
|
51
|
-
|
|
52
|
-
// Workgroup CoC cache: the REGION×REGION (tile + apron) signed-CoC field, two
|
|
53
|
-
// f16 packed per u32. The CoC texture is rgba16float, so packing its already-
|
|
54
|
-
// f16 .a channel round-trips losslessly — the cached march stays bit-identical
|
|
55
|
-
// to the texture march (and to the fragment reference).
|
|
56
|
-
var<workgroup> lds_coc: array<u32, LDS_U32>;
|
|
57
|
-
|
|
58
|
-
// Clamped CoC fetch used by the cooperative load.
|
|
59
|
-
fn dof_load_coc(p: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
60
|
-
return textureLoad(tColorCoc, clamp(p, vec2<i32>(0), dims - vec2<i32>(1)), 0).a;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
40
|
@compute @workgroup_size(${WG}, ${WG}, 1)
|
|
64
41
|
fn main(
|
|
65
42
|
@builtin(global_invocation_id) gid: vec3<u32>,
|
|
@@ -84,21 +61,7 @@ fn main(
|
|
|
84
61
|
// race. Skipped entirely for an in-focus tile (the load is the bulk of the
|
|
85
62
|
// cost the cache is meant to remove).
|
|
86
63
|
let region_origin = tile_origin - vec2<i32>(APRON);
|
|
87
|
-
|
|
88
|
-
for (var s: u32 = lid; s < LDS_U32; s = s + WG_THREADS) {
|
|
89
|
-
let si = i32(s);
|
|
90
|
-
let ry = si / ROW_U32;
|
|
91
|
-
let jx = si % ROW_U32;
|
|
92
|
-
let gy = region_origin.y + ry;
|
|
93
|
-
let gx = region_origin.x + 2 * jx;
|
|
94
|
-
let c0 = dof_load_coc(vec2<i32>(gx, gy), dims);
|
|
95
|
-
let c1 = dof_load_coc(vec2<i32>(gx + 1, gy), dims);
|
|
96
|
-
lds_coc[s] = pack2x16float(vec2<f32>(c0, c1));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// Unconditional barrier (uniform control flow): every thread reaches it, so
|
|
100
|
-
// the cache is fully published before any thread reads it.
|
|
101
|
-
workgroupBarrier();
|
|
64
|
+
dof_populate_lds_coc(tile_blurred, region_origin, lid, dims);
|
|
102
65
|
|
|
103
66
|
let pixel = vec2<i32>(gid.xy);
|
|
104
67
|
if (pixel.x >= dims.x || pixel.y >= dims.y) {
|
|
@@ -163,14 +126,7 @@ fn main(
|
|
|
163
126
|
let x = coord + dir * r;
|
|
164
127
|
let xt = vec2<i32>(clamp(x, vec2<f32>(0.0), dims_f - 1.0));
|
|
165
128
|
|
|
166
|
-
let
|
|
167
|
-
var s_coc: f32;
|
|
168
|
-
if (rc.x >= 0 && rc.x < REGION && rc.y >= 0 && rc.y < REGION) {
|
|
169
|
-
let pair = unpack2x16float(lds_coc[rc.y * ROW_U32 + (rc.x >> 1)]);
|
|
170
|
-
s_coc = select(pair.x, pair.y, (rc.x & 1) != 0);
|
|
171
|
-
} else {
|
|
172
|
-
s_coc = textureLoad(tColorCoc, xt, 0).a;
|
|
173
|
-
}
|
|
129
|
+
let s_coc = dof_read_coc(xt, region_origin);
|
|
174
130
|
let reach = abs(s_coc);
|
|
175
131
|
|
|
176
132
|
let cover = saturate(rho * reach - r + 1.0);
|
|
@@ -224,6 +180,7 @@ fn main(
|
|
|
224
180
|
}
|
|
225
181
|
`,
|
|
226
182
|
[
|
|
183
|
+
chunk_dof_lds_coc_cache,
|
|
227
184
|
chunk_dof_sample_offset,
|
|
228
185
|
chunk_dof_aperture_shape,
|
|
229
186
|
chunk_stbn_sample_vec2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_dof_slice_compute.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_dof_slice_compute.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js"],"names":[],"mappings":"AA+MA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uCAFU,aAAa,CAMpB;8BApO2B,kCAAkC"}
|
|
@@ -7,13 +7,13 @@ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderReso
|
|
|
7
7
|
import { chunk_dof_aperture_shape } from "../chunk_dof_aperture_shape.js";
|
|
8
8
|
import {
|
|
9
9
|
DOF_FOCUS_CUTOFF,
|
|
10
|
-
DOF_LDS_APRON,
|
|
11
10
|
DOF_LDS_WORKGROUP,
|
|
12
11
|
DOF_MAX_COC_RADIUS,
|
|
13
12
|
DOF_SLICE_DIRECTIONS,
|
|
14
13
|
DOF_SLICE_SLOPES,
|
|
15
14
|
DOF_TILE_SIZE,
|
|
16
15
|
} from "../DOF_CONFIG.js";
|
|
16
|
+
import { chunk_dof_lds_coc_cache } from "./chunk_dof_lds_coc_cache.js";
|
|
17
17
|
import { DOF_SETTINGS_STRUCT } from "./DOF_SETTINGS_STRUCT.js";
|
|
18
18
|
|
|
19
19
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -33,13 +33,7 @@ resources.createGroup()
|
|
|
33
33
|
.addStorageTexture("tOut", "rgba16float", "2d", "write-only")
|
|
34
34
|
;
|
|
35
35
|
|
|
36
|
-
// ── Workgroup-LDS cache geometry (shared with the 2D compute march) ──
|
|
37
36
|
const WG = DOF_LDS_WORKGROUP; // 8 — workgroup side
|
|
38
|
-
const APRON = DOF_LDS_APRON; // 40 — cached skirt, full-res px
|
|
39
|
-
const REGION = WG + 2 * APRON; // 88 — cached square side (even)
|
|
40
|
-
const ROW_U32 = REGION / 2; // 44 — u32 per cached row (2 f16/u32)
|
|
41
|
-
const LDS_U32 = REGION * ROW_U32; // 3872 — total u32 (× 4 B = 15 488 B)
|
|
42
|
-
const WG_THREADS = WG * WG; // 64 — threads per workgroup
|
|
43
37
|
|
|
44
38
|
const D = DOF_SLICE_DIRECTIONS; // aperture directions over [0, π)
|
|
45
39
|
const M = DOF_SLICE_SLOPES; // aperture radii ("slopes") per direction
|
|
@@ -52,37 +46,14 @@ const CUTOFF: f32 = ${DOF_FOCUS_CUTOFF};
|
|
|
52
46
|
const TILE_SIZE: i32 = ${DOF_TILE_SIZE};
|
|
53
47
|
const MAX_STEPS: u32 = 64u; // per-(slope) bitmask width (vec2<u32>); >= max N
|
|
54
48
|
|
|
55
|
-
const WG: i32 = ${WG};
|
|
56
|
-
const APRON: i32 = ${APRON};
|
|
57
|
-
const REGION: i32 = ${REGION};
|
|
58
|
-
const ROW_U32: i32 = ${ROW_U32};
|
|
59
|
-
const LDS_U32: u32 = ${LDS_U32}u;
|
|
60
|
-
const WG_THREADS: u32 = ${WG_THREADS}u;
|
|
61
|
-
|
|
62
49
|
const D: u32 = ${D}u; // directions over [0, π)
|
|
63
50
|
const M: u32 = ${M}u; // slopes per direction
|
|
64
51
|
|
|
65
|
-
// Workgroup CoC cache: the REGION×REGION (tile + apron) signed-CoC field, two
|
|
66
|
-
// f16 packed per u32 (the rgba16float source round-trips losslessly). Same as
|
|
67
|
-
// the 2D compute march; the slice march reads it once per step and tests every
|
|
68
|
-
// slope against that one read.
|
|
69
|
-
var<workgroup> lds_coc: array<u32, LDS_U32>;
|
|
70
|
-
|
|
71
|
-
// Clamped CoC fetch used by the cooperative load.
|
|
72
|
-
fn dof_load_coc(p: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
73
|
-
return textureLoad(tColorCoc, clamp(p, vec2<i32>(0), dims - vec2<i32>(1)), 0).a;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
52
|
// CoC at a march position: the workgroup cache when inside the apron, a texture
|
|
77
53
|
// load for the rare far tap (|offset| in (APRON, MAXR]).
|
|
78
54
|
fn slice_read_coc(pos: vec2<f32>, region_origin: vec2<i32>, dims: vec2<i32>, dims_f: vec2<f32>) -> f32 {
|
|
79
55
|
let xt = vec2<i32>(clamp(pos, vec2<f32>(0.0), dims_f - 1.0));
|
|
80
|
-
|
|
81
|
-
if (rc.x >= 0 && rc.x < REGION && rc.y >= 0 && rc.y < REGION) {
|
|
82
|
-
let pair = unpack2x16float(lds_coc[rc.y * ROW_U32 + (rc.x >> 1)]);
|
|
83
|
-
return select(pair.x, pair.y, (rc.x & 1) != 0);
|
|
84
|
-
}
|
|
85
|
-
return textureLoad(tColorCoc, xt, 0).a;
|
|
56
|
+
return dof_read_coc(xt, region_origin);
|
|
86
57
|
}
|
|
87
58
|
|
|
88
59
|
@compute @workgroup_size(${WG}, ${WG}, 1)
|
|
@@ -101,19 +72,7 @@ fn main(
|
|
|
101
72
|
|
|
102
73
|
// Cooperative load (skipped for an in-focus tile); unconditional barrier.
|
|
103
74
|
let region_origin = tile_origin - vec2<i32>(APRON);
|
|
104
|
-
|
|
105
|
-
for (var s: u32 = lid; s < LDS_U32; s = s + WG_THREADS) {
|
|
106
|
-
let si = i32(s);
|
|
107
|
-
let ry = si / ROW_U32;
|
|
108
|
-
let jx = si % ROW_U32;
|
|
109
|
-
let gy = region_origin.y + ry;
|
|
110
|
-
let gx = region_origin.x + 2 * jx;
|
|
111
|
-
let c0 = dof_load_coc(vec2<i32>(gx, gy), dims);
|
|
112
|
-
let c1 = dof_load_coc(vec2<i32>(gx + 1, gy), dims);
|
|
113
|
-
lds_coc[s] = pack2x16float(vec2<f32>(c0, c1));
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
workgroupBarrier();
|
|
75
|
+
dof_populate_lds_coc(tile_blurred, region_origin, lid, dims);
|
|
117
76
|
|
|
118
77
|
let pixel = vec2<i32>(gid.xy);
|
|
119
78
|
if (pixel.x >= dims.x || pixel.y >= dims.y) {
|
|
@@ -238,6 +197,7 @@ fn main(
|
|
|
238
197
|
}
|
|
239
198
|
`,
|
|
240
199
|
[
|
|
200
|
+
chunk_dof_lds_coc_cache,
|
|
241
201
|
chunk_dof_aperture_shape,
|
|
242
202
|
chunk_stbn_sample_vec2,
|
|
243
203
|
chunk_rgb_to_luminance,
|
|
@@ -27,21 +27,25 @@ export class GTAO {
|
|
|
27
27
|
* @param {number} options.input_depth this frame's depth
|
|
28
28
|
* @param {number} options.input_hzb hierarchical depth built from it
|
|
29
29
|
* @param {number} options.input_normal G-buffer normals
|
|
30
|
+
* @param {number} options.input_normal_previous last frame's G-buffer normals, at the size last frame was
|
|
31
|
+
* drawn at: which surface each history texel was written on
|
|
30
32
|
* @param {number} options.input_velocity per-pixel velocity, in this frame's pixels
|
|
31
33
|
* @param {number} options.input_occlusion depth-clip pass output: history confidence in r
|
|
32
34
|
* @param {number} options.frame_index the renderer's frame counter: drives the noise, the history
|
|
33
35
|
* ping-pong, and whether the history follows on from the last frame drawn
|
|
34
36
|
* @param {number} options.output G-buffer albedo; AO is blended into its alpha
|
|
35
37
|
* @param {number[]} options.resolution this frame's render size
|
|
36
|
-
* @returns {{visibility:number, occlusion:number, bent_normals:number}} the accumulated visibility
|
|
37
|
-
*
|
|
38
|
+
* @returns {{visibility:number, occlusion:number, bent_normals:number}} the accumulated visibility and
|
|
39
|
+
* bend (`rgba16float`), `output` after the composite, and the accumulated bent normals, octahedral in
|
|
40
|
+
* `rg16uint` as `input_normal` is
|
|
38
41
|
*/
|
|
39
|
-
graph_pass({ graph, camera, input_depth, input_hzb, input_normal, input_velocity, input_occlusion, frame_index, output, resolution }: {
|
|
42
|
+
graph_pass({ graph, camera, input_depth, input_hzb, input_normal, input_normal_previous, input_velocity, input_occlusion, frame_index, output, resolution }: {
|
|
40
43
|
graph: FrameGraph;
|
|
41
44
|
camera: number;
|
|
42
45
|
input_depth: number;
|
|
43
46
|
input_hzb: number;
|
|
44
47
|
input_normal: number;
|
|
48
|
+
input_normal_previous: number;
|
|
45
49
|
input_velocity: number;
|
|
46
50
|
input_occlusion: number;
|
|
47
51
|
frame_index: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GTAO.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GTAO.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO.js"],"names":[],"mappings":"AASA;;GAEG;AAEH;IAqBI;;;OAGG;IACH,uCAWC;IA7BD;;;;OAIG;IACH,eAFU,OAAO,CAEI;IA0BrB;;;;OAIG;IACH,0BAFW,eAAe,QAOzB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAjB+B,KAAK;QACT,MAAM,EAAtB,MAAM;QACU,WAAW,EAA3B,MAAM;QACU,SAAS,EAAzB,MAAM;QACU,YAAY,EAA5B,MAAM;QACU,qBAAqB,EAArC,MAAM;QAEU,cAAc,EAA9B,MAAM;QACU,eAAe,EAA/B,MAAM;QACU,WAAW,EAA3B,MAAM;QAEU,MAAM,EAAtB,MAAM;QACY,UAAU,EAA5B,MAAM,EAAE;QACN;QAAC,UAAU,EAAC,MAAM,CAAC;QAAC,SAAS,EAAC,MAAM,CAAC;QAAC,YAAY,EAAC,MAAM,CAAA;KAAC,CAqHtE;;CACJ;8BA3LY,OAAO,6CAA6C,EAAE,eAAe"}
|