@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
@@ -11,9 +11,6 @@ import {
11
11
  chunk_triangle_list_reverse_winding
12
12
  } from "../../../shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js";
13
13
  import { chunk_view_mip_bias } from "../../../view/chunk_view_mip_bias.js";
14
- import {
15
- chunk_encode_meshlet_element
16
- } from "../../../shader/chunk/geometry/meshlet/chunk_encode_meshlet_element.js";
17
14
  import {
18
15
  chunk_read_meshlet_attribute_u32
19
16
  } from "../../../shader/chunk/geometry/meshlet/chunk_read_meshlet_attribute_u32.js";
@@ -38,7 +35,12 @@ import {
38
35
  } from "../alpha_tested_pass_resources.js";
39
36
  import { TemplatePassDescriptor } from "../../TemplatePassDescriptor.js";
40
37
  import { rasterization_primitive_state } from "../rasterization_primitive_state.js";
41
- import { VIZ_BUFFER_INVALID_MESH_VALUE } from "./VIZ_BUFFER_INVALID_MESH_VALUE.js";
38
+ import {
39
+ VISIBILITY_FORMAT,
40
+ VISIBILITY_NONE,
41
+ VISIBILITY_TRIANGLE_BITS,
42
+ VISIBLE_MESHLETS_ARRAY_OFFSET
43
+ } from "../../visibility/VISIBILITY_BUFFER.js";
42
44
 
43
45
  /**
44
46
  * The harness around a template's `material_opacity`: the hashed threshold and the noise that feeds
@@ -52,19 +54,14 @@ import { VIZ_BUFFER_INVALID_MESH_VALUE } from "./VIZ_BUFFER_INVALID_MESH_VALUE.j
52
54
  const fragment_body = CodeChunk.from(
53
55
  //language=WGSL
54
56
  `
55
- struct VizBufferOutput{
56
- @location(0) m_triangle : u32,
57
- @location(1) m_mesh : u32,
58
- }
59
57
 
60
58
  @fragment
61
59
  fn main(
62
60
  @builtin(position) coord : vec4<f32>,
63
- @location(0) @interpolate(flat) m_mesh:u32,
64
- @location(1) @interpolate(flat) m_triangle:u32,
65
- @location(2) uv_jittered:vec2<f32>,
66
- @location(3) position_world: vec3<f32>,
67
- ) -> VizBufferOutput {
61
+ @location(0) @interpolate(flat) m_visibility: u32,
62
+ @location(1) uv_jittered:vec2<f32>,
63
+ @location(2) position_world: vec3<f32>,
64
+ ) -> @location(0) u32 {
68
65
 
69
66
  // Note that we use jittered UVs directly, the compensation happens inside TAAU itself.
70
67
  let uv = uv_jittered;
@@ -94,18 +91,12 @@ fn main(
94
91
  discard;
95
92
  }
96
93
 
97
- var result:VizBufferOutput;
98
-
99
- //decode meshlet payload
100
- result.m_triangle = m_triangle ;
101
- result.m_mesh = m_mesh ;
102
-
103
- return result;
94
+ return m_visibility;
104
95
  }
105
96
  `, [
106
97
  chunk_material_opacity_contract,
107
98
  chunk_transparency_hashed_alpha_threshold,
108
- chunk_spatio_temporal_noise_r2_64,
99
+ chunk_spatio_temporal_noise_r2_64,
109
100
  chunk_view_mip_bias,
110
101
  ]
111
102
  );
@@ -117,10 +108,9 @@ const shader_vertex = ShaderDescriptor.from({
117
108
  `
118
109
  struct VertexOutput{
119
110
  @builtin(position) position: vec4f,
120
- @location(0) @interpolate(flat) m_mesh: u32,
121
- @location(1) @interpolate(flat) m_triangle: u32,
122
- @location(2) uv: vec2f,
123
- @location(3) position_world: vec3f,
111
+ @location(0) @interpolate(flat) m_visibility: u32,
112
+ @location(1) uv: vec2f,
113
+ @location(2) position_world: vec3f,
124
114
  }
125
115
 
126
116
  @vertex
@@ -142,7 +132,6 @@ fn main(
142
132
  return VertexOutput(); // discard vertex outside of meshlet bounds
143
133
  }
144
134
 
145
- let triangle_index = encode_meshlet_element(meshlet_id, vertex_draw_index / 3u);
146
135
 
147
136
  let mesh = scene_read_mesh(&scene_database, mesh_id);
148
137
  let node = scene_read_node(&scene_database, mesh.node);
@@ -164,8 +153,11 @@ fn main(
164
153
  output.position_world = position_world.xyz / position_world.w;
165
154
  output.position = camera.view_projection_matrix * position_world;
166
155
 
167
- output.m_mesh = mesh_id;
168
- output.m_triangle = triangle_index;
156
+ // the draws bind the frame's visible-meshlet table as a bare array of definitions, where slot s is
157
+ // at s + VISIBLE_MESHLETS_ARRAY_OFFSET
158
+ let slot = input_index - ${VISIBLE_MESHLETS_ARRAY_OFFSET}u;
159
+
160
+ output.m_visibility = (slot << ${VISIBILITY_TRIANGLE_BITS}u) | (vertex_draw_index / 3u);
169
161
  output.uv = meshlet_vertex.uv;
170
162
 
171
163
  return output;
@@ -173,7 +165,6 @@ fn main(
173
165
  `, [
174
166
  chunk_read_meshlet_vertex,
175
167
  chunk_read_meshlet_attribute_u32,
176
- chunk_encode_meshlet_element,
177
168
  chunk_read_meshlet_vertex_by_draw_index,
178
169
  chunk_scene_database_access,
179
170
  chunk_triangle_winding_is_reversed,
@@ -213,11 +204,7 @@ export const viz_rasterization_alpha_tested_pass_descriptor = new TemplatePassDe
213
204
  },
214
205
  targets: [
215
206
  {
216
- // triangle ID
217
- format: "r32uint",
218
- }, {
219
- // Mesh ID
220
- format: "r32uint",
207
+ format: VISIBILITY_FORMAT,
221
208
  }
222
209
  ]
223
210
  },
@@ -227,15 +214,11 @@ export const viz_rasterization_alpha_tested_pass_descriptor = new TemplatePassDe
227
214
  });
228
215
 
229
216
  viz_rasterization_alpha_tested_pass_descriptor.colorAttachments = [
230
- // TRIANGLE ID
231
217
  RenderPassColorAttachmentDescriptor.from({
232
- clearValue: [0, 0, 0, 0],
218
+ clearValue: [VISIBILITY_NONE, 0, 0, 0],
233
219
  }),
234
- // MESH ID
235
- RenderPassColorAttachmentDescriptor.from({
236
- clearValue: [VIZ_BUFFER_INVALID_MESH_VALUE, 1, 1, 1],
237
- })
238
220
  ];
221
+ viz_rasterization_alpha_tested_pass_descriptor.visible_meshlet_slots = true;
239
222
 
240
223
  /**
241
224
  * Clear depth to 0 for reverse Z technique
@@ -1 +1 @@
1
- {"version":3,"file":"viz_rasterization_opaque_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js"],"names":[],"mappings":"AA2DA,4EAAmF;qCAxD9C,8CAA8C"}
1
+ {"version":3,"file":"viz_rasterization_opaque_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js"],"names":[],"mappings":"AA0CA,4EAAmF;qCAvC9C,8CAA8C"}
@@ -1,77 +1,56 @@
1
- import { RenderPipelineDescriptor } from "../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
2
- import { DEPTH_BACKGROUND_VALUE } from "../../../depth/DEPTH_BACKGROUND_VALUE.js";
3
- import { RenderPassColorAttachmentDescriptor } from "../../../shader/pass/RenderPassColorAttachmentDescriptor.js";
4
- import { RenderPassDescriptor } from "../../../shader/pass/RenderPassDescriptor.js";
5
- import { DEPTH_STENCIL_STATE_STANDARD } from "../../DEPTH_STENCIL_STATE_STANDARD.js";
6
- import { rasterization_primitive_state } from "../rasterization_primitive_state.js";
7
- import { rasterization_shader_resources } from "../rasterization_shader_resources.js";
8
- import { shader_vertex } from "./shader_vertex.js";
9
- import { VIZ_BUFFER_INVALID_MESH_VALUE } from "./VIZ_BUFFER_INVALID_MESH_VALUE.js";
10
-
11
- //language=WGSL
12
- const shader_fragment_visibility_buffer = `
13
- struct VizBufferOutput{
14
- @location(0) m_triangle : u32,
15
- @location(1) m_mesh : u32,
16
- }
17
-
18
- @fragment
19
- fn main(
20
- @builtin(position) coord : vec4<f32>,
21
- @location(0) @interpolate(flat) m_mesh:u32,
22
- @location(1) @interpolate(flat) m_triangle:u32,
23
- ) -> VizBufferOutput {
24
- var result:VizBufferOutput;
25
-
26
- //decode meshlet payload
27
- result.m_triangle = m_triangle ;
28
- result.m_mesh = m_mesh ;
29
-
30
- return result;
31
- }
32
- `;
33
-
34
- const gpu_rasterization_render_pipeline_descriptor = RenderPipelineDescriptor.from({
35
- label: "Rasterize to Visibility Buffer / opaque",
36
- layout: rasterization_shader_resources.generatePipelineLayout(GPUShaderStage.VERTEX),
37
- vertex: {
38
- module: {
39
- code: shader_vertex.source
40
- }
41
- },
42
- fragment: {
43
- module: {
44
- code: shader_fragment_visibility_buffer
45
- },
46
- targets: [
47
- {
48
- // triangle ID
49
- format: "r32uint",
50
- }, {
51
- // Mesh ID
52
- format: "r32uint",
53
- }
54
- ]
55
- },
56
- depthStencil: DEPTH_STENCIL_STATE_STANDARD,
57
- primitive: rasterization_primitive_state
58
- });
59
-
60
- export const viz_rasterization_opaque_pass_descriptor = new RenderPassDescriptor();
61
- viz_rasterization_opaque_pass_descriptor.pipeline = gpu_rasterization_render_pipeline_descriptor;
62
- viz_rasterization_opaque_pass_descriptor.resources = rasterization_shader_resources;
63
- viz_rasterization_opaque_pass_descriptor.colorAttachments = [
64
- // TRIANGLE ID
65
- RenderPassColorAttachmentDescriptor.from({
66
- clearValue: [0, 0, 0, 0],
67
- }),
68
- // MESH ID
69
- RenderPassColorAttachmentDescriptor.from({
70
- clearValue: [VIZ_BUFFER_INVALID_MESH_VALUE, 1, 1, 1],
71
- })
72
- ];
73
-
74
- /**
75
- * Clear depth to 0 for reverse Z technique
76
- */
1
+ import { RenderPipelineDescriptor } from "../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
2
+ import { DEPTH_BACKGROUND_VALUE } from "../../../depth/DEPTH_BACKGROUND_VALUE.js";
3
+ import { RenderPassColorAttachmentDescriptor } from "../../../shader/pass/RenderPassColorAttachmentDescriptor.js";
4
+ import { RenderPassDescriptor } from "../../../shader/pass/RenderPassDescriptor.js";
5
+ import { DEPTH_STENCIL_STATE_STANDARD } from "../../DEPTH_STENCIL_STATE_STANDARD.js";
6
+ import { rasterization_primitive_state } from "../rasterization_primitive_state.js";
7
+ import { rasterization_shader_resources } from "../rasterization_shader_resources.js";
8
+ import { shader_vertex } from "./shader_vertex.js";
9
+ import { VISIBILITY_FORMAT, VISIBILITY_NONE } from "../../visibility/VISIBILITY_BUFFER.js";
10
+
11
+ //language=WGSL
12
+ const shader_fragment_visibility_buffer = `
13
+ @fragment
14
+ fn main(
15
+ @location(0) @interpolate(flat) m_visibility: u32,
16
+ ) -> @location(0) u32 {
17
+ return m_visibility;
18
+ }
19
+ `;
20
+
21
+ const gpu_rasterization_render_pipeline_descriptor = RenderPipelineDescriptor.from({
22
+ label: "Rasterize to Visibility Buffer / opaque",
23
+ layout: rasterization_shader_resources.generatePipelineLayout(GPUShaderStage.VERTEX),
24
+ vertex: {
25
+ module: {
26
+ code: shader_vertex.source
27
+ }
28
+ },
29
+ fragment: {
30
+ module: {
31
+ code: shader_fragment_visibility_buffer
32
+ },
33
+ targets: [
34
+ {
35
+ format: VISIBILITY_FORMAT,
36
+ }
37
+ ]
38
+ },
39
+ depthStencil: DEPTH_STENCIL_STATE_STANDARD,
40
+ primitive: rasterization_primitive_state
41
+ });
42
+
43
+ export const viz_rasterization_opaque_pass_descriptor = new RenderPassDescriptor();
44
+ viz_rasterization_opaque_pass_descriptor.pipeline = gpu_rasterization_render_pipeline_descriptor;
45
+ viz_rasterization_opaque_pass_descriptor.resources = rasterization_shader_resources;
46
+ viz_rasterization_opaque_pass_descriptor.colorAttachments = [
47
+ RenderPassColorAttachmentDescriptor.from({
48
+ clearValue: [VISIBILITY_NONE, 0, 0, 0],
49
+ }),
50
+ ];
51
+ viz_rasterization_opaque_pass_descriptor.visible_meshlet_slots = true;
52
+
53
+ /**
54
+ * Clear depth to 0 for reverse Z technique
55
+ */
77
56
  viz_rasterization_opaque_pass_descriptor.depthStencilAttachment.depthClearValue = DEPTH_BACKGROUND_VALUE;
@@ -25,13 +25,15 @@ export function enquire_rasterize_partial_opaque_pipelines(enquiry: PipelineEnqu
25
25
  * @param {Set<number>} active_buckets IDs of buckets that have any materials that are active.
26
26
  * @param {number[]} [viewport] optional viewport definition, if not provided, will use the entire render target. Useful for drawing multiple views into the same render target.
27
27
  * @param {Readonly<Record<number, GPUCullMode>>} [cull_policy] side→cullMode mapping; defaults to {@link CullPolicy.Standard}
28
- * @returns {{instances_maybe:number, meshlets_maybe:number, depth:number, color_targets:number[]}} the "maybe visible" sets, and the depth and colour handles produced by the rasterization — cleared whether or not any bucket drew
28
+ * @param {number} [visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
29
+ * @returns {{instances_maybe:number, meshlets_maybe:number, depth:number, color_targets:number[], visible_meshlets:number}} the "maybe visible" sets, the depth and colour handles produced by the rasterization — cleared whether or not any bucket drew — and the table after it (-1 without one)
29
30
  */
30
- export function graph_rasterize_partial_opaque({ graph, buckets, view, render_pass_descriptor, limits, depth, raster_color_targets, hzb, viewport, active_buckets, cull_policy, }: FrameGraph): {
31
+ export function graph_rasterize_partial_opaque({ graph, buckets, view, render_pass_descriptor, limits, depth, raster_color_targets, hzb, viewport, active_buckets, cull_policy, visible_meshlets, }: FrameGraph): {
31
32
  instances_maybe: number;
32
33
  meshlets_maybe: number;
33
34
  depth: number;
34
35
  color_targets: number[];
36
+ visible_meshlets: number;
35
37
  };
36
38
  export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
37
39
  export type RenderPassDescriptor = import("../../shader/pass/RenderPassDescriptor.js").RenderPassDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AA8BA;;;GAGG;AAEH;;;;;;;GAOG;AACH,oEAJW,eAAe,0BACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAY/C;AAED;;;;;;;;;;;;;;;GAeG;AACH,gMAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CA0NjG;8BAhQY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
1
+ {"version":3,"file":"graph_rasterize_partial_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js"],"names":[],"mappings":"AA8BA;;;GAGG;AAEH;;;;;;;GAOG;AACH,oEAJW,eAAe,0BACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAY/C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,kNAFa;IAAC,eAAe,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAC,MAAM,CAAA;CAAC,CA6N1H;8BApQY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
@@ -67,7 +67,8 @@ export function enquire_rasterize_partial_opaque_pipelines(enquiry, render_pass_
67
67
  * @param {Set<number>} active_buckets IDs of buckets that have any materials that are active.
68
68
  * @param {number[]} [viewport] optional viewport definition, if not provided, will use the entire render target. Useful for drawing multiple views into the same render target.
69
69
  * @param {Readonly<Record<number, GPUCullMode>>} [cull_policy] side→cullMode mapping; defaults to {@link CullPolicy.Standard}
70
- * @returns {{instances_maybe:number, meshlets_maybe:number, depth:number, color_targets:number[]}} the "maybe visible" sets, and the depth and colour handles produced by the rasterization — cleared whether or not any bucket drew
70
+ * @param {number} [visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
71
+ * @returns {{instances_maybe:number, meshlets_maybe:number, depth:number, color_targets:number[], visible_meshlets:number}} the "maybe visible" sets, the depth and colour handles produced by the rasterization — cleared whether or not any bucket drew — and the table after it (-1 without one)
71
72
  */
72
73
  export function graph_rasterize_partial_opaque({
73
74
  graph,
@@ -81,6 +82,7 @@ export function graph_rasterize_partial_opaque({
81
82
  viewport,
82
83
  active_buckets,
83
84
  cull_policy = CullPolicy.Standard,
85
+ visible_meshlets = -1,
84
86
  }) {
85
87
 
86
88
  assert.defined(graph, 'graph');
@@ -240,7 +242,7 @@ export function graph_rasterize_partial_opaque({
240
242
  gr_meshlets_maybe = pass_data_meshlets_1.out_meshlets_maybe = pass_meshlets_1.write(gr_meshlets_maybe);
241
243
 
242
244
  // ----------
243
- [viz_depth, raster_color_targets] = graph_meshlets_rasterize_by_bucket({
245
+ [viz_depth, raster_color_targets, visible_meshlets] = graph_meshlets_rasterize_by_bucket({
244
246
  graph,
245
247
  view,
246
248
  input_meshlets: pass_data_meshlets_1.out_meshlets_positive,
@@ -252,6 +254,7 @@ export function graph_rasterize_partial_opaque({
252
254
  cull_policy,
253
255
  viewport,
254
256
  limits,
257
+ visible_meshlets,
255
258
  });
256
259
 
257
260
  is_first_draw = false;
@@ -284,5 +287,6 @@ export function graph_rasterize_partial_opaque({
284
287
  meshlets_maybe: gr_meshlets_maybe,
285
288
  depth: viz_depth,
286
289
  color_targets: raster_color_targets,
290
+ visible_meshlets,
287
291
  };
288
292
  }
@@ -26,11 +26,13 @@ export function enquire_rasterize_remaining_opaque_pipelines(enquiry: PipelineEn
26
26
  * @param {RenderPassDescriptor} render_pass_descriptor
27
27
  * @param {number[]} [viewport] optional viewport definition
28
28
  * @param {Readonly<Record<number, GPUCullMode>>} [cull_policy] side→cullMode mapping; defaults to {@link CullPolicy.Standard}
29
- * @returns {{depth:number, color_targets:number[]}} the depth and colour handles produced by the rasterization
29
+ * @param {number} [visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
30
+ * @returns {{depth:number, color_targets:number[], visible_meshlets:number}} the depth and colour handles produced by the rasterization, and the table after it (-1 without one)
30
31
  */
31
- export function graph_rasterize_remaining_opaque({ graph, limits, instances_maybe, meshlets_maybe, active_buckets, camera, view, depth, raster_color_targets, hzb, render_pass_descriptor, viewport, cull_policy, }: FrameGraph): {
32
+ export function graph_rasterize_remaining_opaque({ graph, limits, instances_maybe, meshlets_maybe, active_buckets, camera, view, depth, raster_color_targets, hzb, render_pass_descriptor, viewport, cull_policy, visible_meshlets, }: FrameGraph): {
32
33
  depth: number;
33
34
  color_targets: number[];
35
+ visible_meshlets: number;
34
36
  };
35
37
  export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
36
38
  export type RenderPassDescriptor = import("../../shader/pass/RenderPassDescriptor.js").RenderPassDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AAmBA;;;GAGG;AAEH;;;;;;GAMG;AACH,sEAJW,eAAe,0BACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAO/C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,kOAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAA;CAAC,CAqFlD;8BAvHY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
1
+ {"version":3,"file":"graph_rasterize_remaining_opaque.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js"],"names":[],"mappings":"AAmBA;;;GAGG;AAEH;;;;;;GAMG;AACH,sEAJW,eAAe,0BACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAO/C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,oPAFa;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAC,MAAM,CAAA;CAAC,CAwF3E;8BA3HY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
@@ -52,7 +52,8 @@ export function enquire_rasterize_remaining_opaque_pipelines(enquiry, render_pas
52
52
  * @param {RenderPassDescriptor} render_pass_descriptor
53
53
  * @param {number[]} [viewport] optional viewport definition
54
54
  * @param {Readonly<Record<number, GPUCullMode>>} [cull_policy] side→cullMode mapping; defaults to {@link CullPolicy.Standard}
55
- * @returns {{depth:number, color_targets:number[]}} the depth and colour handles produced by the rasterization
55
+ * @param {number} [visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
56
+ * @returns {{depth:number, color_targets:number[], visible_meshlets:number}} the depth and colour handles produced by the rasterization, and the table after it (-1 without one)
56
57
  */
57
58
  export function graph_rasterize_remaining_opaque({
58
59
  graph,
@@ -68,6 +69,7 @@ export function graph_rasterize_remaining_opaque({
68
69
  render_pass_descriptor,
69
70
  viewport,
70
71
  cull_policy = CullPolicy.Standard,
72
+ visible_meshlets = -1,
71
73
  }) {
72
74
 
73
75
  let gr_depth_texture = depth;
@@ -118,7 +120,7 @@ export function graph_rasterize_remaining_opaque({
118
120
  const opaque = Array.from(rasterization_opaque_buckets(active_buckets));
119
121
 
120
122
  if (opaque.length > 0) {
121
- [gr_depth_texture, raster_color_targets] = graph_meshlets_rasterize_by_bucket({
123
+ [gr_depth_texture, raster_color_targets, visible_meshlets] = graph_meshlets_rasterize_by_bucket({
122
124
  graph,
123
125
  view,
124
126
  input_meshlets: gr_live_meshlets,
@@ -130,11 +132,13 @@ export function graph_rasterize_remaining_opaque({
130
132
  cull_policy,
131
133
  viewport,
132
134
  limits,
135
+ visible_meshlets,
133
136
  });
134
137
  }
135
138
 
136
139
  return {
137
140
  depth: gr_depth_texture,
138
141
  color_targets: raster_color_targets,
142
+ visible_meshlets,
139
143
  }
140
144
  }
@@ -22,8 +22,10 @@ export function enquire_rasterize_scene_pipelines(enquiry: PipelineEnquiry, opaq
22
22
  * @param {FrameGraph} options.graph
23
23
  * @param {RasterizationJob} options.job
24
24
  * @param {GPUCollectionLimits} options.limits
25
- * @returns {{buckets: number, depth: number, color_targets: number[]}} the render buckets buffer,
26
- * and the depth and colour targets as this pipeline left them
25
+ * @returns {{buckets: number, depth: number, color_targets: number[], visible_meshlets: number}} the render
26
+ * buckets buffer, the depth and colour targets as this pipeline left them, and — when the job's passes write
27
+ * visible-meshlet slots, as the visibility raster's do — the frame's visible-meshlet table, which resolves
28
+ * them (-1 otherwise)
27
29
  */
28
30
  export function graph_rasterize_scene({ graph, job, limits, }: {
29
31
  graph: FrameGraph;
@@ -33,6 +35,7 @@ export function graph_rasterize_scene({ graph, job, limits, }: {
33
35
  buckets: number;
34
36
  depth: number;
35
37
  color_targets: number[];
38
+ visible_meshlets: number;
36
39
  };
37
40
  export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
38
41
  export type RenderPassDescriptor = import("../../shader/pass/RenderPassDescriptor.js").RenderPassDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_rasterize_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_scene.js"],"names":[],"mappings":"AAqBA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,2DAJW,eAAe,eACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAQ/C;AAED;;;;;;;;;;;GAWG;AACH;IAN+B,KAAK;IACC,GAAG;IACA,MAAM;IACjC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CAmNrE;8BAlPY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
1
+ {"version":3,"file":"graph_rasterize_scene.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/standard/graph_rasterize_scene.js"],"names":[],"mappings":"AAuBA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,2DAJW,eAAe,eACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAQ/C;AAED;;;;;;;;;;;;;GAaG;AACH;IAR+B,KAAK;IACC,GAAG;IACA,MAAM;IACjC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,CA0P/F;8BAzRY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
@@ -3,6 +3,7 @@ import { graph_build_hzb } from "../../hiz/graph_build_hzb.js";
3
3
  import { HierarchicalZBuffer } from "../../hiz/HierarchicalZBuffer.js";
4
4
  import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
5
5
  import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
6
+ import { graph_create_buffer } from "../../shader/graph/graph_create_buffer.js";
6
7
  import { graph_import_texture } from "../../shader/graph/graph_import_texture.js";
7
8
  import { graph_record_stat } from "../../util/graph_record_stat.js";
8
9
  import { enquire_mesh_frustum_cull_pipelines, graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
@@ -12,6 +13,7 @@ import {
12
13
  graph_meshes_classify_buckets
13
14
  } from "../expand/bucket/mesh/graph_meshes_classify_buckets.js";
14
15
  import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
16
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
15
17
  import { graph_rasterize_meshes_alpha_tested } from "../native/graph_rasterize_meshes_alpha_tested.js";
16
18
  import { enquire_rasterize_partial_opaque_pipelines, graph_rasterize_partial_opaque } from "./graph_rasterize_partial_opaque.js";
17
19
  import {
@@ -51,8 +53,10 @@ export function enquire_rasterize_scene_pipelines(enquiry, opaque_pass, cull_pol
51
53
  * @param {FrameGraph} options.graph
52
54
  * @param {RasterizationJob} options.job
53
55
  * @param {GPUCollectionLimits} options.limits
54
- * @returns {{buckets: number, depth: number, color_targets: number[]}} the render buckets buffer,
55
- * and the depth and colour targets as this pipeline left them
56
+ * @returns {{buckets: number, depth: number, color_targets: number[], visible_meshlets: number}} the render
57
+ * buckets buffer, the depth and colour targets as this pipeline left them, and — when the job's passes write
58
+ * visible-meshlet slots, as the visibility raster's do — the frame's visible-meshlet table, which resolves
59
+ * them (-1 otherwise)
56
60
  */
57
61
  export function graph_rasterize_scene({
58
62
  graph,
@@ -101,6 +105,28 @@ export function graph_rasterize_scene({
101
105
  raster_color_targets[i] = graph_import_texture(graph, texture, `out_color/${i}`);
102
106
  }
103
107
 
108
+ /*
109
+ Every draw of a pass that writes visible-meshlet slots appends its meshlets to one table for the frame
110
+ and draws them from there, so the slot a pixel holds names its meshlet for every later reader. Sized as
111
+ the collections are, by what the frames before asked for, and never smaller than a meshlet collection:
112
+ any one list drawn into it can be that long. The table's own stat is the limits' last column, whose
113
+ growth is set back whenever an earlier column grows, while the collection's tracks the lists'.
114
+ */
115
+ assert.equal(job.alpha_tested_pass === undefined || job.alpha_tested_pass.visible_meshlet_slots === job.opaque_pass.visible_meshlet_slots, true, 'both passes of a job write visible-meshlet slots, or neither does');
116
+
117
+ let gr_visible_meshlets = -1;
118
+
119
+ if (job.opaque_pass.visible_meshlet_slots) {
120
+ gr_visible_meshlets = graph_create_buffer(graph, "visible meshlets", BufferResourceDescriptor.from(
121
+ Math.max(
122
+ limits.compute_buffer_size(RasterizationCollectionType.VisibleMeshlets),
123
+ limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
124
+ ),
125
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
126
+ 0, 16 // clear count
127
+ ));
128
+ }
129
+
104
130
  const gr_culled_meshes = graph_mesh_frustum_cull({
105
131
  graph,
106
132
  camera: gr_camera_current,
@@ -124,6 +150,7 @@ export function graph_rasterize_scene({
124
150
  meshlets_maybe: gr_meshlet_maybe,
125
151
  depth: gr_depth_opaque_partial,
126
152
  color_targets: gr_color_opaque_partial,
153
+ visible_meshlets: gr_visible_meshlets_partial,
127
154
  } = graph_rasterize_partial_opaque({
128
155
  graph,
129
156
  buckets: gr_render_buckets,
@@ -137,11 +164,13 @@ export function graph_rasterize_scene({
137
164
  viewport,
138
165
  active_buckets,
139
166
  cull_policy: job.cull_policy,
167
+ visible_meshlets: gr_visible_meshlets,
140
168
  });
141
169
 
142
170
 
143
171
  gr_texture_depth = gr_depth_opaque_partial;
144
172
  raster_color_targets = gr_color_opaque_partial;
173
+ gr_visible_meshlets = gr_visible_meshlets_partial;
145
174
 
146
175
  // build HZB of "likely visible" meshlets
147
176
  gr_texture_hzb = graph_build_hzb({
@@ -155,6 +184,7 @@ export function graph_rasterize_scene({
155
184
  const {
156
185
  depth: gr_depth_opaque_full,
157
186
  color_targets: gr_color_opaque_full,
187
+ visible_meshlets: gr_visible_meshlets_full,
158
188
  } = graph_rasterize_remaining_opaque({
159
189
  graph,
160
190
  limits,
@@ -169,10 +199,12 @@ export function graph_rasterize_scene({
169
199
  render_pass_descriptor: job.opaque_pass,
170
200
  viewport,
171
201
  cull_policy: job.cull_policy,
202
+ visible_meshlets: gr_visible_meshlets,
172
203
  });
173
204
 
174
205
  gr_texture_depth = gr_depth_opaque_full;
175
206
  raster_color_targets = gr_color_opaque_full;
207
+ gr_visible_meshlets = gr_visible_meshlets_full;
176
208
 
177
209
  // HZB of full opaque
178
210
  gr_texture_hzb = graph_build_hzb({
@@ -209,10 +241,12 @@ export function graph_rasterize_scene({
209
241
  raster_color_targets,
210
242
  depth: gr_texture_depth,
211
243
  hzb: gr_texture_hzb,
244
+ visible_meshlets: gr_visible_meshlets,
212
245
  });
213
246
 
214
247
  gr_texture_depth = alpha_tested_front.depth;
215
248
  raster_color_targets = alpha_tested_front.color_targets;
249
+ gr_visible_meshlets = alpha_tested_front.visible_meshlets;
216
250
 
217
251
  const alpha_tested_double = graph_rasterize_meshes_alpha_tested({
218
252
  graph,
@@ -228,10 +262,12 @@ export function graph_rasterize_scene({
228
262
  raster_color_targets,
229
263
  depth: gr_texture_depth,
230
264
  hzb: gr_texture_hzb,
265
+ visible_meshlets: gr_visible_meshlets,
231
266
  });
232
267
 
233
268
  gr_texture_depth = alpha_tested_double.depth;
234
269
  raster_color_targets = alpha_tested_double.color_targets;
270
+ gr_visible_meshlets = alpha_tested_double.visible_meshlets;
235
271
 
236
272
  if (alpha_tested_front.executed || alpha_tested_double.executed) {
237
273
 
@@ -246,6 +282,10 @@ export function graph_rasterize_scene({
246
282
  }
247
283
  }
248
284
 
285
+ if (gr_visible_meshlets !== -1) {
286
+ graph_record_stat(graph, limits.stats, RasterizationCollectionType.VisibleMeshlets, gr_visible_meshlets);
287
+ }
288
+
249
289
  graph.pop_scope();
250
290
 
251
291
  /*
@@ -261,5 +301,6 @@ export function graph_rasterize_scene({
261
301
  buckets: gr_render_buckets,
262
302
  depth: gr_texture_depth,
263
303
  color_targets: raster_color_targets,
304
+ visible_meshlets: gr_visible_meshlets,
264
305
  };
265
306
  }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The visibility buffer's format: one `u32` a pixel, `slot << VISIBILITY_TRIANGLE_BITS | triangle`. `slot` is
3
+ * the pixel's meshlet's place in the frame's visible-meshlet table, which says the meshlet and the mesh row
4
+ * it was drawn for (`chunk_visibility_decode`); `triangle` is the triangle within that meshlet.
5
+ *
6
+ * @type {GPUTextureFormat}
7
+ */
8
+ export const VISIBILITY_FORMAT: GPUTextureFormat;
9
+ /**
10
+ * Bits of a visibility word that hold the triangle within its meshlet, below the slot.
11
+ *
12
+ * @type {number}
13
+ */
14
+ export const VISIBILITY_TRIANGLE_BITS: number;
15
+ /**
16
+ * How many slots the visible-meshlet table can hold: every value the bits above the triangle reach, less
17
+ * the last, which {@link VISIBILITY_NONE} takes.
18
+ *
19
+ * @type {number}
20
+ */
21
+ export const VISIBLE_MESHLET_SLOT_LIMIT: number;
22
+ /**
23
+ * What a pixel no surface covers holds, and what the visibility buffer is cleared to: the first word of the
24
+ * slot past every slot the table can hold. A 32-bit float holds it exactly, as a clear value has to be —
25
+ * `RenderPassColorAttachmentDescriptor` keeps one in a `Float32Array`, where every bit set would round up
26
+ * to 2^32.
27
+ *
28
+ * @type {number}
29
+ */
30
+ export const VISIBILITY_NONE: number;
31
+ /**
32
+ * Where the table's elements start, counted in meshlet definitions from the start of its buffer. The table
33
+ * is a meshlet collection, a count before the elements; a pass that binds the whole buffer as a bare array
34
+ * of definitions — as the alpha-tested raster binds its lists — finds slot `s` at `s` plus this.
35
+ *
36
+ * @type {number}
37
+ */
38
+ export const VISIBLE_MESHLETS_ARRAY_OFFSET: number;
39
+ //# sourceMappingURL=VISIBILITY_BUFFER.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VISIBILITY_BUFFER.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,iDAA2C;AAE3C;;;;GAIG;AACH,uCAFU,MAAM,CAE0B;AAE1C;;;;;GAKG;AACH,yCAFU,MAAM,CAEmE;AAEnF;;;;;;;GAOG;AACH,8BAFU,MAAM,CAE0E;AAE1F;;;;;;GAMG;AACH,4CAFU,MAAM,CAE+G"}