@woosh/meep-engine 3.61.3 → 3.62.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 (266) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  3. package/src/engine/graphics3/PickingSystem.js +415 -413
  4. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  5. package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
  6. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  7. package/src/engine/graphics3/decal/shader_decal_composite.js +26 -16
  8. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -1
  9. package/src/engine/graphics3/decal/shader_decal_tile_copy.js +6 -11
  10. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  11. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +6 -2
  12. package/src/engine/graphics3/highlight/shader_highlight_outline.d.ts.map +1 -1
  13. package/src/engine/graphics3/highlight/shader_highlight_outline.js +167 -150
  14. package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -1
  15. package/src/engine/graphics3/shader_picking_gather.js +133 -120
  16. package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
  17. package/src/shade/device/mock/SoftwareGPUTexture.js +11 -0
  18. package/src/shade/device/pipeline/rp_validate_and_rewrite_for_color_attachments.js +1 -1
  19. package/src/shade/playground/contact_shadows/ContactShadowLab.js +6 -6
  20. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -1
  21. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +6 -4
  22. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -1
  23. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +6 -4
  24. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -1
  25. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +6 -4
  26. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +1 -1
  27. package/src/shade/playground/ssr_variance/capture.js +1 -1
  28. package/src/shade/renderer/Renderer.d.ts +2 -2
  29. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  30. package/src/shade/renderer/Renderer.js +40 -53
  31. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
  32. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +3 -1
  33. package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.d.ts.map +1 -1
  34. package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.js +5 -4
  35. package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
  36. package/src/shade/renderer/deferred/shader_deferred_main.js +6 -4
  37. package/src/shade/renderer/extension/GBufferTextures.d.ts +5 -1
  38. package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
  39. package/src/shade/renderer/extension/GBufferTextures.js +5 -1
  40. package/src/shade/renderer/extension/ViewTextures.d.ts +11 -7
  41. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  42. package/src/shade/renderer/extension/ViewTextures.js +17 -13
  43. package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts +2 -0
  44. package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts.map +1 -1
  45. package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.js +2 -0
  46. package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.d.ts.map +1 -1
  47. package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.js +8 -5
  48. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +7 -5
  49. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  50. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +29 -16
  51. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +9 -3
  52. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -1
  53. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +40 -32
  54. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  55. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -15
  56. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.d.ts.map +1 -1
  57. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js +7 -3
  58. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_diffuse.js +1 -1
  59. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
  60. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +5 -3
  61. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
  62. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +1 -3
  63. package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +1 -1
  64. package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +2 -2
  65. package/src/shade/renderer/global_illumination/lpv/shader_diffuse_LPV.js +1 -1
  66. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  67. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +14 -1
  68. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  69. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +10 -1
  70. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +2 -2
  71. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
  72. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +5 -3
  73. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +1 -1
  74. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
  75. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +5 -3
  76. package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_colored_hash.js +1 -1
  77. package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_sharc_debug_radiance.js +1 -1
  78. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +1 -1
  79. package/src/shade/renderer/material/GPUMaterialManager.d.ts +22 -9
  80. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  81. package/src/shade/renderer/material/GPUMaterialManager.js +159 -65
  82. package/src/shade/renderer/material/MATERIAL_MASK.d.ts +19 -0
  83. package/src/shade/renderer/material/MATERIAL_MASK.d.ts.map +1 -0
  84. package/src/shade/renderer/material/MATERIAL_MASK.js +19 -0
  85. package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts +8 -8
  86. package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts.map +1 -1
  87. package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.js +11 -92
  88. package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.d.ts.map +1 -1
  89. package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.js +10 -2
  90. package/src/shade/renderer/material/dispatch/gbuffer_compute.js +2 -2
  91. package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts +7 -7
  92. package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts.map +1 -1
  93. package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.js +20 -16
  94. package/src/shade/renderer/material/dispatch/shader_material_pixel_count.d.ts.map +1 -1
  95. package/src/shade/renderer/material/dispatch/shader_material_pixel_count.js +3 -1
  96. package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.d.ts.map +1 -1
  97. package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.js +3 -1
  98. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  99. package/src/shade/renderer/material/standard/fragment_gbuffer.js +26 -25
  100. package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts +10 -8
  101. package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts.map +1 -1
  102. package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +16 -13
  103. package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts +1 -1
  104. package/src/shade/renderer/material/template/ShadeMaterialTemplate.js +1 -1
  105. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts +5 -2
  106. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
  107. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +7 -4
  108. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +3 -3
  109. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
  110. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +12 -10
  111. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +2 -2
  112. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
  113. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
  114. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +9 -7
  115. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  116. package/src/shade/renderer/postprocess/gtao/GTAO.js +11 -8
  117. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +3 -3
  118. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  119. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +17 -12
  120. package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +1 -1
  121. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +1 -1
  122. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +4 -4
  123. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +2 -2
  124. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -41
  125. package/src/shade/renderer/postprocess/ssr/prefilter/chunk_load_neighbourhood_sample.js +1 -1
  126. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -3
  127. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
  128. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +5 -2
  129. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -4
  130. package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.d.ts.map +1 -1
  131. package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.js +4 -2
  132. package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts +2 -1
  133. package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts.map +1 -1
  134. package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.js +10 -2
  135. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +1 -1
  136. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -4
  137. package/src/shade/renderer/postprocess/taa/shader_reprojection_map.d.ts.map +1 -1
  138. package/src/shade/renderer/postprocess/taa/shader_reprojection_map.js +6 -4
  139. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +6 -8
  140. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  141. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +29 -33
  142. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
  143. package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +1 -0
  144. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +6 -3
  145. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
  146. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +8 -3
  147. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
  148. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +3 -0
  149. package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.d.ts +1 -0
  150. package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.js +5 -0
  151. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +8 -3
  152. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  153. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +54 -5
  154. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +1 -0
  155. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  156. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
  157. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
  158. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  159. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +2 -1
  160. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +7 -2
  161. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
  162. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +73 -9
  163. package/src/shade/renderer/rasterize/native/viz/shader_vertex.js +4 -4
  164. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  165. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +23 -40
  166. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.d.ts.map +1 -1
  167. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +55 -76
  168. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +4 -2
  169. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  170. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +6 -2
  171. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +4 -2
  172. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  173. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +6 -2
  174. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +5 -2
  175. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  176. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +43 -2
  177. package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts +39 -0
  178. package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts.map +1 -0
  179. package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.js +45 -0
  180. package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts +26 -0
  181. package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts.map +1 -0
  182. package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.js +48 -0
  183. package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts +40 -0
  184. package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts.map +1 -0
  185. package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.js +172 -0
  186. package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.d.ts.map +1 -1
  187. package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.js +6 -4
  188. package/src/shade/renderer/restir/di/chunk_restir_spatial_reuse.js +1 -1
  189. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +2 -2
  190. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts +9 -0
  191. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts.map +1 -0
  192. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.js +18 -0
  193. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts +20 -0
  194. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts.map +1 -0
  195. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.js +26 -0
  196. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +60 -18
  197. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -1
  198. package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +163 -45
  199. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -1
  200. package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +19 -18
  201. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts +13 -0
  202. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts.map +1 -0
  203. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js +22 -0
  204. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts +8 -1
  205. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts.map +1 -1
  206. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js +10 -8
  207. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts +22 -0
  208. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts.map +1 -0
  209. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.js +32 -0
  210. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts +11 -1
  211. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts.map +1 -1
  212. package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.js +14 -6
  213. package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts +14 -0
  214. package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts.map +1 -0
  215. package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.js +24 -0
  216. package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts +17 -0
  217. package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts.map +1 -0
  218. package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.js +27 -0
  219. package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts +7 -1
  220. package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts.map +1 -1
  221. package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.js +8 -1
  222. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_load_world_space_normal.js +1 -1
  223. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +10 -10
  224. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +8 -0
  225. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  226. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +9 -0
  227. package/src/shade/renderer/shader/util/shader_decode_octahedral_normal.js +1 -1
  228. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +3 -3
  229. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -1
  230. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +3 -3
  231. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -1
  232. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +6 -4
  233. package/src/shade/renderer/shadow/ray/RTXShadows.d.ts +6 -4
  234. package/src/shade/renderer/shadow/ray/RTXShadows.d.ts.map +1 -1
  235. package/src/shade/renderer/shadow/ray/RTXShadows.js +16 -5
  236. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
  237. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +7 -7
  238. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +2 -2
  239. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts +4 -2
  240. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts.map +1 -1
  241. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +79 -74
  242. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  243. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +7 -7
  244. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.d.ts.map +1 -1
  245. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +7 -3
  246. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +7 -5
  247. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  248. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +29 -16
  249. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts +5 -5
  250. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  251. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +8 -8
  252. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  253. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +13 -14
  254. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
  255. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  256. package/src/shade/renderer/water/GPUWaterRenderer.js +6 -4
  257. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
  258. package/src/shade/renderer/water/chunk_water_transport.js +11 -9
  259. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  260. package/src/shade/renderer/water/shader_water.js +13 -11
  261. package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts +0 -7
  262. package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts.map +0 -1
  263. package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.js +0 -6
  264. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts +0 -3
  265. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +0 -1
  266. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +0 -104
@@ -13,7 +13,14 @@ export const SCREEN_DEPTH_RESOURCE = ShaderResourceDescriptor.texture("tDepth");
13
13
  export const SCREEN_HZB_RESOURCE = ShaderResourceDescriptor.texture("tHZB");
14
14
 
15
15
  /**
16
- * The scene's normals, encoded.
16
+ * The scene's shading normal, encoded (`decode_g_buffer_normal`).
17
17
  * @type {ShaderResourceDescriptor}
18
18
  */
19
19
  export const SCREEN_NORMAL_RESOURCE = ShaderResourceDescriptor.texture("tNormal", "uint");
20
+
21
+ /**
22
+ * The G-buffer's PBR target, for the face normal it holds (`decode_g_buffer_face_normal`): the plane of the
23
+ * triangle a pixel shows.
24
+ * @type {ShaderResourceDescriptor}
25
+ */
26
+ export const SCREEN_PBR_RESOURCE = ShaderResourceDescriptor.texture("tPBR");
@@ -7,7 +7,7 @@ export const chunk_ffx_sssr_load_world_space_normal = CodeChunk.from(
7
7
  `
8
8
  fn ffx_sssr_load_world_space_normal(texel_coord: vec2<i32>)-> vec3<f32>{
9
9
  // Using shading normal
10
- return decode_g_buffer_normal( textureLoad(tNormal, texel_coord, 0).xy );
10
+ return decode_g_buffer_normal( textureLoad(tNormal, texel_coord, 0).x );
11
11
  }
12
12
  `, [
13
13
  chunk_decode_g_buffer_normal
@@ -1,6 +1,6 @@
1
1
  import { CodeChunk } from "../../compiler/CodeChunk.js";
2
2
  import { chunk_is_background } from "../depth/chunk_is_background.js";
3
- import { chunk_decode_g_buffer_normal } from "../geometry/normal/chunk_decode_g_buffer_normal.js";
3
+ import { chunk_decode_g_buffer_face_normal } from "../geometry/normal/chunk_decode_g_buffer_face_normal.js";
4
4
  import { chunk_plane_from_normal_and_point } from "../geometry/plane/chunk_plane_from_normal_and_point.js";
5
5
  import { chunk_plane_ray_raycast } from "../geometry/plane/chunk_plane_ray_raycast.js";
6
6
  import { RAY_STRUCT } from "../geometry/ray/RAY_STRUCT.js";
@@ -35,10 +35,10 @@ struct ScreenSpaceRayReceiver {
35
35
  plane: vec4<f32>,
36
36
  }
37
37
 
38
- // One G-buffer fetch. Depth is stored at the texel center; .zw is the geometric
39
- // face normal, while .xy includes material normal mapping.
38
+ // One G-buffer texel: its depth, stored at the texel center, and its face normal, read from the PBR
39
+ // target. The shading normal includes material normal mapping and is not the surface's plane.
40
40
  fn screen_space_ray_load_receiver(
41
- uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
41
+ uv: vec2<f32>, depth: texture_2d<f32>, pbr: texture_2d<f32>,
42
42
  inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
43
43
  ) -> ScreenSpaceRayReceiver {
44
44
  let size = textureDimensions(depth, 0);
@@ -46,7 +46,7 @@ fn screen_space_ray_load_receiver(
46
46
  let d = textureLoad(depth, coord, 0).r;
47
47
  let center = (vec2<f32>(coord) + 0.5) / vec2<f32>(size);
48
48
  let position = inv_project_position(vec3<f32>(center, d), inverse_projection);
49
- let normal = (world_to_view * vec4<f32>(decode_g_buffer_normal(textureLoad(normals, coord, 0).zw), 0.0)).xyz;
49
+ let normal = (world_to_view * vec4<f32>(decode_g_buffer_face_normal(textureLoad(pbr, coord, 0)), 0.0)).xyz;
50
50
  return ScreenSpaceRayReceiver(d, plane_from_normal_and_point(normal, position));
51
51
  }
52
52
 
@@ -86,12 +86,12 @@ fn screen_space_ray_accept(
86
86
  }
87
87
 
88
88
  fn screen_space_ray_validate(
89
- ray: Ray, uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
89
+ ray: Ray, uv: vec2<f32>, depth: texture_2d<f32>, pbr: texture_2d<f32>,
90
90
  projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
91
91
  distance_tolerance: f32,
92
92
  ) -> ScreenSpaceRayHit {
93
93
  if (!screen_space_ray_in_bounds(uv)) { return ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 1u); }
94
- let receiver = screen_space_ray_load_receiver(uv, depth, normals, inverse_projection, world_to_view);
94
+ let receiver = screen_space_ray_load_receiver(uv, depth, pbr, inverse_projection, world_to_view);
95
95
  if (is_background(receiver.depth)) { return ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 2u); }
96
96
  return screen_space_ray_accept(ray, uv, receiver, vec2<f32>(textureDimensions(depth, 0)),
97
97
  projection, inverse_projection, distance_tolerance);
@@ -100,7 +100,7 @@ fn screen_space_ray_validate(
100
100
  // One G-buffer fetch per lookup, as in the paper: the plane that rejects lookup n
101
101
  // is also the tangent plane of update n+1. max_updates updates read max_updates+1 texels.
102
102
  fn screen_space_newton_ray(
103
- ray: Ray, seed_uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
103
+ ray: Ray, seed_uv: vec2<f32>, depth: texture_2d<f32>, pbr: texture_2d<f32>,
104
104
  projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
105
105
  max_updates: u32, distance_tolerance: f32,
106
106
  ) -> ScreenSpaceRayHit {
@@ -112,7 +112,7 @@ fn screen_space_newton_ray(
112
112
  for (var i = 0u; i <= updates; i++) {
113
113
  let iterations = max(i, 1u);
114
114
  if (!screen_space_ray_in_bounds(uv)) { return ScreenSpaceRayHit(uv, 0.0, 1e20, iterations, 1u); }
115
- let receiver = screen_space_ray_load_receiver(uv, depth, normals, inverse_projection, world_to_view);
115
+ let receiver = screen_space_ray_load_receiver(uv, depth, pbr, inverse_projection, world_to_view);
116
116
  if (is_background(receiver.depth)) { return ScreenSpaceRayHit(uv, 0.0, 1e20, iterations, 2u); }
117
117
  // The seed is the undisplaced background, not an update; only updated lookups are accepted.
118
118
  if (i > 0u) {
@@ -130,6 +130,6 @@ fn screen_space_newton_ray(
130
130
  }
131
131
  return hit;
132
132
  }
133
- `, [RAY_STRUCT.declaration_chunk, chunk_is_background, chunk_decode_g_buffer_normal,
133
+ `, [RAY_STRUCT.declaration_chunk, chunk_is_background, chunk_decode_g_buffer_face_normal,
134
134
  chunk_plane_from_normal_and_point, chunk_plane_ray_raycast, chunk_ray_at,
135
135
  chunk_ray_nearest_point, chunk_inv_project_position, chunk_project_position]);
@@ -28,6 +28,14 @@ export class RenderPassDescriptor {
28
28
  * @type {RenderPassDepthStencilAttachmentDescriptor}
29
29
  */
30
30
  depthStencilAttachment: RenderPassDepthStencilAttachmentDescriptor;
31
+ /**
32
+ * Whether the pipeline writes each draw's `instance_index` as a slot of the frame's visible-meshlet
33
+ * table, as the visibility raster does: a draw under it must take its meshlets from that table — see
34
+ * `graph_meshlets_rasterize`.
35
+ *
36
+ * @type {boolean}
37
+ */
38
+ visible_meshlet_slots: boolean;
31
39
  /**
32
40
  * @param {Object} options
33
41
  * @param {GPUTextureContext[]} [options.colorTargets]
@@ -1 +1 @@
1
- {"version":3,"file":"RenderPassDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shader/pass/RenderPassDescriptor.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;;;;OAMG;IACH,OAFU,MAAM,GAAC,SAAS,CAER;IAElB;;OAEG;IACH,mCAAQ;IAER;;OAEG;IACH,uCAAS;IAET;;;OAGG;IACH,kBAFU,qCAAqC,CAEzB;IAEtB;;;OAGG;IACH,wBAFU,0CAA0C,CAEsB;IAG1E;;;;;;;;;;;OAWG;IACH;QAVyC,YAAY,GAA1C,mBAAmB;QACS,WAAW;QACnB,MAAM;QACL,OAAO;QACR,WAAW;QACV,YAAY;QACb,WAAW;QACV,YAAY;gCAwE3C;IAED;;;;;;;;;;;OAWG;IACH;QAT2C,OAAO;QACT,YAAY,GAA1C,mBAAmB;QACS,WAAW;QACtB,QAAQ;QACA,eAAe;QACpB,MAAM;QACL,OAAO;kCAuCtC;IAED;;;;;;;;OAQG;IACH;QAN2C,OAAO;QACpB,OAAO;QACT,cAAc,GAA/B,MAAM;QACW,QAAQ;QACH,aAAa;aAgB7C;IAGL;;;OAGG;IACH,iCAFU,OAAO,CAEoC;CANpD;2DAnM0D,iDAAiD"}
1
+ {"version":3,"file":"RenderPassDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shader/pass/RenderPassDescriptor.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IACI;;;;;;OAMG;IACH,OAFU,MAAM,GAAC,SAAS,CAER;IAElB;;OAEG;IACH,mCAAQ;IAER;;OAEG;IACH,uCAAS;IAET;;;OAGG;IACH,kBAFU,qCAAqC,CAEzB;IAEtB;;;OAGG;IACH,wBAFU,0CAA0C,CAEsB;IAE1E;;;;;;OAMG;IACH,uBAFU,OAAO,CAEa;IAG9B;;;;;;;;;;;OAWG;IACH;QAVyC,YAAY,GAA1C,mBAAmB;QACS,WAAW;QACnB,MAAM;QACL,OAAO;QACR,WAAW;QACV,YAAY;QACb,WAAW;QACV,YAAY;gCAwE3C;IAED;;;;;;;;;;;OAWG;IACH;QAT2C,OAAO;QACT,YAAY,GAA1C,mBAAmB;QACS,WAAW;QACtB,QAAQ;QACA,eAAe;QACpB,MAAM;QACL,OAAO;kCAuCtC;IAED;;;;;;;;OAQG;IACH;QAN2C,OAAO;QACpB,OAAO;QACT,cAAc,GAA/B,MAAM;QACW,QAAQ;QACH,aAAa;aAgB7C;IAGL;;;OAGG;IACH,iCAFU,OAAO,CAEoC;CANpD;2DA5M0D,iDAAiD"}
@@ -37,6 +37,15 @@ export class RenderPassDescriptor {
37
37
  */
38
38
  depthStencilAttachment = new RenderPassDepthStencilAttachmentDescriptor();
39
39
 
40
+ /**
41
+ * Whether the pipeline writes each draw's `instance_index` as a slot of the frame's visible-meshlet
42
+ * table, as the visibility raster does: a draw under it must take its meshlets from that table — see
43
+ * `graph_meshlets_rasterize`.
44
+ *
45
+ * @type {boolean}
46
+ */
47
+ visible_meshlet_slots = false;
48
+
40
49
 
41
50
  /**
42
51
  * @param {Object} options
@@ -18,7 +18,7 @@ fn main(
18
18
  ) -> @location(0) vec4<f32>{
19
19
  let texel = textureLoad(tInput, vec2u(coord.xy), 0);
20
20
 
21
- let normal = decode_g_buffer_normal(texel.xy);
21
+ let normal = decode_g_buffer_normal(texel.x);
22
22
 
23
23
  return vec4(normal, 1.0);
24
24
  }
@@ -5,17 +5,17 @@
5
5
  * @param {Object} options
6
6
  * @param {FrameGraph} options.graph
7
7
  * @param {number} options.depth the depth buffer
8
- * @param {number} options.normal the G-buffer normals
8
+ * @param {number} options.pbr the G-buffer's PBR target, for its face normal
9
9
  * @param {GPUBuffer} options.camera the view's camera uniforms, whose projection drew `depth`
10
10
  * @param {ArrayLike<number>} options.resolution of `depth`
11
11
  * @param {{to_light: ArrayLike<number>, length: number, steps: number, thickness: number, jitter_frame: number}} options.settings
12
12
  * see {@link CONTACT_SHADOW_LINEAR_SETTINGS_STRUCT}
13
13
  * @returns {number} the visibility texture
14
14
  */
15
- export function graph_contact_shadow_linear({ graph, depth, normal, camera, resolution, settings }: {
15
+ export function graph_contact_shadow_linear({ graph, depth, pbr, camera, resolution, settings }: {
16
16
  graph: FrameGraph;
17
17
  depth: number;
18
- normal: number;
18
+ pbr: number;
19
19
  camera: GPUBuffer;
20
20
  resolution: ArrayLike<number>;
21
21
  settings: {
@@ -1 +1 @@
1
- {"version":3,"file":"graph_contact_shadow_linear.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH;IAT+B,KAAK;IACT,KAAK,EAArB,MAAM;IACU,MAAM,EAAtB,MAAM;IACa,MAAM;IACE,UAAU,EAArC,UAAU,MAAM,CAAC;IAC8F,QAAQ,EAAvH;QAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC;IAEnG,MAAM,CAsBlB"}
1
+ {"version":3,"file":"graph_contact_shadow_linear.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH;IAT+B,KAAK;IACT,KAAK,EAArB,MAAM;IACU,GAAG,EAAnB,MAAM;IACa,MAAM;IACE,UAAU,EAArC,UAAU,MAAM,CAAC;IAC8F,QAAQ,EAAvH;QAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC;IAEnG,MAAM,CAsBlB"}
@@ -9,14 +9,14 @@ import { shader_contact_shadow_linear } from "./shader_contact_shadow_linear.js"
9
9
  * @param {Object} options
10
10
  * @param {FrameGraph} options.graph
11
11
  * @param {number} options.depth the depth buffer
12
- * @param {number} options.normal the G-buffer normals
12
+ * @param {number} options.pbr the G-buffer's PBR target, for its face normal
13
13
  * @param {GPUBuffer} options.camera the view's camera uniforms, whose projection drew `depth`
14
14
  * @param {ArrayLike<number>} options.resolution of `depth`
15
15
  * @param {{to_light: ArrayLike<number>, length: number, steps: number, thickness: number, jitter_frame: number}} options.settings
16
16
  * see {@link CONTACT_SHADOW_LINEAR_SETTINGS_STRUCT}
17
17
  * @returns {number} the visibility texture
18
18
  */
19
- export function graph_contact_shadow_linear({ graph, depth, normal, camera, resolution, settings }) {
19
+ export function graph_contact_shadow_linear({ graph, depth, pbr, camera, resolution, settings }) {
20
20
  const width = resolution[0];
21
21
  const height = resolution[1];
22
22
 
@@ -27,7 +27,7 @@ export function graph_contact_shadow_linear({ graph, depth, normal, camera, reso
27
27
  bindings: {
28
28
  settings,
29
29
  gBufferDepth: depth,
30
- gBufferNormal: normal,
30
+ gBufferPBR: pbr,
31
31
  camera,
32
32
  tContactShadow: TextureResourceDescriptor.from({
33
33
  resolution: [width, height],
@@ -1 +1 @@
1
- {"version":3,"file":"shader_contact_shadow_linear.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;GAaG;AACH,oDAFU,YAAY,CAQY;AA+ElC;;;;;;;;;GASG;AACH,2CAFU,aAAa,CAMpB;6BAnH0B,mCAAmC;8BAHlC,+BAA+B"}
1
+ {"version":3,"file":"shader_contact_shadow_linear.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;GAaG;AACH,oDAFU,YAAY,CAQY;AA+ElC;;;;;;;;;GASG;AACH,2CAFU,aAAa,CAMpB;6BAnH0B,mCAAmC;8BAHlC,+BAA+B"}
@@ -1,7 +1,9 @@
1
1
  import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
2
2
  import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
3
3
  import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
4
- import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
4
+ import {
5
+ chunk_decode_g_buffer_face_normal
6
+ } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
5
7
  import { chunk_interleaved_gradient_noise } from "../../shader/chunk/noise/chunk_interleaved_gradient_noise.js";
6
8
  import { chunk_screen_space_linear_ray } from "../../shader/chunk/screen_space/chunk_screen_space_linear_ray.js";
7
9
  import { chunk_texel_coordinate_to_uv } from "../../shader/chunk/texture/chunk_texel_coordinate_to_uv.js";
@@ -40,7 +42,7 @@ resources.setImmediate("settings", CONTACT_SHADOW_LINEAR_SETTINGS_STRUCT);
40
42
 
41
43
  resources.createGroup()
42
44
  .addTexture("gBufferDepth")
43
- .addTexture("gBufferNormal", "uint")
45
+ .addTexture("gBufferPBR")
44
46
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
45
47
  .addStorageTexture("tContactShadow", "r32float", "2d", "write-only");
46
48
 
@@ -63,7 +65,7 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
63
65
  }
64
66
 
65
67
  let to_light = settings.to_light;
66
- let geometric_normal = decode_g_buffer_normal(textureLoad(gBufferNormal, id.xy, 0).zw);
68
+ let geometric_normal = decode_g_buffer_face_normal(textureLoad(gBufferPBR, id.xy, 0));
67
69
 
68
70
  if (dot(geometric_normal, to_light) <= 0.0) {
69
71
  // facing away: the shadow map's term is already 0, nothing to add to it
@@ -102,7 +104,7 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
102
104
  `, [
103
105
  CONTACT_SHADOW_LINEAR_SETTINGS_STRUCT.declaration_chunk,
104
106
  chunk_is_background,
105
- chunk_decode_g_buffer_normal,
107
+ chunk_decode_g_buffer_face_normal,
106
108
  chunk_texel_coordinate_to_uv,
107
109
  chunk_uv_to_ndc,
108
110
  chunk_project_position_from_depth,
@@ -13,7 +13,8 @@ export class RTXShadows {
13
13
  * [02/05/2025] tested on Sponza, inline approach is 1.66ms, staged is 2.40 so it's slower
14
14
  * @param {FrameGraph} graph
15
15
  * @param {number} input_position
16
- * @param {number} input_normal
16
+ * @param {number} input_normal the G-buffer's shading normal
17
+ * @param {number} input_pbr the G-buffer's PBR target, for its face normal
17
18
  * @param {number} input_depth
18
19
  * @param {number} input_depth_previous
19
20
  * @param {number} input_velocity
@@ -22,12 +23,13 @@ export class RTXShadows {
22
23
  * @param {number[]} jitter
23
24
  * @returns {number} output texture
24
25
  */
25
- execute2({ graph, input_normal, input_depth, input_depth_previous, input_velocity, input_occlusion, view, jitter }: FrameGraph): number;
26
+ execute2({ graph, input_normal, input_pbr, input_depth, input_depth_previous, input_velocity, input_occlusion, view, jitter }: FrameGraph): number;
26
27
  /**
27
28
  *
28
29
  * @param {FrameGraph} graph
29
30
  * @param {number} input_position
30
- * @param {number} input_normal
31
+ * @param {number} input_normal the G-buffer's shading normal
32
+ * @param {number} input_pbr the G-buffer's PBR target, for its face normal
31
33
  * @param {number} input_depth
32
34
  * @param {number} input_depth_previous
33
35
  * @param {number} input_velocity
@@ -36,7 +38,7 @@ export class RTXShadows {
36
38
  * @param {number[]} jitter
37
39
  * @returns {number} output texture
38
40
  */
39
- execute({ graph, input_normal, input_depth, input_depth_previous, input_velocity, input_occlusion, view, jitter }: FrameGraph): number;
41
+ execute({ graph, input_normal, input_pbr, input_depth, input_depth_previous, input_velocity, input_occlusion, view, jitter }: FrameGraph): number;
40
42
  #private;
41
43
  }
42
44
  import { LigmaDenoiser } from "../../postprocess/denoise/LigmaDenoiser.js";
@@ -1 +1 @@
1
- {"version":3,"file":"RTXShadows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/ray/RTXShadows.js"],"names":[],"mappings":"AAeA;IAkBI;;;OAGG;IACH,uCAKC;IAzBD;;OAEG;IACH,UAFU,aAAa,CAEf;IAwBR;;;;;;;;;;;;;OAaG;IACH,iIAFa,MAAM,CA4BlB;IAED;;;;;;;;;;;;OAYG;IACH,gIAFa,MAAM,CAmJlB;;CACJ;8BAhP6B,4CAA4C"}
1
+ {"version":3,"file":"RTXShadows.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/ray/RTXShadows.js"],"names":[],"mappings":"AAcA;IAkBI;;;OAGG;IACH,uCAKC;IAzBD;;OAEG;IACH,UAFU,aAAa,CAEf;IAwBR;;;;;;;;;;;;;;OAcG;IACH,4IAFa,MAAM,CA8BlB;IAED;;;;;;;;;;;;;OAaG;IACH,2IAFa,MAAM,CA2JlB;;CACJ;8BA5P6B,4CAA4C"}
@@ -2,7 +2,6 @@ import { assert } from "../../../../core/assert.js";
2
2
  import { current_time_in_seconds } from "../../../../core/time/current_time_in_seconds.js";
3
3
  import { TextureViewDescriptor } from "../../../descriptor/texture/TextureViewDescriptor.js";
4
4
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
5
- import { G_BUFFER_MIP_LEVELS } from "../../gbuffer/G_BUFFER_MIP_LEVELS.js";
6
5
  import { LigmaDenoiser } from "../../postprocess/denoise/LigmaDenoiser.js";
7
6
  import { graph_image_pass } from "../../shader/graph/graph_image_pass.js";
8
7
  import { HILBERT_R2_INDEX_TEXTURE } from "../../texture/noise/HILBERT_R2_INDEX_TEXTURE.js";
@@ -47,7 +46,8 @@ export class RTXShadows {
47
46
  * [02/05/2025] tested on Sponza, inline approach is 1.66ms, staged is 2.40 so it's slower
48
47
  * @param {FrameGraph} graph
49
48
  * @param {number} input_position
50
- * @param {number} input_normal
49
+ * @param {number} input_normal the G-buffer's shading normal
50
+ * @param {number} input_pbr the G-buffer's PBR target, for its face normal
51
51
  * @param {number} input_depth
52
52
  * @param {number} input_depth_previous
53
53
  * @param {number} input_velocity
@@ -59,6 +59,7 @@ export class RTXShadows {
59
59
  execute2({
60
60
  graph,
61
61
  input_normal = -1,
62
+ input_pbr = -1,
62
63
  input_depth = -1,
63
64
  input_depth_previous = -1,
64
65
  input_velocity = -1,
@@ -72,6 +73,7 @@ export class RTXShadows {
72
73
  view,
73
74
  resolution: view.resolution,
74
75
  input_normals: input_normal,
76
+ input_pbr,
75
77
  input_depth: input_depth,
76
78
  })
77
79
 
@@ -88,7 +90,8 @@ export class RTXShadows {
88
90
  *
89
91
  * @param {FrameGraph} graph
90
92
  * @param {number} input_position
91
- * @param {number} input_normal
93
+ * @param {number} input_normal the G-buffer's shading normal
94
+ * @param {number} input_pbr the G-buffer's PBR target, for its face normal
92
95
  * @param {number} input_depth
93
96
  * @param {number} input_depth_previous
94
97
  * @param {number} input_velocity
@@ -100,6 +103,7 @@ export class RTXShadows {
100
103
  execute({
101
104
  graph,
102
105
  input_normal = -1,
106
+ input_pbr = -1,
103
107
  input_depth = -1,
104
108
  input_depth_previous = -1,
105
109
  input_velocity = -1,
@@ -114,8 +118,6 @@ export class RTXShadows {
114
118
 
115
119
  const trace_mip_level = this.#trace_mip_level;
116
120
 
117
- assert.lessThan(trace_mip_level, G_BUFFER_MIP_LEVELS);
118
-
119
121
  const resolution_x = (resolution[0] >>> trace_mip_level);
120
122
  const resolution_y = (resolution[1] >>> trace_mip_level);
121
123
 
@@ -134,10 +136,16 @@ export class RTXShadows {
134
136
  function execute(data, resources, context) {
135
137
 
136
138
  const in_normal = resources.get(data.normals);
139
+ const in_pbr = resources.get(data.pbr);
137
140
 
138
141
  const out = resources.get(data.output);
139
142
  const depth = resources.get(data.depth);
140
143
 
144
+ // the trace reads its inputs at its own level, so they must carry it
145
+ assert.lessThan(trace_mip_level, depth.descriptor.mipLevelCount, 'trace_mip_level');
146
+ assert.lessThan(trace_mip_level, in_normal.descriptor.mipLevelCount, 'trace_mip_level');
147
+ assert.lessThan(trace_mip_level, in_pbr.descriptor.mipLevelCount, 'trace_mip_level');
148
+
141
149
  const scene_ctx = view.scene;
142
150
  const b_tlas = scene_ctx.tlas.buffer;
143
151
 
@@ -168,6 +176,7 @@ export class RTXShadows {
168
176
  bindings: {
169
177
  texture_depth: depth.obtainView(g_buffer_view),
170
178
  texture_normal: in_normal.obtainView(g_buffer_view),
179
+ texture_pbr: in_pbr.obtainView(g_buffer_view),
171
180
  texture_noise: noise_texture.obtainView(),
172
181
  camera: view.camera.buffer,
173
182
  view: view.uniform_buffer,
@@ -190,6 +199,7 @@ export class RTXShadows {
190
199
  const pass = graph.add('Screen-space shadows', pass_data, execute);
191
200
 
192
201
  pass_data.normals = pass.read(input_normal);
202
+ pass_data.pbr = pass.read(input_pbr);
193
203
 
194
204
  pass_data.depth = pass.read(input_depth);
195
205
  pass_data.output = pass.create('shadow hits', TextureResourceDescriptor.from({
@@ -208,6 +218,7 @@ export class RTXShadows {
208
218
  input_current_depth: input_depth,
209
219
  input_previous_depth: input_depth_previous,
210
220
  input_current_normal: input_normal,
221
+ input_current_pbr: input_pbr,
211
222
  input_occlusion,
212
223
  input_velocity,
213
224
  input_mip_level: trace_mip_level,
@@ -1 +1 @@
1
- {"version":3,"file":"shader_ray_shadow_code.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/ray/shader_ray_shadow_code.js"],"names":[],"mappings":"AA6KA,mDAII;8BA5J0B,+BAA+B"}
1
+ {"version":3,"file":"shader_ray_shadow_code.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/ray/shader_ray_shadow_code.js"],"names":[],"mappings":"AA6KA,mDAII;8BAzJ0B,+BAA+B"}
@@ -5,6 +5,9 @@ import { chunk_ray_shaded_query_occluded } from "../../path_tracer/shader/chunk_
5
5
  import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
6
6
  import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
7
7
  import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
8
+ import {
9
+ chunk_decode_g_buffer_face_normal
10
+ } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
8
11
  import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
9
12
  import { chunk_offset_ray_from_depth } from "../../shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js";
10
13
  import { RAY_STRUCT } from "../../shader/chunk/geometry/ray/RAY_STRUCT.js";
@@ -44,6 +47,7 @@ resources.createGroup()
44
47
  resources.createGroup()
45
48
  .addTexture("texture_depth")
46
49
  .addTexture("texture_normal", "uint")
50
+ .addTexture("texture_pbr")
47
51
  .addTexture("texture_noise", "uint", "2d", false, HILBERT_R2_INDEX_TEXTURE)
48
52
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
49
53
  .addUniform("view", VIEW_UNIFORM_STRUCT)
@@ -100,13 +104,8 @@ fn main(
100
104
  camera.view_projection_matrix_inverse
101
105
  );
102
106
 
103
- let g_buffer_sample_normal = textureLoad( texture_normal,
104
- pixel_position,
105
- 0
106
- );
107
-
108
- let geometric_normal = decode_g_buffer_normal( g_buffer_sample_normal.zw );
109
- let shading_normal = decode_g_buffer_normal( g_buffer_sample_normal.xy );
107
+ let geometric_normal = decode_g_buffer_face_normal( textureLoad( texture_pbr, pixel_position, 0 ) );
108
+ let shading_normal = decode_g_buffer_normal( textureLoad( texture_normal, pixel_position, 0 ).x );
110
109
 
111
110
  let jitter = spatio_temporal_noise_r2_64(pixel_position, view.frame_index, texture_noise);
112
111
 
@@ -158,6 +157,7 @@ fn main(
158
157
 
159
158
  `, [
160
159
  chunk_decode_g_buffer_normal,
160
+ chunk_decode_g_buffer_face_normal,
161
161
  chunk_directional_lights_iteration_mask,
162
162
  chunk_sample_directional_light_record,
163
163
  chunk_spatio_temporal_noise_r2_64,
@@ -69,7 +69,7 @@ fn main(
69
69
  let hi_res_depth_linear = get_view_space_depth(hi_res_depth, camera);
70
70
 
71
71
  let g_buffer_sample_normal = textureLoad(tNormals, current_coord, 0);
72
- let hi_res_normal = decode_g_buffer_normal(g_buffer_sample_normal.xy);
72
+ let hi_res_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
73
73
 
74
74
  // input was produced with NEAREST sampling, to undo the bias of that, we compute distance of the current output pixel relative to input pixel's sampling source
75
75
  let input_texel_coarse_coord = uv_to_texel_coordinate(uv, coarse_size);
@@ -105,7 +105,7 @@ fn main(
105
105
  // decode the COARSE tap — decoding g_buffer_sample_normal (the hi-res centre) here made
106
106
  // coarse_normal identical to hi_res_normal, so w_normal was always 1 and normal-based
107
107
  // edge stopping was defeated (shadow bleed across creases).
108
- let coarse_normal = decode_g_buffer_normal(coarse_normal_sample.xy);
108
+ let coarse_normal = decode_g_buffer_normal(coarse_normal_sample.x);
109
109
 
110
110
  let sample_value = textureLoad(tInput, input_texel_position, 0).r;
111
111
 
@@ -3,15 +3,17 @@
3
3
  * @param {Object} options
4
4
  * @param {FrameGraph} options.graph
5
5
  * @param {number[]} options.resolution
6
- * @param {number} options.input_normals
6
+ * @param {number} options.input_normals the G-buffer's shading normal
7
+ * @param {number} options.input_pbr the G-buffer's PBR target, for its face normal
7
8
  * @param {number} options.input_depth
8
9
  * @param {GPUViewContext} options.view
9
10
  * @returns {number} buffer of rays
10
11
  */
11
- export function graph_gen_rays({ graph, resolution, input_normals, input_depth, view, }: {
12
+ export function graph_gen_rays({ graph, resolution, input_normals, input_pbr, input_depth, view, }: {
12
13
  graph: FrameGraph;
13
14
  resolution: number[];
14
15
  input_normals: number;
16
+ input_pbr: number;
15
17
  input_depth: number;
16
18
  view: GPUViewContext;
17
19
  }): number;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_gen_rays.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH;IAP+B,KAAK;IACP,UAAU,EAA5B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,WAAW,EAA3B,MAAM;IACkB,IAAI;IAC1B,MAAM,CA8DlB"}
1
+ {"version":3,"file":"graph_gen_rays.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH;IAR+B,KAAK;IACP,UAAU,EAA5B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,SAAS,EAAzB,MAAM;IACU,WAAW,EAA3B,MAAM;IACkB,IAAI;IAC1B,MAAM,CAkElB"}
@@ -1,75 +1,80 @@
1
- import { BufferResourceDescriptor } from "../../../../../device/graph/BufferResourceDescriptor.js";
2
- import { HILBERT_R2_INDEX_TEXTURE } from "../../../../texture/noise/HILBERT_R2_INDEX_TEXTURE.js";
3
- import { PACKED_RAY_WORD_COUNT, PUSH_CONSTANTS, shader_generate_rays } from "./shader_generate_rays.js";
4
-
5
- /**
6
- *
7
- * @param {Object} options
8
- * @param {FrameGraph} options.graph
9
- * @param {number[]} options.resolution
10
- * @param {number} options.input_normals
11
- * @param {number} options.input_depth
12
- * @param {GPUViewContext} options.view
13
- * @returns {number} buffer of rays
14
- */
15
- export function graph_gen_rays({
16
- graph,
17
- resolution,
18
- input_normals = -1,
19
- input_depth = -1,
20
- view,
21
- }) {
22
-
23
- const data = {};
24
-
25
- /**
26
- *
27
- * @param data
28
- * @param {FramePassResources} resources
29
- * @param {GraphicsExecutionContext} context
30
- */
31
- function execute(data, resources, context) {
32
-
33
- const output = resources.get(data.output);
34
- const depth = resources.get(data.depth);
35
- const normals = resources.get(data.normals);
36
-
37
- const noise_texture = context.graphics.textures.obtain(HILBERT_R2_INDEX_TEXTURE);
38
-
39
- const settings = {
40
- frame_index: view.frame_index,
41
- };
42
-
43
- const scene_ctx = view.scene;
44
-
45
- shader_generate_rays.dispatchThreads({
46
- encoder: context.encoder,
47
- thread_count_x: resolution[0],
48
- thread_count_y: resolution[1],
49
- bindings: {
50
- settings,
51
- camera: view.camera.buffer.buffer,
52
- texture_noise: noise_texture.obtainView(),
53
- output,
54
- texture_depth: depth,
55
- texture_normal: normals,
56
- light_data: scene_ctx.lights.buffer_data,
57
- }
58
- })
59
- }
60
-
61
- const pass = graph.add("generate rays", data, execute);
62
-
63
- const pixel_count = resolution[0] * resolution[1];
64
-
65
- data.depth = pass.read(input_depth);
66
- data.normals = pass.read(input_normals);
67
-
68
- data.output = pass.create("output", BufferResourceDescriptor.from(
69
- 16 + PACKED_RAY_WORD_COUNT * 4 * pixel_count,
70
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
71
- 0, 16
72
- ));
73
-
74
- return data.output;
1
+ import { BufferResourceDescriptor } from "../../../../../device/graph/BufferResourceDescriptor.js";
2
+ import { HILBERT_R2_INDEX_TEXTURE } from "../../../../texture/noise/HILBERT_R2_INDEX_TEXTURE.js";
3
+ import { PACKED_RAY_WORD_COUNT, PUSH_CONSTANTS, shader_generate_rays } from "./shader_generate_rays.js";
4
+
5
+ /**
6
+ *
7
+ * @param {Object} options
8
+ * @param {FrameGraph} options.graph
9
+ * @param {number[]} options.resolution
10
+ * @param {number} options.input_normals the G-buffer's shading normal
11
+ * @param {number} options.input_pbr the G-buffer's PBR target, for its face normal
12
+ * @param {number} options.input_depth
13
+ * @param {GPUViewContext} options.view
14
+ * @returns {number} buffer of rays
15
+ */
16
+ export function graph_gen_rays({
17
+ graph,
18
+ resolution,
19
+ input_normals = -1,
20
+ input_pbr = -1,
21
+ input_depth = -1,
22
+ view,
23
+ }) {
24
+
25
+ const data = {};
26
+
27
+ /**
28
+ *
29
+ * @param data
30
+ * @param {FramePassResources} resources
31
+ * @param {GraphicsExecutionContext} context
32
+ */
33
+ function execute(data, resources, context) {
34
+
35
+ const output = resources.get(data.output);
36
+ const depth = resources.get(data.depth);
37
+ const normals = resources.get(data.normals);
38
+ const pbr = resources.get(data.pbr);
39
+
40
+ const noise_texture = context.graphics.textures.obtain(HILBERT_R2_INDEX_TEXTURE);
41
+
42
+ const settings = {
43
+ frame_index: view.frame_index,
44
+ };
45
+
46
+ const scene_ctx = view.scene;
47
+
48
+ shader_generate_rays.dispatchThreads({
49
+ encoder: context.encoder,
50
+ thread_count_x: resolution[0],
51
+ thread_count_y: resolution[1],
52
+ bindings: {
53
+ settings,
54
+ camera: view.camera.buffer.buffer,
55
+ texture_noise: noise_texture.obtainView(),
56
+ output,
57
+ texture_depth: depth,
58
+ texture_normal: normals,
59
+ texture_pbr: pbr,
60
+ light_data: scene_ctx.lights.buffer_data,
61
+ }
62
+ })
63
+ }
64
+
65
+ const pass = graph.add("generate rays", data, execute);
66
+
67
+ const pixel_count = resolution[0] * resolution[1];
68
+
69
+ data.depth = pass.read(input_depth);
70
+ data.normals = pass.read(input_normals);
71
+ data.pbr = pass.read(input_pbr);
72
+
73
+ data.output = pass.create("output", BufferResourceDescriptor.from(
74
+ 16 + PACKED_RAY_WORD_COUNT * 4 * pixel_count,
75
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
76
+ 0, 16
77
+ ));
78
+
79
+ return data.output;
75
80
  }