@woosh/meep-engine 3.12.0 → 3.13.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 (285) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  3. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  4. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  5. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  6. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  7. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  8. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  9. package/src/shade/RENDERER_CONTRACT.md +2 -1
  10. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  11. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  12. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  13. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  14. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  15. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  16. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  17. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  18. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  19. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  20. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  21. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  22. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  23. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  24. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  25. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  26. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  27. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  28. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  29. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  30. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  31. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  32. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  33. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  34. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  35. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  39. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  40. package/src/shade/renderer/Renderer.d.ts +0 -6
  41. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  42. package/src/shade/renderer/Renderer.js +0 -29
  43. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  44. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  45. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  46. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  47. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  49. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  51. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  58. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  60. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  61. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  62. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  63. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  64. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  65. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  66. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  68. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  70. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  71. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  72. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  73. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  74. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  75. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  76. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  77. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  78. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  79. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  80. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  81. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  82. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  83. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  85. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  87. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  88. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  89. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  90. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  91. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  93. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  94. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  96. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  98. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  104. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  106. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  108. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  109. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  110. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  111. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  113. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  114. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  117. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  118. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  119. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  120. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  121. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  122. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  124. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  126. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  127. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  128. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  129. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  130. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  132. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  133. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  134. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  135. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  136. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  137. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  138. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  139. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  140. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  142. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/graph_particles.js +5 -3
  144. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  145. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  147. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  149. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  151. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  153. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  154. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  155. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  156. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  157. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  158. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  159. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  161. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  162. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  163. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  164. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  165. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  166. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  168. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  176. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  186. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  188. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  190. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  192. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  194. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  196. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  198. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  199. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  200. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  201. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  202. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  203. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  205. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  207. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  209. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  211. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  213. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  215. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  216. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  217. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  218. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  220. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  222. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  224. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  225. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  226. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  227. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  228. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  229. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  230. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  231. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  232. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  233. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  235. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  237. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  239. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  240. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  241. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  242. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  243. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  244. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  245. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  246. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  247. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  248. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  249. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  250. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  251. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  252. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  253. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  254. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  255. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  256. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  257. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  258. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  260. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  261. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  262. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  263. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  264. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  265. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  266. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  267. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  268. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  269. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  270. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  271. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  272. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  273. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  274. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  275. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  276. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  277. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  278. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  279. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  280. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  281. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  282. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  283. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  284. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  285. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
@@ -1 +1 @@
1
- {"version":3,"file":"shader_meshlet_metadata_address_patch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js"],"names":[],"mappings":"AAgDA;;;;;;;;;;;;;;;GAeG;AACH,kEAIG;8BAjE2B,+BAA+B"}
1
+ {"version":3,"file":"shader_meshlet_metadata_address_patch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;;GAeG;AACH,kEAIG;8BApE2B,+BAA+B"}
@@ -1,69 +1,72 @@
1
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
- import { ComputeShader } from "../../shader/ComputeShader.js";
5
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
- import { MESHLET_METADATA_STRUCT } from "./encoding/MESHLET_METADATA_STRUCT.js";
7
-
8
- const WORKGROUP_SIZE = 64;
9
-
10
- // Each patch is two consecutive u32s in the `patches` storage buffer:
11
- // patches[i*2 + 0] = record_index — offset into meshlet_metadata
12
- // patches[i*2 + 1] = address_delta — value to add to that record's `address`
13
- //
14
- // Flat-pair layout means a batch of N clones (with M_total cloned meshlets
15
- // in aggregate) flushes through one dispatch over M_total threads, no
16
- // per-clone dispatch overhead.
17
- const resources = new ShaderResourceSetDescriptor();
18
- resources.createGroup()
19
- .addStorageBuffer('meshlet_metadata', WebGPUArray.from(MESHLET_METADATA_STRUCT), true)
20
- .addStorageBuffer('patches', WebGPUArray.from(u32), false)
21
- .addUniform('patch_count', u32);
22
-
23
- const body = CodeChunk.from(
24
- //language=WGSL
25
- `
26
- @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
27
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
28
- let i = gid.x;
29
- if(i >= patch_count){
30
- return;
31
- }
32
-
33
- // Pair-of-u32 packing: avoids declaring a struct for the patches buffer
34
- // and lets the JS side stage entries with a single Uint32Array view.
35
- let record_index = patches[i * 2u];
36
- let address_delta = patches[i * 2u + 1u];
37
-
38
- // u32 wraparound add: when delta is negative-as-i32, wrapping addition
39
- // still produces the correct absolute target address as long as
40
- // (source_address + delta) lands in the buffer's word range — which it
41
- // does by construction (delta = clone_data_offset - source_data_offset).
42
- meshlet_metadata[record_index].address = meshlet_metadata[record_index].address + address_delta;
43
- }
44
- `, [
45
- MESHLET_METADATA_STRUCT.declaration_chunk,
46
- ]
47
- );
48
-
49
- /**
50
- * Compute shader that rewrites the `address` field of cloned meshlet
51
- * metadata records by a per-clone offset. After
52
- * {@link GPUMeshletManager#clone_batch_allocation} GPU-copies a source
53
- * batch's metadata into a freshly-allocated metadata range, the cloned
54
- * records' `address` fields still point at the source's data region;
55
- * this shader fixes them up so they point at the clone's own data
56
- * region.
57
- *
58
- * The input `patches` buffer is a flat array of (record_index,
59
- * address_delta) pairs — one pair per cloned meshlet record across all
60
- * clones being flushed in this dispatch. `patch_count` is the number of
61
- * pairs (i.e. half the array length).
62
- *
63
- * Dispatch via `dispatchThreads({ thread_count_x: patch_count, ... })`.
64
- */
65
- export const shader_meshlet_metadata_address_patch = ComputeShader.from({
66
- label: "Meshlet/MetadataAddressPatch",
67
- body,
68
- resources,
69
- });
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ import { ComputeShader } from "../../shader/ComputeShader.js";
5
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
+ import { MESHLET_METADATA_STRUCT } from "./encoding/MESHLET_METADATA_STRUCT.js";
7
+
8
+ const WORKGROUP_SIZE = 64;
9
+
10
+ // Each patch is two consecutive u32s in the `patches` storage buffer:
11
+ // patches[i*2 + 0] = record_index — offset into meshlet_metadata
12
+ // patches[i*2 + 1] = address_delta — value to add to that record's `address`
13
+ //
14
+ // Flat-pair layout means a batch of N clones (with M_total cloned meshlets
15
+ // in aggregate) flushes through one dispatch over M_total threads, no
16
+ // per-clone dispatch overhead.
17
+ const resources = new ShaderResourceSetDescriptor();
18
+
19
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer holding one u32
20
+ resources.setImmediate("patch_count", u32);
21
+
22
+ resources.createGroup()
23
+ .addStorageBuffer('meshlet_metadata', WebGPUArray.from(MESHLET_METADATA_STRUCT), true)
24
+ .addStorageBuffer('patches', WebGPUArray.from(u32), false);
25
+
26
+ const body = CodeChunk.from(
27
+ //language=WGSL
28
+ `
29
+ @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
30
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
31
+ let i = gid.x;
32
+ if(i >= patch_count){
33
+ return;
34
+ }
35
+
36
+ // Pair-of-u32 packing: avoids declaring a struct for the patches buffer
37
+ // and lets the JS side stage entries with a single Uint32Array view.
38
+ let record_index = patches[i * 2u];
39
+ let address_delta = patches[i * 2u + 1u];
40
+
41
+ // u32 wraparound add: when delta is negative-as-i32, wrapping addition
42
+ // still produces the correct absolute target address as long as
43
+ // (source_address + delta) lands in the buffer's word range — which it
44
+ // does by construction (delta = clone_data_offset - source_data_offset).
45
+ meshlet_metadata[record_index].address = meshlet_metadata[record_index].address + address_delta;
46
+ }
47
+ `, [
48
+ MESHLET_METADATA_STRUCT.declaration_chunk,
49
+ ]
50
+ );
51
+
52
+ /**
53
+ * Compute shader that rewrites the `address` field of cloned meshlet
54
+ * metadata records by a per-clone offset. After
55
+ * {@link GPUMeshletManager#clone_batch_allocation} GPU-copies a source
56
+ * batch's metadata into a freshly-allocated metadata range, the cloned
57
+ * records' `address` fields still point at the source's data region;
58
+ * this shader fixes them up so they point at the clone's own data
59
+ * region.
60
+ *
61
+ * The input `patches` buffer is a flat array of (record_index,
62
+ * address_delta) pairs — one pair per cloned meshlet record across all
63
+ * clones being flushed in this dispatch. `patch_count` is the number of
64
+ * pairs (i.e. half the array length).
65
+ *
66
+ * Dispatch via `dispatchThreads({ thread_count_x: patch_count, ... })`.
67
+ */
68
+ export const shader_meshlet_metadata_address_patch = ComputeShader.from({
69
+ label: "Meshlet/MetadataAddressPatch",
70
+ body,
71
+ resources,
72
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"GPUGeometrySDFManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js"],"names":[],"mappings":"AAoBA;IAoKI;;;OAGG;IACH,+BAqBC;IAhLD;;;OAGG;IACH,iCAEC;IAQD;;;OAGG;IACH,8BAEC;IAQD,0CAEC;IAED;;;OAGG;IACH,+BAFY,MAAM,CAMjB;IAED;;;OAGG;IACH,sBAFY,MAAM,CA6BjB;IAED;;;OAGG;IACH,6BAFW,MAAM,QAoChB;IAED,uBAEC;IAED;;;OAGG;IACH,mBAFW,MAAM,QA4BhB;IA6BD,gBAEC;IAGD;;;;;OAKG;IACH,+DAHW,MAAM,EAAE,wCA4DlB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACL,MAAM,EAAE,CAgBnB;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACL,QAAQ,YAAY,CAAC,CAiBhC;;CACJ;kCAjUiC,oCAAoC"}
1
+ {"version":3,"file":"GPUGeometrySDFManager.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js"],"names":[],"mappings":"AAmBA;IAoKI;;;OAGG;IACH,+BAqBC;IAhLD;;;OAGG;IACH,iCAEC;IAQD;;;OAGG;IACH,8BAEC;IAQD,0CAEC;IAED;;;OAGG;IACH,+BAFY,MAAM,CAMjB;IAED;;;OAGG;IACH,sBAFY,MAAM,CA6BjB;IAED;;;OAGG;IACH,6BAFW,MAAM,QAoChB;IAED,uBAEC;IAED;;;OAGG;IACH,mBAFW,MAAM,QA4BhB;IA6BD,gBAEC;IAGD;;;;;OAKG;IACH,+DAHW,MAAM,EAAE,wCAwDlB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACL,MAAM,EAAE,CAgBnB;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACL,QAAQ,YAAY,CAAC,CAiBhC;;CACJ;kCA5TiC,oCAAoC"}
@@ -2,7 +2,6 @@ import { assert } from "../../../../core/assert.js";
2
2
  import { array_compute_max } from "../../../../core/collection/array/array_compute_max.js";
3
3
  import { download_texture_data } from "../../texture/download_texture_data.js";
4
4
  import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
5
- import { SDF_BUILD_SETTINGS_STRUCT } from "./SDF_BUILD_SETTINGS_STRUCT.js";
6
5
  import { SFD_BUILD_WORKGROUP_SIZE } from "./SFD_BUILD_WORKGROUP_SIZE.js";
7
6
  import { shader_build_sdf } from "./shader_build_sdf.js";
8
7
 
@@ -241,15 +240,11 @@ export class GPUGeometrySDFManager {
241
240
  for (let i = 0; i < slot_indices.length; i++) {
242
241
  const slot_index = slot_indices[i];
243
242
 
244
- const buffer_settings = command_ctx.allocateTransientValueBuffer(
245
- SDF_BUILD_SETTINGS_STRUCT,
246
- {
247
- slot_index,
248
- slot_resolution,
249
- atlas_resolution_in_slots: this.#atlas_resolution_in_tiles,
250
- },
251
- GPUBufferUsage.UNIFORM
252
- );
243
+ const buffer_settings = {
244
+ slot_index,
245
+ slot_resolution,
246
+ atlas_resolution_in_slots: this.#atlas_resolution_in_tiles,
247
+ };
253
248
 
254
249
 
255
250
  const wgx = Math.ceil(slot_resolution / SFD_BUILD_WORKGROUP_SIZE[0]);
@@ -1,130 +1,130 @@
1
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
2
- import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
3
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
4
- import { AABB3_STRUCT } from "../../shader/chunk/geometry/aabb3/AABB3_STRUCT.js";
5
- import { chunk_array_to_aabb3 } from "../../shader/chunk/geometry/aabb3/chunk_array_to_aabb3.js";
6
- import { F32_MAX_DEFINITION } from "../../shader/chunk/math/F32_MAX_DEFINITION.js";
7
- import { SURFACE_POINT_3D } from "../../shader/chunk/sdf/SURFACE_POINT_3D.js";
8
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
9
- import { ComputeShader } from "../../shader/ComputeShader.js";
10
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
11
- import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
12
- import { GEOMETRY_METADATA_STRUCT } from "../GEOMETRY_METADATA_STRUCT.js";
13
- import { chunk_blas_query_sdf } from "./chunk_blas_query_sdf.js";
14
- import { chunk_sdf_slot_index_to_texture_offset } from "./chunk_sdf_slot_index_to_texture_offset.js";
15
- import { SDF_BUILD_SETTINGS_STRUCT } from "./SDF_BUILD_SETTINGS_STRUCT.js";
16
- import { SFD_BUILD_WORKGROUP_SIZE } from "./SFD_BUILD_WORKGROUP_SIZE.js";
17
-
18
- const resources = new ShaderResourceSetDescriptor();
19
-
20
- resources.createGroup()
21
- .addUniform("settings", SDF_BUILD_SETTINGS_STRUCT);
22
-
23
- resources.createGroup()
24
- .addStorageBuffer("blas_lookup", WebGPUArray.u32)
25
- .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT))
26
- .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
27
-
28
- resources.createGroup()
29
- .addStorageTexture("output_texture", "r32float", "3d");
30
-
31
- /**
32
- * To support non-maniforld (open) meshes, we wrap negative distances after a number of voxels
33
- * @type {number}
34
- */
35
- const NEGATIVE_WRAP_DISTANCE = 4;
36
-
37
- const body = CodeChunk.from(
38
- //language=WGSL
39
- `
40
-
41
- @compute @workgroup_size(${SFD_BUILD_WORKGROUP_SIZE.join(',')})
42
- fn main(
43
- @builtin(global_invocation_id) global_id : vec3<u32>,
44
- ){
45
- let slot_resolution = settings.slot_resolution;
46
-
47
- if(any(global_id >= vec3(slot_resolution))){
48
- // outside of the slot
49
- return;
50
- }
51
-
52
- let slot_index = settings.slot_index;
53
-
54
- let slice_size = slot_resolution * slot_resolution;
55
-
56
- let slot_offset_z = slot_index / slice_size;
57
-
58
- let index_in_slice = slot_index - slot_offset_z*slice_size;
59
-
60
- let slot_offset_y = index_in_slice / slot_resolution;
61
- let slot_offset_x = slot_index % slot_resolution;
62
-
63
- let texel_offset = sdf_slot_index_to_texture_offset(slot_index, settings.atlas_resolution_in_slots) * slot_resolution;
64
-
65
- let texel_coordinate = texel_offset + global_id;
66
-
67
- let slot_resolution_v3f32 = vec3(f32(slot_resolution));
68
-
69
- // 0.5 is to move to the center of voxel
70
- let local_uv = (vec3<f32>(global_id) + 0.5) / slot_resolution_v3f32;
71
-
72
- // get AABB from geometry's BVH
73
- let blas_address = blas_lookup[slot_index];
74
-
75
- let bounds = array_to_aabb3(blas_data[blas_address].bounds);
76
- let tight_bounds_span = (bounds.max - bounds.min);
77
-
78
- // figure out extents of a single sdf texel
79
- let texel_size = tight_bounds_span / (slot_resolution_v3f32);
80
-
81
- // expand bounds by 1 texel to prevent clipping
82
- let expanded_bounds = ${AABB3_STRUCT.wgsl_ref}(
83
- bounds.min - texel_size*0.5,
84
- bounds.max + texel_size*0.5
85
- );
86
-
87
- let extended_bounds_span = (expanded_bounds.max - expanded_bounds.min);
88
-
89
- let sample_point = expanded_bounds.min + extended_bounds_span * local_uv;
90
-
91
- var traversal_stack:array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
92
-
93
- var contact_point: ${SURFACE_POINT_3D.wgsl_ref};
94
-
95
- // note that distances are normalized to UV space, so no value will be greater than +/- sqrt(2)
96
- var sdf_distance = blas_query_sdf(sample_point, slot_index, &contact_point, &traversal_stack, 0u);
97
-
98
- let voxel_size = extended_bounds_span / slot_resolution_v3f32;
99
-
100
- // convert distance to voxels
101
- let voxel_path = ( (sample_point - contact_point.position) / voxel_size );
102
-
103
- let voxel_distance = length(voxel_path);
104
-
105
- if(sdf_distance < 0 && voxel_distance > ${NEGATIVE_WRAP_DISTANCE}){
106
- let voxel_compensation = max(0.0, voxel_distance - ${NEGATIVE_WRAP_DISTANCE});
107
- sdf_distance = sdf_distance + voxel_compensation * length(voxel_size) * 2.0;
108
- }
109
-
110
- textureStore(
111
- output_texture,
112
- texel_coordinate,
113
- vec4(sdf_distance,0,0,0)
114
- );
115
- }
116
- `, [
117
- AABB3_STRUCT.declaration_chunk,
118
- chunk_sdf_slot_index_to_texture_offset,
119
- F32_MAX_DEFINITION,
120
- chunk_array_to_aabb3,
121
- chunk_blas_query_sdf,
122
- ]);
123
-
124
- const descriptor = ShaderDescriptor.from({
125
- label: "Geometry SDF/ build",
126
- resources,
127
- body
128
- });
129
-
1
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
2
+ import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
3
+ import { BVH_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
4
+ import { AABB3_STRUCT } from "../../shader/chunk/geometry/aabb3/AABB3_STRUCT.js";
5
+ import { chunk_array_to_aabb3 } from "../../shader/chunk/geometry/aabb3/chunk_array_to_aabb3.js";
6
+ import { F32_MAX_DEFINITION } from "../../shader/chunk/math/F32_MAX_DEFINITION.js";
7
+ import { SURFACE_POINT_3D } from "../../shader/chunk/sdf/SURFACE_POINT_3D.js";
8
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
9
+ import { ComputeShader } from "../../shader/ComputeShader.js";
10
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
11
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
12
+ import { GEOMETRY_METADATA_STRUCT } from "../GEOMETRY_METADATA_STRUCT.js";
13
+ import { chunk_blas_query_sdf } from "./chunk_blas_query_sdf.js";
14
+ import { chunk_sdf_slot_index_to_texture_offset } from "./chunk_sdf_slot_index_to_texture_offset.js";
15
+ import { SDF_BUILD_SETTINGS_STRUCT } from "./SDF_BUILD_SETTINGS_STRUCT.js";
16
+ import { SFD_BUILD_WORKGROUP_SIZE } from "./SFD_BUILD_WORKGROUP_SIZE.js";
17
+
18
+ const resources = new ShaderResourceSetDescriptor();
19
+
20
+ // per-dispatch, 32 bytes, read-only: immediate data rather than a uniform buffer
21
+ resources.setImmediate("settings", SDF_BUILD_SETTINGS_STRUCT);
22
+
23
+ resources.createGroup()
24
+ .addStorageBuffer("blas_lookup", WebGPUArray.u32)
25
+ .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT))
26
+ .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
27
+
28
+ resources.createGroup()
29
+ .addStorageTexture("output_texture", "r32float", "3d");
30
+
31
+ /**
32
+ * To support non-maniforld (open) meshes, we wrap negative distances after a number of voxels
33
+ * @type {number}
34
+ */
35
+ const NEGATIVE_WRAP_DISTANCE = 4;
36
+
37
+ const body = CodeChunk.from(
38
+ //language=WGSL
39
+ `
40
+
41
+ @compute @workgroup_size(${SFD_BUILD_WORKGROUP_SIZE.join(',')})
42
+ fn main(
43
+ @builtin(global_invocation_id) global_id : vec3<u32>,
44
+ ){
45
+ let slot_resolution = settings.slot_resolution;
46
+
47
+ if(any(global_id >= vec3(slot_resolution))){
48
+ // outside of the slot
49
+ return;
50
+ }
51
+
52
+ let slot_index = settings.slot_index;
53
+
54
+ let slice_size = slot_resolution * slot_resolution;
55
+
56
+ let slot_offset_z = slot_index / slice_size;
57
+
58
+ let index_in_slice = slot_index - slot_offset_z*slice_size;
59
+
60
+ let slot_offset_y = index_in_slice / slot_resolution;
61
+ let slot_offset_x = slot_index % slot_resolution;
62
+
63
+ let texel_offset = sdf_slot_index_to_texture_offset(slot_index, settings.atlas_resolution_in_slots) * slot_resolution;
64
+
65
+ let texel_coordinate = texel_offset + global_id;
66
+
67
+ let slot_resolution_v3f32 = vec3(f32(slot_resolution));
68
+
69
+ // 0.5 is to move to the center of voxel
70
+ let local_uv = (vec3<f32>(global_id) + 0.5) / slot_resolution_v3f32;
71
+
72
+ // get AABB from geometry's BVH
73
+ let blas_address = blas_lookup[slot_index];
74
+
75
+ let bounds = array_to_aabb3(blas_data[blas_address].bounds);
76
+ let tight_bounds_span = (bounds.max - bounds.min);
77
+
78
+ // figure out extents of a single sdf texel
79
+ let texel_size = tight_bounds_span / (slot_resolution_v3f32);
80
+
81
+ // expand bounds by 1 texel to prevent clipping
82
+ let expanded_bounds = ${AABB3_STRUCT.wgsl_ref}(
83
+ bounds.min - texel_size*0.5,
84
+ bounds.max + texel_size*0.5
85
+ );
86
+
87
+ let extended_bounds_span = (expanded_bounds.max - expanded_bounds.min);
88
+
89
+ let sample_point = expanded_bounds.min + extended_bounds_span * local_uv;
90
+
91
+ var traversal_stack:array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
92
+
93
+ var contact_point: ${SURFACE_POINT_3D.wgsl_ref};
94
+
95
+ // note that distances are normalized to UV space, so no value will be greater than +/- sqrt(2)
96
+ var sdf_distance = blas_query_sdf(sample_point, slot_index, &contact_point, &traversal_stack, 0u);
97
+
98
+ let voxel_size = extended_bounds_span / slot_resolution_v3f32;
99
+
100
+ // convert distance to voxels
101
+ let voxel_path = ( (sample_point - contact_point.position) / voxel_size );
102
+
103
+ let voxel_distance = length(voxel_path);
104
+
105
+ if(sdf_distance < 0 && voxel_distance > ${NEGATIVE_WRAP_DISTANCE}){
106
+ let voxel_compensation = max(0.0, voxel_distance - ${NEGATIVE_WRAP_DISTANCE});
107
+ sdf_distance = sdf_distance + voxel_compensation * length(voxel_size) * 2.0;
108
+ }
109
+
110
+ textureStore(
111
+ output_texture,
112
+ texel_coordinate,
113
+ vec4(sdf_distance,0,0,0)
114
+ );
115
+ }
116
+ `, [
117
+ AABB3_STRUCT.declaration_chunk,
118
+ chunk_sdf_slot_index_to_texture_offset,
119
+ F32_MAX_DEFINITION,
120
+ chunk_array_to_aabb3,
121
+ chunk_blas_query_sdf,
122
+ ]);
123
+
124
+ const descriptor = ShaderDescriptor.from({
125
+ label: "Geometry SDF/ build",
126
+ resources,
127
+ body
128
+ });
129
+
130
130
  export const shader_build_sdf = new ComputeShader(descriptor);
@@ -1 +1 @@
1
- {"version":3,"file":"shader_sdf_visualize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/shader_sdf_visualize.js"],"names":[],"mappings":"AAiKA;;;;;;;;;GASG;AACH,kHAFa,MAAM,CAsGlB"}
1
+ {"version":3,"file":"shader_sdf_visualize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/shader_sdf_visualize.js"],"names":[],"mappings":"AAmKA;;;;;;;;;GASG;AACH,kHAFa,MAAM,CAsGlB"}
@@ -25,8 +25,10 @@ import { dynamic_chunk_sdf_construct_normal } from "./dynamic_chunk_sdf_construc
25
25
 
26
26
  const resources = new ShaderResourceSetDescriptor();
27
27
 
28
+ // per-draw, 32 bytes, read-only: immediate data rather than a uniform buffer. camera stays bound.
29
+ resources.setImmediate("settings", SDF_DRAW_SETTINGS_STRUCT);
30
+
28
31
  resources.createGroup()
29
- .addUniform("settings", SDF_DRAW_SETTINGS_STRUCT)
30
32
  .addTexture("texture_sdf", "unfilterable-float", "3d")
31
33
  .addTexture("gBufferDepth")
32
34
  .addTexture("gBufferNormals", "uint")
@@ -213,11 +215,11 @@ export function graph_draw_sdf_normals({
213
215
  */
214
216
  const viz_mesh = resources.get(data.viz_mesh);
215
217
 
216
- const buffer_settings = encoder.allocateTransientValueBuffer(SDF_DRAW_SETTINGS_STRUCT, {
218
+ const buffer_settings = {
217
219
  sdf_tile_resolution: sdf.tile_resolution,
218
220
  sdf_atlas_resolution: sdf.atlas_resolution_in_tiles,
219
221
  slice: pingpong(current_time_in_seconds() / 5, 1),
220
- }, GPUBufferUsage.UNIFORM);
222
+ };
221
223
 
222
224
  /**
223
225
  *
@@ -1 +1 @@
1
- {"version":3,"file":"shader_brick4_bake_probes.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js"],"names":[],"mappings":"AA0GA,sDAIG;8BAhG2B,qCAAqC"}
1
+ {"version":3,"file":"shader_brick4_bake_probes.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js"],"names":[],"mappings":"AA6GA,sDAIG;8BAnG2B,qCAAqC"}
@@ -36,9 +36,12 @@ const BRICK4_BAKE_SETTINGS_STRUCT = WebGPUStruct.from({
36
36
  path_depth: u32,
37
37
  });
38
38
 
39
+ // per-dispatch, 16 bytes, read-only: immediate data rather than a uniform buffer. The material
40
+ // table beside it is scene state and stays bound.
41
+ resources.setImmediate("settings", BRICK4_BAKE_SETTINGS_STRUCT);
42
+
39
43
 
40
44
  resources.createGroup()
41
- .addUniform("settings", BRICK4_BAKE_SETTINGS_STRUCT)
42
45
  .addStorageBuffer("probe_positions", WebGPUArray.f32)
43
46
  .addStorageBuffer("output", WebGPUArray.u32, true)
44
47
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_brick4_bake_resolve_probes.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js"],"names":[],"mappings":"AAqCA,gDAuCC;AAiLD,8DAIE;0BA/OwB,0CAA0C;8BACtC,qCAAqC"}
1
+ {"version":3,"file":"shader_brick4_bake_resolve_probes.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js"],"names":[],"mappings":"AAuCA,gDAuCC;AAiLD,8DAIE;0BAjPwB,0CAA0C;8BACtC,qCAAqC"}
@@ -30,8 +30,10 @@ const SETTINGS_STRUCT = WebGPUStruct.from({
30
30
 
31
31
  const resources = new ShaderResourceSetDescriptor();
32
32
 
33
+ // per-dispatch, 12 bytes, read-only: immediate data rather than a uniform buffer
34
+ resources.setImmediate("settings", SETTINGS_STRUCT);
35
+
33
36
  resources.createGroup()
34
- .addUniform("settings", SETTINGS_STRUCT)
35
37
  .addStorageBuffer("input", WebGPUArray.u32)
36
38
  .addStorageBuffer("output", WebGPUArray.u32, true)
37
39
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_update_clipmap_cascade.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js"],"names":[],"mappings":"AAwGA;;;GAGG;AACH,4CAFU,aAAa,CAMpB;8BA7G2B,+BAA+B"}
1
+ {"version":3,"file":"shader_update_clipmap_cascade.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js"],"names":[],"mappings":"AA0GA;;;GAGG;AACH,4CAFU,aAAa,CAMpB;8BA/G2B,+BAA+B"}