@woosh/meep-engine 3.60.4 → 3.60.6
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 +2621 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts +11 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +50 -6
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +28 -45
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +111 -119
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +22 -3
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +84 -3
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.js +25 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +38 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +28 -59
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +84 -789
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +7 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +12 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +11 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +16 -8
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +7 -3
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +26 -13
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +14 -0
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +196 -68
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +42 -28
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +429 -414
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts +16 -0
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +156 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -2
- package/src/shade/renderer/scene/GPUSceneContext.js +5 -5
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +0 -47
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +0 -80
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +0 -67
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +0 -17
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +0 -145
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +0 -105
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- package/src/shade/wgsl/NOTES.md +0 -4
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mip 0 reduction's footprint across x, in source texels, by {@link HZB_FOOTPRINT_X}:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* const HZB_FOOTPRINT_X: i32
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* @type {CodeChunkChoice}
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_hzb_footprint_x: CodeChunkChoice;
|
|
11
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
12
|
+
//# sourceMappingURL=chunk_hzb_footprint_x.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_hzb_footprint_x.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/chunk_hzb_footprint_x.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,oCAFU,eAAe,CAEkD;gCAb3C,uCAAuC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
3
|
+
import { HZB_FOOTPRINT_X } from "./HZB_FOOTPRINT_X.js";
|
|
4
|
+
import { HZBFootprint } from "./HZBFootprint.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The mip 0 reduction's footprint across x, in source texels, by {@link HZB_FOOTPRINT_X}:
|
|
8
|
+
*
|
|
9
|
+
* ```wgsl
|
|
10
|
+
* const HZB_FOOTPRINT_X: i32
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunkChoice}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_hzb_footprint_x = CodeChunkChoice.from(HZB_FOOTPRINT_X);
|
|
16
|
+
|
|
17
|
+
chunk_hzb_footprint_x.add(HZBFootprint.Two, CodeChunk.from(
|
|
18
|
+
//language=WGSL
|
|
19
|
+
`
|
|
20
|
+
const HZB_FOOTPRINT_X: i32 = 2;
|
|
21
|
+
`));
|
|
22
|
+
|
|
23
|
+
chunk_hzb_footprint_x.add(HZBFootprint.Three, CodeChunk.from(
|
|
24
|
+
//language=WGSL
|
|
25
|
+
`
|
|
26
|
+
const HZB_FOOTPRINT_X: i32 = 3;
|
|
27
|
+
`));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mip 0 reduction's footprint across y, in source texels, by {@link HZB_FOOTPRINT_Y}:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* const HZB_FOOTPRINT_Y: i32
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* @type {CodeChunkChoice}
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_hzb_footprint_y: CodeChunkChoice;
|
|
11
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
12
|
+
//# sourceMappingURL=chunk_hzb_footprint_y.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_hzb_footprint_y.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/chunk_hzb_footprint_y.js"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,oCAFU,eAAe,CAEkD;gCAb3C,uCAAuC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { CodeChunkChoice } from "../shader/compiler/CodeChunkChoice.js";
|
|
3
|
+
import { HZB_FOOTPRINT_Y } from "./HZB_FOOTPRINT_Y.js";
|
|
4
|
+
import { HZBFootprint } from "./HZBFootprint.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The mip 0 reduction's footprint across y, in source texels, by {@link HZB_FOOTPRINT_Y}:
|
|
8
|
+
*
|
|
9
|
+
* ```wgsl
|
|
10
|
+
* const HZB_FOOTPRINT_Y: i32
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunkChoice}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_hzb_footprint_y = CodeChunkChoice.from(HZB_FOOTPRINT_Y);
|
|
16
|
+
|
|
17
|
+
chunk_hzb_footprint_y.add(HZBFootprint.Two, CodeChunk.from(
|
|
18
|
+
//language=WGSL
|
|
19
|
+
`
|
|
20
|
+
const HZB_FOOTPRINT_Y: i32 = 2;
|
|
21
|
+
`));
|
|
22
|
+
|
|
23
|
+
chunk_hzb_footprint_y.add(HZBFootprint.Three, CodeChunk.from(
|
|
24
|
+
//language=WGSL
|
|
25
|
+
`
|
|
26
|
+
const HZB_FOOTPRINT_Y: i32 = 3;
|
|
27
|
+
`));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The widest footprint, in source texels along one axis, of any HZB texel when `output_size` texels cover
|
|
3
|
+
* `source_size`: HZB texel `i` covers `[i·s/o, (i+1)·s/o)` and reduces every source texel that span
|
|
4
|
+
* touches, clipped to the source.
|
|
5
|
+
*
|
|
6
|
+
* An upper bound on the footprints {@link shader_hzb_reduce_mip0} reads, whose bounds are this span
|
|
7
|
+
* nudged inward by a float epsilon.
|
|
8
|
+
*
|
|
9
|
+
* @param {number} source_size source texels on the axis
|
|
10
|
+
* @param {number} output_size HZB mip 0 texels on the axis
|
|
11
|
+
* @returns {number}
|
|
12
|
+
*/
|
|
13
|
+
export function hzb_footprint_texels(source_size: number, output_size: number): number;
|
|
14
|
+
//# sourceMappingURL=hzb_footprint_texels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hzb_footprint_texels.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/hzb_footprint_texels.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,kDAJW,MAAM,eACN,MAAM,GACJ,MAAM,CAqBlB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The widest footprint, in source texels along one axis, of any HZB texel when `output_size` texels cover
|
|
5
|
+
* `source_size`: HZB texel `i` covers `[i·s/o, (i+1)·s/o)` and reduces every source texel that span
|
|
6
|
+
* touches, clipped to the source.
|
|
7
|
+
*
|
|
8
|
+
* An upper bound on the footprints {@link shader_hzb_reduce_mip0} reads, whose bounds are this span
|
|
9
|
+
* nudged inward by a float epsilon.
|
|
10
|
+
*
|
|
11
|
+
* @param {number} source_size source texels on the axis
|
|
12
|
+
* @param {number} output_size HZB mip 0 texels on the axis
|
|
13
|
+
* @returns {number}
|
|
14
|
+
*/
|
|
15
|
+
export function hzb_footprint_texels(source_size, output_size) {
|
|
16
|
+
assert.isNonNegativeInteger(source_size, 'source_size');
|
|
17
|
+
assert.isNonNegativeInteger(output_size, 'output_size');
|
|
18
|
+
assert.greaterThan(output_size, 0, 'output_size');
|
|
19
|
+
|
|
20
|
+
let widest = 0;
|
|
21
|
+
|
|
22
|
+
for (let i = 0; i < output_size; i++) {
|
|
23
|
+
const first = Math.floor(i * source_size / output_size);
|
|
24
|
+
const end = Math.min(Math.ceil((i + 1) * source_size / output_size), source_size);
|
|
25
|
+
|
|
26
|
+
const width = end - first;
|
|
27
|
+
|
|
28
|
+
if (width > widest) {
|
|
29
|
+
widest = width;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return widest;
|
|
34
|
+
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Initial reduction pass, works with non-power-of-two resolutions as input
|
|
3
|
-
* @type {ComputeShader}
|
|
4
|
-
*/
|
|
5
|
-
export const shader_hzb_reduce_mip0: ComputeShader;
|
|
6
1
|
/**
|
|
7
2
|
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
8
3
|
* @type {ComputeShader}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_hzb_reduce_any.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_any.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"shader_hzb_reduce_any.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_any.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,oCAFU,aAAa,CAcpB;8BAnC2B,4BAA4B"}
|
|
@@ -1,57 +1,37 @@
|
|
|
1
|
-
import { vec2f, vec2u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { generate_downsampler_code } from "./generate_downsampler_code.js";
|
|
5
|
-
|
|
6
|
-
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
7
|
-
|
|
8
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
-
|
|
10
|
-
// per-pass, eight bytes, read-only: immediate data rather than a uniform buffer. The reduction
|
|
11
|
-
// walks the mip chain a pass at a time and every pass wants a different resolution, which used to
|
|
12
|
-
// mean a persistent table of them bound at a per-mip dynamic offset.
|
|
13
|
-
resources.setImmediate("output_resolution", vec2u);
|
|
14
|
-
|
|
15
|
-
resources.createGroup()
|
|
16
|
-
.addTexture("tInput", "unfilterable-float")
|
|
17
|
-
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
18
|
-
;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
* @type {ComputeShader}
|
|
24
|
-
*/
|
|
25
|
-
export const
|
|
26
|
-
label: 'HZB / reduce
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
output.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
43
|
-
* @type {ComputeShader}
|
|
44
|
-
*/
|
|
45
|
-
export const shader_hzb_reduce_any = ComputeShader.from({
|
|
46
|
-
label: 'HZB / reduce any resolution',
|
|
47
|
-
body: generate_downsampler_code({
|
|
48
|
-
type: vec2f,
|
|
49
|
-
initial_value: 'vec2( 1.0, 0.0 )',
|
|
50
|
-
//language=WGSL
|
|
51
|
-
reduction_code: `
|
|
52
|
-
output.x = min(texel.x, output.x);
|
|
53
|
-
output.y = max(texel.y, output.y);
|
|
54
|
-
`,
|
|
55
|
-
}),
|
|
56
|
-
resources,
|
|
57
|
-
});
|
|
1
|
+
import { vec2f, vec2u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
3
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
+
import { generate_downsampler_code } from "./generate_downsampler_code.js";
|
|
5
|
+
|
|
6
|
+
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
7
|
+
|
|
8
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
+
|
|
10
|
+
// per-pass, eight bytes, read-only: immediate data rather than a uniform buffer. The reduction
|
|
11
|
+
// walks the mip chain a pass at a time and every pass wants a different resolution, which used to
|
|
12
|
+
// mean a persistent table of them bound at a per-mip dynamic offset.
|
|
13
|
+
resources.setImmediate("output_resolution", vec2u);
|
|
14
|
+
|
|
15
|
+
resources.createGroup()
|
|
16
|
+
.addTexture("tInput", "unfilterable-float")
|
|
17
|
+
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
18
|
+
;
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mip1+ reduction pass, works with non-power-of-two resolutions as input
|
|
23
|
+
* @type {ComputeShader}
|
|
24
|
+
*/
|
|
25
|
+
export const shader_hzb_reduce_any = ComputeShader.from({
|
|
26
|
+
label: 'HZB / reduce any resolution',
|
|
27
|
+
body: generate_downsampler_code({
|
|
28
|
+
type: vec2f,
|
|
29
|
+
initial_value: 'vec2( 1.0, 0.0 )',
|
|
30
|
+
//language=WGSL
|
|
31
|
+
reduction_code: `
|
|
32
|
+
output.x = min(texel.x, output.x);
|
|
33
|
+
output.y = max(texel.y, output.y);
|
|
34
|
+
`,
|
|
35
|
+
}),
|
|
36
|
+
resources,
|
|
37
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First reduction: depth of a region of the source (`settings.clip_region`) into the HZB's mip 0, min in
|
|
3
|
+
* R and max in G. The region is the whole viewport for a camera, and a slot of the atlas for a shadow
|
|
4
|
+
* map. Each HZB texel reduces every source texel its area overlaps, a footprint of
|
|
5
|
+
* {@link HZB_FOOTPRINT_X} by {@link HZB_FOOTPRINT_Y} texels at most.
|
|
6
|
+
*
|
|
7
|
+
* @type {ComputeShader}
|
|
8
|
+
*/
|
|
9
|
+
export const shader_hzb_reduce_mip0: ComputeShader;
|
|
10
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
11
|
+
//# sourceMappingURL=shader_hzb_reduce_mip0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_hzb_reduce_mip0.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/hiz/shader_hzb_reduce_mip0.js"],"names":[],"mappings":"AA2GA;;;;;;;GAOG;AACH,qCAFU,aAAa,CAMpB;8BApH2B,4BAA4B"}
|
|
@@ -1,111 +1,120 @@
|
|
|
1
|
-
import { vec2u, vec4u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
|
-
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
4
|
-
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
5
|
-
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
resources
|
|
25
|
-
|
|
26
|
-
resources.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
let
|
|
47
|
-
let
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
// Output Px
|
|
70
|
-
// Floor(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
let
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
// 5.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
1
|
+
import { vec2u, vec4u } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
5
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
+
import { chunk_hzb_footprint_x } from "./chunk_hzb_footprint_x.js";
|
|
7
|
+
import { chunk_hzb_footprint_y } from "./chunk_hzb_footprint_y.js";
|
|
8
|
+
import { HZB_TEXTURE_FORMAT } from "./HZB_TEXTURE_FORMAT.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Per-pass, 24 bytes, read-only.
|
|
12
|
+
*
|
|
13
|
+
* `clip_region` and `output_resolution` were two uniforms, so two buffers per pass. WGSL allows one
|
|
14
|
+
* immediate per entry point, so carrying them as immediate data means carrying them together.
|
|
15
|
+
*
|
|
16
|
+
* @type {WebGPUStruct}
|
|
17
|
+
*/
|
|
18
|
+
const HZB_CLIP_SETTINGS = WebGPUStruct.from({
|
|
19
|
+
// x, y, width, height
|
|
20
|
+
clip_region: vec4u,
|
|
21
|
+
output_resolution: vec2u,
|
|
22
|
+
}, 'HzbClipSettings');
|
|
23
|
+
|
|
24
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
25
|
+
|
|
26
|
+
resources.setImmediate("settings", HZB_CLIP_SETTINGS);
|
|
27
|
+
|
|
28
|
+
resources.createGroup()
|
|
29
|
+
.addTexture("tInput", "unfilterable-float")
|
|
30
|
+
.addStorageTexture("tOutput", HZB_TEXTURE_FORMAT, "2d", "write-only")
|
|
31
|
+
;
|
|
32
|
+
|
|
33
|
+
const body = CodeChunk.from(
|
|
34
|
+
//language=WGSL
|
|
35
|
+
`
|
|
36
|
+
@compute @workgroup_size(16, 16)
|
|
37
|
+
fn main(
|
|
38
|
+
@builtin(global_invocation_id) global_id: vec3<u32>,
|
|
39
|
+
) {
|
|
40
|
+
if (any(global_id.xy >= settings.output_resolution)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 1. Calculate the UV bounds of the current *output* pixel.
|
|
45
|
+
// We use the output resolution to determine how wide one pixel is in UV space.
|
|
46
|
+
let output_resolution_f = vec2<f32>(settings.output_resolution);
|
|
47
|
+
let uv = (vec2<f32>(global_id.xy) + 0.5) / output_resolution_f;
|
|
48
|
+
let output_pixel_size2 = 0.5 / output_resolution_f;
|
|
49
|
+
let uv_min = uv - output_pixel_size2;
|
|
50
|
+
let uv_max = uv + output_pixel_size2;
|
|
51
|
+
|
|
52
|
+
// minor epsilon to avoid float rounding errors
|
|
53
|
+
const EPSILON = 1e-6;
|
|
54
|
+
|
|
55
|
+
// Nudge the bounds slightly inward to absorb floating-point drift
|
|
56
|
+
let safe_uv_min = uv_min + EPSILON;
|
|
57
|
+
let safe_uv_max = uv_max - EPSILON;
|
|
58
|
+
|
|
59
|
+
// 2. Convert UV bounds to Source Texel coordinates (float).
|
|
60
|
+
// We map the 0..1 UVs to the size of the source clip region.
|
|
61
|
+
let source_size = vec2<f32>(settings.clip_region.zw);
|
|
62
|
+
let texel_min_f = safe_uv_min * source_size;
|
|
63
|
+
let texel_max_f = safe_uv_max * source_size;
|
|
64
|
+
|
|
65
|
+
// 3. Convert to Integer Bounds.
|
|
66
|
+
// Floor the min to find the first pixel.
|
|
67
|
+
// Ceil the max to find the exclusive upper bound.
|
|
68
|
+
// Example (5px -> 2px):
|
|
69
|
+
// Output Px 0 covers UV 0.0-0.5 -> Source 0.0 to 2.5
|
|
70
|
+
// Floor(0.0) = 0. Ceil(2.5) = 3. Pixels 0, 1, 2. (Pixel 2 is partially covered)
|
|
71
|
+
// Output Px 1 covers UV 0.5-1.0 -> Source 2.5 to 5.0
|
|
72
|
+
// Floor(2.5) = 2. Ceil(5.0) = 5. Pixels 2, 3, 4. (Pixel 2 is partially covered again)
|
|
73
|
+
let bound_min = vec2<i32>(floor(texel_min_f));
|
|
74
|
+
let bound_max = vec2<i32>(ceil(texel_max_f));
|
|
75
|
+
|
|
76
|
+
// 4. Clamp bounds to the clip region size to be safe.
|
|
77
|
+
let limit = vec2<i32>(settings.clip_region.zw);
|
|
78
|
+
|
|
79
|
+
let start = max(bound_min, vec2<i32>(0)) + vec2<i32>(settings.clip_region.xy);
|
|
80
|
+
let end = min(bound_max, limit) + vec2<i32>(settings.clip_region.xy);
|
|
81
|
+
|
|
82
|
+
// 5. Read the footprint, HZB_FOOTPRINT_X by HZB_FOOTPRINT_Y texels: the widest footprint of this
|
|
83
|
+
// dispatch on each axis. A narrower one repeats its last texel, which min/max ignores.
|
|
84
|
+
let last = end - vec2<i32>(1);
|
|
85
|
+
|
|
86
|
+
var output = vec2<f32>(1.0, 0.0); // Initialize min/max
|
|
87
|
+
|
|
88
|
+
for (var j = 0; j < HZB_FOOTPRINT_Y; j++) {
|
|
89
|
+
for (var i = 0; i < HZB_FOOTPRINT_X; i++) {
|
|
90
|
+
|
|
91
|
+
let load_coord = min(start + vec2<i32>(i, j), last);
|
|
92
|
+
|
|
93
|
+
let v = textureLoad(tInput, load_coord, 0).r;
|
|
94
|
+
|
|
95
|
+
output.x = min(output.x, v);
|
|
96
|
+
output.y = max(output.y, v);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
textureStore(tOutput, vec2<i32>(global_id.xy), vec4<f32>(output, 0.0, 0.0));
|
|
101
|
+
}
|
|
102
|
+
`, [
|
|
103
|
+
chunk_hzb_footprint_x,
|
|
104
|
+
chunk_hzb_footprint_y,
|
|
105
|
+
]
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* First reduction: depth of a region of the source (`settings.clip_region`) into the HZB's mip 0, min in
|
|
110
|
+
* R and max in G. The region is the whole viewport for a camera, and a slot of the atlas for a shadow
|
|
111
|
+
* map. Each HZB texel reduces every source texel its area overlaps, a footprint of
|
|
112
|
+
* {@link HZB_FOOTPRINT_X} by {@link HZB_FOOTPRINT_Y} texels at most.
|
|
113
|
+
*
|
|
114
|
+
* @type {ComputeShader}
|
|
115
|
+
*/
|
|
116
|
+
export const shader_hzb_reduce_mip0 = ComputeShader.from({
|
|
117
|
+
label: 'HZB / reduce mip0',
|
|
118
|
+
resources,
|
|
119
|
+
body,
|
|
120
|
+
});
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#302@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -9,6 +9,13 @@ export class GPUMaterialManager {
|
|
|
9
9
|
* @param {GPUSamplerManager} [samplers] required by templates that bind shared samplers — terrain's
|
|
10
10
|
*/
|
|
11
11
|
constructor(device: GPUDevice, textures: TextureManager, render_pipelines: RenderPipelineManager, bindings: BindGroupManager, virtual_textures?: VirtualTextureManager, samplers?: GPUSamplerManager);
|
|
12
|
+
/**
|
|
13
|
+
* Sent with a material when {@link update} restages its row because its {@link ShadeMaterial#version}
|
|
14
|
+
* moved: what the scene's material table and the material's uniform hold changes with this frame.
|
|
15
|
+
* Not sent for a material's first row, which {@link obtain} writes.
|
|
16
|
+
* @type {Signal<ShadeMaterial>}
|
|
17
|
+
*/
|
|
18
|
+
onMaterialRestaged: any;
|
|
12
19
|
/**
|
|
13
20
|
*
|
|
14
21
|
* @type {Map<ShadeMaterial, GPUMaterialContext>}
|
|
@@ -31,13 +38,16 @@ export class GPUMaterialManager {
|
|
|
31
38
|
* @param {GPUViewContext} options.view
|
|
32
39
|
* @param {number} options.texture_viz_mesh
|
|
33
40
|
* @param {number} options.texture_viz_triangle
|
|
41
|
+
* @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
|
|
42
|
+
* resolution. The caller owns it so that it outlives the frame: reprojection reads last frame's.
|
|
34
43
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
35
44
|
*/
|
|
36
|
-
graph_viz_render({ graph, view, texture_viz_mesh, texture_viz_triangle, }: {
|
|
45
|
+
graph_viz_render({ graph, view, texture_viz_mesh, texture_viz_triangle, texture_normal, }: {
|
|
37
46
|
graph: FrameGraph;
|
|
38
47
|
view: GPUViewContext;
|
|
39
48
|
texture_viz_mesh: number;
|
|
40
49
|
texture_viz_triangle: number;
|
|
50
|
+
texture_normal: number;
|
|
41
51
|
}): {
|
|
42
52
|
g_pbr: number;
|
|
43
53
|
g_normal: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AA4NA;IA4FI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAiD3B;IAlJD;;;;;OAKG;IACH,wBAAkC;IAOlC;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAyBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IAsLD;;;;;;;;;;OAUG;IACH;QAR+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,cAAc,EAA9B,MAAM;QAEJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CA4LnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAaC;IAED;;;;;;;OAOG;IACH,0BAFW,eAAe,QAazB;IAED;;;;;;;;;;;OAWG;IACH,kBAHW,qBAAqB,GACnB,QAAQ,IAAI,CAAC,CAMzB;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAuED;;;OAGG;IACH,YAFW,sBAAsB,QAmChC;;CAEJ;8BAl4BY,OAAO,0CAA0C,EAAE,eAAe;6BAClE,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCAtBzE,yBAAyB;mCAjBG,8CAA8C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import Signal from "../../../core/events/signal/Signal.js";
|
|
2
3
|
import { BindGroupLayoutDescriptor } from "../../descriptor/binding/BindGroupLayoutDescriptor.js";
|
|
3
4
|
import { BufferBindingLayout } from "../../descriptor/binding/BufferBindingLayout.js";
|
|
4
5
|
import { GPUShaderStage } from "../../descriptor/GPUShaderStage.js";
|
|
@@ -219,6 +220,14 @@ const material_buffer_pipeline_descriptor = RenderPipelineDescriptor.from({
|
|
|
219
220
|
|
|
220
221
|
export class GPUMaterialManager {
|
|
221
222
|
|
|
223
|
+
/**
|
|
224
|
+
* Sent with a material when {@link update} restages its row because its {@link ShadeMaterial#version}
|
|
225
|
+
* moved: what the scene's material table and the material's uniform hold changes with this frame.
|
|
226
|
+
* Not sent for a material's first row, which {@link obtain} writes.
|
|
227
|
+
* @type {Signal<ShadeMaterial>}
|
|
228
|
+
*/
|
|
229
|
+
onMaterialRestaged = new Signal();
|
|
230
|
+
|
|
222
231
|
/**
|
|
223
232
|
* @type {GPUDevice}
|
|
224
233
|
*/
|
|
@@ -458,6 +467,8 @@ export class GPUMaterialManager {
|
|
|
458
467
|
* @param {GPUViewContext} options.view
|
|
459
468
|
* @param {number} options.texture_viz_mesh
|
|
460
469
|
* @param {number} options.texture_viz_triangle
|
|
470
|
+
* @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
|
|
471
|
+
* resolution. The caller owns it so that it outlives the frame: reprojection reads last frame's.
|
|
461
472
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
462
473
|
*/
|
|
463
474
|
graph_viz_render({
|
|
@@ -465,9 +476,11 @@ export class GPUMaterialManager {
|
|
|
465
476
|
view,
|
|
466
477
|
texture_viz_mesh,
|
|
467
478
|
texture_viz_triangle,
|
|
479
|
+
texture_normal,
|
|
468
480
|
}) {
|
|
469
481
|
|
|
470
482
|
assert.defined(graph, 'graph');
|
|
483
|
+
assert.isNonNegativeInteger(texture_normal, 'texture_normal');
|
|
471
484
|
assert.defined(view, 'view');
|
|
472
485
|
|
|
473
486
|
/**
|
|
@@ -611,14 +624,7 @@ export class GPUMaterialManager {
|
|
|
611
624
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
612
625
|
})
|
|
613
626
|
);
|
|
614
|
-
pass_data.g_normal = pass.
|
|
615
|
-
"g-buffer / Normal",
|
|
616
|
-
TextureResourceDescriptor.from({
|
|
617
|
-
format: 'rgba16uint',
|
|
618
|
-
resolution: view.resolution,
|
|
619
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
620
|
-
})
|
|
621
|
-
);
|
|
627
|
+
pass_data.g_normal = pass.write(texture_normal);
|
|
622
628
|
pass_data.g_albedo = pass.create(
|
|
623
629
|
"g-buffer / Albedo",
|
|
624
630
|
TextureResourceDescriptor.from({
|
|
@@ -906,6 +912,8 @@ export class GPUMaterialManager {
|
|
|
906
912
|
const row = this.#stage_metadata(material_ctx);
|
|
907
913
|
|
|
908
914
|
material_ctx.write_uniform(queue, row);
|
|
915
|
+
|
|
916
|
+
this.onMaterialRestaged.send1(material_ctx.source);
|
|
909
917
|
}
|
|
910
918
|
}
|
|
911
919
|
|