@woosh/meep-engine 3.12.0 → 3.13.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.
Files changed (285) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  3. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  4. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  5. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  6. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  7. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  8. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  9. package/src/shade/RENDERER_CONTRACT.md +2 -1
  10. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  11. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  12. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  13. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  14. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  15. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  16. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  17. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  18. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  19. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  20. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  21. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  22. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  23. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  24. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  25. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  26. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  27. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  28. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  29. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  30. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  31. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  32. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  33. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  34. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  35. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  39. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  40. package/src/shade/renderer/Renderer.d.ts +0 -6
  41. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  42. package/src/shade/renderer/Renderer.js +0 -29
  43. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  44. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  45. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  46. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  47. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  49. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  51. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  58. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  60. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  61. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  62. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  63. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  64. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  65. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  66. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  68. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  70. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  71. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  72. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  73. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  74. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  75. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  76. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  77. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  78. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  79. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  80. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  81. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  82. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  83. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  85. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  87. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  88. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  89. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  90. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  91. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  93. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  94. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  96. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  98. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  104. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  106. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  108. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  109. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  110. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  111. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  113. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  114. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  117. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  118. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  119. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  120. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  121. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  122. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  124. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  126. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  127. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  128. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  129. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  130. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  132. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  133. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  134. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  135. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  136. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  137. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  138. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  139. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  140. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  142. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/graph_particles.js +5 -3
  144. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  145. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  147. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  149. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  151. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  153. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  154. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  155. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  156. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  157. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  158. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  159. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  161. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  162. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  163. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  164. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  165. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  166. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  168. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  176. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  186. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  188. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  190. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  192. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  194. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  196. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  198. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  199. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  200. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  201. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  202. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  203. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  205. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  207. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  209. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  211. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  213. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  215. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  216. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  217. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  218. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  220. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  222. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  224. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  225. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  227. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  228. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  229. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  230. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  231. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  232. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  233. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  235. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  237. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  239. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  241. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  242. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  243. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  244. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  245. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  246. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  247. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  248. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  249. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  250. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  252. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  253. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  255. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  256. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  257. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  258. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  260. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  261. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  262. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  263. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  264. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  265. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  266. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  267. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  268. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  269. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  270. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  271. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  272. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  273. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  274. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  275. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  276. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  277. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  278. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  279. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  280. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  281. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  282. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  283. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  284. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  285. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
@@ -1,129 +1,131 @@
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
+ 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
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer
40
+ resources.setImmediate("m_initial", u32);
41
+
42
+ // G-buffer + reprojection inputs + uniforms (no storage buffers in this group).
43
+ resources.createGroup()
44
+ .addTexture("gBufferDepth")
45
+ .addTexture("gBufferPBR")
46
+ .addTexture("gBufferNormal", "uint")
47
+ .addTexture("gBufferAlbedo")
48
+ .addTexture("gBufferEmissive", "uint")
49
+ .addTexture("VelocityBuffer")
50
+ .addTexture("tOcclusionClip")
51
+ .addTexture("tSTBN_vec2", "unfilterable-float", "3d")
52
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
53
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
54
+
55
+ // Local lights + froxel clusters (the screen-space tile candidate set).
56
+ const RESTIR_DI_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
57
+ RESTIR_DI_LIGHT_GROUP.label = "restir-di/lights";
58
+ RESTIR_DI_LIGHT_GROUP
59
+ .addStorageBuffer("light_data", WebGPUArray.u32)
60
+ .addUniform("cluster_parameters", vec3f)
61
+ .addStorageBuffer("cluster_lookup", LIGHT_CLUSTER_LOOKUP_STRUCT)
62
+ .addStorageBuffer("cluster_data", WebGPUArray.u32);
63
+ resources.addGroup(RESTIR_DI_LIGHT_GROUP);
64
+
65
+ // Previous frame's spatiotemporal reservoir (read) + this pass's output (write).
66
+ // The output is a transient scratch the spatial pass consumes; the persistent
67
+ // ping-pong final reservoir is written by the spatial pass.
68
+ const RESTIR_DI_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
69
+ RESTIR_DI_RESERVOIR_GROUP.label = "restir-di/reservoirs";
70
+ RESTIR_DI_RESERVOIR_GROUP
71
+ .addStorageBuffer("reservoir_out", WebGPUArray.from(RTXDI_PackedReservoir), true)
72
+ .addStorageBuffer("reservoir_previous", WebGPUArray.from(RTXDI_PackedReservoir), false);
73
+ resources.addGroup(RESTIR_DI_RESERVOIR_GROUP);
74
+
75
+ const body = CodeChunk.from(
76
+ //language=WGSL
77
+ `
78
+ @compute @workgroup_size(8, 8, 1)
79
+ fn main(
80
+ @builtin(global_invocation_id) global_invocation_id: vec3<u32>,
81
+ ) {
82
+ let i_coord = global_invocation_id.xy;
83
+ let texture_size = textureDimensions(gBufferDepth);
84
+
85
+ if (!all(i_coord < texture_size)) {
86
+ return;
87
+ }
88
+
89
+ // Per-pixel, per-frame PRNG for candidate sampling + area-light jitter.
90
+ random_initialize(vec3<u32>(i_coord, view.frame_index), vec3<u32>(0x9E3779B9u, 0x85EBCA6Bu, 0xC2B2AE35u));
91
+
92
+ var reservoir = rtxdi_empty_reservoir();
93
+
94
+ let surface = restir_reconstruct_surface(i_coord, texture_size);
95
+ if (surface.is_valid) {
96
+ // Blue-noise area-light sample coordinate (spatially-visible dimension).
97
+ let stbn_uv = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
98
+
99
+ let canonical = restir_generate_candidates(
100
+ surface.geometry,
101
+ surface.material,
102
+ vec2<f32>(i_coord) + vec2<f32>(0.5, 0.5),
103
+ surface.view_depth,
104
+ texture_size,
105
+ m_initial,
106
+ stbn_uv,
107
+ );
108
+
109
+ reservoir = restir_temporal_reuse(canonical, surface.geometry, surface.material, i_coord, texture_size);
110
+ }
111
+
112
+ reservoir_out[restir_reservoir_address(i_coord, texture_size.x)] = rtxdi_pack_reservoir(reservoir);
113
+ }
114
+ `, [
115
+ chunk_restir_reconstruct_surface,
116
+ chunk_restir_generate_candidates,
117
+ chunk_restir_temporal_reuse,
118
+ chunk_stbn_sample_vec2,
119
+ chunk_rtxdi_empty_reservoir,
120
+ chunk_rtxdi_pack_reservoir,
121
+ chunk_restir_reservoir_address,
122
+ chunk_random,
123
+ chunk_random_initialize,
124
+ ]
125
+ );
126
+
127
+ export const shader_restir_di_resample = ComputeShader.from({
128
+ label: "ReSTIR DI Resample",
129
+ resources,
130
+ body,
131
+ });
@@ -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,qDAIG;8BA5F2B,+BAA+B"}
1
+ {"version":3,"file":"shader_restir_di_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resolve.js"],"names":[],"mappings":"AAgGA,qDAIG;8BA9F2B,+BAA+B"}
@@ -1,99 +1,101 @@
1
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
- import { chunk_rtxdi_unpack_reservoir } from "../reservoir/chunk_rtxdi_unpack_reservoir.js";
4
- import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
5
- import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
6
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
- import { ComputeShader } from "../../shader/ComputeShader.js";
8
- import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
9
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
- import { sr_create_group_RTX } from "../../geometry/sr_create_group_RTX.js";
11
- import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
12
- import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
13
- import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
14
- import { chunk_restir_resolve } from "./chunk_restir_resolve.js";
15
-
16
- /**
17
- * ReSTIR DI — resolve pass (stage 2 of 2).
18
- *
19
- * Per pixel: reconstruct the surface, read the reservoir the resample pass wrote,
20
- * and resolve it to outgoing radiance — full RGB BRDF * W * visibility, with one
21
- * opaque shadow ray. Holds the 7-buffer ray-tracing group plus light_data + the
22
- * reservoir (9 storage buffers), within maxStorageBuffersPerShaderStage. The
23
- * candidate generation + temporal reuse (which need the cluster + the second
24
- * reservoir) live in the resample pass.
25
- *
26
- * @type {ComputeShader}
27
- */
28
-
29
- const resources = new ShaderResourceSetDescriptor();
30
-
31
- // G-buffer + radiance output + uniforms.
32
- resources.createGroup()
33
- .addTexture("gBufferDepth")
34
- .addTexture("gBufferPBR")
35
- .addTexture("gBufferNormal", "uint")
36
- .addTexture("gBufferAlbedo")
37
- .addTexture("gBufferEmissive", "uint")
38
- // Depth + HiZ pyramid for the hybrid screen-space hand-off trace.
39
- .addTexture("tDepth")
40
- .addTexture("tHZB")
41
- .addStorageTexture("output", "rgba16float", "2d", "write-only")
42
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
43
- .addUniform("view", VIEW_UNIFORM_STRUCT)
44
- .addUniform("use_screen_space_shadow", u32);
45
-
46
- // Local light tables (resolve re-evaluates the selected light; no clusters needed).
47
- const RESTIR_DI_RESOLVE_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
48
- RESTIR_DI_RESOLVE_LIGHT_GROUP.label = "restir-di/resolve-lights";
49
- RESTIR_DI_RESOLVE_LIGHT_GROUP.addStorageBuffer("light_data", WebGPUArray.u32);
50
- resources.addGroup(RESTIR_DI_RESOLVE_LIGHT_GROUP);
51
-
52
- // Ray-tracing acceleration structure + geometry (opaque visibility ray).
53
- sr_create_group_RTX(resources);
54
-
55
- // The reservoir written by the resample pass (read-only here).
56
- const RESTIR_DI_RESOLVE_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
57
- RESTIR_DI_RESOLVE_RESERVOIR_GROUP.label = "restir-di/resolve-reservoir";
58
- RESTIR_DI_RESOLVE_RESERVOIR_GROUP.addStorageBuffer("reservoir_current", WebGPUArray.from(RTXDI_PackedReservoir), false);
59
- resources.addGroup(RESTIR_DI_RESOLVE_RESERVOIR_GROUP);
60
-
61
- const body = CodeChunk.from(
62
- //language=WGSL
63
- `
64
- @compute @workgroup_size(8, 8, 1)
65
- fn main(
66
- @builtin(global_invocation_id) global_invocation_id: vec3<u32>,
67
- ) {
68
- let i_coord = global_invocation_id.xy;
69
- let texture_size = textureDimensions(gBufferDepth);
70
-
71
- if (!all(i_coord < texture_size)) {
72
- return;
73
- }
74
-
75
- let surface = restir_reconstruct_surface(i_coord, texture_size);
76
- if (!surface.is_valid) {
77
- textureStore(output, i_coord, vec4<f32>(0.0, 0.0, 0.0, 0.0));
78
- return;
79
- }
80
-
81
- let reservoir = rtxdi_unpack_reservoir(reservoir_current[restir_reservoir_address(i_coord, texture_size.x)]);
82
-
83
- let radiance = restir_resolve(i_coord, reservoir, surface.geometry, surface.material, use_screen_space_shadow);
84
-
85
- textureStore(output, i_coord, vec4<f32>(radiance, 1.0));
86
- }
87
- `, [
88
- chunk_restir_reconstruct_surface,
89
- chunk_rtxdi_unpack_reservoir,
90
- chunk_restir_resolve,
91
- chunk_restir_reservoir_address,
92
- ]
93
- );
94
-
95
- export const shader_restir_di_resolve = ComputeShader.from({
96
- label: "ReSTIR DI Resolve",
97
- resources,
98
- body,
99
- });
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { chunk_rtxdi_unpack_reservoir } from "../reservoir/chunk_rtxdi_unpack_reservoir.js";
4
+ import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
5
+ import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
6
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
+ import { ComputeShader } from "../../shader/ComputeShader.js";
8
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
9
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
10
+ import { sr_create_group_RTX } from "../../geometry/sr_create_group_RTX.js";
11
+ import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
12
+ import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
13
+ import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
14
+ import { chunk_restir_resolve } from "./chunk_restir_resolve.js";
15
+
16
+ /**
17
+ * ReSTIR DI — resolve pass (stage 2 of 2).
18
+ *
19
+ * Per pixel: reconstruct the surface, read the reservoir the resample pass wrote,
20
+ * and resolve it to outgoing radiance — full RGB BRDF * W * visibility, with one
21
+ * opaque shadow ray. Holds the 7-buffer ray-tracing group plus light_data + the
22
+ * reservoir (9 storage buffers), within maxStorageBuffersPerShaderStage. The
23
+ * candidate generation + temporal reuse (which need the cluster + the second
24
+ * reservoir) live in the resample pass.
25
+ *
26
+ * @type {ComputeShader}
27
+ */
28
+
29
+ const resources = new ShaderResourceSetDescriptor();
30
+
31
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer
32
+ resources.setImmediate("use_screen_space_shadow", u32);
33
+
34
+ // G-buffer + radiance output + uniforms.
35
+ resources.createGroup()
36
+ .addTexture("gBufferDepth")
37
+ .addTexture("gBufferPBR")
38
+ .addTexture("gBufferNormal", "uint")
39
+ .addTexture("gBufferAlbedo")
40
+ .addTexture("gBufferEmissive", "uint")
41
+ // Depth + HiZ pyramid for the hybrid screen-space hand-off trace.
42
+ .addTexture("tDepth")
43
+ .addTexture("tHZB")
44
+ .addStorageTexture("output", "rgba16float", "2d", "write-only")
45
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
46
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
47
+
48
+ // Local light tables (resolve re-evaluates the selected light; no clusters needed).
49
+ const RESTIR_DI_RESOLVE_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
50
+ RESTIR_DI_RESOLVE_LIGHT_GROUP.label = "restir-di/resolve-lights";
51
+ RESTIR_DI_RESOLVE_LIGHT_GROUP.addStorageBuffer("light_data", WebGPUArray.u32);
52
+ resources.addGroup(RESTIR_DI_RESOLVE_LIGHT_GROUP);
53
+
54
+ // Ray-tracing acceleration structure + geometry (opaque visibility ray).
55
+ sr_create_group_RTX(resources);
56
+
57
+ // The reservoir written by the resample pass (read-only here).
58
+ const RESTIR_DI_RESOLVE_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
59
+ RESTIR_DI_RESOLVE_RESERVOIR_GROUP.label = "restir-di/resolve-reservoir";
60
+ RESTIR_DI_RESOLVE_RESERVOIR_GROUP.addStorageBuffer("reservoir_current", WebGPUArray.from(RTXDI_PackedReservoir), false);
61
+ resources.addGroup(RESTIR_DI_RESOLVE_RESERVOIR_GROUP);
62
+
63
+ const body = CodeChunk.from(
64
+ //language=WGSL
65
+ `
66
+ @compute @workgroup_size(8, 8, 1)
67
+ fn main(
68
+ @builtin(global_invocation_id) global_invocation_id: vec3<u32>,
69
+ ) {
70
+ let i_coord = global_invocation_id.xy;
71
+ let texture_size = textureDimensions(gBufferDepth);
72
+
73
+ if (!all(i_coord < texture_size)) {
74
+ return;
75
+ }
76
+
77
+ let surface = restir_reconstruct_surface(i_coord, texture_size);
78
+ if (!surface.is_valid) {
79
+ textureStore(output, i_coord, vec4<f32>(0.0, 0.0, 0.0, 0.0));
80
+ return;
81
+ }
82
+
83
+ let reservoir = rtxdi_unpack_reservoir(reservoir_current[restir_reservoir_address(i_coord, texture_size.x)]);
84
+
85
+ let radiance = restir_resolve(i_coord, reservoir, surface.geometry, surface.material, use_screen_space_shadow);
86
+
87
+ textureStore(output, i_coord, vec4<f32>(radiance, 1.0));
88
+ }
89
+ `, [
90
+ chunk_restir_reconstruct_surface,
91
+ chunk_rtxdi_unpack_reservoir,
92
+ chunk_restir_resolve,
93
+ chunk_restir_reservoir_address,
94
+ ]
95
+ );
96
+
97
+ export const shader_restir_di_resolve = ComputeShader.from({
98
+ label: "ReSTIR DI Resolve",
99
+ resources,
100
+ body,
101
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAgCA;;GAEG;AACH;IA2EI;;;OAGG;IACH,uCAcC;IA/ED;;;;;OAKG;IACH,eAEC;IAED,cAKC;IAOD;;;OAGG;IACH,wBAEC;IA2DD;;;;OAIG;IACH,oBAHW,MAAM,wBAmBhB;IAED;;;;;;OAMG;IACH,uBAFW,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,wBAYhB;IAuID;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,+CAMC;;CACJ;oBA/VmB,gCAAgC"}
1
+ {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AA+BA;;GAEG;AACH;IA2EI;;;OAGG;IACH,uCAcC;IA/ED;;;;;OAKG;IACH,eAEC;IAED,cAKC;IAOD;;;OAGG;IACH,wBAEC;IA2DD;;;;OAIG;IACH,oBAHW,MAAM,wBAmBhB;IAED;;;;;;OAMG;IACH,uBAFW,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,wBAYhB;IAuID;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,+CAMC;;CACJ;oBA9VmB,gCAAgC"}