@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,231 +1,230 @@
|
|
|
1
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
5
|
-
import { chunk_nss_find_nearest_depth } from "./chunk_nss_find_nearest_depth.js";
|
|
6
|
-
import { chunk_nss_luma_derivative } from "./chunk_nss_luma_derivative.js";
|
|
7
|
-
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
8
|
-
import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* NSS preprocess pass. Runs at render-resolution (one thread per render-res
|
|
12
|
-
* pixel) and produces:
|
|
13
|
-
* 1. The 12-channel network input tensor, packed into a single rgba16f
|
|
14
|
-
* 3D storage texture with depth=3 (channels 0..3, 4..7, 8..11).
|
|
15
|
-
* 2. The encoded "nearest depth offset" used by postprocess to dilate
|
|
16
|
-
* velocity at output-res (`tNearestOffset` — components in [0, 1]
|
|
17
|
-
* decode to {-1, 0, 1}² via `(x*2 - 1)`).
|
|
18
|
-
*
|
|
19
|
-
* Per-pixel logic (matches the algorithm in ARM's `Preprocess()`):
|
|
20
|
-
* 1. Dilate depth over a 3×3 neighbourhood, remember the offset of the
|
|
21
|
-
* nearest sample.
|
|
22
|
-
* 2. Sample velocity at the dilated coord.
|
|
23
|
-
* 3. Project to the previous frame, sample warped history (bilinear).
|
|
24
|
-
* 4. Read the FSR2 depth-clip confidence from the upstream pass and
|
|
25
|
-
* invert it into the network's "high = disocclusion" convention.
|
|
26
|
-
* 5. Sample the warped feedback tensor (bilinear).
|
|
27
|
-
* 6. Compute the luma derivative between current and warped history.
|
|
28
|
-
* 7. Pack everything into the output tensor — colours
|
|
29
|
-
* tonemapped via `Tonemap(EXPOSURE * raw)` to match ARM's training
|
|
30
|
-
* distribution.
|
|
31
|
-
*
|
|
32
|
-
* @see ARM NSS reference: `Preprocess` in
|
|
33
|
-
* `Source/NG-SDK/sdk/include/FidelityFX/gpu/nss/ffx_nss_preprocess.h`
|
|
34
|
-
*/
|
|
35
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
36
|
-
resources.createGroup()
|
|
37
|
-
.addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
|
|
38
|
-
// ── inputs at render-res ──
|
|
39
|
-
.addTexture("tColour", "float") // jittered scene colour, render-res
|
|
40
|
-
// depth32float can't be bound as 'float' (filterable) — WebGPU only
|
|
41
|
-
// accepts depth textures via 'unfilterable-float' in this context.
|
|
42
|
-
// We only ever read this via textureLoad inside the depth dilation.
|
|
43
|
-
.addTexture("tDepthCurrent", "unfilterable-float")
|
|
44
|
-
.addTexture("tVelocity", "float") // pixel-space motion vectors, render-res
|
|
45
|
-
// FSR2 depth-clip confidence (1 = trust history, 0 = disocclusion)
|
|
46
|
-
// produced by the engine's shared shader_depth_occlusion_clip pass.
|
|
47
|
-
// We invert it into ARM's "high = disocclusion" network input.
|
|
48
|
-
.addTexture("tDisocclusionConfidence", "float")
|
|
49
|
-
// ── inputs at output-res / feedback at render-res ──
|
|
50
|
-
.addTexture("tHistory", "float") // previous frame upscaled colour, output-res
|
|
51
|
-
.addTexture("tFeedbackIn", "float") // 4-ch feedback tensor from previous frame, render-res
|
|
52
|
-
// ── settings ──
|
|
53
|
-
.addUniform("settings", NSS_SETTINGS_STRUCT)
|
|
54
|
-
// ── outputs ──
|
|
55
|
-
// Single rgba16f 3D storage texture holds the 12-channel input tensor
|
|
56
|
-
// packed across depth=3 layers (4 channels each). rgba16f gives the
|
|
57
|
-
// network ~10 bits of mantissa per channel, which is plenty for
|
|
58
|
-
// normalized [0, 1] inputs after the network's first BN/scale.
|
|
59
|
-
.addStorageTexture("tTensor", "rgba16float", "3d", "write-only")
|
|
60
|
-
// Nearest-depth offset packed as (dx+1, dy+1) / 2 -> [0, 1]. Postprocess
|
|
61
|
-
// uses this to fetch the velocity at the dilated coordinate when warping
|
|
62
|
-
// the history at output-resolution.
|
|
63
|
-
.addStorageTexture("tNearestOffset", "rg8unorm", "2d", "write-only")
|
|
64
|
-
;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const body = CodeChunk.from(
|
|
68
|
-
//language=WGSL
|
|
69
|
-
`
|
|
70
|
-
const NSS_EXPOSURE: f32 = 7.38905609893; // e^2 — matches ARM's NSSCommon.ush
|
|
71
|
-
|
|
72
|
-
// Karis tonemap (max-of-channels), applied to EXPOSURE-scaled colour.
|
|
73
|
-
// ARM's training distribution: Tonemap(EXPOSURE * raw) -> network input.
|
|
74
|
-
fn nss_tonemap_exposure(rgb: vec3<f32>) -> vec3<f32> {
|
|
75
|
-
let scaled = rgb * NSS_EXPOSURE;
|
|
76
|
-
let m = max(max(scaled.r, scaled.g), scaled.b);
|
|
77
|
-
return scaled / (1.0 + m);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// ARM's network was trained against inputs that go through their Quantize
|
|
81
|
-
// formula: int8 = round(fp * 255 - 128). The conv then sees (uint8 - 128)
|
|
82
|
-
// = signed int8 in [-128, 127] - i.e. fp 0 -> -128, fp 0.5 -> 0, fp 1 -> 127.
|
|
83
|
-
// Our pipeline naively feeds fp [0, 1] which has DC offset +0.5 vs ARM's
|
|
84
|
-
// expected DC of 0. The trained head biases were calibrated against that
|
|
85
|
-
// near-zero DC, so feeding +0.5 puts every conv accumulator off by
|
|
86
|
-
// (sum_of_weights * 0.5 * 255) - way outside the trained operating range.
|
|
87
|
-
//
|
|
88
|
-
// We use the SMOOTH (no-round) version of ARM's transform: a linear
|
|
89
|
-
// remap [0, 1] -> approx [-1.008, 1.008] clamped to [-1, 1]. Matches
|
|
90
|
-
// ARM's DC shift but without the round() discontinuities that caused
|
|
91
|
-
// feature-dependent flickering when small jitter-driven input changes
|
|
92
|
-
// pushed pixels across quantization boundaries. Network sensitivity to
|
|
93
|
-
// near-boundary inputs would otherwise flip int8 outputs by 1/127 per
|
|
94
|
-
// frame and propagate through every layer.
|
|
95
|
-
//
|
|
96
|
-
// Per-multiply lands at ~(ARM signed * int8_w) / 127^2, so our acc is
|
|
97
|
-
// approx (ARM int32_acc / 127^2). Our rescale_factor (= 127 * mult /
|
|
98
|
-
// 2^shift) then produces value_fp ~ int8_in / 127 going into the LUT -
|
|
99
|
-
// the shape ARM's network was trained to produce.
|
|
100
|
-
fn nss_arm_quantize(fp: f32) -> f32 {
|
|
101
|
-
return clamp(fp * (255.0 / 127.0) - (128.0 / 127.0), -1.0, 1.0);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
fn nss_arm_quantize_v3(rgb: vec3<f32>) -> vec3<f32> {
|
|
105
|
-
return vec3<f32>(nss_arm_quantize(rgb.r), nss_arm_quantize(rgb.g), nss_arm_quantize(rgb.b));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
fn nss_arm_quantize_v4(v: vec4<f32>) -> vec4<f32> {
|
|
109
|
-
return vec4<f32>(nss_arm_quantize(v.x), nss_arm_quantize(v.y), nss_arm_quantize(v.z), nss_arm_quantize(v.w));
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
fn nss_warp_history_sample(prev_uv: vec2<f32>) -> vec3<f32> {
|
|
113
|
-
let on_screen = all(prev_uv >= vec2<f32>(0.0)) && all(prev_uv <= vec2<f32>(1.0));
|
|
114
|
-
if (!on_screen) {
|
|
115
|
-
return vec3<f32>(0.0);
|
|
116
|
-
}
|
|
117
|
-
// ARM uses bilinear (LoadHistory in ffx_nss_callbacks_glsl.h:471);
|
|
118
|
-
// Catmull-Rom is opt-in via HISTORY_CATMULL define.
|
|
119
|
-
return max(vec3<f32>(0.0), textureSampleLevel(tHistory, sLinear, prev_uv, 0.0).rgb);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
fn nss_warp_feedback_sample(prev_uv_render: vec2<f32>) -> vec4<f32> {
|
|
123
|
-
let on_screen = all(prev_uv_render >= vec2<f32>(0.0)) && all(prev_uv_render <= vec2<f32>(1.0));
|
|
124
|
-
if (!on_screen) {
|
|
125
|
-
return vec4<f32>(0.0);
|
|
126
|
-
}
|
|
127
|
-
return textureSampleLevel(tFeedbackIn, sLinear, prev_uv_render, 0.0);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
131
|
-
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
132
|
-
let render_res_u = settings.render_resolution;
|
|
133
|
-
let render_res = vec2<i32>(render_res_u);
|
|
134
|
-
|
|
135
|
-
if (any(gid.xy >= render_res_u)) {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
let st = vec2<i32>(gid.xy);
|
|
140
|
-
|
|
141
|
-
// 1. Depth dilation
|
|
142
|
-
var nearest_off = vec2<i32>(0, 0);
|
|
143
|
-
let _dilated_depth = nss_find_nearest_depth(tDepthCurrent, st, render_res, &nearest_off);
|
|
144
|
-
|
|
145
|
-
// 2. Velocity at the depth-nearest tap (FSR2 strategy — sharpens
|
|
146
|
-
// silhouettes at disocclusion vs picking velocity at the centre).
|
|
147
|
-
let velocity = textureLoad(tVelocity, st + nearest_off, 0).rg;
|
|
148
|
-
|
|
149
|
-
// 3. Reproject to previous frame
|
|
150
|
-
let st_centre = vec2<f32>(st) + 0.5;
|
|
151
|
-
let prev_st_render = st_centre - velocity;
|
|
152
|
-
let prev_uv_render = prev_st_render / vec2<f32>(render_res);
|
|
153
|
-
|
|
154
|
-
// History lives at output resolution but the UV is the same in [0, 1].
|
|
155
|
-
let history_rgb = nss_warp_history_sample(prev_uv_render);
|
|
156
|
-
|
|
157
|
-
// 4. Disocclusion mask. The shared depth-clip pass returns FSR2
|
|
158
|
-
// confidence (1 = trust history, 0 = disocclusion); ARM's network
|
|
159
|
-
// input expects the inverse (high = disocclusion). Multiply by
|
|
160
|
-
// history_validity so a hard reset zeros the mask too.
|
|
161
|
-
let confidence = textureLoad(tDisocclusionConfidence, st, 0).r;
|
|
162
|
-
let disocclusion_mask = (1.0 - saturate(confidence)) * saturate(settings.history_validity);
|
|
163
|
-
|
|
164
|
-
// 5. Warped feedback. Multiplied by history_validity so the very first
|
|
165
|
-
// frame (or any reset) feeds neutral (0.5 raw -> 0 post-quant)
|
|
166
|
-
// feedback to the network instead of garbage from an uninitialised
|
|
167
|
-
// texture.
|
|
168
|
-
//
|
|
169
|
-
// feedback_scale (debug knob, default 1.0) blends between actual FB
|
|
170
|
-
// and the neutral value 0.5. At 0 the network sees raw 0.5 across
|
|
171
|
-
// all FB channels, which post-quantize is ≈0 — the trained
|
|
172
|
-
// "no signal" point, NOT a strong negative signal.
|
|
173
|
-
let feedback_actual = nss_warp_feedback_sample(prev_uv_render);
|
|
174
|
-
let feedback_neutral = vec4<f32>(0.5);
|
|
175
|
-
let feedback = mix(
|
|
176
|
-
feedback_neutral,
|
|
177
|
-
feedback_actual,
|
|
178
|
-
saturate(settings.history_validity) * saturate(settings.feedback_scale),
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
// 6. Current colour (load, no filtering — already at render-res)
|
|
182
|
-
let current_rgb = max(vec3<f32>(0.0), textureLoad(tColour, st, 0).rgb);
|
|
183
|
-
|
|
184
|
-
// 7. Luma derivative — uses raw colours; the chunk handles its own scaling.
|
|
185
|
-
let luma_deriv = nss_luma_derivative(current_rgb, history_rgb);
|
|
186
|
-
|
|
187
|
-
// Tonemap with EXPOSURE applied first — matches ARM's
|
|
188
|
-
// Tonemap(EXPOSURE * raw) training distribution. Raw [0, 1] tonemap
|
|
189
|
-
// (without exposure) lands values 2-5x below the network's trained
|
|
190
|
-
// operating point.
|
|
191
|
-
let history_t = nss_tonemap_exposure(history_rgb);
|
|
192
|
-
let current_t = nss_tonemap_exposure(current_rgb);
|
|
193
|
-
|
|
194
|
-
// Apply ARM's Quantize transformation in fp — converts our [0, 1] inputs
|
|
195
|
-
// into the [-1, 1] signed-int8 / 127 distribution the trained network
|
|
196
|
-
// expects (DC at 0, not +0.5). See nss_arm_quantize header for derivation.
|
|
197
|
-
// settings.quantize_inputs (default 1.0) blends between this transform
|
|
198
|
-
// and the raw [0, 1] tonemap (0.0). Useful as an A/B test knob.
|
|
199
|
-
let q = saturate(settings.quantize_inputs);
|
|
200
|
-
let history_q = mix(history_t, nss_arm_quantize_v3(history_t), q);
|
|
201
|
-
let current_q = mix(current_t, nss_arm_quantize_v3(current_t), q);
|
|
202
|
-
let disocclusion_q = mix(disocclusion_mask, nss_arm_quantize(disocclusion_mask), q);
|
|
203
|
-
let feedback_q = mix(feedback, nss_arm_quantize_v4(feedback), q);
|
|
204
|
-
let luma_deriv_q = mix(luma_deriv, nss_arm_quantize(luma_deriv), q);
|
|
205
|
-
|
|
206
|
-
// ── Pack into 12-channel tensor ──
|
|
207
|
-
// Layout (4ch × depth=3):
|
|
208
|
-
// z=0 : history.rgb, current.r
|
|
209
|
-
// z=1 : current.gb, disocclusion_mask, feedback.r
|
|
210
|
-
// z=2 : feedback.gba, luma_derivative
|
|
211
|
-
textureStore(tTensor, vec3<i32>(st, 0), vec4<f32>(history_q, current_q.r));
|
|
212
|
-
textureStore(tTensor, vec3<i32>(st, 1), vec4<f32>(current_q.g, current_q.b, disocclusion_q, feedback_q.r));
|
|
213
|
-
textureStore(tTensor, vec3<i32>(st, 2), vec4<f32>(feedback_q.gba, luma_deriv_q));
|
|
214
|
-
|
|
215
|
-
// Pack nearest offset for postprocess: (-1, 0, 1) in each axis -> [0, 1]
|
|
216
|
-
let nearest_packed = (vec2<f32>(nearest_off) + 1.0) * 0.5;
|
|
217
|
-
textureStore(tNearestOffset, st, vec4<f32>(nearest_packed, 0.0, 0.0));
|
|
218
|
-
}
|
|
219
|
-
`, [
|
|
220
|
-
chunk_nss_find_nearest_depth,
|
|
221
|
-
chunk_nss_luma_derivative,
|
|
222
|
-
NSS_SETTINGS_STRUCT.declaration_chunk,
|
|
223
|
-
]
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
export const shader_nss_preprocess = ComputeShader.from({
|
|
227
|
-
label: "NSS / preprocess",
|
|
228
|
-
body,
|
|
229
|
-
resources,
|
|
230
|
-
|
|
231
|
-
});
|
|
1
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
3
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
+
import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
5
|
+
import { chunk_nss_find_nearest_depth } from "./chunk_nss_find_nearest_depth.js";
|
|
6
|
+
import { chunk_nss_luma_derivative } from "./chunk_nss_luma_derivative.js";
|
|
7
|
+
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
8
|
+
import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* NSS preprocess pass. Runs at render-resolution (one thread per render-res
|
|
12
|
+
* pixel) and produces:
|
|
13
|
+
* 1. The 12-channel network input tensor, packed into a single rgba16f
|
|
14
|
+
* 3D storage texture with depth=3 (channels 0..3, 4..7, 8..11).
|
|
15
|
+
* 2. The encoded "nearest depth offset" used by postprocess to dilate
|
|
16
|
+
* velocity at output-res (`tNearestOffset` — components in [0, 1]
|
|
17
|
+
* decode to {-1, 0, 1}² via `(x*2 - 1)`).
|
|
18
|
+
*
|
|
19
|
+
* Per-pixel logic (matches the algorithm in ARM's `Preprocess()`):
|
|
20
|
+
* 1. Dilate depth over a 3×3 neighbourhood, remember the offset of the
|
|
21
|
+
* nearest sample.
|
|
22
|
+
* 2. Sample velocity at the dilated coord.
|
|
23
|
+
* 3. Project to the previous frame, sample warped history (bilinear).
|
|
24
|
+
* 4. Read the FSR2 depth-clip confidence from the upstream pass and
|
|
25
|
+
* invert it into the network's "high = disocclusion" convention.
|
|
26
|
+
* 5. Sample the warped feedback tensor (bilinear).
|
|
27
|
+
* 6. Compute the luma derivative between current and warped history.
|
|
28
|
+
* 7. Pack everything into the output tensor — colours
|
|
29
|
+
* tonemapped via `Tonemap(EXPOSURE * raw)` to match ARM's training
|
|
30
|
+
* distribution.
|
|
31
|
+
*
|
|
32
|
+
* @see ARM NSS reference: `Preprocess` in
|
|
33
|
+
* `Source/NG-SDK/sdk/include/FidelityFX/gpu/nss/ffx_nss_preprocess.h`
|
|
34
|
+
*/
|
|
35
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
36
|
+
resources.createGroup()
|
|
37
|
+
.addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
|
|
38
|
+
// ── inputs at render-res ──
|
|
39
|
+
.addTexture("tColour", "float") // jittered scene colour, render-res
|
|
40
|
+
// depth32float can't be bound as 'float' (filterable) — WebGPU only
|
|
41
|
+
// accepts depth textures via 'unfilterable-float' in this context.
|
|
42
|
+
// We only ever read this via textureLoad inside the depth dilation.
|
|
43
|
+
.addTexture("tDepthCurrent", "unfilterable-float")
|
|
44
|
+
.addTexture("tVelocity", "float") // pixel-space motion vectors, render-res
|
|
45
|
+
// FSR2 depth-clip confidence (1 = trust history, 0 = disocclusion)
|
|
46
|
+
// produced by the engine's shared shader_depth_occlusion_clip pass.
|
|
47
|
+
// We invert it into ARM's "high = disocclusion" network input.
|
|
48
|
+
.addTexture("tDisocclusionConfidence", "float")
|
|
49
|
+
// ── inputs at output-res / feedback at render-res ──
|
|
50
|
+
.addTexture("tHistory", "float") // previous frame upscaled colour, output-res
|
|
51
|
+
.addTexture("tFeedbackIn", "float") // 4-ch feedback tensor from previous frame, render-res
|
|
52
|
+
// ── settings ──
|
|
53
|
+
.addUniform("settings", NSS_SETTINGS_STRUCT)
|
|
54
|
+
// ── outputs ──
|
|
55
|
+
// Single rgba16f 3D storage texture holds the 12-channel input tensor
|
|
56
|
+
// packed across depth=3 layers (4 channels each). rgba16f gives the
|
|
57
|
+
// network ~10 bits of mantissa per channel, which is plenty for
|
|
58
|
+
// normalized [0, 1] inputs after the network's first BN/scale.
|
|
59
|
+
.addStorageTexture("tTensor", "rgba16float", "3d", "write-only")
|
|
60
|
+
// Nearest-depth offset packed as (dx+1, dy+1) / 2 -> [0, 1]. Postprocess
|
|
61
|
+
// uses this to fetch the velocity at the dilated coordinate when warping
|
|
62
|
+
// the history at output-resolution.
|
|
63
|
+
.addStorageTexture("tNearestOffset", "rg8unorm", "2d", "write-only")
|
|
64
|
+
;
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const body = CodeChunk.from(
|
|
68
|
+
//language=WGSL
|
|
69
|
+
`
|
|
70
|
+
const NSS_EXPOSURE: f32 = 7.38905609893; // e^2 — matches ARM's NSSCommon.ush
|
|
71
|
+
|
|
72
|
+
// Karis tonemap (max-of-channels), applied to EXPOSURE-scaled colour.
|
|
73
|
+
// ARM's training distribution: Tonemap(EXPOSURE * raw) -> network input.
|
|
74
|
+
fn nss_tonemap_exposure(rgb: vec3<f32>) -> vec3<f32> {
|
|
75
|
+
let scaled = rgb * NSS_EXPOSURE;
|
|
76
|
+
let m = max(max(scaled.r, scaled.g), scaled.b);
|
|
77
|
+
return scaled / (1.0 + m);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ARM's network was trained against inputs that go through their Quantize
|
|
81
|
+
// formula: int8 = round(fp * 255 - 128). The conv then sees (uint8 - 128)
|
|
82
|
+
// = signed int8 in [-128, 127] - i.e. fp 0 -> -128, fp 0.5 -> 0, fp 1 -> 127.
|
|
83
|
+
// Our pipeline naively feeds fp [0, 1] which has DC offset +0.5 vs ARM's
|
|
84
|
+
// expected DC of 0. The trained head biases were calibrated against that
|
|
85
|
+
// near-zero DC, so feeding +0.5 puts every conv accumulator off by
|
|
86
|
+
// (sum_of_weights * 0.5 * 255) - way outside the trained operating range.
|
|
87
|
+
//
|
|
88
|
+
// We use the SMOOTH (no-round) version of ARM's transform: a linear
|
|
89
|
+
// remap [0, 1] -> approx [-1.008, 1.008] clamped to [-1, 1]. Matches
|
|
90
|
+
// ARM's DC shift but without the round() discontinuities that caused
|
|
91
|
+
// feature-dependent flickering when small jitter-driven input changes
|
|
92
|
+
// pushed pixels across quantization boundaries. Network sensitivity to
|
|
93
|
+
// near-boundary inputs would otherwise flip int8 outputs by 1/127 per
|
|
94
|
+
// frame and propagate through every layer.
|
|
95
|
+
//
|
|
96
|
+
// Per-multiply lands at ~(ARM signed * int8_w) / 127^2, so our acc is
|
|
97
|
+
// approx (ARM int32_acc / 127^2). Our rescale_factor (= 127 * mult /
|
|
98
|
+
// 2^shift) then produces value_fp ~ int8_in / 127 going into the LUT -
|
|
99
|
+
// the shape ARM's network was trained to produce.
|
|
100
|
+
fn nss_arm_quantize(fp: f32) -> f32 {
|
|
101
|
+
return clamp(fp * (255.0 / 127.0) - (128.0 / 127.0), -1.0, 1.0);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
fn nss_arm_quantize_v3(rgb: vec3<f32>) -> vec3<f32> {
|
|
105
|
+
return vec3<f32>(nss_arm_quantize(rgb.r), nss_arm_quantize(rgb.g), nss_arm_quantize(rgb.b));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
fn nss_arm_quantize_v4(v: vec4<f32>) -> vec4<f32> {
|
|
109
|
+
return vec4<f32>(nss_arm_quantize(v.x), nss_arm_quantize(v.y), nss_arm_quantize(v.z), nss_arm_quantize(v.w));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
fn nss_warp_history_sample(prev_uv: vec2<f32>) -> vec3<f32> {
|
|
113
|
+
let on_screen = all(prev_uv >= vec2<f32>(0.0)) && all(prev_uv <= vec2<f32>(1.0));
|
|
114
|
+
if (!on_screen) {
|
|
115
|
+
return vec3<f32>(0.0);
|
|
116
|
+
}
|
|
117
|
+
// ARM uses bilinear (LoadHistory in ffx_nss_callbacks_glsl.h:471);
|
|
118
|
+
// Catmull-Rom is opt-in via HISTORY_CATMULL define.
|
|
119
|
+
return max(vec3<f32>(0.0), textureSampleLevel(tHistory, sLinear, prev_uv, 0.0).rgb);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fn nss_warp_feedback_sample(prev_uv_render: vec2<f32>) -> vec4<f32> {
|
|
123
|
+
let on_screen = all(prev_uv_render >= vec2<f32>(0.0)) && all(prev_uv_render <= vec2<f32>(1.0));
|
|
124
|
+
if (!on_screen) {
|
|
125
|
+
return vec4<f32>(0.0);
|
|
126
|
+
}
|
|
127
|
+
return textureSampleLevel(tFeedbackIn, sLinear, prev_uv_render, 0.0);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
131
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
132
|
+
let render_res_u = settings.render_resolution;
|
|
133
|
+
let render_res = vec2<i32>(render_res_u);
|
|
134
|
+
|
|
135
|
+
if (any(gid.xy >= render_res_u)) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let st = vec2<i32>(gid.xy);
|
|
140
|
+
|
|
141
|
+
// 1. Depth dilation
|
|
142
|
+
var nearest_off = vec2<i32>(0, 0);
|
|
143
|
+
let _dilated_depth = nss_find_nearest_depth(tDepthCurrent, st, render_res, &nearest_off);
|
|
144
|
+
|
|
145
|
+
// 2. Velocity at the depth-nearest tap (FSR2 strategy — sharpens
|
|
146
|
+
// silhouettes at disocclusion vs picking velocity at the centre).
|
|
147
|
+
let velocity = textureLoad(tVelocity, st + nearest_off, 0).rg;
|
|
148
|
+
|
|
149
|
+
// 3. Reproject to previous frame
|
|
150
|
+
let st_centre = vec2<f32>(st) + 0.5;
|
|
151
|
+
let prev_st_render = st_centre - velocity;
|
|
152
|
+
let prev_uv_render = prev_st_render / vec2<f32>(render_res);
|
|
153
|
+
|
|
154
|
+
// History lives at output resolution but the UV is the same in [0, 1].
|
|
155
|
+
let history_rgb = nss_warp_history_sample(prev_uv_render);
|
|
156
|
+
|
|
157
|
+
// 4. Disocclusion mask. The shared depth-clip pass returns FSR2
|
|
158
|
+
// confidence (1 = trust history, 0 = disocclusion); ARM's network
|
|
159
|
+
// input expects the inverse (high = disocclusion). Multiply by
|
|
160
|
+
// history_validity so a hard reset zeros the mask too.
|
|
161
|
+
let confidence = textureLoad(tDisocclusionConfidence, st, 0).r;
|
|
162
|
+
let disocclusion_mask = (1.0 - saturate(confidence)) * saturate(settings.history_validity);
|
|
163
|
+
|
|
164
|
+
// 5. Warped feedback. Multiplied by history_validity so the very first
|
|
165
|
+
// frame (or any reset) feeds neutral (0.5 raw -> 0 post-quant)
|
|
166
|
+
// feedback to the network instead of garbage from an uninitialised
|
|
167
|
+
// texture.
|
|
168
|
+
//
|
|
169
|
+
// feedback_scale (debug knob, default 1.0) blends between actual FB
|
|
170
|
+
// and the neutral value 0.5. At 0 the network sees raw 0.5 across
|
|
171
|
+
// all FB channels, which post-quantize is ≈0 — the trained
|
|
172
|
+
// "no signal" point, NOT a strong negative signal.
|
|
173
|
+
let feedback_actual = nss_warp_feedback_sample(prev_uv_render);
|
|
174
|
+
let feedback_neutral = vec4<f32>(0.5);
|
|
175
|
+
let feedback = mix(
|
|
176
|
+
feedback_neutral,
|
|
177
|
+
feedback_actual,
|
|
178
|
+
saturate(settings.history_validity) * saturate(settings.feedback_scale),
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
// 6. Current colour (load, no filtering — already at render-res)
|
|
182
|
+
let current_rgb = max(vec3<f32>(0.0), textureLoad(tColour, st, 0).rgb);
|
|
183
|
+
|
|
184
|
+
// 7. Luma derivative — uses raw colours; the chunk handles its own scaling.
|
|
185
|
+
let luma_deriv = nss_luma_derivative(current_rgb, history_rgb);
|
|
186
|
+
|
|
187
|
+
// Tonemap with EXPOSURE applied first — matches ARM's
|
|
188
|
+
// Tonemap(EXPOSURE * raw) training distribution. Raw [0, 1] tonemap
|
|
189
|
+
// (without exposure) lands values 2-5x below the network's trained
|
|
190
|
+
// operating point.
|
|
191
|
+
let history_t = nss_tonemap_exposure(history_rgb);
|
|
192
|
+
let current_t = nss_tonemap_exposure(current_rgb);
|
|
193
|
+
|
|
194
|
+
// Apply ARM's Quantize transformation in fp — converts our [0, 1] inputs
|
|
195
|
+
// into the [-1, 1] signed-int8 / 127 distribution the trained network
|
|
196
|
+
// expects (DC at 0, not +0.5). See nss_arm_quantize header for derivation.
|
|
197
|
+
// settings.quantize_inputs (default 1.0) blends between this transform
|
|
198
|
+
// and the raw [0, 1] tonemap (0.0). Useful as an A/B test knob.
|
|
199
|
+
let q = saturate(settings.quantize_inputs);
|
|
200
|
+
let history_q = mix(history_t, nss_arm_quantize_v3(history_t), q);
|
|
201
|
+
let current_q = mix(current_t, nss_arm_quantize_v3(current_t), q);
|
|
202
|
+
let disocclusion_q = mix(disocclusion_mask, nss_arm_quantize(disocclusion_mask), q);
|
|
203
|
+
let feedback_q = mix(feedback, nss_arm_quantize_v4(feedback), q);
|
|
204
|
+
let luma_deriv_q = mix(luma_deriv, nss_arm_quantize(luma_deriv), q);
|
|
205
|
+
|
|
206
|
+
// ── Pack into 12-channel tensor ──
|
|
207
|
+
// Layout (4ch × depth=3):
|
|
208
|
+
// z=0 : history.rgb, current.r
|
|
209
|
+
// z=1 : current.gb, disocclusion_mask, feedback.r
|
|
210
|
+
// z=2 : feedback.gba, luma_derivative
|
|
211
|
+
textureStore(tTensor, vec3<i32>(st, 0), vec4<f32>(history_q, current_q.r));
|
|
212
|
+
textureStore(tTensor, vec3<i32>(st, 1), vec4<f32>(current_q.g, current_q.b, disocclusion_q, feedback_q.r));
|
|
213
|
+
textureStore(tTensor, vec3<i32>(st, 2), vec4<f32>(feedback_q.gba, luma_deriv_q));
|
|
214
|
+
|
|
215
|
+
// Pack nearest offset for postprocess: (-1, 0, 1) in each axis -> [0, 1]
|
|
216
|
+
let nearest_packed = (vec2<f32>(nearest_off) + 1.0) * 0.5;
|
|
217
|
+
textureStore(tNearestOffset, st, vec4<f32>(nearest_packed, 0.0, 0.0));
|
|
218
|
+
}
|
|
219
|
+
`, [
|
|
220
|
+
chunk_nss_find_nearest_depth,
|
|
221
|
+
chunk_nss_luma_derivative,
|
|
222
|
+
NSS_SETTINGS_STRUCT.declaration_chunk,
|
|
223
|
+
]
|
|
224
|
+
);
|
|
225
|
+
|
|
226
|
+
export const shader_nss_preprocess = ComputeShader.from({
|
|
227
|
+
label: "NSS / preprocess",
|
|
228
|
+
body,
|
|
229
|
+
resources,
|
|
230
|
+
});
|
package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* An unfinished translation of the FidelityFX reflection denoiser's reprojection pass.
|
|
3
|
+
*
|
|
4
|
+
* Not yet a shader, and not yet valid WGSL: the body still carries HLSL spellings the port has not
|
|
5
|
+
* reached (`FfxFloat16x4`, `FfxInt32x2`, `FFX_GROUP_MEMORY_BARRIER`), and `main` is an empty stub
|
|
6
|
+
* with no `@compute` and no `@workgroup_size`. It was a `ComputeShader` here until the workgroup
|
|
7
|
+
* size started being read out of the WGSL, which is a question this source cannot answer; it stays
|
|
8
|
+
* a chunk until someone finishes the port and writes the entry point.
|
|
9
|
+
*
|
|
10
|
+
* The bindings it will want are one texture, `tRadiance`.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/sdk/include/FidelityFX/gpu/denoiser/ffx_denoiser_reflections_reproject.h
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_ffx_denoiser_reflections_reproject: CodeChunk;
|
|
16
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
3
17
|
//# sourceMappingURL=shader_ffx_denoiser_reflections_reproject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_ffx_denoiser_reflections_reproject.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_ffx_denoiser_reflections_reproject.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,uDAFU,SAAS,CAubjB;0BArcwB,uCAAuC"}
|
package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js
CHANGED
|
@@ -2,18 +2,22 @@ import { chunk_unpack_float16_4 } from "../../../shader/chunk/binary/chunk_unpac
|
|
|
2
2
|
import { chunk_rgb_to_luminance } from "../../../shader/chunk/color/chunk_rgb_to_luminance.js";
|
|
3
3
|
import { chunk_dot2 } from "../../../shader/chunk/math/chunk_dot2.js";
|
|
4
4
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
5
|
-
import { ComputeShader } from "../../../shader/ComputeShader.js";
|
|
6
|
-
import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
|
|
8
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
9
|
-
resources.createGroup()
|
|
10
|
-
.addTexture("tRadiance");
|
|
11
5
|
|
|
12
6
|
/**
|
|
7
|
+
* An unfinished translation of the FidelityFX reflection denoiser's reprojection pass.
|
|
8
|
+
*
|
|
9
|
+
* Not yet a shader, and not yet valid WGSL: the body still carries HLSL spellings the port has not
|
|
10
|
+
* reached (`FfxFloat16x4`, `FfxInt32x2`, `FFX_GROUP_MEMORY_BARRIER`), and `main` is an empty stub
|
|
11
|
+
* with no `@compute` and no `@workgroup_size`. It was a `ComputeShader` here until the workgroup
|
|
12
|
+
* size started being read out of the WGSL, which is a question this source cannot answer; it stays
|
|
13
|
+
* a chunk until someone finishes the port and writes the entry point.
|
|
14
|
+
*
|
|
15
|
+
* The bindings it will want are one texture, `tRadiance`.
|
|
16
|
+
*
|
|
13
17
|
* @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/sdk/include/FidelityFX/gpu/denoiser/ffx_denoiser_reflections_reproject.h
|
|
14
18
|
* @type {CodeChunk}
|
|
15
19
|
*/
|
|
16
|
-
const
|
|
20
|
+
export const chunk_ffx_denoiser_reflections_reproject = CodeChunk.from(
|
|
17
21
|
//language=WGSL
|
|
18
22
|
`
|
|
19
23
|
|
|
@@ -450,8 +454,4 @@ fn main(){
|
|
|
450
454
|
chunk_rgb_to_luminance,
|
|
451
455
|
chunk_dot2,
|
|
452
456
|
]
|
|
453
|
-
);
|
|
454
|
-
export const shader_ffx_denoiser_reflections_reproject = ComputeShader.from({
|
|
455
|
-
label: "ffx_denoiser_reflections_reproject",
|
|
456
|
-
body
|
|
457
|
-
});
|
|
457
|
+
);
|
|
@@ -316,9 +316,9 @@ export function graph_prepare_meshlet_draw_commands_by_material({
|
|
|
316
316
|
const prefix_sums = resources.get(data.prefix_sums);
|
|
317
317
|
const commands = resources.get(data.commands);
|
|
318
318
|
|
|
319
|
-
shader_make_meshlet_indirect_draw_commands_by_material.
|
|
319
|
+
shader_make_meshlet_indirect_draw_commands_by_material.dispatchThreads({
|
|
320
320
|
encoder: context.encoder,
|
|
321
|
-
|
|
321
|
+
thread_count_x: material_count,
|
|
322
322
|
bindings: {
|
|
323
323
|
commands,
|
|
324
324
|
prefix_sums,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_count_meshlets_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js"],"names":[],"mappings":"AAgEA,
|
|
1
|
+
{"version":3,"file":"shader_count_meshlets_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js"],"names":[],"mappings":"AAgEA,8DAIE;8BAzD4B,+BAA+B"}
|