@woosh/meep-engine 3.64.0 → 3.65.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/graphics/texture/sampler/exr_to_sampler2d.d.ts +27 -0
- package/src/engine/graphics/texture/sampler/exr_to_sampler2d.d.ts.map +1 -0
- package/src/engine/graphics/texture/sampler/exr_to_sampler2d.js +91 -0
- package/src/engine/graphics/texture/sampler/sampler2d_to_exr.d.ts +23 -0
- package/src/engine/graphics/texture/sampler/sampler2d_to_exr.d.ts.map +1 -0
- package/src/engine/graphics/texture/sampler/sampler2d_to_exr.js +64 -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/image/exr/ExrCompression.d.ts +22 -0
- package/src/format/image/exr/ExrCompression.d.ts.map +1 -0
- package/src/format/image/exr/ExrCompression.js +27 -0
- package/src/format/image/exr/ExrImage.d.ts +32 -0
- package/src/format/image/exr/ExrImage.d.ts.map +1 -0
- package/src/format/image/exr/ExrImage.js +32 -0
- package/src/format/image/exr/ExrPixelType.d.ts +13 -0
- package/src/format/image/exr/ExrPixelType.d.ts.map +1 -0
- package/src/format/image/exr/ExrPixelType.js +18 -0
- package/src/format/image/exr/exr_compare_names.d.ts +16 -0
- package/src/format/image/exr/exr_compare_names.d.ts.map +1 -0
- package/src/format/image/exr/exr_compare_names.js +25 -0
- package/src/format/image/exr/exr_constants.d.ts +49 -0
- package/src/format/image/exr/exr_constants.d.ts.map +1 -0
- package/src/format/image/exr/exr_constants.js +56 -0
- package/src/format/image/exr/exr_read.d.ts +32 -0
- package/src/format/image/exr/exr_read.d.ts.map +1 -0
- package/src/format/image/exr/exr_read.js +531 -0
- package/src/format/image/exr/exr_sample_bits.d.ts +16 -0
- package/src/format/image/exr/exr_sample_bits.d.ts.map +1 -0
- package/src/format/image/exr/exr_sample_bits.js +21 -0
- package/src/format/image/exr/exr_scanlines_per_chunk.d.ts +17 -0
- package/src/format/image/exr/exr_scanlines_per_chunk.d.ts.map +1 -0
- package/src/format/image/exr/exr_scanlines_per_chunk.js +31 -0
- package/src/format/image/exr/exr_write.d.ts +27 -0
- package/src/format/image/exr/exr_write.d.ts.map +1 -0
- package/src/format/image/exr/exr_write.js +378 -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/index.html +5 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +34 -1
- 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 +47 -43
- 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 -13
- 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 -15
- 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 +3 -3
- 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 +18 -14
- 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_accumulate.d.ts +7 -3
- 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 +28 -17
- 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_project.d.ts +18 -18
- 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 +44 -48
- 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/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/filter/chunk_multiscale_mean.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +21 -3
- 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
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { CAMERA_RESOURCE } from "../../camera/CAMERA_RESOURCE.js";
|
|
2
|
+
import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
3
|
+
import { COLLECTION_U32_STRUCT_WRITE } from "../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
4
|
+
import { chunk_slot_stack } from "../../gpu_primitive/slot_stack/chunk_slot_stack.js";
|
|
5
|
+
import { TRANSFORMS_TABLE } from "../../scene/chunk_scene_database_access.js";
|
|
6
|
+
import { SCENE_DATABASE_RESOURCE } from "../../scene/SCENE_DATABASE_RESOURCE.js";
|
|
7
|
+
import { chunk_aabb3_from_transformed_corners } from "../../shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js";
|
|
8
|
+
import { chunk_aabb3_intersects_frustum } from "../../shader/chunk/geometry/aabb3/chunk_aabb3_intersects_frustum.js";
|
|
9
|
+
import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
10
|
+
import { chunk_lower_bound_branchless } from "../../shader/chunk/math/chunk_lower_bound_branchless.js";
|
|
11
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
12
|
+
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
13
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
14
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
15
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
16
|
+
import { chunk_grass_directory } from "./chunk_grass_directory.js";
|
|
17
|
+
import { chunk_grass_surface_frame } from "./chunk_grass_surface_frame.js";
|
|
18
|
+
import { chunk_grass_surface_window } from "./chunk_grass_surface_window.js";
|
|
19
|
+
import {
|
|
20
|
+
GRASS_COLUMN_CROSSINGS,
|
|
21
|
+
GRASS_POOL_FREE_COUNT,
|
|
22
|
+
GRASS_POOL_STARVED,
|
|
23
|
+
GRASS_SLOT_HEIGHT_MAX,
|
|
24
|
+
GRASS_SLOT_HEIGHT_MIN,
|
|
25
|
+
GRASS_SLOT_LAYER_COUNT,
|
|
26
|
+
GRASS_SLOT_LEVEL_LAYER,
|
|
27
|
+
GRASS_SLOT_NORMAL_SPREAD,
|
|
28
|
+
GRASS_SLOT_STATE,
|
|
29
|
+
GRASS_SLOT_STATE_BAKED,
|
|
30
|
+
GRASS_SLOT_STATE_ORPHAN,
|
|
31
|
+
GRASS_SLOT_STATE_PENDING,
|
|
32
|
+
GRASS_SLOT_STATE_STALE,
|
|
33
|
+
GRASS_SLOT_SURFACE,
|
|
34
|
+
GRASS_SLOT_SURFEL_COUNT,
|
|
35
|
+
GRASS_SLOT_TILE_X,
|
|
36
|
+
GRASS_SLOT_TILE_Z,
|
|
37
|
+
GRASS_SLOT_WANTED_FRAME
|
|
38
|
+
} from "./GRASS_SURFACE.js";
|
|
39
|
+
import {
|
|
40
|
+
GRASS_DIRECTORY_RESOURCE,
|
|
41
|
+
GRASS_POOL_RESOURCE,
|
|
42
|
+
GRASS_SURFACE_VIEW_SETTINGS,
|
|
43
|
+
GRASS_SURFACES_RESOURCE
|
|
44
|
+
} from "./GRASS_SURFACE_VIEW.js";
|
|
45
|
+
|
|
46
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
47
|
+
|
|
48
|
+
resources.setImmediate("settings", GRASS_SURFACE_VIEW_SETTINGS);
|
|
49
|
+
|
|
50
|
+
resources.createGroup()
|
|
51
|
+
.add(CAMERA_RESOURCE)
|
|
52
|
+
.add(SCENE_DATABASE_RESOURCE)
|
|
53
|
+
.add(GRASS_SURFACES_RESOURCE)
|
|
54
|
+
.addStorageBuffer("prefix_sums", COLLECTION_U32_STRUCT_READ)
|
|
55
|
+
.add(GRASS_POOL_RESOURCE)
|
|
56
|
+
.add(GRASS_DIRECTORY_RESOURCE)
|
|
57
|
+
.addStorageBuffer("grass_free", WebGPUArray.u32, true)
|
|
58
|
+
.addStorageBuffer("grass_jobs", COLLECTION_U32_STRUCT_WRITE, true);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Asks for the tiles of the grass surfaces a view wants, a thread a tile of a window
|
|
62
|
+
* ({@link shader_grass_surface_window_count}, whose counts, summed, are `prefix_sums`).
|
|
63
|
+
*
|
|
64
|
+
* A thread finds its level of its surface from the sums and its tile from its place among that window's
|
|
65
|
+
* threads. A tile outside its level's ring (`grass_tile_wanted`) or outside the view's frustum is not
|
|
66
|
+
* wanted, and the thread ends.
|
|
67
|
+
*
|
|
68
|
+
* **A wanted tile's layers.** Layer 0 always; and once layer 0 is baked, the layers past it that its record
|
|
69
|
+
* counts. For each:
|
|
70
|
+
*
|
|
71
|
+
* - held by a slot (`grass_directory_find`): the slot's record is stamped with the frame. A stale slot also
|
|
72
|
+
* takes a place in the frame's bake list, with what a bake gathers into its record reset, and keeps its
|
|
73
|
+
* state: it reads as it was until the bake has run;
|
|
74
|
+
* - not held: the thread takes a place in the frame's bake list (`grass_jobs`, at most `job_capacity`
|
|
75
|
+
* places, a count that keeps rising past them) and a slot off the free stack, writes the slot's record
|
|
76
|
+
* for the layer, pending, and lists it in the directory. With the bake list full the layer waits for a
|
|
77
|
+
* later frame. With no slot free the place holds `GRASS_SLOT_NONE` and the pool's starved count rises.
|
|
78
|
+
* A slot the directory has no room for is marked an orphan and its place holds `GRASS_SLOT_NONE`.
|
|
79
|
+
*
|
|
80
|
+
* Every thread's layers are its own, so no two threads of a dispatch ask for the same one; two views ask
|
|
81
|
+
* in two dispatches, and the second finds what the first took.
|
|
82
|
+
*
|
|
83
|
+
* Dispatched through `shader_prefix_sum_to_command`'s folded command.
|
|
84
|
+
*
|
|
85
|
+
* @type {ComputeShader}
|
|
86
|
+
*/
|
|
87
|
+
export const shader_grass_surface_want = ComputeShader.from({
|
|
88
|
+
label: "Grass Surface Want",
|
|
89
|
+
resources,
|
|
90
|
+
body: CodeChunk.from(
|
|
91
|
+
//language=WGSL
|
|
92
|
+
`
|
|
93
|
+
// what a bake counts and gathers into a slot's record, as a bake is to find it
|
|
94
|
+
fn grass_slot_reset_bake(record: u32) {
|
|
95
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_LAYER_COUNT}u], 0u);
|
|
96
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_SURFEL_COUNT}u], 0u);
|
|
97
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_HEIGHT_MIN}u], 0xFFFFFFFFu);
|
|
98
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_HEIGHT_MAX}u], 0u);
|
|
99
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_NORMAL_SPREAD}u], 0u);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// stamp the layer's slot as wanted, or take a slot and a place in the bake for it; the slot that holds it, or none yet
|
|
103
|
+
fn grass_want_layer(surface: u32, level: u32, layer: u32, tile: vec2<i32>) -> u32 {
|
|
104
|
+
let level_layer = level | (layer << 8u);
|
|
105
|
+
|
|
106
|
+
let held = grass_directory_find(surface, level_layer, tile);
|
|
107
|
+
|
|
108
|
+
if (held != GRASS_SLOT_NONE) {
|
|
109
|
+
let record = grass_slot_record(held);
|
|
110
|
+
|
|
111
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_WANTED_FRAME}u], settings.frame);
|
|
112
|
+
|
|
113
|
+
if (atomicLoad(&grass_pool[record + ${GRASS_SLOT_STATE}u]) == ${GRASS_SLOT_STATE_STALE}u) {
|
|
114
|
+
// baked again where it is, once the frame's bake has a place for it; until then it reads as it was
|
|
115
|
+
let place = atomicAdd(&grass_jobs.count, 1u);
|
|
116
|
+
|
|
117
|
+
if (place < settings.job_capacity) {
|
|
118
|
+
grass_slot_reset_bake(record);
|
|
119
|
+
|
|
120
|
+
grass_jobs.elements[place] = held;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return held;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let place = atomicAdd(&grass_jobs.count, 1u);
|
|
128
|
+
|
|
129
|
+
if (place >= settings.job_capacity) {
|
|
130
|
+
return GRASS_SLOT_NONE;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
let slot = slot_stack_pop(&grass_pool[${GRASS_POOL_FREE_COUNT}u], &grass_free, settings.slot_capacity);
|
|
134
|
+
|
|
135
|
+
grass_jobs.elements[place] = slot;
|
|
136
|
+
|
|
137
|
+
if (slot == SLOT_STACK_NONE) {
|
|
138
|
+
atomicAdd(&grass_pool[${GRASS_POOL_STARVED}u], 1u);
|
|
139
|
+
|
|
140
|
+
return GRASS_SLOT_NONE;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
let record = grass_slot_record(slot);
|
|
144
|
+
|
|
145
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_SURFACE}u], surface);
|
|
146
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_LEVEL_LAYER}u], level_layer);
|
|
147
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_TILE_X}u], bitcast<u32>(tile.x));
|
|
148
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_TILE_Z}u], bitcast<u32>(tile.y));
|
|
149
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_STATE}u], ${GRASS_SLOT_STATE_PENDING}u);
|
|
150
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_WANTED_FRAME}u], settings.frame);
|
|
151
|
+
|
|
152
|
+
grass_slot_reset_bake(record);
|
|
153
|
+
|
|
154
|
+
if (!grass_directory_insert(surface, level_layer, tile, slot)) {
|
|
155
|
+
atomicStore(&grass_pool[record + ${GRASS_SLOT_STATE}u], ${GRASS_SLOT_STATE_ORPHAN}u);
|
|
156
|
+
|
|
157
|
+
grass_jobs.elements[place] = GRASS_SLOT_NONE;
|
|
158
|
+
|
|
159
|
+
return GRASS_SLOT_NONE;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return slot;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@compute @workgroup_size(${COMPUTE_SHADER_DEFAULT_GROUP_SIZE})
|
|
166
|
+
fn main(
|
|
167
|
+
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
168
|
+
@builtin(local_invocation_index) lane: u32,
|
|
169
|
+
) {
|
|
170
|
+
let thread = folded_workgroup_index(workgroup_id) * ${COMPUTE_SHADER_DEFAULT_GROUP_SIZE}u + lane;
|
|
171
|
+
|
|
172
|
+
// the sums are inclusive: a thread belongs to the first window whose sum is past it
|
|
173
|
+
let windows = prefix_sums.count;
|
|
174
|
+
let index = lower_bound_branchless(&prefix_sums.elements, thread + 1u, windows);
|
|
175
|
+
|
|
176
|
+
if (index >= windows) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
var place = thread;
|
|
181
|
+
|
|
182
|
+
if (index > 0u) {
|
|
183
|
+
place -= prefix_sums.elements[index - 1u];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
let surface = grass_surfaces[index / settings.level_count];
|
|
187
|
+
let level = index % settings.level_count;
|
|
188
|
+
|
|
189
|
+
let frame = grass_surface_frame(${TRANSFORMS_TABLE.marshalling_method_read_field('global')}(&scene_database, surface.node));
|
|
190
|
+
let eye = grass_world_to_frame(frame, camera.transform[3].xyz);
|
|
191
|
+
|
|
192
|
+
let window = grass_surface_window(settings, surface, level, eye);
|
|
193
|
+
|
|
194
|
+
let tile = window.corner + vec2<i32>(i32(place % window.size.x), i32(place / window.size.x));
|
|
195
|
+
|
|
196
|
+
let tile_box = grass_tile_box(settings, surface, level, tile);
|
|
197
|
+
|
|
198
|
+
if (!grass_tile_wanted(settings, surface, level, tile_box, eye)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// where the tile's grass can be, against the view's frustum
|
|
203
|
+
let low = tile_box.low;
|
|
204
|
+
let high = tile_box.high;
|
|
205
|
+
|
|
206
|
+
let box = aabb3_from_transformed_corners(array<vec3<f32>, 8>(
|
|
207
|
+
vec3<f32>(low.x, low.y, low.z),
|
|
208
|
+
vec3<f32>(high.x, low.y, low.z),
|
|
209
|
+
vec3<f32>(low.x, high.y, low.z),
|
|
210
|
+
vec3<f32>(high.x, high.y, low.z),
|
|
211
|
+
vec3<f32>(low.x, low.y, high.z),
|
|
212
|
+
vec3<f32>(high.x, low.y, high.z),
|
|
213
|
+
vec3<f32>(low.x, high.y, high.z),
|
|
214
|
+
vec3<f32>(high.x, high.y, high.z),
|
|
215
|
+
), frame);
|
|
216
|
+
|
|
217
|
+
if (!aabb3_intersects_frustum(box, camera.frustum)) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
let top = grass_want_layer(surface.node, level, 0u, tile);
|
|
222
|
+
|
|
223
|
+
if (top == GRASS_SLOT_NONE) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
let record = grass_slot_record(top);
|
|
228
|
+
|
|
229
|
+
if (atomicLoad(&grass_pool[record + ${GRASS_SLOT_STATE}u]) != ${GRASS_SLOT_STATE_BAKED}u) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// a tile has no more layers than a column's walk has crossings
|
|
234
|
+
let layers = min(atomicLoad(&grass_pool[record + ${GRASS_SLOT_LAYER_COUNT}u]), ${GRASS_COLUMN_CROSSINGS}u);
|
|
235
|
+
|
|
236
|
+
for (var layer = 1u; layer < layers; layer++) {
|
|
237
|
+
grass_want_layer(surface.node, level, layer, tile);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
`, [
|
|
241
|
+
chunk_folded_workgroup_index,
|
|
242
|
+
chunk_lower_bound_branchless,
|
|
243
|
+
chunk_slot_stack,
|
|
244
|
+
chunk_aabb3_from_transformed_corners,
|
|
245
|
+
chunk_aabb3_intersects_frustum,
|
|
246
|
+
chunk_grass_surface_frame,
|
|
247
|
+
chunk_grass_surface_window,
|
|
248
|
+
chunk_grass_directory,
|
|
249
|
+
TRANSFORMS_TABLE.chunk_read_field('global'),
|
|
250
|
+
]),
|
|
251
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Threads in a workgroup of {@link shader_grass_surface_window_count}.
|
|
3
|
+
*
|
|
4
|
+
* @type {number}
|
|
5
|
+
*/
|
|
6
|
+
export const GRASS_SURFACE_WINDOW_COUNT_WORKGROUP_SIZE: number;
|
|
7
|
+
/**
|
|
8
|
+
* Counts the tiles a view may want of each level of each grass surface, a thread a level of a surface.
|
|
9
|
+
*
|
|
10
|
+
* Thread `s * level_count + l` writes how many tiles the window of level `l` of surface `s` has
|
|
11
|
+
* (`grass_surface_window`) to `grass_window_counts.elements` at its own index, and thread 0 writes how many
|
|
12
|
+
* counts there are to `grass_window_counts.count`. Threads past `surface_count * level_count` write nothing,
|
|
13
|
+
* so the dispatch covers that many threads and need not be exact.
|
|
14
|
+
*
|
|
15
|
+
* The counts are what a prefix scan turns into a thread a tile for {@link shader_grass_surface_want}.
|
|
16
|
+
*
|
|
17
|
+
* @type {ComputeShader}
|
|
18
|
+
*/
|
|
19
|
+
export const shader_grass_surface_window_count: ComputeShader;
|
|
20
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
21
|
+
//# sourceMappingURL=shader_grass_surface_window_count.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_grass_surface_window_count.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/grass/surface/shader_grass_surface_window_count.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wDAFU,MAAM,CAE4C;AAY5D;;;;;;;;;;;GAWG;AACH,gDAFU,aAAa,CAoCpB;8BArE2B,+BAA+B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { CAMERA_RESOURCE } from "../../camera/CAMERA_RESOURCE.js";
|
|
2
|
+
import { COLLECTION_U32_STRUCT_READ } from "../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
3
|
+
import { TRANSFORMS_TABLE } from "../../scene/chunk_scene_database_access.js";
|
|
4
|
+
import { SCENE_DATABASE_RESOURCE } from "../../scene/SCENE_DATABASE_RESOURCE.js";
|
|
5
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
6
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
7
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
8
|
+
import { chunk_grass_surface_frame } from "./chunk_grass_surface_frame.js";
|
|
9
|
+
import { chunk_grass_surface_window } from "./chunk_grass_surface_window.js";
|
|
10
|
+
import { GRASS_SURFACE_VIEW_SETTINGS, GRASS_SURFACES_RESOURCE } from "./GRASS_SURFACE_VIEW.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Threads in a workgroup of {@link shader_grass_surface_window_count}.
|
|
14
|
+
*
|
|
15
|
+
* @type {number}
|
|
16
|
+
*/
|
|
17
|
+
export const GRASS_SURFACE_WINDOW_COUNT_WORKGROUP_SIZE = 64;
|
|
18
|
+
|
|
19
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
20
|
+
|
|
21
|
+
resources.setImmediate("settings", GRASS_SURFACE_VIEW_SETTINGS);
|
|
22
|
+
|
|
23
|
+
resources.createGroup()
|
|
24
|
+
.add(CAMERA_RESOURCE)
|
|
25
|
+
.add(SCENE_DATABASE_RESOURCE)
|
|
26
|
+
.add(GRASS_SURFACES_RESOURCE)
|
|
27
|
+
.addStorageBuffer("grass_window_counts", COLLECTION_U32_STRUCT_READ, true);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Counts the tiles a view may want of each level of each grass surface, a thread a level of a surface.
|
|
31
|
+
*
|
|
32
|
+
* Thread `s * level_count + l` writes how many tiles the window of level `l` of surface `s` has
|
|
33
|
+
* (`grass_surface_window`) to `grass_window_counts.elements` at its own index, and thread 0 writes how many
|
|
34
|
+
* counts there are to `grass_window_counts.count`. Threads past `surface_count * level_count` write nothing,
|
|
35
|
+
* so the dispatch covers that many threads and need not be exact.
|
|
36
|
+
*
|
|
37
|
+
* The counts are what a prefix scan turns into a thread a tile for {@link shader_grass_surface_want}.
|
|
38
|
+
*
|
|
39
|
+
* @type {ComputeShader}
|
|
40
|
+
*/
|
|
41
|
+
export const shader_grass_surface_window_count = ComputeShader.from({
|
|
42
|
+
label: "Grass Surface Window Count",
|
|
43
|
+
resources,
|
|
44
|
+
body: CodeChunk.from(
|
|
45
|
+
//language=WGSL
|
|
46
|
+
`
|
|
47
|
+
@compute @workgroup_size(${GRASS_SURFACE_WINDOW_COUNT_WORKGROUP_SIZE})
|
|
48
|
+
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
49
|
+
let index = id.x;
|
|
50
|
+
let total = settings.surface_count * settings.level_count;
|
|
51
|
+
|
|
52
|
+
if (index == 0u) {
|
|
53
|
+
grass_window_counts.count = total;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (index >= total) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let surface = grass_surfaces[index / settings.level_count];
|
|
61
|
+
let level = index % settings.level_count;
|
|
62
|
+
|
|
63
|
+
let frame = grass_surface_frame(${TRANSFORMS_TABLE.marshalling_method_read_field('global')}(&scene_database, surface.node));
|
|
64
|
+
let eye = grass_world_to_frame(frame, camera.transform[3].xyz);
|
|
65
|
+
|
|
66
|
+
let window = grass_surface_window(settings, surface, level, eye);
|
|
67
|
+
|
|
68
|
+
grass_window_counts.elements[index] = window.size.x * window.size.y;
|
|
69
|
+
}
|
|
70
|
+
`, [
|
|
71
|
+
chunk_grass_surface_frame,
|
|
72
|
+
chunk_grass_surface_window,
|
|
73
|
+
TRANSFORMS_TABLE.chunk_read_field('global'),
|
|
74
|
+
]),
|
|
75
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_add_per_object_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_add_per_object_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js"],"names":[],"mappings":"AA8QA;;;;GAIG;AACH,+DAFW,eAAe,QAIzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH;IAhB4B,KAAK;IACT,aAAa,EAA1B,MAAM;IACO,kBAAkB,EAA/B,MAAM;IACO,uBAAuB,EAApC,MAAM;IACO,qBAAqB,EAAlC,MAAM;IACO,uBAAuB,EAApC,MAAM;IACO,mBAAmB,EAAhC,MAAM;IACO,4BAA4B,EAAzC,MAAM;IACO,qBAAqB,EAAlC,MAAM;IACQ,eAAe,EAA7B,OAAO;IAGQ,UAAU,EAAzB,MAAM,EAAE;IACa,IAAI;IACvB,MAAM,CA+DlB;8BA9VY,OAAO,6CAA6C,EAAE,eAAe"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
|
|
3
|
-
import { m4_multiply } from "../../../../core/geom/3d/mat4/m4_multiply.js";
|
|
4
2
|
import { mat4x4f, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
5
3
|
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
6
4
|
import { U32_CONTAINER_STRUCT } from "../../shader/type/U32_CONTAINER_STRUCT.js";
|
|
@@ -33,6 +31,7 @@ import { ImageShader } from "../../shader/ImageShader.js";
|
|
|
33
31
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
34
32
|
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
35
33
|
import { construct_pixel_reprojection_matrix } from "./construct_pixel_reprojection_matrix.js";
|
|
34
|
+
import { view_velocity_matrices } from "./view_velocity_matrices.js";
|
|
36
35
|
import {
|
|
37
36
|
construct_reprojection_matrix_rotation_only,
|
|
38
37
|
} from "./construct_reprojection_matrix.js";
|
|
@@ -266,9 +265,6 @@ const shader = new ImageShader({
|
|
|
266
265
|
}]
|
|
267
266
|
});
|
|
268
267
|
|
|
269
|
-
const scratch_unjit_view_proj_curr_f64 = new Float64Array(16);
|
|
270
|
-
const scratch_unjit_view_proj_prev_f64 = new Float64Array(16);
|
|
271
|
-
const scratch_unjit_inv_view_proj_curr_f64 = new Float64Array(16);
|
|
272
268
|
const scratch_unjit_view_proj_prev_f32 = new Float32Array(16);
|
|
273
269
|
const scratch_unjit_inv_view_proj_curr_f32 = new Float32Array(16);
|
|
274
270
|
|
|
@@ -359,24 +355,9 @@ export function graph_add_per_object_velocity({
|
|
|
359
355
|
const current_camera = view.camera.camera;
|
|
360
356
|
const previous_camera = view.gpu_previous_camera_state.camera;
|
|
361
357
|
|
|
362
|
-
// Un-jittered
|
|
363
|
-
//
|
|
364
|
-
|
|
365
|
-
scratch_unjit_view_proj_curr_f64,
|
|
366
|
-
current_camera.projection_matrix,
|
|
367
|
-
current_camera.view_matrix
|
|
368
|
-
);
|
|
369
|
-
m4_invert(scratch_unjit_inv_view_proj_curr_f64, scratch_unjit_view_proj_curr_f64);
|
|
370
|
-
|
|
371
|
-
// Un-jittered previous-frame view-projection.
|
|
372
|
-
m4_multiply(
|
|
373
|
-
scratch_unjit_view_proj_prev_f64,
|
|
374
|
-
previous_camera.projection_matrix,
|
|
375
|
-
previous_camera.view_matrix
|
|
376
|
-
);
|
|
377
|
-
|
|
378
|
-
scratch_unjit_inv_view_proj_curr_f32.set(scratch_unjit_inv_view_proj_curr_f64);
|
|
379
|
-
scratch_unjit_view_proj_prev_f32.set(scratch_unjit_view_proj_prev_f64);
|
|
358
|
+
// Un-jittered: this frame's inverse view-projection (depth → world without the jitter's shift)
|
|
359
|
+
// and last frame's view-projection.
|
|
360
|
+
view_velocity_matrices(view, scratch_unjit_inv_view_proj_curr_f32, scratch_unjit_view_proj_prev_f32);
|
|
380
361
|
|
|
381
362
|
// Background rotation-only reprojection (pixel space).
|
|
382
363
|
const reprojection_matrix_64 = new Float64Array(16);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two matrices a pass needs to say how far a pixel's surface moved on screen: this frame's inverse
|
|
3
|
+
* view-projection, to take a pixel and its depth to the world, and last frame's view-projection, to take
|
|
4
|
+
* where that point was back to the screen. Both are free of the sub-pixel jitter, as the velocity buffer
|
|
5
|
+
* is: a still surface has no velocity however the frame is jittered.
|
|
6
|
+
*
|
|
7
|
+
* @param {GPUViewContext} view
|
|
8
|
+
* @param {Float32Array} inverse_view_projection receives this frame's, 16 elements
|
|
9
|
+
* @param {Float32Array} view_projection_previous receives last frame's, 16 elements
|
|
10
|
+
*/
|
|
11
|
+
export function view_velocity_matrices(view: GPUViewContext, inverse_view_projection: Float32Array, view_projection_previous: Float32Array): void;
|
|
12
|
+
//# sourceMappingURL=view_velocity_matrices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view_velocity_matrices.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/velocity/view_velocity_matrices.js"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,sFAHW,YAAY,4BACZ,YAAY,QActB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
|
|
2
|
+
import { m4_multiply } from "../../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
+
|
|
4
|
+
const scratch_view_projection = new Float64Array(16);
|
|
5
|
+
const scratch_inverse = new Float64Array(16);
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The two matrices a pass needs to say how far a pixel's surface moved on screen: this frame's inverse
|
|
9
|
+
* view-projection, to take a pixel and its depth to the world, and last frame's view-projection, to take
|
|
10
|
+
* where that point was back to the screen. Both are free of the sub-pixel jitter, as the velocity buffer
|
|
11
|
+
* is: a still surface has no velocity however the frame is jittered.
|
|
12
|
+
*
|
|
13
|
+
* @param {GPUViewContext} view
|
|
14
|
+
* @param {Float32Array} inverse_view_projection receives this frame's, 16 elements
|
|
15
|
+
* @param {Float32Array} view_projection_previous receives last frame's, 16 elements
|
|
16
|
+
*/
|
|
17
|
+
export function view_velocity_matrices(view, inverse_view_projection, view_projection_previous) {
|
|
18
|
+
const current = view.camera.camera;
|
|
19
|
+
const previous = view.gpu_previous_camera_state.camera;
|
|
20
|
+
|
|
21
|
+
m4_multiply(scratch_view_projection, current.projection_matrix, current.view_matrix);
|
|
22
|
+
m4_invert(scratch_inverse, scratch_view_projection);
|
|
23
|
+
|
|
24
|
+
inverse_view_projection.set(scratch_inverse);
|
|
25
|
+
|
|
26
|
+
m4_multiply(scratch_view_projection, previous.projection_matrix, previous.view_matrix);
|
|
27
|
+
|
|
28
|
+
view_projection_previous.set(scratch_view_projection);
|
|
29
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,oDAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CAOpB;AAED;;;;;;;;;;;;GAYG;AACH;IAT+B,KAAK;IACA,KAAK;IACd,MAAM,EAAtB,MAAM;IACqB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACD,kBAAkB,EAAlC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,MAAM,CA4DlB;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,SAAS,EAAzB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACmB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACQ,MAAM,GAA/B,cAAc;IACZ,MAAM,CAuDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6KAFa;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAiJjE;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,IAAI,EAApB,MAAM;IACU,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACN,MAAM,CAoClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sUAFa;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA4M7D;AAED;;;;;;;;GAQG;AACH,+EAHW,UAAU,MAAM,CAAC,GACf;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAe/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IA3B+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,QAAQ,EAA1B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,aAAa,EAA7B,MAAM;IACuB,MAAM;IACnB,wBAAwB,EAAxC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,kBAAkB,EAAlC,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,oBAAoB,EAApC,MAAM;IAC6B,sBAAsB,EAAzD;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAGC,eAAe,GAAzC,eAAe;IAGsF,MAAM,EAA3G,OAAO,iEAAiE,EAAE,iBAAiB;IAGlE,MAAM,GAA/B,cAAc;IACiD,aAAa,GAA5E,OAAO,wBAAwB,EAAE,iBAAiB,EAAE;IAElD,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,oDAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CAOpB;AAED;;;;;;;;;;;;GAYG;AACH;IAT+B,KAAK;IACA,KAAK;IACd,MAAM,EAAtB,MAAM;IACqB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACD,kBAAkB,EAAlC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,MAAM,CA4DlB;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,SAAS,EAAzB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACmB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACQ,MAAM,GAA/B,cAAc;IACZ,MAAM,CAuDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6KAFa;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAiJjE;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,IAAI,EAApB,MAAM;IACU,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACN,MAAM,CAoClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sUAFa;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA4M7D;AAED;;;;;;;;GAQG;AACH,+EAHW,UAAU,MAAM,CAAC,GACf;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAe/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IA3B+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,QAAQ,EAA1B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,aAAa,EAA7B,MAAM;IACuB,MAAM;IACnB,wBAAwB,EAAxC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,kBAAkB,EAAlC,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,oBAAoB,EAApC,MAAM;IAC6B,sBAAsB,EAAzD;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAGC,eAAe,GAAzC,eAAe;IAGsF,MAAM,EAA3G,OAAO,iEAAiE,EAAE,iBAAiB;IAGlE,MAAM,GAA/B,cAAc;IACiD,aAAa,GAA5E,OAAO,wBAAwB,EAAE,iBAAiB,EAAE;IAElD,MAAM,CA4UlB;+BA/+B8B,qBAAqB;gCAIpB,6CAA6C"}
|
package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js
CHANGED
|
@@ -867,6 +867,28 @@ export function graph_rasterize_meshes_transparent_avboit({
|
|
|
867
867
|
label: `${view_ctx.label}/AVBOIT-double`,
|
|
868
868
|
});
|
|
869
869
|
|
|
870
|
+
// The meshes' fragments pick the probes around them, which no pixel of the G-buffer asked for: their meshlets
|
|
871
|
+
// ask, for the frame after. A bucket of no material lists none.
|
|
872
|
+
if (material_count_front > 0) {
|
|
873
|
+
probes.graph_want_meshlets({
|
|
874
|
+
graph,
|
|
875
|
+
scene: scene_ctx,
|
|
876
|
+
camera: gr_camera,
|
|
877
|
+
meshlet_collection: prep_front.meshlet_collection,
|
|
878
|
+
meshlet_iterator_command: prep_front.meshlet_iterator_command,
|
|
879
|
+
});
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
if (material_count_double > 0) {
|
|
883
|
+
probes.graph_want_meshlets({
|
|
884
|
+
graph,
|
|
885
|
+
scene: scene_ctx,
|
|
886
|
+
camera: gr_camera,
|
|
887
|
+
meshlet_collection: prep_double.meshlet_collection,
|
|
888
|
+
meshlet_iterator_command: prep_double.meshlet_iterator_command,
|
|
889
|
+
});
|
|
890
|
+
}
|
|
891
|
+
|
|
870
892
|
// Occupancy and warp
|
|
871
893
|
// ======
|
|
872
894
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AA4EA;;;;;;;;;GASG;AACH;IAEI;;;;;;;OAOG;IACH,iCAFW,eAAe,QASzB;IA4KD;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAyCf;IAtND;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAOD;;;;;OAKG;IACH,yBAEC;IAUD;;;;;OAKG;IACH,kBAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IA2ID;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,+CAEC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;QAH0C,SAAS,GAAxC,oBAAoB;QAClB,yBAAyB,CA4DrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;;;OAKG;IACH,gEAEC;IAED;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA6BD;;;;;OAKG;IACH,cAsEC;IAED;;;;;OAKG;IACH,YAFW,eAAe,
|
|
1
|
+
{"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AA4EA;;;;;;;;;GASG;AACH;IAEI;;;;;;;OAOG;IACH,iCAFW,eAAe,QASzB;IA4KD;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAyCf;IAtND;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAOD;;;;;OAKG;IACH,yBAEC;IAUD;;;;;OAKG;IACH,kBAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IA2ID;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,gDAEC;IAED;;OAEG;IACH,kDAEC;IAED;;OAEG;IACH,+CAEC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;QAH0C,SAAS,GAAxC,oBAAoB;QAClB,yBAAyB,CA4DrC;IAED;;OAEG;IACH,6CAEC;IAYD;;;;;OAKG;IACH,gEAEC;IAED;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA6BD;;;;;OAKG;IACH,cAsEC;IAED;;;;;OAKG;IACH,YAFW,eAAe,QA4BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAUD;;;;;;;;;;;OAWG;IACH,oBAHW,UAAU,GACR,MAAM,CAQlB;IAoCD;;;;;;;OAOG;IACH,gBAuBC;IAwCL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BAr3BY,OAAO,0CAA0C,EAAE,eAAe;8BAClE,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;yBACzE,OAAO,2DAA2D,EAAE,UAAU;+BA5B5D,iDAAiD;sBAM1D,YAAY;oCAFE,uCAAuC;6BAC9C,yBAAyB;uBAH/B,yBAAyB;mCACb,gCAAgC;oCAF/B,mDAAmD;kDAMrC,wCAAwC;0CAlBhD,0DAA0D;8BAItE,8CAA8C;iCAF3C,iDAAiD;+BAInD,2CAA2C;qCADrC,qDAAqD;oCAItD,qCAAqC;4BAC7C,gCAAgC;uCASrB,iDAAiD;6BAQ3D,wBAAwB;wCADb,mCAAmC;uCAlBpC,wCAAwC"}
|
|
@@ -723,6 +723,9 @@ export class GPUSceneContext {
|
|
|
723
723
|
this.#light_probe_volume.update();
|
|
724
724
|
this.#lights.update(ctx);
|
|
725
725
|
this.#volumetrics.update(ctx, 0);
|
|
726
|
+
|
|
727
|
+
// what the frame before read is this frame's history; producers write after this
|
|
728
|
+
this.#wind.advance_frame();
|
|
726
729
|
this.#wind.update();
|
|
727
730
|
|
|
728
731
|
// Per-frame animation database flush — picks up any new clips,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `lattice_bits` of a surface whose densest species has `density` blades a square metre, on surfels
|
|
3
|
+
* `finest_spacing` apart: the least whole number of doublings of a surfel's side that reaches the density.
|
|
4
|
+
*
|
|
5
|
+
* @param {number} density blades a square metre, above zero
|
|
6
|
+
* @param {number} finest_spacing metres
|
|
7
|
+
* @returns {number}
|
|
8
|
+
*/
|
|
9
|
+
export function grass_surface_lattice_bits(density: number, finest_spacing: number): number;
|
|
10
|
+
/**
|
|
11
|
+
* What grows on a grass surface, taken over every species its members grow: a record of the scene
|
|
12
|
+
* database's `grass_surface_params` table, at the surface's own `transforms` row. A row nothing has written
|
|
13
|
+
* reads as zeros, a surface on which nothing grows.
|
|
14
|
+
*
|
|
15
|
+
* - `lattice_bits`: the surface's blade lattice has `2^lattice_bits` points along a side of a finest
|
|
16
|
+
* surfel's square, the fewest that make the lattice as dense as the densest species.
|
|
17
|
+
* - `density`: the densest species' blades in a square metre.
|
|
18
|
+
* - `blade_length`, `blade_length_min`: the longest and the shortest species' blade, metres.
|
|
19
|
+
* - `blade_width_min`: the narrowest species' blade, metres.
|
|
20
|
+
* - `cover`: the greatest product of a species' density and its blade's width, a metre of blade a square
|
|
21
|
+
* metre of ground.
|
|
22
|
+
*
|
|
23
|
+
* @type {WebGPUStruct}
|
|
24
|
+
*/
|
|
25
|
+
export const GRASS_SURFACE_PARAMS_STRUCT: WebGPUStruct;
|
|
26
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
27
|
+
//# sourceMappingURL=GRASS_SURFACE_PARAMS_STRUCT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GRASS_SURFACE_PARAMS_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GRASS_SURFACE_PARAMS_STRUCT.js"],"names":[],"mappings":"AA2BA;;;;;;;GAOG;AACH,oDAJW,MAAM,kBACN,MAAM,GACJ,MAAM,CAIlB;AAlCD;;;;;;;;;;;;;;GAcG;AACH,0CAFU,YAAY,CASU;6BAxBH,gCAAgC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { f32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What grows on a grass surface, taken over every species its members grow: a record of the scene
|
|
6
|
+
* database's `grass_surface_params` table, at the surface's own `transforms` row. A row nothing has written
|
|
7
|
+
* reads as zeros, a surface on which nothing grows.
|
|
8
|
+
*
|
|
9
|
+
* - `lattice_bits`: the surface's blade lattice has `2^lattice_bits` points along a side of a finest
|
|
10
|
+
* surfel's square, the fewest that make the lattice as dense as the densest species.
|
|
11
|
+
* - `density`: the densest species' blades in a square metre.
|
|
12
|
+
* - `blade_length`, `blade_length_min`: the longest and the shortest species' blade, metres.
|
|
13
|
+
* - `blade_width_min`: the narrowest species' blade, metres.
|
|
14
|
+
* - `cover`: the greatest product of a species' density and its blade's width, a metre of blade a square
|
|
15
|
+
* metre of ground.
|
|
16
|
+
*
|
|
17
|
+
* @type {WebGPUStruct}
|
|
18
|
+
*/
|
|
19
|
+
export const GRASS_SURFACE_PARAMS_STRUCT = WebGPUStruct.from({
|
|
20
|
+
lattice_bits: u32,
|
|
21
|
+
density: f32,
|
|
22
|
+
blade_length: f32,
|
|
23
|
+
blade_length_min: f32,
|
|
24
|
+
blade_width_min: f32,
|
|
25
|
+
cover: f32,
|
|
26
|
+
}, "GrassSurfaceParams").pack();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The `lattice_bits` of a surface whose densest species has `density` blades a square metre, on surfels
|
|
30
|
+
* `finest_spacing` apart: the least whole number of doublings of a surfel's side that reaches the density.
|
|
31
|
+
*
|
|
32
|
+
* @param {number} density blades a square metre, above zero
|
|
33
|
+
* @param {number} finest_spacing metres
|
|
34
|
+
* @returns {number}
|
|
35
|
+
*/
|
|
36
|
+
export function grass_surface_lattice_bits(density, finest_spacing) {
|
|
37
|
+
return Math.max(0, Math.ceil(Math.log2(finest_spacing * Math.sqrt(density)) - 1e-9));
|
|
38
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A mesh row's membership of a grass surface: which surface it is ground of, what a column of that
|
|
3
|
+
* surface traces to find it, and what grows on it.
|
|
4
|
+
*
|
|
5
|
+
* A record of the scene database's `mesh_ground_covers` table, which shares the `meshes` table's index
|
|
6
|
+
* space: a row's ground cover is at the row's own index.
|
|
7
|
+
*
|
|
8
|
+
* **`flags` says what holds.** A row nothing has written, and a row on a page the table has never
|
|
9
|
+
* allocated, both read as a record of zeros, so zero flags is "not ground of any surface" and the other
|
|
10
|
+
* fields are read only when {@link MESH_GROUND_COVER_FLAG_MEMBER} is set.
|
|
11
|
+
*/
|
|
12
|
+
export const MESH_GROUND_COVER_STRUCT: WebGPUStruct;
|
|
13
|
+
/**
|
|
14
|
+
* The row is a member of the surface its record names. Its faces are ground of that surface: they
|
|
15
|
+
* hold surfels, and they hide the ground of other members under them.
|
|
16
|
+
*
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
export const MESH_GROUND_COVER_FLAG_MEMBER: number;
|
|
20
|
+
/**
|
|
21
|
+
* Something grows on the member, and its record's `species` holds. A member without it only hides
|
|
22
|
+
* ground.
|
|
23
|
+
*
|
|
24
|
+
* @type {number}
|
|
25
|
+
*/
|
|
26
|
+
export const MESH_GROUND_COVER_FLAG_GROWS: number;
|
|
27
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
28
|
+
//# sourceMappingURL=MESH_GROUND_COVER_STRUCT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MESH_GROUND_COVER_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/MESH_GROUND_COVER_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,oDA2B6B;AAE7B;;;;;GAKG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;;GAKG;AACH,2CAFU,MAAM,CAE8B;6BAxDjB,gCAAgC"}
|