@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MATERIAL_MASK.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/MATERIAL_MASK.js"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,oDAAmD;AAEnD;;;;;GAKG;AACH,iCAFU,MAAM,CAEwB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Format of the G-buffer pass's material mask: a depth target holding, at each pixel, the place in
3
+ * the pass's list of the material the visibility buffer names there, as `place / MATERIAL_MASK_NONE`.
4
+ * A material's draw is a full-screen triangle at its own place's depth, tested `equal` against it.
5
+ *
6
+ * A place, not a material id: ids come from one counter for the life of the process and are never
7
+ * reused, so only a material's place in the list is bounded by what one pass can draw.
8
+ *
9
+ * @type {GPUTextureFormat}
10
+ */
11
+ export const MATERIAL_MASK_FORMAT = 'depth16unorm';
12
+
13
+ /**
14
+ * The mask's value where no listed material holds the pixel: the cleared depth, 1.0. Every place in
15
+ * the G-buffer pass's list is below it, so the list holds fewer materials than this.
16
+ *
17
+ * @type {number}
18
+ */
19
+ export const MATERIAL_MASK_NONE = 65535;
@@ -33,18 +33,18 @@ export class GPUMaterialComputeDispatch {
33
33
  * @param {Object} options
34
34
  * @param {FrameGraph} options.graph
35
35
  * @param {GPUViewContext} options.view
36
- * @param {number} options.texture_viz_mesh
37
- * @param {number} options.texture_viz_triangle
38
- * @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
39
- * resolution, with `STORAGE_BINDING`
36
+ * @param {number} options.texture_visibility the visibility buffer
37
+ * @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
38
+ * @param {number} options.texture_pbr the PBR target to write, `G_BUFFER_COLOR_TARGETS[0].format` at
39
+ * the view's resolution, with `STORAGE_BINDING`
40
40
  * @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}}
41
41
  */
42
- graph_viz_render({ graph, view, texture_viz_mesh, texture_viz_triangle, texture_normal, }: {
42
+ graph_viz_render({ graph, view, texture_visibility, visible_meshlets, texture_pbr, }: {
43
43
  graph: FrameGraph;
44
44
  view: GPUViewContext;
45
- texture_viz_mesh: number;
46
- texture_viz_triangle: number;
47
- texture_normal: number;
45
+ texture_visibility: number;
46
+ visible_meshlets: number;
47
+ texture_pbr: number;
48
48
  }): {
49
49
  g_pbr: number;
50
50
  g_normal: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUMaterialComputeDispatch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;GAaG;AACH;IA8DI;;;;;;OAMG;IACH;QAL8B,MAAM;QACG,SAAS,EAArC,kBAAkB;QACc,iBAAiB,EAAjD,sBAAsB;QACI,QAAQ,EAAlC,gBAAgB;OAa1B;IAED;;;;;;;;;;;;OAYG;IACH;QAR+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,gBAAgB,EAAhC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,cAAc,EAA9B,MAAM;QAEJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CA0BnF;IAED;;;;;;OAMG;IACH,0BAFW,eAAe,QAazB;IAED,gBAOC;;CAqHJ;yBAlUY,OAAO,8DAA8D,EAAE,UAAU;wCACjF,OAAO,mEAAmE,EAAE,yBAAyB;qCACrG,OAAO,oDAAoD,EAAE,sBAAsB;8BACnF,OAAO,6CAA6C,EAAE,eAAe;+BACrE,OAAO,mCAAmC,EAAE,gBAAgB;6BAC5D,OAAO,8BAA8B,EAAE,cAAc;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;4BACrD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,sCAAsC,EAAE,qBAAqB"}
1
+ {"version":3,"file":"GPUMaterialComputeDispatch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.js"],"names":[],"mappings":"AAuCA;;;;;;;;;;;;;GAaG;AACH;IAgDI;;;;;;OAMG;IACH;QAL8B,MAAM;QACG,SAAS,EAArC,kBAAkB;QACc,iBAAiB,EAAjD,sBAAsB;QACI,QAAQ,EAAlC,gBAAgB;OAa1B;IAED;;;;;;;;;;;;OAYG;IACH;QAR+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,kBAAkB,EAAlC,MAAM;QACU,gBAAgB,EAAhC,MAAM;QACU,WAAW,EAA3B,MAAM;QAEJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CA0BnF;IAED;;;;;;OAMG;IACH,0BAFW,eAAe,QAazB;IAED,gBAMC;;CAsEJ;yBArPY,OAAO,8DAA8D,EAAE,UAAU;wCACjF,OAAO,mEAAmE,EAAE,yBAAyB;qCACrG,OAAO,oDAAoD,EAAE,sBAAsB;8BACnF,OAAO,6CAA6C,EAAE,eAAe;+BACrE,OAAO,mCAAmC,EAAE,gBAAgB;6BAC5D,OAAO,8BAA8B,EAAE,cAAc;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;4BACrD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,sCAAsC,EAAE,qBAAqB"}
@@ -1,8 +1,4 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import {
3
- cpu_hash_table_create,
4
- cpu_hash_table_word_count
5
- } from "../../gpu_primitive/hash_table/cpu_build_hash_table.js";
6
2
  import { enquire_prefix_scan_csdldf_pipelines } from "../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
7
3
  import { STANDARD_MATERIAL_TEMPLATE } from "../standard/STANDARD_MATERIAL_TEMPLATE.js";
8
4
  import { build_gbuffer_compute_pipeline_descriptor } from "./gbuffer_compute.js";
@@ -41,21 +37,6 @@ class ComputeMaterialGroup {
41
37
  group;
42
38
  }
43
39
 
44
- /**
45
- * The material id → slot table of one drawn set, and the list version it was built at.
46
- */
47
- class MaterialSlotTable {
48
- /**
49
- * @type {Uint32Array}
50
- */
51
- table = new Uint32Array(0);
52
-
53
- /**
54
- * @type {number}
55
- */
56
- version = -1;
57
- }
58
-
59
40
  /**
60
41
  * The G-buffer pass as {@link MaterialDispatch.Compute} runs it — **experimental, off by default, not
61
42
  * the main path**; why, with the measurements, is in `COMPUTE_MATERIAL_DISPATCH.md` beside this file.
@@ -108,20 +89,6 @@ export class GPUMaterialComputeDispatch {
108
89
  */
109
90
  #groups = new WeakMap();
110
91
 
111
- /**
112
- * Per drawn set, which the scene replaces when it changes. Weak, as the manager's lists are.
113
- *
114
- * @type {WeakMap<ShadeMaterial[], MaterialSlotTable>}
115
- */
116
- #slot_tables = new WeakMap();
117
-
118
- /**
119
- * The table being built, kept to build the next one in.
120
- *
121
- * @type {number[]}
122
- */
123
- #slot_ids = [];
124
-
125
92
  /**
126
93
  * @type {function(GPUMaterialContext):GPUComputePipeline}
127
94
  */
@@ -159,18 +126,18 @@ export class GPUMaterialComputeDispatch {
159
126
  * @param {Object} options
160
127
  * @param {FrameGraph} options.graph
161
128
  * @param {GPUViewContext} options.view
162
- * @param {number} options.texture_viz_mesh
163
- * @param {number} options.texture_viz_triangle
164
- * @param {number} options.texture_normal the normal target to write, `rgba16uint` at the view's
165
- * resolution, with `STORAGE_BINDING`
129
+ * @param {number} options.texture_visibility the visibility buffer
130
+ * @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
131
+ * @param {number} options.texture_pbr the PBR target to write, `G_BUFFER_COLOR_TARGETS[0].format` at
132
+ * the view's resolution, with `STORAGE_BINDING`
166
133
  * @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}}
167
134
  */
168
135
  graph_viz_render({
169
136
  graph,
170
137
  view,
171
- texture_viz_mesh,
172
- texture_viz_triangle,
173
- texture_normal,
138
+ texture_visibility,
139
+ visible_meshlets,
140
+ texture_pbr,
174
141
  }) {
175
142
  const drawn = view.scene.drawn_materials;
176
143
 
@@ -180,14 +147,14 @@ export class GPUMaterialComputeDispatch {
180
147
  graph,
181
148
  view,
182
149
  contexts,
183
- material_slots: this.#slot_table(drawn, contexts),
150
+ material_slots: this.#materials.gbuffer_slot_table(drawn),
184
151
  records: this.#records,
185
152
  bindings: this.#bindings,
186
153
  pipeline_of: this.#pipeline_of,
187
154
  group_of: this.#group_of,
188
- texture_viz_mesh,
189
- texture_viz_triangle,
190
- texture_normal,
155
+ texture_visibility,
156
+ visible_meshlets,
157
+ texture_pbr,
191
158
  });
192
159
  }
193
160
 
@@ -217,7 +184,6 @@ export class GPUMaterialComputeDispatch {
217
184
  this.#pipelines.clear();
218
185
  this.#pipeline_descriptors.clear();
219
186
  this.#groups = new WeakMap();
220
- this.#slot_tables = new WeakMap();
221
187
  }
222
188
 
223
189
  /**
@@ -288,51 +254,4 @@ export class GPUMaterialComputeDispatch {
288
254
 
289
255
  return entry.group;
290
256
  }
291
-
292
- /**
293
- * Each context's place among `contexts`, by material id, rebuilt when the manager's list moves.
294
- *
295
- * @param {ShadeMaterial[]} drawn
296
- * @param {GPUMaterialContext[]} contexts what the manager answers for `drawn`
297
- * @returns {Uint32Array}
298
- */
299
- #slot_table(drawn, contexts) {
300
- let slots = this.#slot_tables.get(drawn);
301
-
302
- if (slots === undefined) {
303
- slots = new MaterialSlotTable();
304
-
305
- this.#slot_tables.set(drawn, slots);
306
- }
307
-
308
- const version = this.#materials.gbuffer_contexts_version;
309
-
310
- if (slots.version !== version) {
311
- const count = contexts.length;
312
- const ids = this.#slot_ids;
313
-
314
- ids.length = count;
315
-
316
- for (let i = 0; i < count; i++) {
317
- ids[i] = contexts[i].material_id;
318
- }
319
-
320
- let table = slots.table;
321
-
322
- const word_count = cpu_hash_table_word_count(count);
323
-
324
- if (table.length < word_count) {
325
- table = new Uint32Array(word_count);
326
- }
327
-
328
- while (!cpu_hash_table_create(table, ids, count)) {
329
- table = new Uint32Array(table.length * 2);
330
- }
331
-
332
- slots.table = table;
333
- slots.version = version;
334
- }
335
-
336
- return slots.table;
337
- }
338
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_material_quad_keys.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/chunk_material_quad_keys.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,uCAFU,SAAS,CAyFhB;0BA5GuB,oCAAoC"}
1
+ {"version":3,"file":"chunk_material_quad_keys.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/chunk_material_quad_keys.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,uCAFU,SAAS,CAgGhB;0BAnHuB,oCAAoC"}
@@ -1,4 +1,5 @@
1
1
  import { VIZ_BUFFER_INVALID_MESH_VALUE } from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
2
+ import { chunk_visibility_decode } from "../../rasterize/visibility/chunk_visibility_decode.js";
2
3
  import { SUBGROUP_KEYED_APPEND_NONE } from "../../shader/chunk/subgroup/chunk_subgroup_keyed_append.js";
3
4
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
5
  import { chunk_material_mesh_key } from "./chunk_material_mesh_key.js";
@@ -29,7 +30,7 @@ struct MaterialQuadKeys {
29
30
  masks: vec4<u32>,
30
31
  }
31
32
 
32
- // the mesh at a corner, or none for a corner off the view
33
+ // the mesh at a corner, or none for a corner off the view or of no surface
33
34
  fn material_quad_mesh(quad: vec2<u32>, corner: vec2<u32>, resolution: vec2<u32>) -> u32 {
34
35
  let pixel = quad * 2u + corner;
35
36
 
@@ -37,7 +38,13 @@ fn material_quad_mesh(quad: vec2<u32>, corner: vec2<u32>, resolution: vec2<u32>)
37
38
  return ${VIZ_BUFFER_INVALID_MESH_VALUE}u;
38
39
  }
39
40
 
40
- return textureLoad(viz_buffer_mesh, vec2<i32>(pixel), 0).r;
41
+ let encoded = textureLoad(visibility, vec2<i32>(pixel), 0).r;
42
+
43
+ if (encoded == VISIBILITY_NONE) {
44
+ return ${VIZ_BUFFER_INVALID_MESH_VALUE}u;
45
+ }
46
+
47
+ return visibility_decode(encoded).mesh;
41
48
  }
42
49
 
43
50
  // put a corner's key in its place among the distinct keys, written out rather than indexed: a
@@ -108,4 +115,5 @@ fn material_quad_keys(quad: vec2<u32>, resolution: vec2<u32>, tiles_x: u32, tile
108
115
  }
109
116
  `, [
110
117
  chunk_material_mesh_key,
118
+ chunk_visibility_decode,
111
119
  ]);
@@ -205,8 +205,8 @@ fn main(
205
205
  let g = gbuffer_laydown(vec2<f32>(pixel) + vec2<f32>(0.5));
206
206
 
207
207
  if (in_list && ((entry.mask >> corner) & 1u) != 0u) {
208
- textureStore(g_buffer_pbr, pixel, vec4<f32>(g.pbr, 0.0, 0.0));
209
- textureStore(g_buffer_normal, pixel, g.normal);
208
+ textureStore(g_buffer_pbr, pixel, g.pbr);
209
+ textureStore(g_buffer_normal, pixel, vec4<u32>(g.normal, 0u, 0u, 0u));
210
210
  textureStore(g_buffer_albedo, pixel, g.albedo);
211
211
  textureStore(g_buffer_emissive, pixel, vec4<u32>(g.emissive, 0u, 0u, 0u));
212
212
  }
@@ -25,12 +25,12 @@
25
25
  * compute G-buffer pipeline
26
26
  * @param {function(GPUMaterialContext):GPUBindGroup} options.group_of the context's group 0 for
27
27
  * that pipeline
28
- * @param {number} options.texture_viz_mesh
29
- * @param {number} options.texture_viz_triangle
30
- * @param {number} options.texture_normal
28
+ * @param {number} options.texture_visibility the visibility buffer
29
+ * @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
30
+ * @param {number} options.texture_pbr the PBR target to write, which outlives the frame
31
31
  * @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}}
32
32
  */
33
- export function graph_material_dispatch_compute({ graph, view, contexts, material_slots, records, bindings, pipeline_of, group_of, texture_viz_mesh, texture_viz_triangle, texture_normal, }: {
33
+ export function graph_material_dispatch_compute({ graph, view, contexts, material_slots, records, bindings, pipeline_of, group_of, texture_visibility, visible_meshlets, texture_pbr, }: {
34
34
  graph: FrameGraph;
35
35
  view: GPUViewContext;
36
36
  contexts: GPUMaterialContext[];
@@ -39,9 +39,9 @@ export function graph_material_dispatch_compute({ graph, view, contexts, materia
39
39
  bindings: BindGroupManager;
40
40
  pipeline_of: (arg0: GPUMaterialContext) => GPUComputePipeline;
41
41
  group_of: (arg0: GPUMaterialContext) => GPUBindGroup;
42
- texture_viz_mesh: number;
43
- texture_viz_triangle: number;
44
- texture_normal: number;
42
+ texture_visibility: number;
43
+ visible_meshlets: number;
44
+ texture_pbr: number;
45
45
  }): {
46
46
  g_pbr: number;
47
47
  g_normal: number;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_material_dispatch_compute.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/graph_material_dispatch_compute.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;IAjB+B,KAAK,EAAzB,UAAU;IACc,IAAI,EAA5B,cAAc;IACgB,QAAQ,EAAtC,kBAAkB,EAAE;IAEC,cAAc,EAAnC,WAAW;IAEsB,OAAO,EAAxC,uBAAuB;IACG,QAAQ,EAAlC,gBAAgB;IACyC,WAAW,SAA3D,kBAAkB;IAEwB,QAAQ,SAAlD,kBAAkB;IAEX,gBAAgB,EAAhC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,cAAc,EAA9B,MAAM;IACJ;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA0OnF;yBA/RY,OAAO,8DAA8D,EAAE,UAAU;+BACjF,OAAO,mCAAmC,EAAE,gBAAgB;6BAC5D,OAAO,8BAA8B,EAAE,cAAc;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;sCACrD,OAAO,8BAA8B,EAAE,uBAAuB"}
1
+ {"version":3,"file":"graph_material_dispatch_compute.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/graph_material_dispatch_compute.js"],"names":[],"mappings":"AAkDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;IAjB+B,KAAK,EAAzB,UAAU;IACc,IAAI,EAA5B,cAAc;IACgB,QAAQ,EAAtC,kBAAkB,EAAE;IAEC,cAAc,EAAnC,WAAW;IAEsB,OAAO,EAAxC,uBAAuB;IACG,QAAQ,EAAlC,gBAAgB;IACyC,WAAW,SAA3D,kBAAkB;IAEwB,QAAQ,SAAlD,kBAAkB;IAEX,kBAAkB,EAAlC,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACU,WAAW,EAA3B,MAAM;IACJ;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA8OnF;yBAnSY,OAAO,8DAA8D,EAAE,UAAU;+BACjF,OAAO,mCAAmC,EAAE,gBAAgB;6BAC5D,OAAO,8BAA8B,EAAE,cAAc;iCACrD,OAAO,0BAA0B,EAAE,kBAAkB;sCACrD,OAAO,8BAA8B,EAAE,uBAAuB"}
@@ -75,9 +75,9 @@ function storage_target(format, resolution) {
75
75
  * compute G-buffer pipeline
76
76
  * @param {function(GPUMaterialContext):GPUBindGroup} options.group_of the context's group 0 for
77
77
  * that pipeline
78
- * @param {number} options.texture_viz_mesh
79
- * @param {number} options.texture_viz_triangle
80
- * @param {number} options.texture_normal
78
+ * @param {number} options.texture_visibility the visibility buffer
79
+ * @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
80
+ * @param {number} options.texture_pbr the PBR target to write, which outlives the frame
81
81
  * @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}}
82
82
  */
83
83
  export function graph_material_dispatch_compute({
@@ -89,9 +89,9 @@ export function graph_material_dispatch_compute({
89
89
  bindings,
90
90
  pipeline_of,
91
91
  group_of,
92
- texture_viz_mesh,
93
- texture_viz_triangle,
94
- texture_normal,
92
+ texture_visibility,
93
+ visible_meshlets,
94
+ texture_pbr,
95
95
  }) {
96
96
  assert.defined(graph, 'graph');
97
97
  assert.defined(view, 'view');
@@ -140,7 +140,8 @@ export function graph_material_dispatch_compute({
140
140
  shader_material_pixel_count.dispatch({
141
141
  encoder,
142
142
  bindings: {
143
- viz_buffer_mesh: resources.get(data.viz_mesh).obtainView(),
143
+ visibility: resources.get(data.visibility).obtainView(),
144
+ visible_meshlets: resources.get(data.visible_meshlets),
144
145
  material_slots: resources.get(data.material_slots),
145
146
  counts: resources.get(data.counts),
146
147
  settings: encoder.allocateTransientValueBuffer(MATERIAL_CLASSIFY_SETTINGS_STRUCT, classify_settings, GPUBufferUsage.UNIFORM),
@@ -155,14 +156,15 @@ export function graph_material_dispatch_compute({
155
156
  });
156
157
  });
157
158
 
158
- count_data.viz_mesh = count_pass.read(texture_viz_mesh);
159
+ count_data.visibility = count_pass.read(texture_visibility);
160
+ count_data.visible_meshlets = count_pass.read(visible_meshlets);
159
161
  count_data.material_slots = count_pass.read(gr_material_slots);
160
162
  count_data.counts = count_pass.create("material pixel counts", BufferResourceDescriptor.empty(
161
163
  round_up(16 + list_count * 4, 16),
162
164
  GPUBufferUsage.STORAGE
163
165
  ));
164
- count_data.g_pbr = count_pass.create("g-buffer / PBR", storage_target(G_BUFFER_COLOR_TARGETS[0].format, resolution));
165
- count_data.g_normal = count_pass.write(texture_normal);
166
+ count_data.g_pbr = count_pass.write(texture_pbr);
167
+ count_data.g_normal = count_pass.create("g-buffer / Normal", storage_target(G_BUFFER_COLOR_TARGETS[1].format, resolution));
166
168
  count_data.g_albedo = count_pass.create("g-buffer / Albedo", storage_target(G_BUFFER_COLOR_TARGETS[2].format, resolution));
167
169
  count_data.g_emissive = count_pass.create("g-buffer / Emissive", storage_target(G_BUFFER_COLOR_TARGETS[3].format, resolution));
168
170
 
@@ -209,7 +211,8 @@ export function graph_material_dispatch_compute({
209
211
  shader_material_pixel_scatter.dispatch({
210
212
  encoder,
211
213
  bindings: {
212
- viz_buffer_mesh: resources.get(data.viz_mesh).obtainView(),
214
+ visibility: resources.get(data.visibility).obtainView(),
215
+ visible_meshlets: resources.get(data.visible_meshlets),
213
216
  material_slots: resources.get(data.material_slots),
214
217
  settings: encoder.allocateTransientValueBuffer(MATERIAL_CLASSIFY_SETTINGS_STRUCT, classify_settings, GPUBufferUsage.UNIFORM),
215
218
  offsets: resources.get(data.offsets),
@@ -222,7 +225,8 @@ export function graph_material_dispatch_compute({
222
225
  });
223
226
  });
224
227
 
225
- scatter_data.viz_mesh = scatter_pass.read(texture_viz_mesh);
228
+ scatter_data.visibility = scatter_pass.read(texture_visibility);
229
+ scatter_data.visible_meshlets = scatter_pass.read(visible_meshlets);
226
230
  scatter_data.material_slots = scatter_pass.read(gr_material_slots);
227
231
  scatter_data.offsets = scatter_pass.read(gr_offsets);
228
232
  scatter_data.cursors = scatter_pass.create("material pixel cursors", BufferResourceDescriptor.empty(
@@ -252,8 +256,8 @@ export function graph_material_dispatch_compute({
252
256
  assert.equal(record_buffer, records.buffer, 'the dispatch records were replaced between recording and executing the frame');
253
257
 
254
258
  const bind_1 = bindings.obtain(BindGroupDescriptor.from(GBUFFER_COMPUTE_VIZ_LAYOUT, [
255
- resources.get(data.viz_triangle).obtainView(),
256
- resources.get(data.viz_mesh).obtainView(),
259
+ resources.get(data.visibility).obtainView(),
260
+ { buffer: resources.get(data.visible_meshlets) },
257
261
  { buffer: view.uniform_buffer.buffer },
258
262
  { buffer: view.camera.buffer.buffer },
259
263
  { buffer: resources.get(data.material_quads) },
@@ -297,8 +301,8 @@ export function graph_material_dispatch_compute({
297
301
  pass.end();
298
302
  });
299
303
 
300
- shade_data.viz_triangle = shade_pass.read(texture_viz_triangle);
301
- shade_data.viz_mesh = shade_pass.read(texture_viz_mesh);
304
+ shade_data.visibility = shade_pass.read(texture_visibility);
305
+ shade_data.visible_meshlets = shade_pass.read(visible_meshlets);
302
306
  shade_data.material_quads = shade_pass.read(scatter_data.material_quads);
303
307
  shade_data.records = shade_pass.read(commands_data.records);
304
308
  shade_data.g_pbr = shade_pass.write(shade_pass.read(count_data.g_pbr));
@@ -1 +1 @@
1
- {"version":3,"file":"shader_material_pixel_count.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/shader_material_pixel_count.js"],"names":[],"mappings":"AAiBA;;;;GAIG;AACH,gDAFU,YAAY,CAgBS;AAgF/B;;;;;;;;;;;GAWG;AACH,0CAFU,aAAa,CAMpB;6BA1H0B,mCAAmC;8BAJlC,+BAA+B"}
1
+ {"version":3,"file":"shader_material_pixel_count.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/shader_material_pixel_count.js"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,gDAFU,YAAY,CAgBS;AAiF/B;;;;;;;;;;;GAWG;AACH,0CAFU,aAAa,CAMpB;6BA3H0B,mCAAmC;8BALlC,+BAA+B"}
@@ -5,6 +5,7 @@ import {
5
5
  } from "../../shader/chunk/subgroup/chunk_subgroup_keyed_append.js";
6
6
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
7
  import { ComputeShader } from "../../shader/ComputeShader.js";
8
+ import { VISIBLE_MESHLETS_RESOURCE } from "../../rasterize/visibility/chunk_visibility_decode.js";
8
9
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
9
10
  import { atomic_u32, u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
10
11
  import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
@@ -39,7 +40,8 @@ export const MATERIAL_CLASSIFY_SETTINGS_STRUCT = WebGPUStruct.from({
39
40
  const resources = new ShaderResourceSetDescriptor();
40
41
 
41
42
  resources.createGroup()
42
- .addTexture("viz_buffer_mesh", "uint")
43
+ .addTexture("visibility", "uint")
44
+ .add(VISIBLE_MESHLETS_RESOURCE)
43
45
  .addStorageBuffer("material_slots", WebGPUArray.u32)
44
46
  // laid out as graph_prefix_scan_csdldf takes its input, so the counts are scanned where they lie
45
47
  .addStorageBuffer("counts", WebGPUStruct.fromFields(
@@ -1 +1 @@
1
- {"version":3,"file":"shader_material_pixel_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/shader_material_pixel_scatter.js"],"names":[],"mappings":"AAkFA;;;;;;;;;;GAUG;AACH,4CAFU,aAAa,CAMpB;8BA3F2B,+BAA+B"}
1
+ {"version":3,"file":"shader_material_pixel_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/dispatch/shader_material_pixel_scatter.js"],"names":[],"mappings":"AAoFA;;;;;;;;;;GAUG;AACH,4CAFU,aAAa,CAMpB;8BA7F2B,+BAA+B"}
@@ -5,6 +5,7 @@ import {
5
5
  } from "../../shader/chunk/subgroup/chunk_subgroup_keyed_append.js";
6
6
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
7
  import { ComputeShader } from "../../shader/ComputeShader.js";
8
+ import { VISIBLE_MESHLETS_RESOURCE } from "../../rasterize/visibility/chunk_visibility_decode.js";
8
9
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
9
10
  import { atomic_u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
10
11
  import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
@@ -16,7 +17,8 @@ import { MATERIAL_CLASSIFY_SETTINGS_STRUCT } from "./shader_material_pixel_count
16
17
  const resources = new ShaderResourceSetDescriptor();
17
18
 
18
19
  resources.createGroup()
19
- .addTexture("viz_buffer_mesh", "uint")
20
+ .addTexture("visibility", "uint")
21
+ .add(VISIBLE_MESHLETS_RESOURCE)
20
22
  .addStorageBuffer("material_slots", WebGPUArray.u32)
21
23
  .addUniform("settings", MATERIAL_CLASSIFY_SETTINGS_STRUCT)
22
24
  // inclusive sums of the counts, so a list starts where the one before it ends
@@ -1 +1 @@
1
- {"version":3,"file":"fragment_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/fragment_gbuffer.js"],"names":[],"mappings":"AAkFA;;;;;;GAMG;AACH,kDAHW,6BAA6B,GAC3B,6BAA6B,CASzC;AAoBD;;;;;;;;GAQG;AACH,+DAHW,6BAA6B,GAC3B,2BAA2B,CAUvC;AASD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CALW,SAAS,eACT,SAAS,GAEP,SAAS,CA+OrB;AAgBD;;;;;;GAMG;AACH,qDAHW,SAAS,GACP,SAAS,CAerB;AAED;;;;;;;;;GASG;AACH;IAL2B,KAAK,EAArB,MAAM;IACiC,cAAc,EAArD,6BAA6B;IACV,OAAO,EAA1B,SAAS;IACP,wBAAwB,CAUpC;AAED;;;;;;;GAOG;AACH,8DAJW,MAAM,UACN,gBAAgB,GACd,wBAAwB,CA4BpC;AA3bD;;;GAGG;AAGH;;;;;;;;;GASG;AACH,qCAFU,6BAA6B,CAEmC;AA8B1E;;;;GAIG;AACH,uCAFU,6BAA6B,CAEqC;AAgC5E;;;;GAIG;AACH,wCAFU,2BAA2B,CAEoE;AAyQzG;;;;;GAKG;AACH,4CAFU,SAAS,CAQhB;AAgFH;;;;GAIG;AACH,6BAFU,gBAAgB,CAMvB;8CA/c2C,wDAAwD;4CAC1D,sDAAsD;0BAFxE,oCAAoC;yCAxCrB,iEAAiE;iCA2CzE,kCAAkC"}
1
+ {"version":3,"file":"fragment_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/fragment_gbuffer.js"],"names":[],"mappings":"AA0FA;;;;;;GAMG;AACH,kDAHW,6BAA6B,GAC3B,6BAA6B,CASzC;AAoBD;;;;;;;;GAQG;AACH,+DAHW,6BAA6B,GAC3B,2BAA2B,CAUvC;AASD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CALW,SAAS,eACT,SAAS,GAEP,SAAS,CAwOrB;AAgBD;;;;;;GAMG;AACH,qDAHW,SAAS,GACP,SAAS,CAerB;AAED;;;;;;;;;GASG;AACH;IAL2B,KAAK,EAArB,MAAM;IACiC,cAAc,EAArD,6BAA6B;IACV,OAAO,EAA1B,SAAS;IACP,wBAAwB,CAUpC;AAED;;;;;;;GAOG;AACH,8DAJW,MAAM,UACN,gBAAgB,GACd,wBAAwB,CA4BpC;AApbD;;;GAGG;AAGH;;;;;;;;;GASG;AACH,qCAFU,6BAA6B,CAEmC;AA8B1E;;;;GAIG;AACH,uCAFU,6BAA6B,CAEqC;AAgC5E;;;;GAIG;AACH,wCAFU,2BAA2B,CAEoE;AAkQzG;;;;;GAKG;AACH,4CAFU,SAAS,CAQhB;AAgFH;;;;GAIG;AACH,6BAFU,gBAAgB,CAMvB;8CAzc2C,wDAAwD;4CAC1D,sDAAsD;0BAFxE,oCAAoC;yCA/CrB,iEAAiE;iCAkDzE,kCAAkC"}
@@ -16,7 +16,10 @@ import { chunk_barycentric_interpolate_uv } from "../../shader/chunk/geometry/tr
16
16
  import { chunk_compute_normal_matrix_from_m4 } from "../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
17
17
  import { chunk_rgbe9995_encode } from "../../shader/chunk/color/rgbe9995/chunk_rgbe9995_encode.js";
18
18
  import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
19
- import { chunk_decode_meshlet_element } from "../../shader/chunk/geometry/meshlet/chunk_decode_meshlet_element.js";
19
+ import {
20
+ chunk_visibility_decode,
21
+ VISIBLE_MESHLETS_RESOURCE
22
+ } from "../../rasterize/visibility/chunk_visibility_decode.js";
20
23
  import {
21
24
  chunk_read_meshlet_triangle_vertices
22
25
  } from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_vertices.js";
@@ -30,7 +33,11 @@ import {
30
33
  chunk_compute_triangle_face_normal
31
34
  } from "../../shader/chunk/geometry/normal/chunk_compute_triangle_face_normal.js";
32
35
 
36
+ import { chunk_encode_g_buffer_albedo } from "../../shader/chunk/material/chunk_encode_g_buffer_albedo.js";
33
37
  import { chunk_encode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.js";
38
+ import {
39
+ chunk_encode_g_buffer_face_normal
40
+ } from "../../shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.js";
34
41
  import {
35
42
  chunk_interpolate_attribute_3f32
36
43
  } from "../../shader/chunk/geometry/triangle/chunk_interpolate_attribute_3f32.js";
@@ -45,6 +52,7 @@ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResou
45
52
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
46
53
  import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
47
54
  import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
55
+ import { MATERIAL_MASK_FORMAT } from "../MATERIAL_MASK.js";
48
56
  import { chunk_material_surface_contract } from "../template/chunk_material_surface.js";
49
57
  import { chunk_standard_material_surface } from "./chunk_standard_material_surface.js";
50
58
  import { MATERIAL_SEEN_BINDING, material_gbuffer_vertex_shader_code } from "./material_gbuffer_vertex.js";
@@ -89,8 +97,8 @@ assert.equal(g_buffer_viz_resources.get("material_seen").binding_index, MATERIAL
89
97
  */
90
98
  export function add_g_buffer_viz_resources(group) {
91
99
  return group
92
- .addTexture("viz_buffer_triangle", "uint")
93
- .addTexture("viz_buffer_mesh", "uint")
100
+ .addTexture("visibility", "uint")
101
+ .add(VISIBLE_MESHLETS_RESOURCE)
94
102
  .addUniform("view", VIEW_UNIFORM_STRUCT)
95
103
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
96
104
  ;
@@ -169,8 +177,8 @@ export function build_gbuffer_laydown(surface, derivatives) {
169
177
  // language=WGSL
170
178
  `
171
179
  struct GBufferOutput {
172
- @location(0) pbr : vec2<f32>,
173
- @location(1) normal : vec4<u32>,
180
+ @location(0) pbr : vec4<f32>,
181
+ @location(1) normal : u32,
174
182
  @location(2) albedo : vec4<f32>,
175
183
  @location(3) emissive : u32,
176
184
  }
@@ -180,21 +188,15 @@ fn gbuffer_laydown(
180
188
  ) -> GBufferOutput {
181
189
  var output : GBufferOutput;
182
190
 
183
- let encoded_meshlet_triangle = textureLoad(
184
- viz_buffer_triangle,
191
+ let visibility_texel = visibility_decode(textureLoad(
192
+ visibility,
185
193
  vec2<i32>(coord),
186
194
  0
187
- ).r;
188
-
189
- let decoded_meshlet_triangle = decode_meshlet_element(encoded_meshlet_triangle);
190
- let meshlet_id = decoded_meshlet_triangle[0];
191
- let meshlet_triangle_id = decoded_meshlet_triangle[1];
195
+ ).r);
192
196
 
193
- let mesh_index = textureLoad(
194
- viz_buffer_mesh,
195
- vec2<i32>(coord),
196
- 0
197
- ).r;
197
+ let meshlet_id = visibility_texel.meshlet;
198
+ let meshlet_triangle_id = visibility_texel.triangle;
199
+ let mesh_index = visibility_texel.mesh;
198
200
 
199
201
  let mesh = scene_read_mesh(&scene_database, mesh_index);
200
202
  let node = scene_read_node(&scene_database, mesh.node);
@@ -360,16 +362,13 @@ fn gbuffer_laydown(
360
362
  let output_roughness = filtered_roughness + dither_color_8bit_triangle_noise(coord);
361
363
 
362
364
  output.albedo = vec4<f32>(
363
- surface.albedo,
365
+ encode_g_buffer_albedo(surface.albedo),
364
366
  surface.ambient
365
367
  );
366
368
 
367
- output.normal = vec4u(
368
- encode_g_buffer_normal(world_shading_normal),
369
- encode_g_buffer_normal(world_face_normal),
370
- );
369
+ output.normal = encode_g_buffer_normal(world_shading_normal);
371
370
 
372
- output.pbr = vec2(surface.metalness, output_roughness);
371
+ output.pbr = vec4(surface.metalness, output_roughness, encode_g_buffer_face_normal(world_face_normal));
373
372
 
374
373
  output.emissive = rgbe9995_encode(surface.emissive);
375
374
 
@@ -380,7 +379,9 @@ fn gbuffer_laydown(
380
379
  chunk_material_surface_contract,
381
380
 
382
381
  chunk_mat4_extract_position,
382
+ chunk_encode_g_buffer_albedo,
383
383
  chunk_encode_g_buffer_normal,
384
+ chunk_encode_g_buffer_face_normal,
384
385
 
385
386
  chunk_interpolate_attribute_3f32,
386
387
  chunk_interpolate_with_derivatives,
@@ -392,7 +393,7 @@ fn gbuffer_laydown(
392
393
  chunk_anti_alias_roughness_kaplanyan_footprint,
393
394
  chunk_build_orthonormal_matrix_nt,
394
395
  chunk_read_meshlet_triangle_vertices,
395
- chunk_decode_meshlet_element,
396
+ chunk_visibility_decode,
396
397
  chunk_compute_triangle_face_normal,
397
398
  chunk_rgbe9995_encode,
398
399
  chunk_dither_color_8bit_triangle_noise,
@@ -485,7 +486,7 @@ export function gbuffer_pipeline_descriptor_for_shader(label, shader) {
485
486
  depthStencil: {
486
487
  // depth is actually a material mask, we use trick from Unreal to mask materials using depth
487
488
  depthCompare: 'equal',
488
- format: 'depth32float',
489
+ format: MATERIAL_MASK_FORMAT,
489
490
  depthWriteEnabled: false
490
491
  },
491
492
  primitive: {
@@ -1,26 +1,28 @@
1
1
  /**
2
2
  * Group 1 binding of the material-seen bitset the shared G-buffer vertex stage reads: bit
3
- * `id & 31` of word `id >> 5` is set when material `id` holds a pixel of the view.
3
+ * `place & 31` of word `place >> 5` is set when the material at that place in the G-buffer pass's
4
+ * list holds a pixel of the view.
4
5
  *
5
6
  * @type {number}
6
7
  */
7
8
  export const MATERIAL_SEEN_BINDING: number;
8
9
  /**
9
10
  * Shared vertex stage of every material template's G-buffer pipeline: a fullscreen triangle placed
10
- * at depth `material.id / 2^24`, matched against the material-depth mask with `depthCompare: 'equal'`
11
+ * at depth `place / MATERIAL_MASK_NONE`, matched against the material mask with `depthCompare: 'equal'`
11
12
  * so the fragment stage only runs on this material's pixels.
12
13
  *
13
- * The material id rides in the instance index — the material pass draws `draw(3, 1, 0, id)` — so a
14
- * template's group 0 can be laid out however the template needs, and is visible to the fragment
15
- * stage alone. A direct draw's `firstInstance` needs no device feature.
14
+ * The material's place in the pass's list rides in the instance index — the material pass draws
15
+ * `draw(3, 1, 0, place)` — so a template's group 0 can be laid out however the template needs, and
16
+ * is visible to the fragment stage alone. A direct draw's `firstInstance` needs no device feature.
16
17
  *
17
18
  * A material that holds no pixel of the view — its bit clear in `material_seen`, of the shared group
18
19
  * 1 — gets all three corners on one point: a triangle of no area, which rasterizes nothing, so the
19
- * draw costs three vertex invocations rather than a fullscreen pass of depth tests. An id past the
20
+ * draw costs three vertex invocations rather than a fullscreen pass of depth tests. A place past the
20
21
  * end of the bitset is drawn.
21
22
  *
22
- * `id / 16777216` is the expression the material-depth pass writes, and a division by a power of two
23
- * is exact for every id below 2^24, so the two meet at depth-equal.
23
+ * `place / MATERIAL_MASK_NONE` is the expression the material-depth pass writes, and both are
24
+ * quantised to the same 16-bit code for every place below MATERIAL_MASK_NONE, so the two meet at
25
+ * depth-equal.
24
26
  *
25
27
  * @type {string}
26
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"material_gbuffer_vertex.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/material_gbuffer_vertex.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;;;;;;;;;;;;;;;;GAkBG;AACH,kDAFU,MAAM,CAqCE"}
1
+ {"version":3,"file":"material_gbuffer_vertex.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/material_gbuffer_vertex.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,kDAFU,MAAM,CAqCE"}