@woosh/meep-engine 3.12.0 → 3.13.1

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 (301) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  3. package/src/core/geom/3d/shape/ConvexHullShape3D.js +41 -25
  4. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  5. package/src/core/geom/3d/shape/PosedShape3D.js +7 -2
  6. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  7. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  8. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  9. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  10. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  11. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  12. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  13. package/src/shade/RENDERER_CONTRACT.md +2 -1
  14. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  15. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  16. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  17. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +755 -0
  18. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  19. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  20. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  21. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  22. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  23. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  24. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  25. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  26. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  27. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  28. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  29. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  30. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  31. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  32. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  33. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  34. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  35. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  39. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  40. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  41. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  42. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  43. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  44. package/src/shade/renderer/Renderer.d.ts +0 -6
  45. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  46. package/src/shade/renderer/Renderer.js +0 -29
  47. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  49. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  51. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  58. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  60. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  61. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  62. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  63. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  64. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  65. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  66. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  68. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  70. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  71. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  72. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  73. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  74. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  75. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  76. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  77. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  78. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  79. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  80. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  81. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  82. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  83. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  85. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  87. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  89. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  90. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  91. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  92. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  93. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  94. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  96. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  98. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  104. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  106. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  108. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  110. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  111. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  113. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  114. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  117. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  118. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  119. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  120. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  121. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  122. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  124. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  126. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  127. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  128. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  129. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  136. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  137. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  138. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  139. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  140. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  142. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  143. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  144. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  145. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  146. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph_particles.js +5 -3
  148. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  149. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  151. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  153. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  155. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  157. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  158. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  159. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  160. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  161. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  163. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  164. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  165. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  166. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  168. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  176. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  186. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  188. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  190. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  192. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  194. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  196. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  198. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  200. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  201. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  202. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  203. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  205. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  207. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  209. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  211. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  213. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  215. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  216. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  217. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  219. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  220. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  222. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  224. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  225. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  226. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  227. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  228. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  229. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  230. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  231. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  232. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  233. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  235. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  237. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  239. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  240. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  241. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  242. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  243. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  244. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  245. package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
  246. package/src/shade/renderer/scene/Mesh.js +4 -6
  247. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  248. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  249. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  250. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  251. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  252. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  253. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  254. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  255. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  256. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  257. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +16 -7
  258. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1342 -1326
  260. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +13 -0
  261. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  262. package/src/shade/renderer/shadow/map/Shadowmap.js +14 -0
  263. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +79 -0
  264. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -0
  265. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +196 -0
  266. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts +91 -0
  267. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts.map +1 -0
  268. package/src/shade/renderer/shadow/map/ShadowmapRegistry.js +156 -0
  269. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  270. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  271. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  272. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  273. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  274. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  275. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  276. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  277. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  278. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  279. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  280. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  281. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  282. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  283. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  284. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  285. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  286. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  287. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  288. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  289. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  290. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  291. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  292. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  293. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  294. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  295. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  296. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  297. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  298. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  299. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  300. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  301. 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"}