@woosh/meep-engine 3.11.3 → 3.12.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/README.md +14 -18
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +2 -2
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +350 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +12 -15
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
|
@@ -1,232 +1,231 @@
|
|
|
1
|
-
import { atomic_u32, f32, u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
-
import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
|
|
5
|
-
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
6
|
-
import {
|
|
7
|
-
VIZ_BUFFER_INVALID_MESH_VALUE
|
|
8
|
-
} from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
|
|
9
|
-
import { MATERIAL_METADATA_STRUCT } from "../../material/MATERIAL_METADATA_STRUCT.js";
|
|
10
|
-
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
11
|
-
import { RENDER_GLOBAL_MIP_BIAS } from "../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
|
|
12
|
-
import { chunk_barycentric_full } from "../../shader/chunk/geometry/triangle/chunk_barycentric_full.js";
|
|
13
|
-
import { chunk_barycentric_interpolate_uv } from "../../shader/chunk/geometry/triangle/chunk_barycentric_interpolate_uv.js";
|
|
14
|
-
import { chunk_decode_meshlet_element } from "../../shader/chunk/geometry/meshlet/chunk_decode_meshlet_element.js";
|
|
15
|
-
import {
|
|
16
|
-
chunk_read_meshlet_triangle_vertices
|
|
17
|
-
} from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_vertices.js";
|
|
18
|
-
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
19
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
20
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
21
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
22
|
-
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
23
|
-
import { chunk_vt_request_key } from "./chunk_vt_request_key.js";
|
|
24
|
-
import { VT_STACK_ID_INVALID } from "./VT_CONSTANTS.js";
|
|
25
|
-
import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Uniform parameters of the feedback pass.
|
|
29
|
-
*
|
|
30
|
-
* `stride` — the pass samples one pixel per stride×stride block;
|
|
31
|
-
* `jitter` — which pixel of the block this frame (cycled by the manager so
|
|
32
|
-
* coverage integrates to every pixel over stride² frames);
|
|
33
|
-
* `mip_bias` — added to the requested LOD; carries the residency
|
|
34
|
-
* (over-subscription) bias so pressure degrades to blur instead of thrash.
|
|
35
|
-
*/
|
|
36
|
-
export const VT_FEEDBACK_PARAMS_STRUCT = WebGPUStruct.from({
|
|
37
|
-
stride: u32,
|
|
38
|
-
jitter: vec2u,
|
|
39
|
-
mip_bias: f32,
|
|
40
|
-
}, "VTFeedbackParams").pack();
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Matches the fragment_gbuffer derivative bias so feedback requests the mips
|
|
44
|
-
* the material pass actually samples.
|
|
45
|
-
* @type {number}
|
|
46
|
-
*/
|
|
47
|
-
const MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
|
|
48
|
-
|
|
49
|
-
export const VT_FEEDBACK_WORKGROUP_SIZE = 8;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Builds the feedback compute shader: one thread per sampled pixel, reading
|
|
53
|
-
* the visibility buffer and reproducing the material pass's UV + analytic
|
|
54
|
-
* gradient math (vertex pulling + perspective-correct barycentric
|
|
55
|
-
* derivatives), then inserting the touched (stack, mip, page) key into a
|
|
56
|
-
* global hash set of unique requests.
|
|
57
|
-
*
|
|
58
|
-
* This is the "no second geometry pass" property: the viz buffer already
|
|
59
|
-
* identifies the triangle per pixel, so usage detection is a bounded-cost
|
|
60
|
-
* screen-space compute pass regardless of scene complexity, shared by every
|
|
61
|
-
* virtual texture in the frame.
|
|
62
|
-
*
|
|
63
|
-
* The hash set is insert-only and cleared each frame; the CPU reads the raw
|
|
64
|
-
* table back and treats presence as "touched this frame" — both residency
|
|
65
|
-
* touches (LRU) and misses (load requests) fall out of the same data.
|
|
66
|
-
*
|
|
67
|
-
* @param {Object} config
|
|
68
|
-
* @param {CodeChunk} config.chunk_vt_lookup from {@link build_chunk_vt_lookup}
|
|
69
|
-
* @param {number} config.hash_capacity power of two
|
|
70
|
-
* @returns {ComputeShader}
|
|
71
|
-
*/
|
|
72
|
-
export function build_shader_vt_feedback({ chunk_vt_lookup, hash_capacity }) {
|
|
73
|
-
|
|
74
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
75
|
-
|
|
76
|
-
resources.createGroup()
|
|
77
|
-
.addTexture("viz_buffer_triangle", "uint")
|
|
78
|
-
.addTexture("viz_buffer_mesh", "uint")
|
|
79
|
-
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
80
|
-
.addUniform("vt_params", VT_FEEDBACK_PARAMS_STRUCT)
|
|
81
|
-
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
82
|
-
.addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
|
|
83
|
-
.addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE)
|
|
84
|
-
.addStorageBuffer("material_metadata", WebGPUArray.from(MATERIAL_METADATA_STRUCT))
|
|
85
|
-
.addStorageBuffer("vt_stacks", WebGPUArray.from(VT_STACK_INFO_STRUCT))
|
|
86
|
-
.addStorageBuffer("vt_requests", WebGPUArray.from(atomic_u32), true);
|
|
87
|
-
|
|
88
|
-
const body = CodeChunk.from(
|
|
89
|
-
//language=WGSL
|
|
90
|
-
`
|
|
91
|
-
const VT_HASH_CAPACITY_MASK: u32 = ${hash_capacity - 1}u;
|
|
92
|
-
const VT_HASH_MAX_PROBES: u32 = 32u;
|
|
93
|
-
|
|
94
|
-
const MIP_BIAS: f32 = ${MIP_DERIVATIVE_BIAS.toFixed(8)};
|
|
95
|
-
|
|
96
|
-
// Insert-only open-addressing hash set. Values are stored as key+1 so a
|
|
97
|
-
// zero-cleared buffer means "all empty" (same conventions as
|
|
98
|
-
// common/hash_table, which is the CPU-build/GPU-read counterpart of this
|
|
99
|
-
// GPU-insert/CPU-read set; see also the SHARC hash map for the bucketed
|
|
100
|
-
// key->index variant).
|
|
101
|
-
//
|
|
102
|
-
// Forward-progress note: this loop never waits on another invocation's
|
|
103
|
-
// progress. The atomicCompareExchangeWeak retry only re-tests a *local*
|
|
104
|
-
// spurious failure, every iteration consumes the shared probe budget, and
|
|
105
|
-
// the loop is hard-bounded at VT_HASH_MAX_PROBES regardless of what other
|
|
106
|
-
// threads do. On exhaustion the fallback is to DROP the request — benign,
|
|
107
|
-
// feedback re-emits it next frame. Contrast with the decoupled-lookback
|
|
108
|
-
// spin in common/prefix_sum/v1/shader_prefix_scan_csdldf.js, where the
|
|
109
|
-
// awaited value is required for correctness and the bounded spin
|
|
110
|
-
// (MAX_SPIN_COUNT) must therefore pair with a local recompute fallback.
|
|
111
|
-
fn vt_request_insert(key: u32) {
|
|
112
|
-
let stored = key + 1u;
|
|
113
|
-
|
|
114
|
-
var h = hash_lowbias32(key) & VT_HASH_CAPACITY_MASK;
|
|
115
|
-
|
|
116
|
-
for (var i = 0u; i < VT_HASH_MAX_PROBES; i++) {
|
|
117
|
-
let existing = atomicLoad(&vt_requests[h]);
|
|
118
|
-
|
|
119
|
-
if (existing == stored) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (existing == 0u) {
|
|
124
|
-
let r = atomicCompareExchangeWeak(&vt_requests[h], 0u, stored);
|
|
125
|
-
|
|
126
|
-
if (r.exchanged || r.old_value == stored) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (r.old_value == 0u) {
|
|
131
|
-
// spurious weak failure — retry the same slot
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
h = (h + 1u) & VT_HASH_CAPACITY_MASK;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
@compute @workgroup_size(${VT_FEEDBACK_WORKGROUP_SIZE}, ${VT_FEEDBACK_WORKGROUP_SIZE}, 1)
|
|
141
|
-
fn main(
|
|
142
|
-
@builtin(global_invocation_id) gid: vec3<u32>,
|
|
143
|
-
) {
|
|
144
|
-
let pixel = gid.xy * vt_params.stride + vt_params.jitter;
|
|
145
|
-
|
|
146
|
-
if (pixel.x >= view.width || pixel.y >= view.height) {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
let mesh_index = textureLoad(viz_buffer_mesh, vec2<i32>(pixel), 0).r;
|
|
151
|
-
|
|
152
|
-
if (mesh_index == ${VIZ_BUFFER_INVALID_MESH_VALUE}u) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
let mesh = scene_read_mesh(&scene_database, mesh_index);
|
|
157
|
-
|
|
158
|
-
let stack_id = material_metadata[mesh.material].vt_stack;
|
|
159
|
-
|
|
160
|
-
if (stack_id == ${VT_STACK_ID_INVALID}u) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
let info = vt_stacks[stack_id];
|
|
165
|
-
|
|
166
|
-
// ── UV + gradients, mirroring fragment_gbuffer ──────────────────
|
|
167
|
-
let encoded_meshlet_triangle = textureLoad(viz_buffer_triangle, vec2<i32>(pixel), 0).r;
|
|
168
|
-
|
|
169
|
-
let decoded = decode_meshlet_element(encoded_meshlet_triangle);
|
|
170
|
-
let meshlet_id = decoded[0];
|
|
171
|
-
let meshlet_triangle_id = decoded[1];
|
|
172
|
-
|
|
173
|
-
let node = scene_read_node(&scene_database, mesh.node);
|
|
174
|
-
|
|
175
|
-
let triangle = read_meshlet_triangle_vertices(meshlet_id, meshlet_triangle_id);
|
|
176
|
-
|
|
177
|
-
let mesh_transform = node.global;
|
|
178
|
-
|
|
179
|
-
let p0 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.a.position, 1.0));
|
|
180
|
-
let p1 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.b.position, 1.0));
|
|
181
|
-
let p2 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.c.position, 1.0));
|
|
182
|
-
|
|
183
|
-
let pixel_center = vec2<f32>(pixel) + 0.5;
|
|
184
|
-
|
|
185
|
-
let barycentric = barycentric_full(p0, p1, p2, pixel_center);
|
|
186
|
-
|
|
187
|
-
var uv0 = triangle.a.uv;
|
|
188
|
-
var uv1 = triangle.b.uv;
|
|
189
|
-
var uv2 = triangle.c.uv;
|
|
190
|
-
|
|
191
|
-
if ((info.flags & VT_STACK_FLAG_UV_SET_1) != 0u) {
|
|
192
|
-
uv0 = triangle.a.uv1;
|
|
193
|
-
uv1 = triangle.b.uv1;
|
|
194
|
-
uv2 = triangle.c.uv1;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
var uv_info = barycentric_interpolate_uv(barycentric, uv0, uv1, uv2);
|
|
198
|
-
|
|
199
|
-
let uv_derivative_bias = MIP_BIAS / view.upscale_ratio;
|
|
200
|
-
|
|
201
|
-
uv_info.ddx *= uv_derivative_bias.x;
|
|
202
|
-
uv_info.ddy *= uv_derivative_bias.y;
|
|
203
|
-
|
|
204
|
-
// ── request ─────────────────────────────────────────────────────
|
|
205
|
-
let uv_wrapped = vt_stack_wrap_uv(uv_info.uv, info.flags);
|
|
206
|
-
|
|
207
|
-
let mip = vt_mip_select(info, uv_info.ddx, uv_info.ddy, vt_params.mip_bias);
|
|
208
|
-
|
|
209
|
-
let page = vt_page_coord(info, uv_wrapped, mip);
|
|
210
|
-
|
|
211
|
-
vt_request_insert(vt_request_key_pack(stack_id, mip, page));
|
|
212
|
-
}
|
|
213
|
-
`,
|
|
214
|
-
[
|
|
215
|
-
chunk_vt_lookup,
|
|
216
|
-
chunk_vt_request_key,
|
|
217
|
-
chunk_hash_lowbias32,
|
|
218
|
-
chunk_scene_database_access,
|
|
219
|
-
chunk_decode_meshlet_element,
|
|
220
|
-
chunk_read_meshlet_triangle_vertices,
|
|
221
|
-
chunk_barycentric_full,
|
|
222
|
-
chunk_barycentric_interpolate_uv,
|
|
223
|
-
]
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
return ComputeShader.from({
|
|
227
|
-
label: 'vt/feedback',
|
|
228
|
-
body,
|
|
229
|
-
resources,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
1
|
+
import { atomic_u32, f32, u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
+
import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
|
|
5
|
+
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
6
|
+
import {
|
|
7
|
+
VIZ_BUFFER_INVALID_MESH_VALUE
|
|
8
|
+
} from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
|
|
9
|
+
import { MATERIAL_METADATA_STRUCT } from "../../material/MATERIAL_METADATA_STRUCT.js";
|
|
10
|
+
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
11
|
+
import { RENDER_GLOBAL_MIP_BIAS } from "../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
|
|
12
|
+
import { chunk_barycentric_full } from "../../shader/chunk/geometry/triangle/chunk_barycentric_full.js";
|
|
13
|
+
import { chunk_barycentric_interpolate_uv } from "../../shader/chunk/geometry/triangle/chunk_barycentric_interpolate_uv.js";
|
|
14
|
+
import { chunk_decode_meshlet_element } from "../../shader/chunk/geometry/meshlet/chunk_decode_meshlet_element.js";
|
|
15
|
+
import {
|
|
16
|
+
chunk_read_meshlet_triangle_vertices
|
|
17
|
+
} from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_vertices.js";
|
|
18
|
+
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
19
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
20
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
21
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
22
|
+
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
23
|
+
import { chunk_vt_request_key } from "./chunk_vt_request_key.js";
|
|
24
|
+
import { VT_STACK_ID_INVALID } from "./VT_CONSTANTS.js";
|
|
25
|
+
import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Uniform parameters of the feedback pass.
|
|
29
|
+
*
|
|
30
|
+
* `stride` — the pass samples one pixel per stride×stride block;
|
|
31
|
+
* `jitter` — which pixel of the block this frame (cycled by the manager so
|
|
32
|
+
* coverage integrates to every pixel over stride² frames);
|
|
33
|
+
* `mip_bias` — added to the requested LOD; carries the residency
|
|
34
|
+
* (over-subscription) bias so pressure degrades to blur instead of thrash.
|
|
35
|
+
*/
|
|
36
|
+
export const VT_FEEDBACK_PARAMS_STRUCT = WebGPUStruct.from({
|
|
37
|
+
stride: u32,
|
|
38
|
+
jitter: vec2u,
|
|
39
|
+
mip_bias: f32,
|
|
40
|
+
}, "VTFeedbackParams").pack();
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Matches the fragment_gbuffer derivative bias so feedback requests the mips
|
|
44
|
+
* the material pass actually samples.
|
|
45
|
+
* @type {number}
|
|
46
|
+
*/
|
|
47
|
+
const MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
|
|
48
|
+
|
|
49
|
+
export const VT_FEEDBACK_WORKGROUP_SIZE = 8;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Builds the feedback compute shader: one thread per sampled pixel, reading
|
|
53
|
+
* the visibility buffer and reproducing the material pass's UV + analytic
|
|
54
|
+
* gradient math (vertex pulling + perspective-correct barycentric
|
|
55
|
+
* derivatives), then inserting the touched (stack, mip, page) key into a
|
|
56
|
+
* global hash set of unique requests.
|
|
57
|
+
*
|
|
58
|
+
* This is the "no second geometry pass" property: the viz buffer already
|
|
59
|
+
* identifies the triangle per pixel, so usage detection is a bounded-cost
|
|
60
|
+
* screen-space compute pass regardless of scene complexity, shared by every
|
|
61
|
+
* virtual texture in the frame.
|
|
62
|
+
*
|
|
63
|
+
* The hash set is insert-only and cleared each frame; the CPU reads the raw
|
|
64
|
+
* table back and treats presence as "touched this frame" — both residency
|
|
65
|
+
* touches (LRU) and misses (load requests) fall out of the same data.
|
|
66
|
+
*
|
|
67
|
+
* @param {Object} config
|
|
68
|
+
* @param {CodeChunk} config.chunk_vt_lookup from {@link build_chunk_vt_lookup}
|
|
69
|
+
* @param {number} config.hash_capacity power of two
|
|
70
|
+
* @returns {ComputeShader}
|
|
71
|
+
*/
|
|
72
|
+
export function build_shader_vt_feedback({ chunk_vt_lookup, hash_capacity }) {
|
|
73
|
+
|
|
74
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
75
|
+
|
|
76
|
+
resources.createGroup()
|
|
77
|
+
.addTexture("viz_buffer_triangle", "uint")
|
|
78
|
+
.addTexture("viz_buffer_mesh", "uint")
|
|
79
|
+
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
80
|
+
.addUniform("vt_params", VT_FEEDBACK_PARAMS_STRUCT)
|
|
81
|
+
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
82
|
+
.addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
|
|
83
|
+
.addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE)
|
|
84
|
+
.addStorageBuffer("material_metadata", WebGPUArray.from(MATERIAL_METADATA_STRUCT))
|
|
85
|
+
.addStorageBuffer("vt_stacks", WebGPUArray.from(VT_STACK_INFO_STRUCT))
|
|
86
|
+
.addStorageBuffer("vt_requests", WebGPUArray.from(atomic_u32), true);
|
|
87
|
+
|
|
88
|
+
const body = CodeChunk.from(
|
|
89
|
+
//language=WGSL
|
|
90
|
+
`
|
|
91
|
+
const VT_HASH_CAPACITY_MASK: u32 = ${hash_capacity - 1}u;
|
|
92
|
+
const VT_HASH_MAX_PROBES: u32 = 32u;
|
|
93
|
+
|
|
94
|
+
const MIP_BIAS: f32 = ${MIP_DERIVATIVE_BIAS.toFixed(8)};
|
|
95
|
+
|
|
96
|
+
// Insert-only open-addressing hash set. Values are stored as key+1 so a
|
|
97
|
+
// zero-cleared buffer means "all empty" (same conventions as
|
|
98
|
+
// common/hash_table, which is the CPU-build/GPU-read counterpart of this
|
|
99
|
+
// GPU-insert/CPU-read set; see also the SHARC hash map for the bucketed
|
|
100
|
+
// key->index variant).
|
|
101
|
+
//
|
|
102
|
+
// Forward-progress note: this loop never waits on another invocation's
|
|
103
|
+
// progress. The atomicCompareExchangeWeak retry only re-tests a *local*
|
|
104
|
+
// spurious failure, every iteration consumes the shared probe budget, and
|
|
105
|
+
// the loop is hard-bounded at VT_HASH_MAX_PROBES regardless of what other
|
|
106
|
+
// threads do. On exhaustion the fallback is to DROP the request — benign,
|
|
107
|
+
// feedback re-emits it next frame. Contrast with the decoupled-lookback
|
|
108
|
+
// spin in common/prefix_sum/v1/shader_prefix_scan_csdldf.js, where the
|
|
109
|
+
// awaited value is required for correctness and the bounded spin
|
|
110
|
+
// (MAX_SPIN_COUNT) must therefore pair with a local recompute fallback.
|
|
111
|
+
fn vt_request_insert(key: u32) {
|
|
112
|
+
let stored = key + 1u;
|
|
113
|
+
|
|
114
|
+
var h = hash_lowbias32(key) & VT_HASH_CAPACITY_MASK;
|
|
115
|
+
|
|
116
|
+
for (var i = 0u; i < VT_HASH_MAX_PROBES; i++) {
|
|
117
|
+
let existing = atomicLoad(&vt_requests[h]);
|
|
118
|
+
|
|
119
|
+
if (existing == stored) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (existing == 0u) {
|
|
124
|
+
let r = atomicCompareExchangeWeak(&vt_requests[h], 0u, stored);
|
|
125
|
+
|
|
126
|
+
if (r.exchanged || r.old_value == stored) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (r.old_value == 0u) {
|
|
131
|
+
// spurious weak failure — retry the same slot
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
h = (h + 1u) & VT_HASH_CAPACITY_MASK;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@compute @workgroup_size(${VT_FEEDBACK_WORKGROUP_SIZE}, ${VT_FEEDBACK_WORKGROUP_SIZE}, 1)
|
|
141
|
+
fn main(
|
|
142
|
+
@builtin(global_invocation_id) gid: vec3<u32>,
|
|
143
|
+
) {
|
|
144
|
+
let pixel = gid.xy * vt_params.stride + vt_params.jitter;
|
|
145
|
+
|
|
146
|
+
if (pixel.x >= view.width || pixel.y >= view.height) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let mesh_index = textureLoad(viz_buffer_mesh, vec2<i32>(pixel), 0).r;
|
|
151
|
+
|
|
152
|
+
if (mesh_index == ${VIZ_BUFFER_INVALID_MESH_VALUE}u) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
let mesh = scene_read_mesh(&scene_database, mesh_index);
|
|
157
|
+
|
|
158
|
+
let stack_id = material_metadata[mesh.material].vt_stack;
|
|
159
|
+
|
|
160
|
+
if (stack_id == ${VT_STACK_ID_INVALID}u) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
let info = vt_stacks[stack_id];
|
|
165
|
+
|
|
166
|
+
// ── UV + gradients, mirroring fragment_gbuffer ──────────────────
|
|
167
|
+
let encoded_meshlet_triangle = textureLoad(viz_buffer_triangle, vec2<i32>(pixel), 0).r;
|
|
168
|
+
|
|
169
|
+
let decoded = decode_meshlet_element(encoded_meshlet_triangle);
|
|
170
|
+
let meshlet_id = decoded[0];
|
|
171
|
+
let meshlet_triangle_id = decoded[1];
|
|
172
|
+
|
|
173
|
+
let node = scene_read_node(&scene_database, mesh.node);
|
|
174
|
+
|
|
175
|
+
let triangle = read_meshlet_triangle_vertices(meshlet_id, meshlet_triangle_id);
|
|
176
|
+
|
|
177
|
+
let mesh_transform = node.global;
|
|
178
|
+
|
|
179
|
+
let p0 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.a.position, 1.0));
|
|
180
|
+
let p1 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.b.position, 1.0));
|
|
181
|
+
let p2 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.c.position, 1.0));
|
|
182
|
+
|
|
183
|
+
let pixel_center = vec2<f32>(pixel) + 0.5;
|
|
184
|
+
|
|
185
|
+
let barycentric = barycentric_full(p0, p1, p2, pixel_center);
|
|
186
|
+
|
|
187
|
+
var uv0 = triangle.a.uv;
|
|
188
|
+
var uv1 = triangle.b.uv;
|
|
189
|
+
var uv2 = triangle.c.uv;
|
|
190
|
+
|
|
191
|
+
if ((info.flags & VT_STACK_FLAG_UV_SET_1) != 0u) {
|
|
192
|
+
uv0 = triangle.a.uv1;
|
|
193
|
+
uv1 = triangle.b.uv1;
|
|
194
|
+
uv2 = triangle.c.uv1;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
var uv_info = barycentric_interpolate_uv(barycentric, uv0, uv1, uv2);
|
|
198
|
+
|
|
199
|
+
let uv_derivative_bias = MIP_BIAS / view.upscale_ratio;
|
|
200
|
+
|
|
201
|
+
uv_info.ddx *= uv_derivative_bias.x;
|
|
202
|
+
uv_info.ddy *= uv_derivative_bias.y;
|
|
203
|
+
|
|
204
|
+
// ── request ─────────────────────────────────────────────────────
|
|
205
|
+
let uv_wrapped = vt_stack_wrap_uv(uv_info.uv, info.flags);
|
|
206
|
+
|
|
207
|
+
let mip = vt_mip_select(info, uv_info.ddx, uv_info.ddy, vt_params.mip_bias);
|
|
208
|
+
|
|
209
|
+
let page = vt_page_coord(info, uv_wrapped, mip);
|
|
210
|
+
|
|
211
|
+
vt_request_insert(vt_request_key_pack(stack_id, mip, page));
|
|
212
|
+
}
|
|
213
|
+
`,
|
|
214
|
+
[
|
|
215
|
+
chunk_vt_lookup,
|
|
216
|
+
chunk_vt_request_key,
|
|
217
|
+
chunk_hash_lowbias32,
|
|
218
|
+
chunk_scene_database_access,
|
|
219
|
+
chunk_decode_meshlet_element,
|
|
220
|
+
chunk_read_meshlet_triangle_vertices,
|
|
221
|
+
chunk_barycentric_full,
|
|
222
|
+
chunk_barycentric_interpolate_uv,
|
|
223
|
+
]
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
return ComputeShader.from({
|
|
227
|
+
label: 'vt/feedback',
|
|
228
|
+
body,
|
|
229
|
+
resources,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"AAyBA;;;;;;;GAOG;AACH,4DAFa;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,CAgEjE;AAqTD;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;EAwKC"}
|
|
@@ -9,10 +9,7 @@ import { SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR } from "../shadow/map/SHADOWMAP_CO
|
|
|
9
9
|
import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../STATIC_GRAPHICS_ENGINE_ASSETS.js";
|
|
10
10
|
import { DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR } from "../texture/DEFAULT_RENDER_TARGET_VIEW_DESCRIPTOR.js";
|
|
11
11
|
import { volumetrics_sun_shadow_texture_name } from "./chunk_volumetrics_sun_optical_depth.js";
|
|
12
|
-
import {
|
|
13
|
-
shader_volumetrics_build_lighting,
|
|
14
|
-
VOLUMETRICS_LIGHTING_WORKGROUP_RESOLUTION
|
|
15
|
-
} from "./shader_volumetrics_build_lighting.js";
|
|
12
|
+
import { shader_volumetrics_build_lighting } from "./shader_volumetrics_build_lighting.js";
|
|
16
13
|
import { shader_volumetrics_build_participating_media } from "./shader_volumetrics_build_participating_media.js";
|
|
17
14
|
import { shader_volumetrics_build_scattering_lut } from "./shader_volumetrics_build_scattering_lut.js";
|
|
18
15
|
import {
|
|
@@ -144,11 +141,11 @@ function graph_integrate_participating_media({
|
|
|
144
141
|
|
|
145
142
|
const volumetrics_metadata = resources.get(data.volumetrics_metadata);
|
|
146
143
|
|
|
147
|
-
shader_volumetrics_build_participating_media.
|
|
144
|
+
shader_volumetrics_build_participating_media.dispatchThreads({
|
|
148
145
|
encoder,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
146
|
+
thread_count_x: output0.width,
|
|
147
|
+
thread_count_y: output0.height,
|
|
148
|
+
thread_count_z: output0.depth,
|
|
152
149
|
bindings: {
|
|
153
150
|
camera: camera.buffer.buffer,
|
|
154
151
|
view: view.uniform_buffer.buffer,
|
|
@@ -371,11 +368,11 @@ function graph_integrate_light_scattering({
|
|
|
371
368
|
bindings[volumetrics_sun_shadow_texture_name(cascade)] = sun_shadow_cascades[cascade].obtainView();
|
|
372
369
|
}
|
|
373
370
|
|
|
374
|
-
shader_volumetrics_build_lighting.
|
|
371
|
+
shader_volumetrics_build_lighting.dispatchThreads({
|
|
375
372
|
encoder,
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
373
|
+
thread_count_x: output.width,
|
|
374
|
+
thread_count_y: output.height,
|
|
375
|
+
thread_count_z: output.depth,
|
|
379
376
|
bindings
|
|
380
377
|
})
|
|
381
378
|
});
|
|
@@ -538,10 +535,10 @@ export function graph_build_volumetrics({
|
|
|
538
535
|
|
|
539
536
|
const tSTBN_vec3 = graphics.textures.obtain(STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec3);
|
|
540
537
|
|
|
541
|
-
shader_volumetrics_build_scattering_lut.
|
|
538
|
+
shader_volumetrics_build_scattering_lut.dispatchThreads({
|
|
542
539
|
encoder,
|
|
543
|
-
|
|
544
|
-
|
|
540
|
+
thread_count_x: output.width,
|
|
541
|
+
thread_count_y: output.height,
|
|
545
542
|
bindings: {
|
|
546
543
|
camera: camera.buffer.buffer,
|
|
547
544
|
view: view.uniform_buffer.buffer,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Workgroup shape of this pass, `[x, y, z]` in froxels,
|
|
3
|
-
*
|
|
2
|
+
* Workgroup shape of this pass, `[x, y, z]` in froxels, stated to the `@workgroup_size` below.
|
|
3
|
+
* That attribute is where the dispatch gets the shape from in turn: `graph_build_volumetrics` asks
|
|
4
|
+
* for a thread count and `ComputeShader` divides by the size it read back out of the WGSL.
|
|
4
5
|
*
|
|
5
6
|
* Flat in z. Lights are binned into 3D clusters and the largest distance between neighbouring
|
|
6
7
|
* clusters is along depth, so a group spanning z is the one spanning the most unrelated light
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_volumetrics_build_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js"],"names":[],"mappings":"AA6CA
|
|
1
|
+
{"version":3,"file":"shader_volumetrics_build_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js"],"names":[],"mappings":"AA6CA;;;;;;;;;;;;;;;GAeG;AACH,wDAFU,MAAM,EAAE,CAEiD;AAkXnE,8DAIE;8BA/Z4B,4BAA4B"}
|
|
@@ -44,8 +44,9 @@ import { chunk_volumetrics_local_light_shadow } from "./chunk_volumetrics_local_
|
|
|
44
44
|
import { VOLUMETRICS_METADATA_STRUCT } from "./VOLUMETRICS_METADATA_STRUCT.js";
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* Workgroup shape of this pass, `[x, y, z]` in froxels,
|
|
48
|
-
*
|
|
47
|
+
* Workgroup shape of this pass, `[x, y, z]` in froxels, stated to the `@workgroup_size` below.
|
|
48
|
+
* That attribute is where the dispatch gets the shape from in turn: `graph_build_volumetrics` asks
|
|
49
|
+
* for a thread count and `ComputeShader` divides by the size it read back out of the WGSL.
|
|
49
50
|
*
|
|
50
51
|
* Flat in z. Lights are binned into 3D clusters and the largest distance between neighbouring
|
|
51
52
|
* clusters is along depth, so a group spanning z is the one spanning the most unrelated light
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export const chunk_volumetrics_froxel_coord_to_uvw: CodeChunk;
|
|
2
1
|
export const shader_volumetrics_taa: ComputeShader;
|
|
3
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
2
|
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
5
3
|
//# sourceMappingURL=shader_volumetrics_taa.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_volumetrics_taa.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_volumetrics_taa.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js"],"names":[],"mappings":"AA0UA,mDAIG;8BApU2B,+BAA+B"}
|
|
@@ -88,10 +88,23 @@ fn texture_sample_blackman_harris_3d(
|
|
|
88
88
|
[chunk_filter_blackman_harris229]
|
|
89
89
|
);
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Froxel coordinate -> a sample point for `frustum_sample_point`, NOT a froxel texture coordinate.
|
|
93
|
+
*
|
|
94
|
+
* That distinction is the whole reason this is not `volumetrics_position_world_to_froxel_uvw`
|
|
95
|
+
* turned around. There `w` is slice space -- `log2(fma(depth, x, y)) * z`, corrected by the
|
|
96
|
+
* cell-averaged content offset -- because it addresses the 3D texture. Here `w` is a LINEAR
|
|
97
|
+
* fraction of the near..far range, because its only consumer is `frustum_sample_point`, which
|
|
98
|
+
* mixes the near and far planes linearly. The two agree at the endpoints and nowhere between, so
|
|
99
|
+
* feeding this `w` to a froxel textureSample reads the wrong slab.
|
|
100
|
+
*
|
|
101
|
+
* @see volumetrics_position_world_to_froxel_uvw
|
|
102
|
+
* @type {CodeChunk}
|
|
103
|
+
*/
|
|
104
|
+
const chunk_volumetrics_froxel_coord_to_frustum_uvw = CodeChunk.from(
|
|
92
105
|
//language=WGSL
|
|
93
106
|
`
|
|
94
|
-
fn
|
|
107
|
+
fn volumetrics_froxel_coord_to_frustum_uvw(
|
|
95
108
|
coord: vec3<u32>,
|
|
96
109
|
res: vec3<u32>,
|
|
97
110
|
camera: ${CAMERA_UNIFORM_STRUCT.wgsl_ref},
|
|
@@ -139,7 +152,7 @@ fn world_pos_from_froxel(
|
|
|
139
152
|
cluster_params: vec3f,
|
|
140
153
|
frustum: array<vec4<f32>, 6>
|
|
141
154
|
) -> vec3f {
|
|
142
|
-
let uvw =
|
|
155
|
+
let uvw = volumetrics_froxel_coord_to_frustum_uvw(coord, res, camera, cluster_params);
|
|
143
156
|
|
|
144
157
|
// Reconstruct the froxel-centre world position. frustum_sample_point intersects the
|
|
145
158
|
// interpolated L/R, B/T, N/F planes; X maps left->left and Z maps near->far directly, so only
|
|
@@ -150,7 +163,7 @@ fn world_pos_from_froxel(
|
|
|
150
163
|
return frustum_sample_point(frustum, vec3f(uvw.x, 1.0 - uvw.y, uvw.z));
|
|
151
164
|
}
|
|
152
165
|
`, [
|
|
153
|
-
|
|
166
|
+
chunk_volumetrics_froxel_coord_to_frustum_uvw,
|
|
154
167
|
chunk_frustum_sample_point,
|
|
155
168
|
]);
|
|
156
169
|
|
|
@@ -312,8 +325,6 @@ fn main(@builtin(global_invocation_id) voxel_id: vec3<u32>) {
|
|
|
312
325
|
chunk_ndc_to_uv,
|
|
313
326
|
chunk_volumetric_history_bounding_box,
|
|
314
327
|
chunk_aabb4_normalized_dist,
|
|
315
|
-
chunk_volumetrics_froxel_coord_to_uvw,
|
|
316
|
-
chunk_frustum_sample_point,
|
|
317
328
|
]
|
|
318
329
|
);
|
|
319
330
|
|