@woosh/meep-engine 3.64.1 → 3.67.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/CHANGELOG.md +85 -0
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +5 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +39 -5
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts +65 -6
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.js +451 -101
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +4 -2
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +4 -2
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.d.ts +8 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +45 -10
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.js +237 -119
- package/src/engine/graphics/ecs/grass/GrassSpecies.d.ts +143 -0
- package/src/engine/graphics/ecs/grass/GrassSpecies.d.ts.map +1 -0
- package/src/engine/graphics/ecs/grass/GrassSpecies.js +189 -0
- package/src/engine/graphics/ecs/grass/GrassSurface.d.ts +25 -0
- package/src/engine/graphics/ecs/grass/GrassSurface.d.ts.map +1 -0
- package/src/engine/graphics/ecs/grass/GrassSurface.js +32 -0
- package/src/engine/graphics/ecs/grass/GroundCover.d.ts +68 -0
- package/src/engine/graphics/ecs/grass/GroundCover.d.ts.map +1 -0
- package/src/engine/graphics/ecs/grass/GroundCover.js +85 -0
- package/src/engine/graphics3/GrassSurfaceSystem.d.ts +153 -0
- package/src/engine/graphics3/GrassSurfaceSystem.d.ts.map +1 -0
- package/src/engine/graphics3/GrassSurfaceSystem.js +1076 -0
- package/src/engine/graphics3/GroundCoverSystem.d.ts +33 -0
- package/src/engine/graphics3/GroundCoverSystem.d.ts.map +1 -0
- package/src/engine/graphics3/GroundCoverSystem.js +58 -0
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +372 -110
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +6 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +9 -2
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +325 -140
- package/src/engine/network/sim/SimActionExecutor.d.ts +4 -1
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.js +65 -9
- package/src/engine/network/state/PredictionHistory.d.ts.map +1 -1
- package/src/engine/network/state/PredictionHistory.js +6 -1
- package/src/engine/network/time/AdaptiveRenderDelay.d.ts +25 -14
- package/src/engine/network/time/AdaptiveRenderDelay.d.ts.map +1 -1
- package/src/engine/network/time/AdaptiveRenderDelay.js +38 -20
- package/src/engine/network/time/RenderPlayout.d.ts +23 -3
- package/src/engine/network/time/RenderPlayout.d.ts.map +1 -1
- package/src/engine/network/time/RenderPlayout.js +40 -4
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/obstacle/chunk_fluid_obstacle_record.d.ts +5 -1
- package/src/engine/physics/fluid/obstacle/chunk_fluid_obstacle_record.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/chunk_fluid_obstacle_record.js +27 -1
- package/src/format/lut/cube/CubeLut.d.ts +38 -0
- package/src/format/lut/cube/CubeLut.d.ts.map +1 -0
- package/src/format/lut/cube/CubeLut.js +23 -0
- package/src/format/lut/cube/cube_read.d.ts +23 -0
- package/src/format/lut/cube/cube_read.d.ts.map +1 -0
- package/src/format/lut/cube/cube_read.js +199 -0
- package/src/format/lut/cube/cube_write.d.ts +15 -0
- package/src/format/lut/cube/cube_write.d.ts.map +1 -0
- package/src/format/lut/cube/cube_write.js +90 -0
- package/src/shade/device/shader/ShaderModuleCompiler.d.ts +2 -0
- package/src/shade/device/shader/ShaderModuleCompiler.d.ts.map +1 -1
- package/src/shade/device/shader/ShaderModuleCompiler.js +25 -2
- package/src/shade/playground/grass_surfaces/index.html +75 -0
- package/src/shade/playground/grass_surfaces/main.d.ts +2 -0
- package/src/shade/playground/grass_surfaces/main.d.ts.map +1 -0
- package/src/shade/playground/grass_surfaces/main.js +593 -0
- package/src/shade/playground/grass_surfaces/read_grass_surfaces.d.ts +62 -0
- package/src/shade/playground/grass_surfaces/read_grass_surfaces.d.ts.map +1 -0
- package/src/shade/playground/grass_surfaces/read_grass_surfaces.js +188 -0
- package/src/shade/playground/probe_clipmap/README.md +1 -0
- package/src/shade/playground/probe_clipmap/index.html +5 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +7 -0
- package/src/shade/playground/probe_clipmap_box/README.md +5 -1
- package/src/shade/playground/probe_clipmap_box/index.html +12 -0
- package/src/shade/playground/probe_clipmap_box/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap_box/main.js +15 -0
- package/src/shade/playground/probe_clipmap_box/scene.d.ts +8 -1
- package/src/shade/playground/probe_clipmap_box/scene.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap_box/scene.js +74 -6
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +59 -55
- package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts +73 -4
- package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/ColorGrade.js +113 -7
- package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.d.ts +12 -0
- package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.js +12 -0
- package/src/shade/renderer/deferred/tonemap/ToneMapper.d.ts +15 -1
- package/src/shade/renderer/deferred/tonemap/ToneMapper.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/ToneMapper.js +31 -3
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +25 -0
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +51 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.d.ts +2 -2
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.js +6 -3
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.d.ts +3 -2
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.js +7 -3
- package/src/shade/renderer/extension/ViewTextures.d.ts +12 -5
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +19 -5
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +3 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +6 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +7 -0
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +10 -0
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +7 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +46 -15
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts +3 -2
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js +3 -2
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_sort_morton.d.ts +22 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_sort_morton.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_sort_morton.js +247 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +50 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +8 -0
- 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 +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +12 -6
- 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 +35 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.js +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js +6 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts +6 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js +15 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +19 -2
- 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 +128 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +19 -1
- 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 +27 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts +19 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.js +35 -11
- 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 +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_box_cages.d.ts +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_box_cages.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_box_cages.js +174 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_parallax.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_parallax.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_parallax.js +54 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +8 -4
- 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 +10 -21
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +7 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +33 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/graph_probe_clipmap_want_meshlets.d.ts +28 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/graph_probe_clipmap_want_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/graph_probe_clipmap_want_meshlets.js +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +13 -9
- 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 +18 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +1 -1
- 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 +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +2 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +5 -3
- 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 +15 -30
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -1
- 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 +4 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +11 -0
- 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 +29 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_late.d.ts +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_late.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_late.js +126 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_meshlets.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_meshlets.js +221 -0
- package/src/shade/renderer/gpu_primitive/age_eviction/chunk_age_eviction.d.ts +40 -0
- package/src/shade/renderer/gpu_primitive/age_eviction/chunk_age_eviction.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/age_eviction/chunk_age_eviction.js +86 -0
- package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts +135 -0
- package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/GPUGrassBlades.js +676 -0
- package/src/shade/renderer/grass/blade/GRASS_BLADE.d.ts +145 -0
- package/src/shade/renderer/grass/blade/GRASS_BLADE.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/GRASS_BLADE.js +179 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade.d.ts +63 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade.js +244 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade_wind.d.ts +58 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade_wind.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/chunk_grass_blade_wind.js +174 -0
- package/src/shade/renderer/grass/blade/grass_blade_id_draw.d.ts +25 -0
- package/src/shade/renderer/grass/blade/grass_blade_id_draw.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/grass_blade_id_draw.js +133 -0
- package/src/shade/renderer/grass/blade/grass_blade_mechanics.d.ts +80 -0
- package/src/shade/renderer/grass/blade/grass_blade_mechanics.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/grass_blade_mechanics.js +92 -0
- package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +29 -0
- package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/grass_blade_resolve.js +175 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_draw_args.d.ts +14 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_draw_args.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_draw_args.js +45 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_expand.d.ts +61 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_expand.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/shader_grass_blade_expand.js +340 -0
- package/src/shade/renderer/grass/blade/shader_grass_cell_count.d.ts +46 -0
- package/src/shade/renderer/grass/blade/shader_grass_cell_count.d.ts.map +1 -0
- package/src/shade/renderer/grass/blade/shader_grass_cell_count.js +280 -0
- package/src/shade/renderer/grass/population/chunk_grass_population.d.ts +60 -0
- package/src/shade/renderer/grass/population/chunk_grass_population.d.ts.map +1 -0
- package/src/shade/renderer/grass/population/chunk_grass_population.js +171 -0
- package/src/shade/renderer/grass/press/GPUGrassPress.d.ts +99 -0
- package/src/shade/renderer/grass/press/GPUGrassPress.d.ts.map +1 -0
- package/src/shade/renderer/grass/press/GPUGrassPress.js +436 -0
- package/src/shade/renderer/grass/press/GRASS_PRESS.d.ts +179 -0
- package/src/shade/renderer/grass/press/GRASS_PRESS.d.ts.map +1 -0
- package/src/shade/renderer/grass/press/GRASS_PRESS.js +217 -0
- package/src/shade/renderer/grass/press/chunk_grass_press.d.ts +65 -0
- package/src/shade/renderer/grass/press/chunk_grass_press.d.ts.map +1 -0
- package/src/shade/renderer/grass/press/chunk_grass_press.js +296 -0
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +31 -0
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -0
- package/src/shade/renderer/grass/press/shader_grass_press_mark.js +169 -0
- package/src/shade/renderer/grass/press/shader_grass_press_stamp.d.ts +27 -0
- package/src/shade/renderer/grass/press/shader_grass_press_stamp.d.ts.map +1 -0
- package/src/shade/renderer/grass/press/shader_grass_press_stamp.js +183 -0
- package/src/shade/renderer/grass/surface/GPUGrassSurfaces.d.ts +193 -0
- package/src/shade/renderer/grass/surface/GPUGrassSurfaces.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/GPUGrassSurfaces.js +1253 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE.d.ts +211 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE.js +241 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE_VIEW.d.ts +82 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE_VIEW.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/GRASS_SURFACE_VIEW.js +111 -0
- package/src/shade/renderer/grass/surface/chunk_grass_column_cross.d.ts +39 -0
- package/src/shade/renderer/grass/surface/chunk_grass_column_cross.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_column_cross.js +85 -0
- package/src/shade/renderer/grass/surface/chunk_grass_directory.d.ts +29 -0
- package/src/shade/renderer/grass/surface/chunk_grass_directory.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_directory.js +112 -0
- package/src/shade/renderer/grass/surface/chunk_grass_slot.d.ts +27 -0
- package/src/shade/renderer/grass/surface/chunk_grass_slot.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_slot.js +50 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_frame.d.ts +21 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_frame.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_frame.js +41 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_window.d.ts +32 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_window.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surface_window.js +136 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surfel.d.ts +37 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surfel.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_surfel.js +85 -0
- package/src/shade/renderer/grass/surface/chunk_grass_tile.d.ts +25 -0
- package/src/shade/renderer/grass/surface/chunk_grass_tile.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/chunk_grass_tile.js +52 -0
- package/src/shade/renderer/grass/surface/shader_grass_directory_fill.d.ts +23 -0
- package/src/shade/renderer/grass/surface/shader_grass_directory_fill.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_directory_fill.js +87 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts +43 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +265 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake_command.d.ts +13 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake_command.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake_command.js +49 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_invalidate.d.ts +62 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_invalidate.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_invalidate.js +162 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_retire.d.ts +40 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_retire.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_retire.js +155 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_schedule.d.ts +19 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_schedule.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_schedule.js +58 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_want.d.ts +30 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_want.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_want.js +251 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_window_count.d.ts +21 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_window_count.d.ts.map +1 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_window_count.js +75 -0
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +35 -9
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +81 -11
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +4 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +4 -23
- package/src/shade/renderer/postprocess/velocity/view_velocity_matrices.d.ts +12 -0
- package/src/shade/renderer/postprocess/velocity/view_velocity_matrices.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/velocity/view_velocity_matrices.js +29 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +22 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +3 -0
- package/src/shade/renderer/scene/GRASS_SURFACE_PARAMS_STRUCT.d.ts +27 -0
- package/src/shade/renderer/scene/GRASS_SURFACE_PARAMS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/scene/GRASS_SURFACE_PARAMS_STRUCT.js +38 -0
- package/src/shade/renderer/scene/MESH_GROUND_COVER_STRUCT.d.ts +28 -0
- package/src/shade/renderer/scene/MESH_GROUND_COVER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/scene/MESH_GROUND_COVER_STRUCT.js +58 -0
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +8 -0
- package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.js +7 -0
- package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.d.ts +4 -4
- package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.js +86 -5
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +65 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +136 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +37 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +148 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_shape_record_line_span.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_shape_record_line_span.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_shape_record_line_span.js +169 -0
- package/src/shade/renderer/texture/atlas/chunk_tile_atlas_slot_origin.d.ts +18 -0
- package/src/shade/renderer/texture/atlas/chunk_tile_atlas_slot_origin.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/chunk_tile_atlas_slot_origin.js +28 -0
- package/src/shade/renderer/texture/atlas/tile_atlas_slot_shift.d.ts +13 -0
- package/src/shade/renderer/texture/atlas/tile_atlas_slot_shift.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/tile_atlas_slot_shift.js +22 -0
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +4 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +52 -5
- package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +164 -8
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +3 -1
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts.map +1 -1
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +3 -1
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +2 -1
- 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 +18 -13
- package/src/shade/renderer/wind/chunk_wind_field_sample_previous.d.ts +13 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_previous.d.ts.map +1 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_previous.js +23 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +1 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts.map +1 -1
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +6 -1
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts +11 -0
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
- package/src/shade/renderer/wind/wind_field_add_resources.js +15 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +2 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.d.ts +0 -11
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.js +0 -56
package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js
CHANGED
|
@@ -9,7 +9,7 @@ import { chunk_aabb3_distance_to_ray_v2 } from "../../../shader/chunk/geometry/a
|
|
|
9
9
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
10
10
|
import { ShaderResourceDescriptor } from "../../../shader/resource/ShaderResourceDescriptor.js";
|
|
11
11
|
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
12
|
-
import {
|
|
12
|
+
import { chunk_tile_atlas_slot_origin_shift } from "../../../texture/atlas/chunk_tile_atlas_slot_origin.js";
|
|
13
13
|
import {
|
|
14
14
|
BRICK_OCCUPANCY_BLOCK,
|
|
15
15
|
BRICK_TRACE_HIT,
|
|
@@ -73,47 +73,51 @@ export const BRICK_LEVELS_RESOURCE = ShaderResourceDescriptor.uniform("brick_lev
|
|
|
73
73
|
* A brick's distance at a point of its cell, where its slot sits in the atlas, and the field's gradient.
|
|
74
74
|
*
|
|
75
75
|
* ```wgsl
|
|
76
|
-
* fn brick_clipmap_sample(slot: u32, local: vec3<f32>, voxel: f32) -> f32 // local in voxels from the cell's corner
|
|
77
|
-
* fn brick_clipmap_slot_texel(slot: u32) -> vec3<u32> // the slot's texel 0 in the atlas
|
|
78
|
-
* fn brick_clipmap_normal(slot: u32, local: vec3<f32
|
|
76
|
+
* fn brick_clipmap_sample(slot: u32, local: vec3<f32>, voxel: f32, atlas_shift: u32) -> f32 // local in voxels from the cell's corner
|
|
77
|
+
* fn brick_clipmap_slot_texel(slot: u32, atlas_shift: u32) -> vec3<u32> // the slot's texel 0 in the atlas
|
|
78
|
+
* fn brick_clipmap_normal(slot: u32, local: vec3<f32>, atlas_shift: u32) -> vec3<f32> // out of the solid, unit length
|
|
79
79
|
* ```
|
|
80
80
|
*
|
|
81
81
|
* One hardware trilinear tap of the atlas at texel `slot_origin + 0.5 + local`, `local` clamped to the
|
|
82
82
|
* brick's [0, 7]: it never reads a neighbouring slot (§7.2). The gradient is a tetrahedral one, four
|
|
83
83
|
* taps half a voxel off, each clamped the same way.
|
|
84
84
|
*
|
|
85
|
+
* `atlas_shift` is the atlas's footprint, `GPUBrickClipmap#atlas_shift`, which every reader takes in its
|
|
86
|
+
* immediate data and passes down: a slot is found with shifts (`tile_atlas_slot_origin_shift`), with no
|
|
87
|
+
* texture query and no divide in front of the tap.
|
|
88
|
+
*
|
|
85
89
|
* @type {CodeChunk}
|
|
86
90
|
*/
|
|
87
91
|
export const chunk_brick_clipmap_sample = CodeChunk.from(
|
|
88
92
|
//language=WGSL
|
|
89
93
|
`
|
|
90
|
-
fn brick_clipmap_slot_texel(slot: u32) -> vec3<u32> {
|
|
91
|
-
return
|
|
94
|
+
fn brick_clipmap_slot_texel(slot: u32, atlas_shift: u32) -> vec3<u32> {
|
|
95
|
+
return tile_atlas_slot_origin_shift(slot, atlas_shift, vec3<u32>(${MESH_SDF_BRICK_TEXELS}u));
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
fn brick_clipmap_tap(slot: u32, local: vec3<f32
|
|
98
|
+
fn brick_clipmap_tap(slot: u32, local: vec3<f32>, atlas_shift: u32) -> f32 {
|
|
95
99
|
let atlas_size = textureDimensions(brick_atlas, 0);
|
|
96
|
-
let uvw = (vec3<f32>(brick_clipmap_slot_texel(slot)) + 0.5 + clamp(local, vec3<f32>(0.0), vec3<f32>(${MESH_SDF_BRICK_VOXELS}.0))) / vec3<f32>(atlas_size);
|
|
100
|
+
let uvw = (vec3<f32>(brick_clipmap_slot_texel(slot, atlas_shift)) + 0.5 + clamp(local, vec3<f32>(0.0), vec3<f32>(${MESH_SDF_BRICK_VOXELS}.0))) / vec3<f32>(atlas_size);
|
|
97
101
|
|
|
98
102
|
return textureSampleLevel(brick_atlas, brick_sampler, uvw, 0.0).r;
|
|
99
103
|
}
|
|
100
104
|
|
|
101
|
-
fn brick_clipmap_sample(slot: u32, local: vec3<f32>, voxel: f32) -> f32 {
|
|
105
|
+
fn brick_clipmap_sample(slot: u32, local: vec3<f32>, voxel: f32, atlas_shift: u32) -> f32 {
|
|
102
106
|
let band = BRICK_CLIPMAP_BAND_VOXELS * voxel;
|
|
103
107
|
|
|
104
|
-
return fma(brick_clipmap_tap(slot, local), 2.0 * band, -band);
|
|
108
|
+
return fma(brick_clipmap_tap(slot, local, atlas_shift), 2.0 * band, -band);
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
fn brick_clipmap_normal(slot: u32, local: vec3<f32
|
|
111
|
+
fn brick_clipmap_normal(slot: u32, local: vec3<f32>, atlas_shift: u32) -> vec3<f32> {
|
|
108
112
|
let a = vec3<f32>(1.0, -1.0, -1.0);
|
|
109
113
|
let b = vec3<f32>(-1.0, -1.0, 1.0);
|
|
110
114
|
let c = vec3<f32>(-1.0, 1.0, -1.0);
|
|
111
115
|
let d = vec3<f32>(1.0, 1.0, 1.0);
|
|
112
116
|
|
|
113
|
-
let gradient = a * brick_clipmap_tap(slot, local + 0.5 * a)
|
|
114
|
-
+ b * brick_clipmap_tap(slot, local + 0.5 * b)
|
|
115
|
-
+ c * brick_clipmap_tap(slot, local + 0.5 * c)
|
|
116
|
-
+ d * brick_clipmap_tap(slot, local + 0.5 * d);
|
|
117
|
+
let gradient = a * brick_clipmap_tap(slot, local + 0.5 * a, atlas_shift)
|
|
118
|
+
+ b * brick_clipmap_tap(slot, local + 0.5 * b, atlas_shift)
|
|
119
|
+
+ c * brick_clipmap_tap(slot, local + 0.5 * c, atlas_shift)
|
|
120
|
+
+ d * brick_clipmap_tap(slot, local + 0.5 * d, atlas_shift);
|
|
117
121
|
|
|
118
122
|
let length_sqr = dot(gradient, gradient);
|
|
119
123
|
|
|
@@ -122,7 +126,7 @@ fn brick_clipmap_normal(slot: u32, local: vec3<f32>) -> vec3<f32> {
|
|
|
122
126
|
}
|
|
123
127
|
`, [
|
|
124
128
|
chunk_brick_clipmap,
|
|
125
|
-
|
|
129
|
+
chunk_tile_atlas_slot_origin_shift,
|
|
126
130
|
]);
|
|
127
131
|
|
|
128
132
|
chunk_brick_clipmap_sample.requireResource(BRICK_ATLAS_TEXTURE_RESOURCE);
|
|
@@ -277,9 +281,11 @@ chunk_brick_clipmap_march.requireResource(BRICK_OCCUPANCY_TEXTURE_RESOURCE);
|
|
|
277
281
|
* The first surface along a ray through the brick clipmap (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.9).
|
|
278
282
|
*
|
|
279
283
|
* ```wgsl
|
|
280
|
-
* fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_max: f32, cascade_count: u32) -> BrickClipmapHit
|
|
284
|
+
* fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_max: f32, cascade_count: u32, atlas_shift: u32) -> BrickClipmapHit
|
|
281
285
|
* ```
|
|
282
286
|
*
|
|
287
|
+
* `atlas_shift` is the atlas's footprint, as {@link chunk_brick_clipmap_sample} takes it.
|
|
288
|
+
*
|
|
283
289
|
* The march (`brick_clipmap_march`) from `t_min`, at most {@link BRICK_TRACE_STEPS} steps, each
|
|
284
290
|
* reading in a brick one atlas tap:
|
|
285
291
|
* - EMPTY inside is a hit where the march stands: the ray is inside a solid, and its hit is a back
|
|
@@ -316,7 +322,7 @@ struct BrickClipmapHit {
|
|
|
316
322
|
cell_min: vec3<f32>,
|
|
317
323
|
}
|
|
318
324
|
|
|
319
|
-
fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_max: f32, cascade_count: u32) -> BrickClipmapHit {
|
|
325
|
+
fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_max: f32, cascade_count: u32, atlas_shift: u32) -> BrickClipmapHit {
|
|
320
326
|
var hit: BrickClipmapHit;
|
|
321
327
|
|
|
322
328
|
hit.kind = BRICK_TRACE_MISS;
|
|
@@ -361,7 +367,7 @@ fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_ma
|
|
|
361
367
|
}
|
|
362
368
|
|
|
363
369
|
let local = (march.position - march.cell_min) / march.voxel;
|
|
364
|
-
let distance = brick_clipmap_sample(march.entry, local, march.voxel);
|
|
370
|
+
let distance = brick_clipmap_sample(march.entry, local, march.voxel, atlas_shift);
|
|
365
371
|
|
|
366
372
|
if (distance < ${BRICK_TRACE_HIT_VOXELS} * march.voxel) {
|
|
367
373
|
hit.kind = BRICK_TRACE_HIT;
|
|
@@ -369,7 +375,7 @@ fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_ma
|
|
|
369
375
|
hit.cascade = march.cascade;
|
|
370
376
|
hit.slot = march.entry;
|
|
371
377
|
hit.position = march.position;
|
|
372
|
-
hit.normal = brick_clipmap_normal(march.entry, local);
|
|
378
|
+
hit.normal = brick_clipmap_normal(march.entry, local, atlas_shift);
|
|
373
379
|
hit.distance = distance;
|
|
374
380
|
hit.cell_min = march.cell_min;
|
|
375
381
|
|
|
@@ -396,7 +402,7 @@ fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_ma
|
|
|
396
402
|
* The finest cascade's signed distance at a point (§7.9), for probe relocation.
|
|
397
403
|
*
|
|
398
404
|
* ```wgsl
|
|
399
|
-
* fn brick_clipmap_distance(position: vec3<f32>, cascade_count: u32) -> f32
|
|
405
|
+
* fn brick_clipmap_distance(position: vec3<f32>, cascade_count: u32, atlas_shift: u32) -> f32
|
|
400
406
|
* ```
|
|
401
407
|
*
|
|
402
408
|
* The finest window holding the point answers, unless its cell is UNKNOWN, which defers to the
|
|
@@ -408,7 +414,7 @@ fn brick_clipmap_trace(origin: vec3<f32>, direction: vec3<f32>, t_min: f32, t_ma
|
|
|
408
414
|
export const chunk_brick_clipmap_distance = CodeChunk.from(
|
|
409
415
|
//language=WGSL
|
|
410
416
|
`
|
|
411
|
-
fn brick_clipmap_distance(position: vec3<f32>, cascade_count: u32) -> f32 {
|
|
417
|
+
fn brick_clipmap_distance(position: vec3<f32>, cascade_count: u32, atlas_shift: u32) -> f32 {
|
|
412
418
|
let count = min(cascade_count, ${CLIPMAP_LEVEL_LIMIT}u);
|
|
413
419
|
|
|
414
420
|
for (var c = 0u; c < count; c++) {
|
|
@@ -432,7 +438,7 @@ fn brick_clipmap_distance(position: vec3<f32>, cascade_count: u32) -> f32 {
|
|
|
432
438
|
return select(1.0, -1.0, entry == BRICK_CLIPMAP_EMPTY_INSIDE) * BRICK_CLIPMAP_BAND_VOXELS * voxel;
|
|
433
439
|
}
|
|
434
440
|
|
|
435
|
-
return brick_clipmap_sample(entry, (position - vec3<f32>(cell) * level.cell_size) / voxel, voxel);
|
|
441
|
+
return brick_clipmap_sample(entry, (position - vec3<f32>(cell) * level.cell_size) / voxel, voxel, atlas_shift);
|
|
436
442
|
}
|
|
437
443
|
|
|
438
444
|
return BRICK_CLIPMAP_BAND_VOXELS * brick_levels[max(count, 1u) - 1u].cell_size / ${MESH_SDF_BRICK_VOXELS}.0;
|
|
@@ -450,7 +456,7 @@ chunk_brick_clipmap_distance.requireResource(BRICK_MAP_TEXTURE_RESOURCE);
|
|
|
450
456
|
* no slope: for probe relocation (§8.4).
|
|
451
457
|
*
|
|
452
458
|
* ```wgsl
|
|
453
|
-
* fn brick_clipmap_gradient(position: vec3<f32>, cascade_count: u32) -> vec3<f32>
|
|
459
|
+
* fn brick_clipmap_gradient(position: vec3<f32>, cascade_count: u32, atlas_shift: u32) -> vec3<f32>
|
|
454
460
|
* ```
|
|
455
461
|
*
|
|
456
462
|
* Four taps of {@link chunk_brick_clipmap_distance} at the corners of a tetrahedron a voxel of the finest
|
|
@@ -463,7 +469,7 @@ chunk_brick_clipmap_distance.requireResource(BRICK_MAP_TEXTURE_RESOURCE);
|
|
|
463
469
|
export const chunk_brick_clipmap_gradient = CodeChunk.from(
|
|
464
470
|
//language=WGSL
|
|
465
471
|
`
|
|
466
|
-
fn brick_clipmap_gradient(position: vec3<f32>, cascade_count: u32) -> vec3<f32> {
|
|
472
|
+
fn brick_clipmap_gradient(position: vec3<f32>, cascade_count: u32, atlas_shift: u32) -> vec3<f32> {
|
|
467
473
|
let cascade = min(brick_clipmap_start(position, cascade_count), max(cascade_count, 1u) - 1u);
|
|
468
474
|
let h = brick_levels[cascade].cell_size / ${MESH_SDF_BRICK_VOXELS}.0;
|
|
469
475
|
|
|
@@ -472,10 +478,10 @@ fn brick_clipmap_gradient(position: vec3<f32>, cascade_count: u32) -> vec3<f32>
|
|
|
472
478
|
let k2 = vec3<f32>(-1.0, 1.0, -1.0);
|
|
473
479
|
let k3 = vec3<f32>(1.0, 1.0, 1.0);
|
|
474
480
|
|
|
475
|
-
let sum = k0 * brick_clipmap_distance(position + h * k0, cascade_count)
|
|
476
|
-
+ k1 * brick_clipmap_distance(position + h * k1, cascade_count)
|
|
477
|
-
+ k2 * brick_clipmap_distance(position + h * k2, cascade_count)
|
|
478
|
-
+ k3 * brick_clipmap_distance(position + h * k3, cascade_count);
|
|
481
|
+
let sum = k0 * brick_clipmap_distance(position + h * k0, cascade_count, atlas_shift)
|
|
482
|
+
+ k1 * brick_clipmap_distance(position + h * k1, cascade_count, atlas_shift)
|
|
483
|
+
+ k2 * brick_clipmap_distance(position + h * k2, cascade_count, atlas_shift)
|
|
484
|
+
+ k3 * brick_clipmap_distance(position + h * k3, cascade_count, atlas_shift);
|
|
479
485
|
|
|
480
486
|
let size = length(sum);
|
|
481
487
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_probe_clipmap_debug_brick_clipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_probe_clipmap_debug_brick_clipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.js"],"names":[],"mappings":"AAuHA;;;;;;;GAOG;AACH;IAN+B,KAAK,EAAzB,UAAU;IACc,IAAI,EAA5B,cAAc;IACI,UAAU,EAA5B,MAAM,EAAE;IACiB,aAAa,EAAtC,eAAe;IACb,MAAM,CAoClB;AA9DD;;;;;;;;GAQG;AACH,uDAFU,WAAW,CAWlB;yBAjGU,OAAO,iEAAiE,EAAE,UAAU;6BACpF,OAAO,iCAAiC,EAAE,cAAc;8BACxD,OAAO,6BAA6B,EAAE,eAAe;4BAjBtC,gCAAgC"}
|
|
@@ -34,6 +34,8 @@ const FAR = 1e4;
|
|
|
34
34
|
*/
|
|
35
35
|
const DEBUG_BRICK_CLIPMAP_SETTINGS = WebGPUStruct.from({
|
|
36
36
|
cascade_count: u32,
|
|
37
|
+
/** the brick atlas's footprint as shifts, `GPUBrickClipmap#atlas_shift` */
|
|
38
|
+
brick_atlas_shift: u32,
|
|
37
39
|
}, "ProbeClipmapDebugBrickClipmapSettings");
|
|
38
40
|
|
|
39
41
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -67,7 +69,7 @@ fn main(
|
|
|
67
69
|
) -> @location(0) vec4<f32> {
|
|
68
70
|
let ray = camera_ray_from_uv(uv, camera);
|
|
69
71
|
|
|
70
|
-
let hit = brick_clipmap_trace(ray.origin, ray.direction, 0.0, ${FAR.toFixed(1)}, settings.cascade_count);
|
|
72
|
+
let hit = brick_clipmap_trace(ray.origin, ray.direction, 0.0, ${FAR.toFixed(1)}, settings.cascade_count, settings.brick_atlas_shift);
|
|
71
73
|
|
|
72
74
|
if (hit.kind == BRICK_TRACE_MISS) {
|
|
73
75
|
return vec4<f32>(0.08, 0.08, 0.1, 1.0);
|
|
@@ -130,7 +132,7 @@ export function graph_probe_clipmap_debug_brick_clipmap({ graph, view, resolutio
|
|
|
130
132
|
assert.defined(brick_clipmap, 'brick_clipmap');
|
|
131
133
|
|
|
132
134
|
const data = {};
|
|
133
|
-
const settings = { cascade_count: brick_clipmap.cascade_count };
|
|
135
|
+
const settings = { cascade_count: brick_clipmap.cascade_count, brick_atlas_shift: brick_clipmap.atlas_shift };
|
|
134
136
|
|
|
135
137
|
const pass = graph.add("Probe Clipmap Debug / Brick Clipmap", data, (data, resources, context) => {
|
|
136
138
|
const output = resources.get(data.output);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_probe_clipmap_debug_brick_material.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_probe_clipmap_debug_brick_material.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js"],"names":[],"mappings":"AAwJA;;;;;;;;;GASG;AACH;IAR+B,KAAK,EAAzB,UAAU;IACc,IAAI,EAA5B,cAAc;IACI,UAAU,EAA5B,MAAM,EAAE;IACiB,aAAa,EAAtC,eAAe;IACqC,QAAQ,EAA5D;QAAC,cAAc,qBAA0B;KAAC;IACK,OAAO,EAAtD,qCAAqC;IACnC,MAAM,CAiDlB;;;;oDAxKS,MAAM;;;;;AAyFhB;;;;;;;;;;GAUG;AACH,wDAFU,WAAW,CAWlB;yBA5HU,OAAO,iEAAiE,EAAE,UAAU;6BACpF,OAAO,iCAAiC,EAAE,cAAc;8BACxD,OAAO,6BAA6B,EAAE,eAAe;4BAvBtC,gCAAgC"}
|
|
@@ -55,6 +55,8 @@ const DEBUG_BRICK_MATERIAL_SETTINGS = WebGPUStruct.from({
|
|
|
55
55
|
cascade_count: u32,
|
|
56
56
|
/** a {@link ProbeClipmapDebugBrickMaterialChannel} */
|
|
57
57
|
channel: u32,
|
|
58
|
+
/** the brick atlas's footprint as shifts, `GPUBrickClipmap#atlas_shift` */
|
|
59
|
+
brick_atlas_shift: u32,
|
|
58
60
|
}, "ProbeClipmapDebugBrickMaterialSettings");
|
|
59
61
|
|
|
60
62
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -84,7 +86,7 @@ fn main(
|
|
|
84
86
|
) -> @location(0) vec4<f32> {
|
|
85
87
|
let ray = camera_ray_from_uv(uv, camera);
|
|
86
88
|
|
|
87
|
-
let hit = brick_clipmap_trace(ray.origin, ray.direction, 0.0, ${FAR.toFixed(1)}, settings.cascade_count);
|
|
89
|
+
let hit = brick_clipmap_trace(ray.origin, ray.direction, 0.0, ${FAR.toFixed(1)}, settings.cascade_count, settings.brick_atlas_shift);
|
|
88
90
|
|
|
89
91
|
if (hit.kind == BRICK_TRACE_MISS) {
|
|
90
92
|
return vec4<f32>(0.08, 0.08, 0.1, 1.0);
|
|
@@ -101,7 +103,7 @@ fn main(
|
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
if (settings.channel == ${ProbeClipmapDebugBrickMaterialChannel.Albedo}u) {
|
|
104
|
-
let material = probe_clipmap_hit_material(hit.position, hit.normal, hit.cascade);
|
|
106
|
+
let material = probe_clipmap_hit_material(hit.position, hit.normal, hit.cascade, settings.brick_atlas_shift);
|
|
105
107
|
|
|
106
108
|
if (!material.found) {
|
|
107
109
|
// the source does not know the surface: the hit is black to the probes
|
|
@@ -111,7 +113,7 @@ fn main(
|
|
|
111
113
|
return vec4<f32>(material.albedo + material.emissive, 1.0);
|
|
112
114
|
}
|
|
113
115
|
|
|
114
|
-
let metal_rough = probe_clipmap_hit_metal_rough(hit.position, hit.normal, hit.cascade);
|
|
116
|
+
let metal_rough = probe_clipmap_hit_metal_rough(hit.position, hit.normal, hit.cascade, settings.brick_atlas_shift);
|
|
115
117
|
|
|
116
118
|
if (metal_rough.z == 0.0) {
|
|
117
119
|
return vec4<f32>(0.3, 0.0, 0.0, 1.0);
|
|
@@ -174,7 +176,7 @@ export function graph_probe_clipmap_debug_brick_material({
|
|
|
174
176
|
assert.enum(channel, ProbeClipmapDebugBrickMaterialChannel, 'channel');
|
|
175
177
|
|
|
176
178
|
const data = {};
|
|
177
|
-
const settings = { cascade_count: brick_clipmap.cascade_count, channel };
|
|
179
|
+
const settings = { cascade_count: brick_clipmap.cascade_count, channel, brick_atlas_shift: brick_clipmap.atlas_shift };
|
|
178
180
|
|
|
179
181
|
const pass = graph.add("Probe Clipmap Debug / Brick Material", data, (data, resources, context) => {
|
|
180
182
|
const output = resources.get(data.output);
|
package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUBrickMaterial.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAyBI;;;;OAIG;IACH;QAF2B,QAAQ,EAAxB,MAAM;OAsBhB;IAhCD;;;;OAIG;IACH,cAFU,YAAU,IAAI,CAEJ;IA6BpB;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,mCAMC;IAED;;;;;;;OAOG;IACH,4BAHW,UAAU,WACV,oBAAoB,QAuB9B;
|
|
1
|
+
{"version":3,"file":"GPUBrickMaterial.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAyBI;;;;OAIG;IACH;QAF2B,QAAQ,EAAxB,MAAM;OAsBhB;IAhCD;;;;OAIG;IACH,cAFU,YAAU,IAAI,CAEJ;IA6BpB;;OAEG;IACH,4BAEC;IAED;;;;;;OAMG;IACH,mCAMC;IAED;;;;;;;OAOG;IACH,4BAHW,UAAU,WACV,oBAAoB,QAuB9B;IAwCD,gBAQC;;CACJ;yBApLY,OAAO,iEAAiE,EAAE,UAAU;mCACpF,OAAO,6BAA6B,EAAE,oBAAoB;+BANxC,0CAA0C"}
|
|
@@ -51,7 +51,7 @@ export class GPUBrickMaterial {
|
|
|
51
51
|
|
|
52
52
|
#data = { take: -1, staging: -1, state: -1 };
|
|
53
53
|
|
|
54
|
-
#settings = { ring_capacity: 0, resolution: 0 };
|
|
54
|
+
#settings = { ring_capacity: 0, resolution: 0, brick_atlas_shift: 0 };
|
|
55
55
|
|
|
56
56
|
#bindings = {};
|
|
57
57
|
|
|
@@ -171,6 +171,7 @@ export class GPUBrickMaterial {
|
|
|
171
171
|
|
|
172
172
|
settings.ring_capacity = frame.ring_capacity;
|
|
173
173
|
settings.resolution = frame.resolution;
|
|
174
|
+
settings.brick_atlas_shift = frame.clipmap.atlas_shift;
|
|
174
175
|
b.settings = settings;
|
|
175
176
|
|
|
176
177
|
shader_brick_material_gather.dispatchIndirect({
|
package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts
CHANGED
|
@@ -17,13 +17,14 @@ export const BRICK_MATERIAL_EMISSIVE_RESOURCE: ShaderResourceDescriptor;
|
|
|
17
17
|
*
|
|
18
18
|
* ```wgsl
|
|
19
19
|
* fn brick_material_tile(slot: u32) -> vec3<u32>
|
|
20
|
-
* fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
20
|
+
* fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialCorners
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
23
|
* `brick_material_tile` is the slot's tile's origin in the planes. `local` is a point by the surface in
|
|
24
24
|
* voxels from the cell's corner, a hit's position, and `normal` the field's normal there. Surfaces
|
|
25
25
|
* within {@link BRICK_TRACE_HIT_VOXELS} of each other are one: a ray stands on a surface from anywhere
|
|
26
|
-
* that far out of it, so it cannot tell closer ones apart.
|
|
26
|
+
* that far out of it, so it cannot tell closer ones apart. `atlas_shift` is the brick atlas's footprint, as
|
|
27
|
+
* `chunk_brick_clipmap_sample` takes it; the material planes' own footprint is read off them, once a read.
|
|
27
28
|
*
|
|
28
29
|
* @type {CodeChunk}
|
|
29
30
|
*/
|
|
@@ -33,7 +34,7 @@ export const chunk_brick_material_corners: CodeChunk;
|
|
|
33
34
|
* (`surface_material_surface`):
|
|
34
35
|
*
|
|
35
36
|
* ```wgsl
|
|
36
|
-
* fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
37
|
+
* fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialSurface
|
|
37
38
|
* ```
|
|
38
39
|
*
|
|
39
40
|
* @type {CodeChunk}
|
|
@@ -45,7 +46,7 @@ export const chunk_brick_material_surface: CodeChunk;
|
|
|
45
46
|
* average, over the reads a probe's rays make:
|
|
46
47
|
*
|
|
47
48
|
* ```wgsl
|
|
48
|
-
* fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32) -> SurfaceMaterialSurface
|
|
49
|
+
* fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32, atlas_shift: u32) -> SurfaceMaterialSurface
|
|
49
50
|
* ```
|
|
50
51
|
*
|
|
51
52
|
* @type {CodeChunk}
|
|
@@ -56,7 +57,7 @@ export const chunk_brick_material_surface_pick: CodeChunk;
|
|
|
56
57
|
* texels {@link chunk_brick_material_surface} takes:
|
|
57
58
|
*
|
|
58
59
|
* ```wgsl
|
|
59
|
-
* fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
60
|
+
* fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialMetalRough
|
|
60
61
|
* ```
|
|
61
62
|
*
|
|
62
63
|
* @type {CodeChunk}
|
package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_brick_material.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js"],"names":[],"mappings":"AAgBA;;GAEG;AACH,6CAFU,wBAAwB,CAE0F;AAE5H;;GAEG;AACH,kDAFU,wBAAwB,CAEoG;AAEtI;;GAEG;AACH,+CAFU,wBAAwB,CAE8F;AAEhI
|
|
1
|
+
{"version":3,"file":"chunk_brick_material.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js"],"names":[],"mappings":"AAgBA;;GAEG;AACH,6CAFU,wBAAwB,CAE0F;AAE5H;;GAEG;AACH,kDAFU,wBAAwB,CAEoG;AAEtI;;GAEG;AACH,+CAFU,wBAAwB,CAE8F;AAEhI;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAFU,SAAS,CAqBZ;AAIP;;;;;;;;;GASG;AACH,2CAFU,SAAS,CAWZ;AAIP;;;;;;;;;;GAUG;AACH,gDAFU,SAAS,CAaZ;AAIP;;;;;;;;;GASG;AACH,+CAFU,SAAS,CAWZ;yCAtIkC,sDAAsD;0BADrE,uCAAuC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js
CHANGED
|
@@ -36,13 +36,14 @@ export const BRICK_MATERIAL_EMISSIVE_RESOURCE = ShaderResourceDescriptor.texture
|
|
|
36
36
|
*
|
|
37
37
|
* ```wgsl
|
|
38
38
|
* fn brick_material_tile(slot: u32) -> vec3<u32>
|
|
39
|
-
* fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
39
|
+
* fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialCorners
|
|
40
40
|
* ```
|
|
41
41
|
*
|
|
42
42
|
* `brick_material_tile` is the slot's tile's origin in the planes. `local` is a point by the surface in
|
|
43
43
|
* voxels from the cell's corner, a hit's position, and `normal` the field's normal there. Surfaces
|
|
44
44
|
* within {@link BRICK_TRACE_HIT_VOXELS} of each other are one: a ray stands on a surface from anywhere
|
|
45
|
-
* that far out of it, so it cannot tell closer ones apart.
|
|
45
|
+
* that far out of it, so it cannot tell closer ones apart. `atlas_shift` is the brick atlas's footprint, as
|
|
46
|
+
* `chunk_brick_clipmap_sample` takes it; the material planes' own footprint is read off them, once a read.
|
|
46
47
|
*
|
|
47
48
|
* @type {CodeChunk}
|
|
48
49
|
*/
|
|
@@ -55,11 +56,11 @@ fn brick_material_tile(slot: u32) -> vec3<u32> {
|
|
|
55
56
|
return tile_atlas_slot_origin(slot, textureDimensions(brick_material_albedo_codes, 0).xy / t, vec3<u32>(t));
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
59
|
-
let point = surface_material_point(local, brick_clipmap_sample(slot, local, 1.0), normal);
|
|
59
|
+
fn brick_material_corners(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialCorners {
|
|
60
|
+
let point = surface_material_point(local, brick_clipmap_sample(slot, local, 1.0, atlas_shift), normal);
|
|
60
61
|
let present = surface_material_present(brick_material_albedo_codes, brick_material_tile(slot) + surface_material_base(point));
|
|
61
62
|
|
|
62
|
-
return surface_material_corners(brick_atlas, brick_clipmap_slot_texel(slot), point, present, normal, ${BRICK_TRACE_HIT_VOXELS});
|
|
63
|
+
return surface_material_corners(brick_atlas, brick_clipmap_slot_texel(slot, atlas_shift), point, present, normal, ${BRICK_TRACE_HIT_VOXELS});
|
|
63
64
|
}
|
|
64
65
|
`, [
|
|
65
66
|
chunk_surface_material_read,
|
|
@@ -74,7 +75,7 @@ chunk_brick_material_corners.requireResource(BRICK_MATERIAL_ALBEDO_RESOURCE);
|
|
|
74
75
|
* (`surface_material_surface`):
|
|
75
76
|
*
|
|
76
77
|
* ```wgsl
|
|
77
|
-
* fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
78
|
+
* fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialSurface
|
|
78
79
|
* ```
|
|
79
80
|
*
|
|
80
81
|
* @type {CodeChunk}
|
|
@@ -82,8 +83,8 @@ chunk_brick_material_corners.requireResource(BRICK_MATERIAL_ALBEDO_RESOURCE);
|
|
|
82
83
|
export const chunk_brick_material_surface = CodeChunk.from(
|
|
83
84
|
//language=WGSL
|
|
84
85
|
`
|
|
85
|
-
fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
86
|
-
return surface_material_surface(brick_atlas, brick_material_albedo_codes, brick_material_emissive_codes, brick_material_tile(slot), brick_material_corners(slot, local, normal));
|
|
86
|
+
fn brick_material_surface(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialSurface {
|
|
87
|
+
return surface_material_surface(brick_atlas, brick_material_albedo_codes, brick_material_emissive_codes, brick_material_tile(slot), brick_material_corners(slot, local, normal, atlas_shift));
|
|
87
88
|
}
|
|
88
89
|
`, [
|
|
89
90
|
chunk_brick_material_corners,
|
|
@@ -98,7 +99,7 @@ chunk_brick_material_surface.requireResource(BRICK_MATERIAL_EMISSIVE_RESOURCE);
|
|
|
98
99
|
* average, over the reads a probe's rays make:
|
|
99
100
|
*
|
|
100
101
|
* ```wgsl
|
|
101
|
-
* fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32) -> SurfaceMaterialSurface
|
|
102
|
+
* fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32, atlas_shift: u32) -> SurfaceMaterialSurface
|
|
102
103
|
* ```
|
|
103
104
|
*
|
|
104
105
|
* @type {CodeChunk}
|
|
@@ -106,8 +107,8 @@ chunk_brick_material_surface.requireResource(BRICK_MATERIAL_EMISSIVE_RESOURCE);
|
|
|
106
107
|
export const chunk_brick_material_surface_pick = CodeChunk.from(
|
|
107
108
|
//language=WGSL
|
|
108
109
|
`
|
|
109
|
-
fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32) -> SurfaceMaterialSurface {
|
|
110
|
-
let corners = brick_material_corners(slot, local, normal);
|
|
110
|
+
fn brick_material_surface_pick(slot: u32, local: vec3<f32>, normal: vec3<f32>, u: f32, atlas_shift: u32) -> SurfaceMaterialSurface {
|
|
111
|
+
let corners = brick_material_corners(slot, local, normal, atlas_shift);
|
|
111
112
|
|
|
112
113
|
return surface_material_surface_at(brick_material_albedo_codes, brick_material_emissive_codes, brick_material_tile(slot), corners, surface_material_pick(brick_atlas, corners, u));
|
|
113
114
|
}
|
|
@@ -123,7 +124,7 @@ chunk_brick_material_surface_pick.requireResource(BRICK_MATERIAL_EMISSIVE_RESOUR
|
|
|
123
124
|
* texels {@link chunk_brick_material_surface} takes:
|
|
124
125
|
*
|
|
125
126
|
* ```wgsl
|
|
126
|
-
* fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
127
|
+
* fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialMetalRough
|
|
127
128
|
* ```
|
|
128
129
|
*
|
|
129
130
|
* @type {CodeChunk}
|
|
@@ -131,8 +132,8 @@ chunk_brick_material_surface_pick.requireResource(BRICK_MATERIAL_EMISSIVE_RESOUR
|
|
|
131
132
|
export const chunk_brick_material_metal_rough = CodeChunk.from(
|
|
132
133
|
//language=WGSL
|
|
133
134
|
`
|
|
134
|
-
fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32
|
|
135
|
-
return surface_material_metal_rough(brick_atlas, brick_material_metal_rough_codes, brick_material_tile(slot), brick_material_corners(slot, local, normal));
|
|
135
|
+
fn brick_material_metal_rough(slot: u32, local: vec3<f32>, normal: vec3<f32>, atlas_shift: u32) -> SurfaceMaterialMetalRough {
|
|
136
|
+
return surface_material_metal_rough(brick_atlas, brick_material_metal_rough_codes, brick_material_tile(slot), brick_material_corners(slot, local, normal, atlas_shift));
|
|
136
137
|
}
|
|
137
138
|
`, [
|
|
138
139
|
chunk_brick_material_corners,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick_material_gather.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js"],"names":[],"mappings":"AA0CA;;GAEG;AACH,6CAFU,YAAY,
|
|
1
|
+
{"version":3,"file":"shader_brick_material_gather.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js"],"names":[],"mappings":"AA0CA;;GAEG;AACH,6CAFU,YAAY,CASY;AAmClC;;;;;;;;;;;;;;;;;GAiBG;AACH,2CAFU,aAAa,CA0EpB;6BA5J0B,sCAAsC;8BALrC,kCAAkC"}
|
|
@@ -48,6 +48,8 @@ export const BRICK_MATERIAL_GATHER_SETTINGS = WebGPUStruct.from({
|
|
|
48
48
|
ring_capacity: u32,
|
|
49
49
|
/** cells a cascade's window has a side */
|
|
50
50
|
resolution: u32,
|
|
51
|
+
/** the brick atlas's footprint as shifts, `GPUBrickClipmap#atlas_shift` */
|
|
52
|
+
brick_atlas_shift: u32,
|
|
51
53
|
}, "BrickMaterialGatherSettings");
|
|
52
54
|
|
|
53
55
|
/**
|
|
@@ -133,8 +135,8 @@ fn main(
|
|
|
133
135
|
|
|
134
136
|
// in voxels: a voxel of 1
|
|
135
137
|
let local = vec3<f32>(t);
|
|
136
|
-
let d = brick_clipmap_sample(taken.entry, local, 1.0);
|
|
137
|
-
let n = brick_clipmap_normal(taken.entry, local);
|
|
138
|
+
let d = brick_clipmap_sample(taken.entry, local, 1.0, settings.brick_atlas_shift);
|
|
139
|
+
let n = brick_clipmap_normal(taken.entry, local, settings.brick_atlas_shift);
|
|
138
140
|
|
|
139
141
|
if (!(any(n != vec3<f32>(0.0)) && abs(d) * max(max(abs(n.x), abs(n.y)), abs(n.z)) < 1.0)) {
|
|
140
142
|
return;
|
|
@@ -31,8 +31,11 @@
|
|
|
31
31
|
* **A frame's lifetime** ({@link graph_update}, §8.3, §8.5): retire frees the probes whose points left
|
|
32
32
|
* their windows and those the last frame's schedule evicted, the wants mark the cages they read, admit
|
|
33
33
|
* gives each wanted point without a probe a NEW one, schedule sets the period T from the probes waiting
|
|
34
|
-
* for an update and the next frame's eviction from the pressure on the slots
|
|
35
|
-
* the due passes list the frame's updates, NEW probes first.
|
|
34
|
+
* for an update and the idle ones, and the next frame's eviction from the pressure on the slots
|
|
35
|
+
* (`PROBE_FREE_SLACK`), and the due passes list the frame's updates, NEW probes first. Every live probe
|
|
36
|
+
* keeps being updated: one a want waits on every period, an idle one once in
|
|
37
|
+
* `probe_clipmap_idle_periods` of them, so the light a probe holds is no older than that whether or not
|
|
38
|
+
* anything wants it.
|
|
36
39
|
*
|
|
37
40
|
* **The frame's rays** (§8.6): the lifetime's last passes lay them out. Each listed probe's rays this update
|
|
38
41
|
* are a count the budget does not scale (a uniform update's R, a DEAD probe's `PROBE_DEAD_RAYS`) and a request it
|
|
@@ -136,6 +139,20 @@ export class GPUProbeClipmap {
|
|
|
136
139
|
* @returns {Object} bindings
|
|
137
140
|
*/
|
|
138
141
|
write_sampling_bindings(bindings: any): any;
|
|
142
|
+
/**
|
|
143
|
+
* Put what a want recorded after the frame's lifetime binds into `bindings`, under the names
|
|
144
|
+
* `chunk_probe_clipmap_want` reads them by, with its settings as `settings`: the levels, and the late
|
|
145
|
+
* wanted list and bits in place of the frame's. The next frame's lifetime takes what was wanted there into its
|
|
146
|
+
* own wanted set, where its windows still hold the point (§8.3): a probe such a want asks for is admitted
|
|
147
|
+
* a frame later than one the frame's own wants ask for.
|
|
148
|
+
*
|
|
149
|
+
* For a pass that runs after this frame's lifetime; take them each frame. Asking is what makes the next
|
|
150
|
+
* lifetime take the late set.
|
|
151
|
+
*
|
|
152
|
+
* @param {Object} bindings
|
|
153
|
+
* @returns {Object} bindings
|
|
154
|
+
*/
|
|
155
|
+
write_want_bindings(bindings: any): any;
|
|
139
156
|
/**
|
|
140
157
|
* @returns {GPUTexture}
|
|
141
158
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"AA6HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH;IAmTI;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAjB2B,aAAa,EAA7B,MAAM;QAEU,UAAU,EAA1B,MAAM;QAKU,OAAO,EAAvB,MAAM;QACU,mBAAmB,EAAnC,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QACW,cAAc,EAA/B,OAAO;QAES,KAAK,EAArB,MAAM;QACU,QAAQ,EAAxB,MAAM;OAmHhB;IAtbD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,kBAHU,MAAM,CAGR;IAER;;;;OAIG;IACH,8BAHU,MAAM,CAGI;IAEpB;;;;OAIG;IACH,2BAHU,MAAM,CAGC;IAEjB;;;;;OAKG;IACH,yBAHU,OAAO,CAGF;IAEf;;;;OAIG;IACH,gBAHU,MAAM,CAGV;IAyYN;;;;;;;;OAQG;IACH,4CAUC;IAED;;;;;;;;;;;;OAYG;IACH,wCAuBC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,sBAEC;IAGD;;;OAGG;IACH,0BAEC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED;;;;;;;OAOG;IACH,SAJW,MAAM,KACN,MAAM,KACN,MAAM,QAkChB;IAED;;;;;;;;OAQG;IACH,sBAFW,eAAe,QA+BzB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;QAzB+B,KAAK,EAAzB,UAAU;QACiB,KAAK,EAAhC,iBAAiB;QACD,eAAe,EAA/B,MAAM;QACU,UAAU,EAA1B,MAAM;QACU,cAAc,EAA9B,MAAM;QACyD,aAAa,EAA5E,OAAO,6BAA6B,EAAE,eAAe;QAErC,MAAM,EAAtB,MAAM;QAE+D,KAAK,EAA1E,OAAO,mCAAmC,EAAE,eAAe;QAEP,QAAQ,EAA5D;YAAC,cAAc,qBAA0B;SAAC;QAEzB,kBAAkB,EAAnC,OAAO;QAEU,cAAc,EAA/B,OAAO;QAEiC,QAAQ,EAAhD;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC;QAEL,YAAY,EAArC,eAAe;QACU,eAAe,EAAxC,eAAe;QACC,QAAQ,EAAxB,MAAM;aAuQhB;IAkiBD,gBAcC;;CACJ;mCAtkDY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;gCACpF,OAAO,8BAA8B,EAAE,uBAAuB,GAAC,OAAO,2BAA2B,EAAE,oBAAoB"}
|