@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,137 +1,136 @@
|
|
|
1
|
-
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
3
|
-
import { chunk_normal_edge_stopping_weight } from "../../shader/chunk/filter/chunk_compute_edge_stopping_weight.js";
|
|
4
|
-
import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
|
|
5
|
-
import { chunk_get_view_space_depth } from "../../shader/chunk/depth/chunk_get_view_space_depth.js";
|
|
6
|
-
import { chunk_rgb_to_luminance } from "../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
7
|
-
import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
8
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
10
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* ReSTIR DI — spatial denoise pass (edge-aware à-trous).
|
|
14
|
-
*
|
|
15
|
-
* A tailored, ReSTIR-aware spatial filter for the resolved point/spot radiance.
|
|
16
|
-
* One iteration of the à-trous (hole-filled) wavelet: a 3x3 neighbourhood dilated
|
|
17
|
-
* by `step_size`, run a few times with step 1, 2, 4 (driven by the graph) to grow
|
|
18
|
-
* the effective footprint while keeping the per-pass cost at 8 taps. The
|
|
19
|
-
* edge-stopping is SVGF-style — geometry edges from linear depth + normal (always
|
|
20
|
-
* safe to stop on), plus a gentle relative-luma term to preserve shadow edges.
|
|
21
|
-
*
|
|
22
|
-
* Deliberately spatial-only: the engine's TAA and ReSTIR's own reservoir temporal
|
|
23
|
-
* reuse already supply the temporal axis, so we do NOT add a second temporal
|
|
24
|
-
* reproject (that is the LigmaDenoiser path the user flagged as imperfect).
|
|
25
|
-
*
|
|
26
|
-
* Operates on the modulated radiance (BRDF already folded in). Albedo-edge
|
|
27
|
-
* demodulation is a possible later refinement; depth+normal stopping already holds
|
|
28
|
-
* the geometric edges that matter most for direct lighting.
|
|
29
|
-
*
|
|
30
|
-
* No storage buffers (textures + uniforms only), so it is unaffected by the
|
|
31
|
-
* maxStorageBuffersPerShaderStage budget the resolve/resample passes fight for.
|
|
32
|
-
*
|
|
33
|
-
* @type {ComputeShader}
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
37
|
-
|
|
38
|
-
resources.createGroup()
|
|
39
|
-
.addTexture("tInput")
|
|
40
|
-
.addTexture("gBufferDepth")
|
|
41
|
-
.addTexture("gBufferNormal", "uint")
|
|
42
|
-
.addStorageTexture("output", "rgba16float", "2d", "write-only")
|
|
43
|
-
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
44
|
-
.addUniform("step_size", u32);
|
|
45
|
-
|
|
46
|
-
const body = CodeChunk.from(
|
|
47
|
-
//language=WGSL
|
|
48
|
-
`
|
|
49
|
-
// Edge-stopping tolerances. Tighter = preserves more detail (less denoising).
|
|
50
|
-
const PHI_NORMAL: f32 = 64.0; // normal power; higher stops sooner on curvature
|
|
51
|
-
const PHI_DEPTH: f32 = 0.02; // relative linear-depth tolerance (fraction of depth)
|
|
52
|
-
const PHI_LUMA: f32 = 0.6; // relative luma tolerance (fraction of centre luma)
|
|
53
|
-
|
|
54
|
-
@compute @workgroup_size(8, 8, 1)
|
|
55
|
-
fn main(
|
|
56
|
-
@builtin(global_invocation_id) global_invocation_id: vec3<u32>,
|
|
57
|
-
) {
|
|
58
|
-
let i_coord = vec2<i32>(global_invocation_id.xy);
|
|
59
|
-
let screen_size = vec2<i32>(textureDimensions(tInput));
|
|
60
|
-
|
|
61
|
-
if (!all(i_coord < screen_size)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let center_device_depth = textureLoad(gBufferDepth, i_coord, 0).r;
|
|
66
|
-
let center_radiance = textureLoad(tInput, i_coord, 0).rgb;
|
|
67
|
-
|
|
68
|
-
// Background carries no ReSTIR radiance — pass it through so the filter neither
|
|
69
|
-
// bleeds lit neighbours into it nor pulls it into lit pixels.
|
|
70
|
-
if (is_background(center_device_depth)) {
|
|
71
|
-
textureStore(output, global_invocation_id.xy, vec4<f32>(center_radiance, 1.0));
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
let center_depth = get_view_space_depth(center_device_depth, camera);
|
|
76
|
-
let center_normal = decode_g_buffer_normal(textureLoad(gBufferNormal, i_coord, 0).xy);
|
|
77
|
-
let center_luma = rgb_to_luminance(center_radiance);
|
|
78
|
-
|
|
79
|
-
let step = i32(step_size);
|
|
80
|
-
|
|
81
|
-
const kernel_weights = array<f32, 2>(1.0, 2.0 / 3.0);
|
|
82
|
-
const offsets = array<vec2<i32>, 8>(
|
|
83
|
-
vec2<i32>(-1, -1), vec2<i32>(0, -1), vec2<i32>(1, -1),
|
|
84
|
-
vec2<i32>(-1, 0), vec2<i32>(1, 0),
|
|
85
|
-
vec2<i32>(-1, 1), vec2<i32>(0, 1), vec2<i32>(1, 1),
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
// centre weight 1, accumulate neighbours
|
|
89
|
-
var sum_w = 1.0;
|
|
90
|
-
var sum_rgb = center_radiance;
|
|
91
|
-
|
|
92
|
-
for (var i = 0; i < 8; i++) {
|
|
93
|
-
let offset = offsets[i];
|
|
94
|
-
let p = i_coord + offset * step;
|
|
95
|
-
|
|
96
|
-
if (!(all(p >= vec2<i32>(0, 0)) && all(p < screen_size))) {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
let sample_device_depth = textureLoad(gBufferDepth, p, 0).r;
|
|
101
|
-
if (is_background(sample_device_depth)) {
|
|
102
|
-
continue;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
let sample_radiance = textureLoad(tInput, p, 0).rgb;
|
|
106
|
-
let sample_depth = get_view_space_depth(sample_device_depth, camera);
|
|
107
|
-
let sample_normal = decode_g_buffer_normal(textureLoad(gBufferNormal, p, 0).xy);
|
|
108
|
-
let sample_luma = rgb_to_luminance(sample_radiance);
|
|
109
|
-
|
|
110
|
-
let w_normal = normal_edge_stopping_weight(center_normal, sample_normal, PHI_NORMAL);
|
|
111
|
-
let d_depth = abs(center_depth - sample_depth) / (PHI_DEPTH * max(center_depth, 1e-3));
|
|
112
|
-
let d_luma = abs(center_luma - sample_luma) / (PHI_LUMA * center_luma + 1e-3);
|
|
113
|
-
|
|
114
|
-
let kernel = kernel_weights[abs(offset.x)] * kernel_weights[abs(offset.y)];
|
|
115
|
-
let w = exp(-(d_depth + d_luma)) * w_normal * kernel;
|
|
116
|
-
|
|
117
|
-
sum_w += w;
|
|
118
|
-
sum_rgb += w * sample_radiance;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
textureStore(output, global_invocation_id.xy, vec4<f32>(sum_rgb / sum_w, 1.0));
|
|
122
|
-
}
|
|
123
|
-
`, [
|
|
124
|
-
chunk_is_background,
|
|
125
|
-
chunk_get_view_space_depth,
|
|
126
|
-
chunk_decode_g_buffer_normal,
|
|
127
|
-
chunk_rgb_to_luminance,
|
|
128
|
-
chunk_normal_edge_stopping_weight,
|
|
129
|
-
]
|
|
130
|
-
);
|
|
131
|
-
|
|
132
|
-
export const shader_restir_di_denoise = ComputeShader.from({
|
|
133
|
-
label: "ReSTIR DI Denoise",
|
|
134
|
-
resources,
|
|
135
|
-
body,
|
|
136
|
-
|
|
137
|
-
});
|
|
1
|
+
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
3
|
+
import { chunk_normal_edge_stopping_weight } from "../../shader/chunk/filter/chunk_compute_edge_stopping_weight.js";
|
|
4
|
+
import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
|
|
5
|
+
import { chunk_get_view_space_depth } from "../../shader/chunk/depth/chunk_get_view_space_depth.js";
|
|
6
|
+
import { chunk_rgb_to_luminance } from "../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
7
|
+
import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
8
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
10
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* ReSTIR DI — spatial denoise pass (edge-aware à-trous).
|
|
14
|
+
*
|
|
15
|
+
* A tailored, ReSTIR-aware spatial filter for the resolved point/spot radiance.
|
|
16
|
+
* One iteration of the à-trous (hole-filled) wavelet: a 3x3 neighbourhood dilated
|
|
17
|
+
* by `step_size`, run a few times with step 1, 2, 4 (driven by the graph) to grow
|
|
18
|
+
* the effective footprint while keeping the per-pass cost at 8 taps. The
|
|
19
|
+
* edge-stopping is SVGF-style — geometry edges from linear depth + normal (always
|
|
20
|
+
* safe to stop on), plus a gentle relative-luma term to preserve shadow edges.
|
|
21
|
+
*
|
|
22
|
+
* Deliberately spatial-only: the engine's TAA and ReSTIR's own reservoir temporal
|
|
23
|
+
* reuse already supply the temporal axis, so we do NOT add a second temporal
|
|
24
|
+
* reproject (that is the LigmaDenoiser path the user flagged as imperfect).
|
|
25
|
+
*
|
|
26
|
+
* Operates on the modulated radiance (BRDF already folded in). Albedo-edge
|
|
27
|
+
* demodulation is a possible later refinement; depth+normal stopping already holds
|
|
28
|
+
* the geometric edges that matter most for direct lighting.
|
|
29
|
+
*
|
|
30
|
+
* No storage buffers (textures + uniforms only), so it is unaffected by the
|
|
31
|
+
* maxStorageBuffersPerShaderStage budget the resolve/resample passes fight for.
|
|
32
|
+
*
|
|
33
|
+
* @type {ComputeShader}
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
37
|
+
|
|
38
|
+
resources.createGroup()
|
|
39
|
+
.addTexture("tInput")
|
|
40
|
+
.addTexture("gBufferDepth")
|
|
41
|
+
.addTexture("gBufferNormal", "uint")
|
|
42
|
+
.addStorageTexture("output", "rgba16float", "2d", "write-only")
|
|
43
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
44
|
+
.addUniform("step_size", u32);
|
|
45
|
+
|
|
46
|
+
const body = CodeChunk.from(
|
|
47
|
+
//language=WGSL
|
|
48
|
+
`
|
|
49
|
+
// Edge-stopping tolerances. Tighter = preserves more detail (less denoising).
|
|
50
|
+
const PHI_NORMAL: f32 = 64.0; // normal power; higher stops sooner on curvature
|
|
51
|
+
const PHI_DEPTH: f32 = 0.02; // relative linear-depth tolerance (fraction of depth)
|
|
52
|
+
const PHI_LUMA: f32 = 0.6; // relative luma tolerance (fraction of centre luma)
|
|
53
|
+
|
|
54
|
+
@compute @workgroup_size(8, 8, 1)
|
|
55
|
+
fn main(
|
|
56
|
+
@builtin(global_invocation_id) global_invocation_id: vec3<u32>,
|
|
57
|
+
) {
|
|
58
|
+
let i_coord = vec2<i32>(global_invocation_id.xy);
|
|
59
|
+
let screen_size = vec2<i32>(textureDimensions(tInput));
|
|
60
|
+
|
|
61
|
+
if (!all(i_coord < screen_size)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
let center_device_depth = textureLoad(gBufferDepth, i_coord, 0).r;
|
|
66
|
+
let center_radiance = textureLoad(tInput, i_coord, 0).rgb;
|
|
67
|
+
|
|
68
|
+
// Background carries no ReSTIR radiance — pass it through so the filter neither
|
|
69
|
+
// bleeds lit neighbours into it nor pulls it into lit pixels.
|
|
70
|
+
if (is_background(center_device_depth)) {
|
|
71
|
+
textureStore(output, global_invocation_id.xy, vec4<f32>(center_radiance, 1.0));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let center_depth = get_view_space_depth(center_device_depth, camera);
|
|
76
|
+
let center_normal = decode_g_buffer_normal(textureLoad(gBufferNormal, i_coord, 0).xy);
|
|
77
|
+
let center_luma = rgb_to_luminance(center_radiance);
|
|
78
|
+
|
|
79
|
+
let step = i32(step_size);
|
|
80
|
+
|
|
81
|
+
const kernel_weights = array<f32, 2>(1.0, 2.0 / 3.0);
|
|
82
|
+
const offsets = array<vec2<i32>, 8>(
|
|
83
|
+
vec2<i32>(-1, -1), vec2<i32>(0, -1), vec2<i32>(1, -1),
|
|
84
|
+
vec2<i32>(-1, 0), vec2<i32>(1, 0),
|
|
85
|
+
vec2<i32>(-1, 1), vec2<i32>(0, 1), vec2<i32>(1, 1),
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
// centre weight 1, accumulate neighbours
|
|
89
|
+
var sum_w = 1.0;
|
|
90
|
+
var sum_rgb = center_radiance;
|
|
91
|
+
|
|
92
|
+
for (var i = 0; i < 8; i++) {
|
|
93
|
+
let offset = offsets[i];
|
|
94
|
+
let p = i_coord + offset * step;
|
|
95
|
+
|
|
96
|
+
if (!(all(p >= vec2<i32>(0, 0)) && all(p < screen_size))) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let sample_device_depth = textureLoad(gBufferDepth, p, 0).r;
|
|
101
|
+
if (is_background(sample_device_depth)) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
let sample_radiance = textureLoad(tInput, p, 0).rgb;
|
|
106
|
+
let sample_depth = get_view_space_depth(sample_device_depth, camera);
|
|
107
|
+
let sample_normal = decode_g_buffer_normal(textureLoad(gBufferNormal, p, 0).xy);
|
|
108
|
+
let sample_luma = rgb_to_luminance(sample_radiance);
|
|
109
|
+
|
|
110
|
+
let w_normal = normal_edge_stopping_weight(center_normal, sample_normal, PHI_NORMAL);
|
|
111
|
+
let d_depth = abs(center_depth - sample_depth) / (PHI_DEPTH * max(center_depth, 1e-3));
|
|
112
|
+
let d_luma = abs(center_luma - sample_luma) / (PHI_LUMA * center_luma + 1e-3);
|
|
113
|
+
|
|
114
|
+
let kernel = kernel_weights[abs(offset.x)] * kernel_weights[abs(offset.y)];
|
|
115
|
+
let w = exp(-(d_depth + d_luma)) * w_normal * kernel;
|
|
116
|
+
|
|
117
|
+
sum_w += w;
|
|
118
|
+
sum_rgb += w * sample_radiance;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
textureStore(output, global_invocation_id.xy, vec4<f32>(sum_rgb / sum_w, 1.0));
|
|
122
|
+
}
|
|
123
|
+
`, [
|
|
124
|
+
chunk_is_background,
|
|
125
|
+
chunk_get_view_space_depth,
|
|
126
|
+
chunk_decode_g_buffer_normal,
|
|
127
|
+
chunk_rgb_to_luminance,
|
|
128
|
+
chunk_normal_edge_stopping_weight,
|
|
129
|
+
]
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
export const shader_restir_di_denoise = ComputeShader.from({
|
|
133
|
+
label: "ReSTIR DI Denoise",
|
|
134
|
+
resources,
|
|
135
|
+
body,
|
|
136
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_restir_di_resample.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resample.js"],"names":[],"mappings":"AA4HA,
|
|
1
|
+
{"version":3,"file":"shader_restir_di_resample.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resample.js"],"names":[],"mappings":"AA4HA,sDAIG;8BArH2B,+BAA+B"}
|
|
@@ -1,130 +1,129 @@
|
|
|
1
|
-
import { u32, vec3f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { chunk_rtxdi_empty_reservoir } from "../reservoir/chunk_rtxdi_empty_reservoir.js";
|
|
4
|
-
import { chunk_rtxdi_pack_reservoir } from "../reservoir/chunk_rtxdi_pack_reservoir.js";
|
|
5
|
-
import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
|
|
6
|
-
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
7
|
-
import { chunk_stbn_sample_vec2 } from "../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
|
|
8
|
-
import { LIGHT_CLUSTER_LOOKUP_STRUCT } from "../../light/cluster/shader_cluster_assign_lights.js";
|
|
9
|
-
import { chunk_random } from "../../shader/chunk/random/chunk_random.js";
|
|
10
|
-
import { chunk_random_initialize } from "../../shader/chunk/random/chunk_random_initialize.js";
|
|
11
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
12
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
13
|
-
import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
14
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
15
|
-
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
16
|
-
import { chunk_restir_generate_candidates } from "./chunk_restir_generate_candidates.js";
|
|
17
|
-
import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
|
|
18
|
-
import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
|
|
19
|
-
import { chunk_restir_temporal_reuse } from "./chunk_restir_temporal_reuse.js";
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* ReSTIR DI — resample pass (stage 1 of 2).
|
|
23
|
-
*
|
|
24
|
-
* Per pixel: reconstruct the surface, draw M_initial candidate local lights from
|
|
25
|
-
* the froxel cluster (RIS / WRS with the BRDF target function), temporally
|
|
26
|
-
* resample against the reprojected previous-frame reservoir, and write the
|
|
27
|
-
* finalized reservoir to `reservoir_current`.
|
|
28
|
-
*
|
|
29
|
-
* Deliberately holds NO ray-tracing bindings: visibility is deferred to the
|
|
30
|
-
* resolve pass, which keeps this pass at 5 storage buffers (lights + clusters +
|
|
31
|
-
* the two reservoirs) — within maxStorageBuffersPerShaderStage. The visibility
|
|
32
|
-
* ray + shading is the resolve pass's job.
|
|
33
|
-
*
|
|
34
|
-
* @type {ComputeShader}
|
|
35
|
-
*/
|
|
36
|
-
|
|
37
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
38
|
-
|
|
39
|
-
// G-buffer + reprojection inputs + uniforms (no storage buffers in this group).
|
|
40
|
-
resources.createGroup()
|
|
41
|
-
.addTexture("gBufferDepth")
|
|
42
|
-
.addTexture("gBufferPBR")
|
|
43
|
-
.addTexture("gBufferNormal", "uint")
|
|
44
|
-
.addTexture("gBufferAlbedo")
|
|
45
|
-
.addTexture("gBufferEmissive", "uint")
|
|
46
|
-
.addTexture("VelocityBuffer")
|
|
47
|
-
.addTexture("tOcclusionClip")
|
|
48
|
-
.addTexture("tSTBN_vec2", "unfilterable-float", "3d")
|
|
49
|
-
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
50
|
-
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
51
|
-
.addUniform("m_initial", u32);
|
|
52
|
-
|
|
53
|
-
// Local lights + froxel clusters (the screen-space tile candidate set).
|
|
54
|
-
const RESTIR_DI_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
|
|
55
|
-
RESTIR_DI_LIGHT_GROUP.label = "restir-di/lights";
|
|
56
|
-
RESTIR_DI_LIGHT_GROUP
|
|
57
|
-
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
58
|
-
.addUniform("cluster_parameters", vec3f)
|
|
59
|
-
.addStorageBuffer("cluster_lookup", LIGHT_CLUSTER_LOOKUP_STRUCT)
|
|
60
|
-
.addStorageBuffer("cluster_data", WebGPUArray.u32);
|
|
61
|
-
resources.addGroup(RESTIR_DI_LIGHT_GROUP);
|
|
62
|
-
|
|
63
|
-
// Previous frame's spatiotemporal reservoir (read) + this pass's output (write).
|
|
64
|
-
// The output is a transient scratch the spatial pass consumes; the persistent
|
|
65
|
-
// ping-pong final reservoir is written by the spatial pass.
|
|
66
|
-
const RESTIR_DI_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
|
|
67
|
-
RESTIR_DI_RESERVOIR_GROUP.label = "restir-di/reservoirs";
|
|
68
|
-
RESTIR_DI_RESERVOIR_GROUP
|
|
69
|
-
.addStorageBuffer("reservoir_out", WebGPUArray.from(RTXDI_PackedReservoir), true)
|
|
70
|
-
.addStorageBuffer("reservoir_previous", WebGPUArray.from(RTXDI_PackedReservoir), false);
|
|
71
|
-
resources.addGroup(RESTIR_DI_RESERVOIR_GROUP);
|
|
72
|
-
|
|
73
|
-
const body = CodeChunk.from(
|
|
74
|
-
//language=WGSL
|
|
75
|
-
`
|
|
76
|
-
@compute @workgroup_size(8, 8, 1)
|
|
77
|
-
fn main(
|
|
78
|
-
@builtin(global_invocation_id) global_invocation_id: vec3<u32>,
|
|
79
|
-
) {
|
|
80
|
-
let i_coord = global_invocation_id.xy;
|
|
81
|
-
let texture_size = textureDimensions(gBufferDepth);
|
|
82
|
-
|
|
83
|
-
if (!all(i_coord < texture_size)) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Per-pixel, per-frame PRNG for candidate sampling + area-light jitter.
|
|
88
|
-
random_initialize(vec3<u32>(i_coord, view.frame_index), vec3<u32>(0x9E3779B9u, 0x85EBCA6Bu, 0xC2B2AE35u));
|
|
89
|
-
|
|
90
|
-
var reservoir = rtxdi_empty_reservoir();
|
|
91
|
-
|
|
92
|
-
let surface = restir_reconstruct_surface(i_coord, texture_size);
|
|
93
|
-
if (surface.is_valid) {
|
|
94
|
-
// Blue-noise area-light sample coordinate (spatially-visible dimension).
|
|
95
|
-
let stbn_uv = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
|
|
96
|
-
|
|
97
|
-
let canonical = restir_generate_candidates(
|
|
98
|
-
surface.geometry,
|
|
99
|
-
surface.material,
|
|
100
|
-
vec2<f32>(i_coord) + vec2<f32>(0.5, 0.5),
|
|
101
|
-
surface.view_depth,
|
|
102
|
-
texture_size,
|
|
103
|
-
m_initial,
|
|
104
|
-
stbn_uv,
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
reservoir = restir_temporal_reuse(canonical, surface.geometry, surface.material, i_coord, texture_size);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
reservoir_out[restir_reservoir_address(i_coord, texture_size.x)] = rtxdi_pack_reservoir(reservoir);
|
|
111
|
-
}
|
|
112
|
-
`, [
|
|
113
|
-
chunk_restir_reconstruct_surface,
|
|
114
|
-
chunk_restir_generate_candidates,
|
|
115
|
-
chunk_restir_temporal_reuse,
|
|
116
|
-
chunk_stbn_sample_vec2,
|
|
117
|
-
chunk_rtxdi_empty_reservoir,
|
|
118
|
-
chunk_rtxdi_pack_reservoir,
|
|
119
|
-
chunk_restir_reservoir_address,
|
|
120
|
-
chunk_random,
|
|
121
|
-
chunk_random_initialize,
|
|
122
|
-
]
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
export const shader_restir_di_resample = ComputeShader.from({
|
|
126
|
-
label: "ReSTIR DI Resample",
|
|
127
|
-
resources,
|
|
128
|
-
body,
|
|
129
|
-
|
|
130
|
-
});
|
|
1
|
+
import { u32, vec3f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { chunk_rtxdi_empty_reservoir } from "../reservoir/chunk_rtxdi_empty_reservoir.js";
|
|
4
|
+
import { chunk_rtxdi_pack_reservoir } from "../reservoir/chunk_rtxdi_pack_reservoir.js";
|
|
5
|
+
import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
|
|
6
|
+
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
7
|
+
import { chunk_stbn_sample_vec2 } from "../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
|
|
8
|
+
import { LIGHT_CLUSTER_LOOKUP_STRUCT } from "../../light/cluster/shader_cluster_assign_lights.js";
|
|
9
|
+
import { chunk_random } from "../../shader/chunk/random/chunk_random.js";
|
|
10
|
+
import { chunk_random_initialize } from "../../shader/chunk/random/chunk_random_initialize.js";
|
|
11
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
12
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
13
|
+
import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
14
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
15
|
+
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
16
|
+
import { chunk_restir_generate_candidates } from "./chunk_restir_generate_candidates.js";
|
|
17
|
+
import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
|
|
18
|
+
import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
|
|
19
|
+
import { chunk_restir_temporal_reuse } from "./chunk_restir_temporal_reuse.js";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* ReSTIR DI — resample pass (stage 1 of 2).
|
|
23
|
+
*
|
|
24
|
+
* Per pixel: reconstruct the surface, draw M_initial candidate local lights from
|
|
25
|
+
* the froxel cluster (RIS / WRS with the BRDF target function), temporally
|
|
26
|
+
* resample against the reprojected previous-frame reservoir, and write the
|
|
27
|
+
* finalized reservoir to `reservoir_current`.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately holds NO ray-tracing bindings: visibility is deferred to the
|
|
30
|
+
* resolve pass, which keeps this pass at 5 storage buffers (lights + clusters +
|
|
31
|
+
* the two reservoirs) — within maxStorageBuffersPerShaderStage. The visibility
|
|
32
|
+
* ray + shading is the resolve pass's job.
|
|
33
|
+
*
|
|
34
|
+
* @type {ComputeShader}
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
38
|
+
|
|
39
|
+
// G-buffer + reprojection inputs + uniforms (no storage buffers in this group).
|
|
40
|
+
resources.createGroup()
|
|
41
|
+
.addTexture("gBufferDepth")
|
|
42
|
+
.addTexture("gBufferPBR")
|
|
43
|
+
.addTexture("gBufferNormal", "uint")
|
|
44
|
+
.addTexture("gBufferAlbedo")
|
|
45
|
+
.addTexture("gBufferEmissive", "uint")
|
|
46
|
+
.addTexture("VelocityBuffer")
|
|
47
|
+
.addTexture("tOcclusionClip")
|
|
48
|
+
.addTexture("tSTBN_vec2", "unfilterable-float", "3d")
|
|
49
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
50
|
+
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
51
|
+
.addUniform("m_initial", u32);
|
|
52
|
+
|
|
53
|
+
// Local lights + froxel clusters (the screen-space tile candidate set).
|
|
54
|
+
const RESTIR_DI_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
|
|
55
|
+
RESTIR_DI_LIGHT_GROUP.label = "restir-di/lights";
|
|
56
|
+
RESTIR_DI_LIGHT_GROUP
|
|
57
|
+
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
58
|
+
.addUniform("cluster_parameters", vec3f)
|
|
59
|
+
.addStorageBuffer("cluster_lookup", LIGHT_CLUSTER_LOOKUP_STRUCT)
|
|
60
|
+
.addStorageBuffer("cluster_data", WebGPUArray.u32);
|
|
61
|
+
resources.addGroup(RESTIR_DI_LIGHT_GROUP);
|
|
62
|
+
|
|
63
|
+
// Previous frame's spatiotemporal reservoir (read) + this pass's output (write).
|
|
64
|
+
// The output is a transient scratch the spatial pass consumes; the persistent
|
|
65
|
+
// ping-pong final reservoir is written by the spatial pass.
|
|
66
|
+
const RESTIR_DI_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
|
|
67
|
+
RESTIR_DI_RESERVOIR_GROUP.label = "restir-di/reservoirs";
|
|
68
|
+
RESTIR_DI_RESERVOIR_GROUP
|
|
69
|
+
.addStorageBuffer("reservoir_out", WebGPUArray.from(RTXDI_PackedReservoir), true)
|
|
70
|
+
.addStorageBuffer("reservoir_previous", WebGPUArray.from(RTXDI_PackedReservoir), false);
|
|
71
|
+
resources.addGroup(RESTIR_DI_RESERVOIR_GROUP);
|
|
72
|
+
|
|
73
|
+
const body = CodeChunk.from(
|
|
74
|
+
//language=WGSL
|
|
75
|
+
`
|
|
76
|
+
@compute @workgroup_size(8, 8, 1)
|
|
77
|
+
fn main(
|
|
78
|
+
@builtin(global_invocation_id) global_invocation_id: vec3<u32>,
|
|
79
|
+
) {
|
|
80
|
+
let i_coord = global_invocation_id.xy;
|
|
81
|
+
let texture_size = textureDimensions(gBufferDepth);
|
|
82
|
+
|
|
83
|
+
if (!all(i_coord < texture_size)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Per-pixel, per-frame PRNG for candidate sampling + area-light jitter.
|
|
88
|
+
random_initialize(vec3<u32>(i_coord, view.frame_index), vec3<u32>(0x9E3779B9u, 0x85EBCA6Bu, 0xC2B2AE35u));
|
|
89
|
+
|
|
90
|
+
var reservoir = rtxdi_empty_reservoir();
|
|
91
|
+
|
|
92
|
+
let surface = restir_reconstruct_surface(i_coord, texture_size);
|
|
93
|
+
if (surface.is_valid) {
|
|
94
|
+
// Blue-noise area-light sample coordinate (spatially-visible dimension).
|
|
95
|
+
let stbn_uv = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
|
|
96
|
+
|
|
97
|
+
let canonical = restir_generate_candidates(
|
|
98
|
+
surface.geometry,
|
|
99
|
+
surface.material,
|
|
100
|
+
vec2<f32>(i_coord) + vec2<f32>(0.5, 0.5),
|
|
101
|
+
surface.view_depth,
|
|
102
|
+
texture_size,
|
|
103
|
+
m_initial,
|
|
104
|
+
stbn_uv,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
reservoir = restir_temporal_reuse(canonical, surface.geometry, surface.material, i_coord, texture_size);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
reservoir_out[restir_reservoir_address(i_coord, texture_size.x)] = rtxdi_pack_reservoir(reservoir);
|
|
111
|
+
}
|
|
112
|
+
`, [
|
|
113
|
+
chunk_restir_reconstruct_surface,
|
|
114
|
+
chunk_restir_generate_candidates,
|
|
115
|
+
chunk_restir_temporal_reuse,
|
|
116
|
+
chunk_stbn_sample_vec2,
|
|
117
|
+
chunk_rtxdi_empty_reservoir,
|
|
118
|
+
chunk_rtxdi_pack_reservoir,
|
|
119
|
+
chunk_restir_reservoir_address,
|
|
120
|
+
chunk_random,
|
|
121
|
+
chunk_random_initialize,
|
|
122
|
+
]
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
export const shader_restir_di_resample = ComputeShader.from({
|
|
126
|
+
label: "ReSTIR DI Resample",
|
|
127
|
+
resources,
|
|
128
|
+
body,
|
|
129
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_restir_di_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resolve.js"],"names":[],"mappings":"AA8FA,
|
|
1
|
+
{"version":3,"file":"shader_restir_di_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resolve.js"],"names":[],"mappings":"AA8FA,qDAIG;8BA5F2B,+BAA+B"}
|