@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
@@ -15,11 +15,17 @@ import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
15
15
  import { BVH_STRUCT } from "../../shader/chunk/bvh/BVH_STRUCT.js";
16
16
  import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
17
17
  import { chunk_hash_u32_to_v4f32 } from "../../shader/chunk/color/chunk_hash_u32_to_v4f32.js";
18
- import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
18
+ import {
19
+ chunk_decode_g_buffer_face_normal
20
+ } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
19
21
  import { chunk_camera_ray_from_uv } from "../../shader/chunk/geometry/ray/chunk_camera_ray_from_uv.js";
20
22
  import { RAY_STRUCT } from "../../shader/chunk/geometry/ray/RAY_STRUCT.js";
21
23
  import { chunk_sdf_query_distance } from "../../shader/chunk/sdf/chunk_sdf_query_distance.js";
22
24
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
25
+ import {
26
+ chunk_visibility_decode,
27
+ VISIBLE_MESHLETS_RESOURCE
28
+ } from "../../rasterize/visibility/chunk_visibility_decode.js";
23
29
  import { ImageShader } from "../../shader/ImageShader.js";
24
30
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
25
31
  import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
@@ -40,8 +46,9 @@ resources.createGroup()
40
46
  .add(MESH_SDF_ATLAS_RESOURCE)
41
47
  .add(MESH_SDF_SAMPLER_RESOURCE)
42
48
  .addTexture("gBufferDepth")
43
- .addTexture("gBufferNormals", "uint")
44
- .addTexture("vizBufferMesh", "uint")
49
+ .addTexture("gBufferPBR")
50
+ .addTexture("visibility", "uint")
51
+ .add(VISIBLE_MESHLETS_RESOURCE)
45
52
 
46
53
  resources.createGroup()
47
54
  .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
@@ -84,9 +91,10 @@ fn main(
84
91
  return vec4(0.33);
85
92
  }
86
93
 
87
- let geometric_normal = decode_g_buffer_normal(textureLoad(gBufferNormals, coord_i, 0).zw);
94
+ let geometric_normal = decode_g_buffer_face_normal(textureLoad(gBufferPBR, coord_i, 0));
88
95
 
89
- let mesh_id = textureLoad(vizBufferMesh, coord_i, 0).x;
96
+ // a surface is here: the depth is not the background's
97
+ let mesh_id = visibility_decode(textureLoad(visibility, coord_i, 0).x).mesh;
90
98
 
91
99
  let position_ws = project_position_from_depth(uv, depth, camera.view_projection_matrix_inverse);
92
100
 
@@ -135,7 +143,8 @@ fn main(
135
143
  RAY_STRUCT.declaration_chunk,
136
144
  chunk_camera_ray_from_uv,
137
145
  chunk_project_position_from_depth,
138
- chunk_decode_g_buffer_normal,
146
+ chunk_decode_g_buffer_face_normal,
147
+ chunk_visibility_decode,
139
148
  chunk_ray_query_sdf_raycast,
140
149
  chunk_mesh_sdf_query_distance,
141
150
  chunk_hash_u32_to_v4f32
@@ -160,8 +169,9 @@ export const shader_sdf_visualize = new ImageShader({
160
169
  * @param {FrameGraph} options.graph
161
170
  * @param {GPUViewContext} options.view
162
171
  * @param {number} options.input_depth
163
- * @param {number} options.input_normals
164
- * @param {number} options.input_viz_mesh
172
+ * @param {number} options.input_pbr the G-buffer's PBR target, for its face normal
173
+ * @param {number} options.input_visibility the visibility buffer
174
+ * @param {number} options.input_visible_meshlets the frame's visible-meshlet table, which resolves it
165
175
  * @param settings
166
176
  * @returns {number} texture with shadows
167
177
  */
@@ -169,8 +179,9 @@ export function graph_draw_sdf_normals({
169
179
  graph,
170
180
  view,
171
181
  input_depth,
172
- input_normals,
173
- input_viz_mesh,
182
+ input_pbr,
183
+ input_visibility,
184
+ input_visible_meshlets,
174
185
  }) {
175
186
 
176
187
 
@@ -199,7 +210,7 @@ export function graph_draw_sdf_normals({
199
210
  /**
200
211
  * @type {GPUTextureContext}
201
212
  */
202
- const normals = resources.get(data.normals);
213
+ const pbr = resources.get(data.pbr);
203
214
  /**
204
215
  * @type {GPUTextureContext}
205
216
  */
@@ -207,7 +218,7 @@ export function graph_draw_sdf_normals({
207
218
  /**
208
219
  * @type {GPUTextureContext}
209
220
  */
210
- const viz_mesh = resources.get(data.viz_mesh);
221
+ const visibility = resources.get(data.visibility);
211
222
 
212
223
  const buffer_settings = {
213
224
  slice: pingpong(current_time_in_seconds() / 5, 1),
@@ -224,8 +235,9 @@ export function graph_draw_sdf_normals({
224
235
  bindings: sdf.write_bindings({
225
236
  settings: buffer_settings,
226
237
  gBufferDepth: depth.obtainView(),
227
- gBufferNormals: normals.obtainView(),
228
- vizBufferMesh: viz_mesh.obtainView(),
238
+ gBufferPBR: pbr.obtainView(),
239
+ visibility: visibility.obtainView(),
240
+ visible_meshlets: resources.get(data.visible_meshlets),
229
241
  geometries: geometries.buffer_metadata,
230
242
  scene_database: view.scene.scene_database_buffer,
231
243
  tlas: view.scene.tlas.buffer,
@@ -252,8 +264,9 @@ export function graph_draw_sdf_normals({
252
264
  const pass_builder = graph.add("SDF Debug", pass_data, execute);
253
265
 
254
266
  pass_data.depth = pass_builder.read(input_depth);
255
- pass_data.normals = pass_builder.read(input_normals);
256
- pass_data.viz_mesh = pass_builder.read(input_viz_mesh);
267
+ pass_data.pbr = pass_builder.read(input_pbr);
268
+ pass_data.visibility = pass_builder.read(input_visibility);
269
+ pass_data.visible_meshlets = pass_builder.read(input_visible_meshlets);
257
270
 
258
271
  pass_data.output = pass_builder.create('sdf', TextureResourceDescriptor.from({
259
272
  format: "rgba8unorm",
@@ -3,15 +3,21 @@
3
3
  *
4
4
  * ```wgsl
5
5
  * fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32>
6
+ * fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32>
6
7
  * fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
7
8
  * fn vg_store(base: u32, field: u32, value: f32)
8
9
  * ```
9
10
  *
10
- * `vg_instance_stretch` is the largest and smallest stretch the transform applies to any direction,
11
- * or zero for a transform that flattens the instance. `vg_instance_record` reserves a record under
11
+ * `vg_instance_stretch` is the longest and shortest column of the transform's linear part, or zero
12
+ * for a column of zeros. That is the largest and smallest stretch it applies to any direction when
13
+ * the columns are orthogonal, a rotation times any scale; a shear stretches beyond its columns and
14
+ * is not accounted for, as in Nanite. (`mat3_singular_values` accounts for it, at many times the
15
+ * cost.) `vg_instance_eye` is `position` in the
16
+ * instance's object space, scaled by w: xyz / w is the eye, and w is the |det| that division takes,
17
+ * not positive for a transform without an inverse. `vg_instance_record` reserves a record under
12
18
  * `capacity`, writes the instance's mesh row and its geometry's root page, lookup and claim width,
13
19
  * and returns the record's first word, or {@link VG_INSTANCE_RECORD_NONE} when the records are full.
14
- * What the instance is cut against (its eye, projection and volume) is the collect's own.
20
+ * What the instance is cut against (its projection and volume) is the collect's own.
15
21
  *
16
22
  * Requires the importing shader to declare `instances`, `claim_widths` and `vg_geometries`.
17
23
  *
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_vgeo_cut_instance.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,sCAFU,SAAS,CAoFc;0BA7GP,0CAA0C"}
1
+ {"version":3,"file":"chunk_vgeo_cut_instance.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCAFU,SAAS,CAqFiD;0BApH1C,0CAA0C"}
@@ -1,4 +1,5 @@
1
- import { chunk_mat3_singular_values } from "../../../../shader/chunk/geometry/mat3/chunk_mat3_singular_values.js";
1
+ import { chunk_compute_normal_matrix_from_m4 } from "../../../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
2
+ import { chunk_mat4_extract_scale } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_scale.js";
2
3
  import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
3
4
  import { VGEO_GEOMETRY_ROW_OFFSET } from "../layout/VGEO_GEOMETRY_ROW_OFFSET.js";
4
5
  import { VGEO_GEOMETRY_ROW_WORDS } from "../layout/VGEO_GEOMETRY_ROW_WORDS.js";
@@ -10,15 +11,21 @@ import { VGEO_INSTANCE_WORDS } from "../layout/VGEO_INSTANCE_WORDS.js";
10
11
  *
11
12
  * ```wgsl
12
13
  * fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32>
14
+ * fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32>
13
15
  * fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
14
16
  * fn vg_store(base: u32, field: u32, value: f32)
15
17
  * ```
16
18
  *
17
- * `vg_instance_stretch` is the largest and smallest stretch the transform applies to any direction,
18
- * or zero for a transform that flattens the instance. `vg_instance_record` reserves a record under
19
+ * `vg_instance_stretch` is the longest and shortest column of the transform's linear part, or zero
20
+ * for a column of zeros. That is the largest and smallest stretch it applies to any direction when
21
+ * the columns are orthogonal, a rotation times any scale; a shear stretches beyond its columns and
22
+ * is not accounted for, as in Nanite. (`mat3_singular_values` accounts for it, at many times the
23
+ * cost.) `vg_instance_eye` is `position` in the
24
+ * instance's object space, scaled by w: xyz / w is the eye, and w is the |det| that division takes,
25
+ * not positive for a transform without an inverse. `vg_instance_record` reserves a record under
19
26
  * `capacity`, writes the instance's mesh row and its geometry's root page, lookup and claim width,
20
27
  * and returns the record's first word, or {@link VG_INSTANCE_RECORD_NONE} when the records are full.
21
- * What the instance is cut against (its eye, projection and volume) is the collect's own.
28
+ * What the instance is cut against (its projection and volume) is the collect's own.
22
29
  *
23
30
  * Requires the importing shader to declare `instances`, `claim_widths` and `vg_geometries`.
24
31
  *
@@ -36,42 +43,43 @@ fn vg_store(base: u32, field: u32, value: f32) {
36
43
  }
37
44
 
38
45
  fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32> {
39
- let linear = mat3x3<f32>(global[0].xyz, global[1].xyz, global[2].xyz);
40
-
41
- let stretch = mat3_singular_values(linear);
46
+ let lengths = mat4_extract_scale(global);
47
+ let stretch = vec2<f32>(max(lengths.x, max(lengths.y, lengths.z)), min(lengths.x, min(lengths.y, lengths.z)));
42
48
 
43
49
  /*
44
- A singular transform — an instance scaled to zero in some direction. mat4_inverse says so
45
- by dividing by a zero determinant, and the NaN that comes back makes **every** comparison
46
- in vg_project and the culls fail open, so one zero-scaled instance draws its whole
47
- resident set. It covers nothing, so dropping it is also the right picture.
48
-
49
- **The determinant is the test, and sigma_min alone was not.** This guard used to be
50
- !(sigma_min > 0) on its own, and the closed form's own doc offered sigma_min as a
51
- degeneracy test — true in exact arithmetic, false in f32. An axis-aligned flatten makes
52
- MtM exactly diagonal and takes the exact branch, which does return zero. A ROTATED one
53
- takes the trigonometric branch, where sigma_min is a difference of nearly equal numbers
54
- with an absolute error of about sqrt(eps_f32) * sigma_max — so it came back near 1e-4
55
- rather than 0, and thirty-six of forty rotated zero-scale instances passed this line with
56
- a NaN eye and a projection scale of 6.2e10 behind it (REVIEW_LEDGER M3, re-review
57
- 2026-09-12). The determinant does not have that problem: a flattened instance has one
58
- exactly-zero column at every rotation, and every term of the expansion carries a factor
59
- from it. It is also, exactly, the number mat4_inverse divides by.
60
-
61
- sigma_min is kept beside it because it is not redundant: a matrix that is merely very
62
- close to singular has a non-zero determinant and can still report sigma_min as zero, and
63
- a ratio of the two would then be an infinity rather than a correction.
64
-
65
- Both written as !(x > 0) rather than x <= 0 so that a NaN — which compares false against
66
- everything — is caught rather than passed through.
50
+ A column of zeros, a scale of zero, answers zero, which the collect drops: the projection
51
+ divides by the shortest column. Written !(x > 0) rather than x <= 0 so that a NaN, which
52
+ compares false against everything, is caught rather than passed through.
67
53
  */
68
- if (!(abs(determinant(linear)) > 0.0) || !(stretch.y > 0.0)) {
54
+ if (!(stretch.y > 0.0)) {
69
55
  return vec2<f32>(0.0);
70
56
  }
71
57
 
72
58
  return stretch;
73
59
  }
74
60
 
61
+ fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32> {
62
+ /*
63
+ An affine transform's inverse has adj(L) / det(L) for its linear part, and
64
+ compute_normal_matrix_from_m4 is adj(L) transposed, with det's sign folded in. So the eye is
65
+ transpose(normal) * (position - t) / |det|, and |det| = dot(l0, normal[0]) is the number it is
66
+ divided by. That number is w, for the collect to test before it divides. A test of any other
67
+ expansion of the determinant can pass where this one is zero: under a flattened parent a
68
+ rotated child's columns are all non-zero yet dependent, and two expansions then disagree
69
+ about zero. Even the sign that orients the normal matrix is a second evaluation of this dot,
70
+ so where the determinant is rounding noise a backend that fuses the two differently can make
71
+ w negative, which drops the instance.
72
+
73
+ A singular transform has no eye. The NaN that dividing by it brings makes **every**
74
+ comparison in vg_project and the culls fail open, so one zero-scaled instance would draw its
75
+ whole resident set (REVIEW_LEDGER M3). It covers nothing, so dropping it is also the right
76
+ picture.
77
+ */
78
+ let normal = compute_normal_matrix_from_m4(global);
79
+
80
+ return vec4<f32>(transpose(normal) * (position - global[3].xyz), dot(global[0].xyz, normal[0]));
81
+ }
82
+
75
83
  fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32 {
76
84
  let slot = atomicAdd(&claim_widths.count, 1u);
77
85
 
@@ -108,4 +116,4 @@ fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
108
116
 
109
117
  return base;
110
118
  }
111
- `, [chunk_mat3_singular_values]);
119
+ `, [chunk_mat4_extract_scale, chunk_compute_normal_matrix_from_m4]);
@@ -1 +1 @@
1
- {"version":3,"file":"shader_vgeo_cut_collect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js"],"names":[],"mappings":"AA6NA,oDAIG;8BA3N2B,qCAAqC"}
1
+ {"version":3,"file":"shader_vgeo_cut_collect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js"],"names":[],"mappings":"AA4NA,oDAIG;8BA1N2B,qCAAqC"}
@@ -6,7 +6,6 @@ import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION
6
6
  import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
7
7
  import { ComputeShader } from "../../../../shader/ComputeShader.js";
8
8
  import { GEOMETRY_METADATA_STRUCT } from "../../../GEOMETRY_METADATA_STRUCT.js";
9
- import { chunk_mat4_inverse } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_inverse.js";
10
9
  import { chunk_scene_database_access } from "../../../../scene/chunk_scene_database_access.js";
11
10
  import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
12
11
  import { VGEO_CUT_STAT } from "../layout/VGEO_CUT_STAT.js";
@@ -131,19 +130,25 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
131
130
  /*
132
131
  In perspective, error and distance are both object-space, so a **uniform** scale cancels out of
133
132
  r_e * k / d exactly and needs no term at all. A non-uniform one does not, and the correction is
134
- the ratio of the largest stretch this transform applies to any direction to the smallest —
135
- which is the ratio of its singular values, not of its column lengths. A shear has unit columns
136
- and stretches space without bound, so column lengths report 1 and under-refine, which is the
137
- direction a conservative correction is not allowed to fail in.
133
+ the ratio of the longest column to the shortest. Those are the transform's largest and smallest
134
+ stretch exactly when the columns are orthogonal, a rotation times any scale. A shear stretches
135
+ space beyond its columns, so a sheared instance under-refines: accepted, as Nanite accepts it,
136
+ for a correction that costs three lengths.
138
137
 
139
138
  An orthographic view has no distance for a scale to cancel against: an object-space error
140
- becomes world units by the largest stretch, and the correction is sigma_max alone. The weight
141
- picks between them without a branch, and at w = 1 the expression is today's x / y exactly.
139
+ becomes world units by the largest stretch, and the correction is the longest column alone. The
140
+ weight picks between them without a branch, and at w = 1 the expression is x / y exactly.
142
141
  */
143
142
  let stretch = vg_instance_stretch(node.global);
144
143
 
145
- // a transform that flattens the instance, which vg_instance_stretch answers with zero
146
- if (!(stretch.y > 0.0)) {
144
+ // the camera's position in this instance's object space, out of the camera's own world transform
145
+ let eye = vg_instance_eye(node.global, camera.transform[3].xyz);
146
+
147
+ /*
148
+ A transform that flattens the instance, which vg_instance_stretch answers with zero, or that
149
+ has no inverse to take the eye through: eye.w is the very determinant the eye is divided by.
150
+ */
151
+ if (!(stretch.y > 0.0) || !(eye.w > 0.0)) {
147
152
  atomicAdd(
148
153
  &feedback[params.stats_base + ${VGEO_CUT_STAT.INSTANCES_DROPPED}u], 1u
149
154
  );
@@ -167,11 +172,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
167
172
  return;
168
173
  }
169
174
 
170
- let to_object = mat4_inverse(node.global);
171
-
172
- // the camera's position in this instance's object space, out of the camera's own world transform
173
- let eye = to_object * vec4<f32>(camera.transform[3].xyz, 1.0);
174
-
175
175
  vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE}u, eye.x / eye.w);
176
176
  vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 1}u, eye.y / eye.w);
177
177
  vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 2}u, eye.z / eye.w);
@@ -216,7 +216,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
216
216
  `, [
217
217
  chunk_scene_database_access,
218
218
  chunk_vgeo_cut_instance,
219
- chunk_mat4_inverse,
220
219
  ]);
221
220
 
222
221
  export const shader_vgeo_cut_collect = ComputeShader.from({
@@ -1 +1 @@
1
- {"version":3,"file":"shader_brick4_debug_draw.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js"],"names":[],"mappings":"AAoEA,mDAUE;4BAtE0B,mCAAmC"}
1
+ {"version":3,"file":"shader_brick4_debug_draw.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js"],"names":[],"mappings":"AAwEA,mDAUE;4BAvE0B,mCAAmC"}
@@ -5,6 +5,9 @@ import {
5
5
  } from "../../../../shader/chunk/camera/chunk_project_position_from_depth.js";
6
6
  import { chunk_mat4_extract_position } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
7
7
  import { chunk_decode_g_buffer_normal } from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
8
+ import {
9
+ chunk_decode_g_buffer_face_normal
10
+ } from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
8
11
  import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
9
12
  import { ImageShader } from "../../../../shader/ImageShader.js";
10
13
  import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
@@ -17,6 +20,7 @@ const resources = new ShaderResourceSetDescriptor();
17
20
  resources.createGroup()
18
21
  .addTexture("tDepth")
19
22
  .addTexture("tNormals", "uint")
23
+ .addTexture("tPBR")
20
24
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
21
25
 
22
26
  resources.createGroup()
@@ -45,10 +49,9 @@ fn main(
45
49
 
46
50
  let view_direction = normalize(camera_position_ws - position_ws);
47
51
 
48
- let g_buffer_sample_normal = textureLoad(tNormals, i_coord, 0);
49
52
 
50
- let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.xy);
51
- let geometric_normal = decode_g_buffer_normal(g_buffer_sample_normal.zw);
53
+ let shading_normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
54
+ let geometric_normal = decode_g_buffer_face_normal(textureLoad(tPBR, i_coord, 0));
52
55
 
53
56
  let c = brick4_sample(
54
57
  position_ws,
@@ -62,6 +65,7 @@ fn main(
62
65
  chunk_project_position_from_depth,
63
66
  chunk_mat4_extract_position,
64
67
  chunk_decode_g_buffer_normal,
68
+ chunk_decode_g_buffer_face_normal,
65
69
  chunk_brick4_sample,
66
70
  ]
67
71
  );
@@ -60,7 +60,7 @@ fn main(
60
60
 
61
61
  let g_buffer_sample_normal = textureLoad(tBentNormals, i_coord, 0);
62
62
 
63
- let bent_normal = decode_g_buffer_normal(g_buffer_sample_normal.xy);
63
+ let bent_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
64
64
 
65
65
  let node = brick4_node_by_position(position_ws);
66
66
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_brick4_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js"],"names":[],"mappings":"AA0MA,0DAwBE;4BA3M0B,mCAAmC"}
1
+ {"version":3,"file":"shader_brick4_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js"],"names":[],"mappings":"AA4MA,0DAwBE;4BA5M0B,mCAAmC"}
@@ -10,6 +10,7 @@ import {
10
10
  import { chunk_mat4_extract_position } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
11
11
  import { chunk_decode_g_buffer_normal } from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
12
12
  import { chunk_compute_indirect_specular } from "../../../../shader/chunk/material/chunk_compute_indirect_specular.js";
13
+ import { chunk_decode_g_buffer_albedo } from "../../../../shader/chunk/material/chunk_decode_g_buffer_albedo.js";
13
14
  import { chunk_decode_g_buffer_metalness } from "../../../../shader/chunk/material/chunk_decode_g_buffer_metalness.js";
14
15
  import { chunk_decode_g_buffer_roughness } from "../../../../shader/chunk/material/chunk_decode_g_buffer_roughness.js";
15
16
  import { chunk_metalness_to_specular_color } from "../../../../shader/chunk/material/chunk_metalness_to_specular_color.js";
@@ -70,7 +71,7 @@ fn main(
70
71
  let g_buffer_sample_normal = textureLoad(tGBufferNormals, i_coord, 0);
71
72
  let g_buffer_bent_normal = textureLoad(tBentNormals, i_coord, 0);
72
73
 
73
- let albedo = albedo_ao_sample.rgb;
74
+ let albedo = decode_g_buffer_albedo(albedo_ao_sample.rgb);
74
75
  let occlusion = albedo_ao_sample.a;
75
76
 
76
77
  let f_metalness = decode_g_buffer_metalness(texel_pbr);
@@ -83,8 +84,8 @@ fn main(
83
84
  let material_specularF0 = metalness_to_specular_color(f_metalness, albedo);
84
85
  let material_specularF90 = 1.0;
85
86
 
86
- let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.xy);
87
- let bent_normal = decode_g_buffer_normal(g_buffer_bent_normal.xy);
87
+ let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
88
+ let bent_normal = decode_g_buffer_normal(g_buffer_bent_normal.x);
88
89
 
89
90
  let position_ws = project_position_from_depth(uv, texel_depth, camera.view_projection_matrix_inverse);
90
91
  let camera_position_ws = mat4_extract_position(camera.transform);
@@ -181,6 +182,7 @@ fn main(
181
182
  chunk_project_position_from_depth,
182
183
  chunk_mat4_extract_position,
183
184
  chunk_decode_g_buffer_normal,
185
+ chunk_decode_g_buffer_albedo,
184
186
  chunk_decode_g_buffer_metalness,
185
187
  chunk_decode_g_buffer_roughness,
186
188
  chunk_metalness_to_specular_color,
@@ -1 +1 @@
1
- {"version":3,"file":"shader_brick4_specular.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js"],"names":[],"mappings":"AAwEA,iDAaE;4BA3E0B,mCAAmC"}
1
+ {"version":3,"file":"shader_brick4_specular.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js"],"names":[],"mappings":"AAsEA,iDAaE;4BAzE0B,mCAAmC"}
@@ -48,10 +48,8 @@ fn main(
48
48
 
49
49
  let view_direction = normalize(camera_position_ws - position_ws);
50
50
 
51
- let g_buffer_sample_normal = textureLoad(tNormals, i_coord, 0);
52
51
 
53
- let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.xy);
54
- let geometric_normal = decode_g_buffer_normal(g_buffer_sample_normal.zw);
52
+ let shading_normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
55
53
 
56
54
  let roughness = decode_g_buffer_roughness(textureLoad(tPBR, i_coord, 0));
57
55
 
@@ -23,7 +23,7 @@ fn main(
23
23
  ) -> @location(0) vec4<f32> {
24
24
  let coord_i = vec2u(coord.xy);
25
25
 
26
- let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).rg;
26
+ let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
27
27
 
28
28
  let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
29
29
 
@@ -35,12 +35,12 @@ fn main(
35
35
 
36
36
  let roughness = decode_g_buffer_roughness(texel_pbr);
37
37
 
38
- let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).rg;
38
+ let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
39
39
 
40
40
  let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
41
41
 
42
42
  let shading_normal = decode_g_buffer_normal(
43
- textureLoad(tNormals, coord_i, 0).rg
43
+ textureLoad(tNormals, coord_i, 0).x
44
44
  );
45
45
 
46
46
  let texel_depth = textureLoad(tDepth,
@@ -42,7 +42,7 @@ fn main(
42
42
 
43
43
  let coord_i = vec2u(coord.xy);
44
44
 
45
- let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).rg;
45
+ let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
46
46
 
47
47
  let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
48
48
 
@@ -1 +1 @@
1
- {"version":3,"file":"GPUBrickClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IAyJI;;;;;;;;OAQG;IACH;QAN2B,aAAa,EAA7B,MAAM;QACU,UAAU,EAA1B,MAAM;QAGU,UAAU,EAA1B,MAAM;OAgGhB;IA/PD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IA+OX;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;;OAIG;IACH,wBAEC;IAED;;;;;;;OAOG;IACH,mCAQC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,sBAFW,UAAU,MAAM,CAAC,QAiB3B;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAMnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAb+B,KAAK,EAAzB,UAAU;QACM,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,MAAM,EAAtB,MAAM;QAC4B,SAAS,EAA3C,UAAU,aAAa,CAAC;QACiB,gBAAgB,GAAzD,UAAU,mBAAmB,CAAC;QACA,KAAK,EAAnC,eAAe,GAAC,IAAI;QACH,MAAM,GAAvB,MAAM;QAEJ,MAAM,CA6GlB;IAgWD,gBAcC;;CACJ;mCAx8BY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;8BACpF,OAAO,mCAAmC,EAAE,eAAe;;;;;;;WA+C1D,UAAU;;;;WACV,MAAM;;;;;;UACN,MAAM;;;;;aAGN,MAAM;;;;sBAEN,MAAM;;;;;mBAEN,MAAM;;;;gBACN,MAAM;mBACN,MAAM;;;;;;;;;;WAGN,eAAe;;;;;;aAEf,eAAe;;;+BAON,UAAU,QAAE,oBAAoB,KAAG,IAAI;;;;;;;;;iCAUvC,UAAU,QAAE,oBAAoB,KAAG,IAAI;;+BA1G/B,0CAA0C"}
1
+ {"version":3,"file":"GPUBrickClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IAkKI;;;;;;;;OAQG;IACH;QAN2B,aAAa,EAA7B,MAAM;QACU,UAAU,EAA1B,MAAM;QAGU,UAAU,EAA1B,MAAM;OAgGhB;IAxQD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAwPX;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;;OAIG;IACH,wBAEC;IAED;;;;;;;OAOG;IACH,mCAQC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,sBAFW,UAAU,MAAM,CAAC,QAiB3B;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAMnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAb+B,KAAK,EAAzB,UAAU;QACM,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,MAAM,EAAtB,MAAM;QAC4B,SAAS,EAA3C,UAAU,aAAa,CAAC;QACiB,gBAAgB,GAAzD,UAAU,mBAAmB,CAAC;QACA,KAAK,EAAnC,eAAe,GAAC,IAAI;QACH,MAAM,GAAvB,MAAM;QAEJ,MAAM,CAiHlB;IAgWD,gBAcC;;CACJ;mCAr9BY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;8BACpF,OAAO,mCAAmC,EAAE,eAAe;;;;;;;WA+C1D,UAAU;;;;WACV,MAAM;;;;;;UACN,MAAM;;;;;aAGN,MAAM;;;;sBAEN,MAAM;;;;;mBAEN,MAAM;;;;gBACN,MAAM;mBACN,MAAM;;;;;;;;;;WAGN,eAAe;;;;;;aAEf,eAAe;;;+BAON,UAAU,QAAE,oBAAoB,KAAG,IAAI;;;;;;;;;iCAUvC,UAAU,QAAE,oBAAoB,KAAG,IAAI;;+BA1G/B,0CAA0C"}
@@ -260,6 +260,15 @@ export class GPUBrickClipmap {
260
260
  #starved = 0;
261
261
  #grow_pending = false;
262
262
 
263
+ /** Frames recorded. */
264
+ #frame = 0;
265
+
266
+ /**
267
+ * The frame the capacity last grew in. A reading recorded before it asked for what that growth gave, so
268
+ * only a count that moved in a frame at or after it grows the capacity again.
269
+ */
270
+ #grown_frame = -1;
271
+
263
272
  #destroyed = false;
264
273
 
265
274
  /** The frame's scroll boxes: the smallest cell and the cascade, then the size and the first thread. */
@@ -551,6 +560,7 @@ export class GPUBrickClipmap {
551
560
  if (this.#grow_pending) {
552
561
  this.#grow_pending = false;
553
562
  this.#grow();
563
+ this.#grown_frame = this.#frame;
554
564
  }
555
565
 
556
566
  this.#place(x, y, z);
@@ -621,6 +631,8 @@ export class GPUBrickClipmap {
621
631
  store.make_side_effect();
622
632
 
623
633
  // a starved take grows the capacity, from a later frame
634
+ const read_frame = this.#frame;
635
+
624
636
  graph_read_buffer({ graph, buffer: store_data.state, offset: 4 * BRICK_STATE_STARVED, size: 4 })
625
637
  .then(reference => {
626
638
  try {
@@ -628,7 +640,7 @@ export class GPUBrickClipmap {
628
640
 
629
641
  if (!this.#destroyed && starved !== this.#starved) {
630
642
  this.#starved = starved;
631
- this.#grow_pending = true;
643
+ this.#grow_pending ||= read_frame >= this.#grown_frame;
632
644
  }
633
645
  } finally {
634
646
  reference.release();
@@ -647,6 +659,7 @@ export class GPUBrickClipmap {
647
659
  }
648
660
 
649
661
  this.#fresh = false;
662
+ this.#frame++;
650
663
 
651
664
  return context.state;
652
665
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"AA0HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;IAqRI;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAjB2B,aAAa,EAA7B,MAAM;QAEU,UAAU,EAA1B,MAAM;QAKU,OAAO,EAAvB,MAAM;QACU,mBAAmB,EAAnC,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QACW,cAAc,EAA/B,OAAO;QAES,KAAK,EAArB,MAAM;QACU,QAAQ,EAAxB,MAAM;OAmHhB;IAxZD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,kBAHU,MAAM,CAGR;IAER;;;;OAIG;IACH,8BAHU,MAAM,CAGI;IAEpB;;;;OAIG;IACH,2BAHU,MAAM,CAGC;IAEjB;;;;;OAKG;IACH,yBAHU,OAAO,CAGF;IAEf;;;;OAIG;IACH,gBAHU,MAAM,CAGV;IA2WN;;;;;;;;OAQG;IACH,4CAUC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,sBAEC;IAGD;;;OAGG;IACH,0BAEC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED;;;;;;;OAOG;IACH,SAJW,MAAM,KACN,MAAM,KACN,MAAM,QAkChB;IAED;;;;;;;;OAQG;IACH,sBAFW,eAAe,QA+BzB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;QAzB+B,KAAK,EAAzB,UAAU;QACiB,KAAK,EAAhC,iBAAiB;QACD,eAAe,EAA/B,MAAM;QACU,UAAU,EAA1B,MAAM;QACU,cAAc,EAA9B,MAAM;QACyD,aAAa,EAA5E,OAAO,6BAA6B,EAAE,eAAe;QAErC,MAAM,EAAtB,MAAM;QAE+D,KAAK,EAA1E,OAAO,mCAAmC,EAAE,eAAe;QAEP,QAAQ,EAA5D;YAAC,cAAc,qBAA0B;SAAC;QAEzB,kBAAkB,EAAnC,OAAO;QAEU,cAAc,EAA/B,OAAO;QAEiC,QAAQ,EAAhD;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC;QAEL,YAAY,EAArC,eAAe;QACU,eAAe,EAAxC,eAAe;QACC,QAAQ,EAAxB,MAAM;aAuOhB;IA6gBD,gBAcC;;CACJ;mCA18CY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;gCACpF,OAAO,8BAA8B,EAAE,uBAAuB,GAAC,OAAO,2BAA2B,EAAE,oBAAoB"}
1
+ {"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"AA0HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;IA2RI;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAjB2B,aAAa,EAA7B,MAAM;QAEU,UAAU,EAA1B,MAAM;QAKU,OAAO,EAAvB,MAAM;QACU,mBAAmB,EAAnC,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QACW,cAAc,EAA/B,OAAO;QAES,KAAK,EAArB,MAAM;QACU,QAAQ,EAAxB,MAAM;OAmHhB;IA9ZD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,kBAHU,MAAM,CAGR;IAER;;;;OAIG;IACH,8BAHU,MAAM,CAGI;IAEpB;;;;OAIG;IACH,2BAHU,MAAM,CAGC;IAEjB;;;;;OAKG;IACH,yBAHU,OAAO,CAGF;IAEf;;;;OAIG;IACH,gBAHU,MAAM,CAGV;IAiXN;;;;;;;;OAQG;IACH,4CAUC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,sBAEC;IAGD;;;OAGG;IACH,0BAEC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED;;;;;;;OAOG;IACH,SAJW,MAAM,KACN,MAAM,KACN,MAAM,QAkChB;IAED;;;;;;;;OAQG;IACH,sBAFW,eAAe,QA+BzB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;QAzB+B,KAAK,EAAzB,UAAU;QACiB,KAAK,EAAhC,iBAAiB;QACD,eAAe,EAA/B,MAAM;QACU,UAAU,EAA1B,MAAM;QACU,cAAc,EAA9B,MAAM;QACyD,aAAa,EAA5E,OAAO,6BAA6B,EAAE,eAAe;QAErC,MAAM,EAAtB,MAAM;QAE+D,KAAK,EAA1E,OAAO,mCAAmC,EAAE,eAAe;QAEP,QAAQ,EAA5D;YAAC,cAAc,qBAA0B;SAAC;QAEzB,kBAAkB,EAAnC,OAAO;QAEU,cAAc,EAA/B,OAAO;QAEiC,QAAQ,EAAhD;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC;QAEL,YAAY,EAArC,eAAe;QACU,eAAe,EAAxC,eAAe;QACC,QAAQ,EAAxB,MAAM;aA0OhB;IA6gBD,gBAcC;;CACJ;mCAn9CY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;gCACpF,OAAO,8BAA8B,EAAE,uBAAuB,GAAC,OAAO,2BAA2B,EAAE,oBAAoB"}
@@ -382,6 +382,12 @@ export class GPUProbeClipmap {
382
382
  #starved = 0;
383
383
  #grow_pending = false;
384
384
 
385
+ /**
386
+ * The frame the capacity last grew in. A reading recorded before it asked for what that growth gave, so
387
+ * only a count that moved in a frame at or after it grows the capacity again.
388
+ */
389
+ #grown_frame = -1;
390
+
385
391
  /** Frames recorded: the clock the records keep. */
386
392
  #frame = 0;
387
393
 
@@ -834,6 +840,7 @@ export class GPUProbeClipmap {
834
840
  if (this.#grow_pending) {
835
841
  this.#grow_pending = false;
836
842
  this.#grow();
843
+ this.#grown_frame = this.#frame;
837
844
  }
838
845
 
839
846
  const trace_capacity = Math.floor(ray_budget / rays_per_probe);
@@ -1018,6 +1025,8 @@ export class GPUProbeClipmap {
1018
1025
  update.make_side_effect();
1019
1026
 
1020
1027
  // an admission the free list could not serve grows the capacity, from a later frame
1028
+ const read_frame = this.#frame;
1029
+
1021
1030
  graph_read_buffer({ graph, buffer: update_data.counters, offset: 4 * PROBE_COUNTER_STARVED, size: 4 })
1022
1031
  .then(reference => {
1023
1032
  try {
@@ -1025,7 +1034,7 @@ export class GPUProbeClipmap {
1025
1034
 
1026
1035
  if (!this.#destroyed && starved !== this.#starved) {
1027
1036
  this.#starved = starved;
1028
- this.#grow_pending = true;
1037
+ this.#grow_pending ||= read_frame >= this.#grown_frame;
1029
1038
  }
1030
1039
  } finally {
1031
1040
  reference.release();
@@ -49,8 +49,8 @@ fn main(
49
49
  let view_direction = normalize(mat4_extract_position(camera.transform) - position);
50
50
 
51
51
  // the surface's own normal picks, as want chose by it; the bent normal resolves, as IBL's does
52
- let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).xy);
53
- let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).xy);
52
+ let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
53
+ let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).x);
54
54
 
55
55
  let noise = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
56
56
  let probes = probe_clipmap_sample_sh(position, normal, view_direction, noise);
@@ -1 +1 @@
1
- {"version":3,"file":"shader_probe_clipmap_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js"],"names":[],"mappings":"AAyIA;;;;;;;;;;;;;GAaG;AACH,qDAFU,WAAW,CA0BlB;4BA1JyB,gCAAgC"}
1
+ {"version":3,"file":"shader_probe_clipmap_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js"],"names":[],"mappings":"AA2IA;;;;;;;;;;;;;GAaG;AACH,qDAFU,WAAW,CA0BlB;4BA3JyB,gCAAgC"}