@woosh/meep-engine 3.12.0 → 3.13.1

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 (301) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  3. package/src/core/geom/3d/shape/ConvexHullShape3D.js +41 -25
  4. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  5. package/src/core/geom/3d/shape/PosedShape3D.js +7 -2
  6. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  7. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  8. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  9. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  10. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  11. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  12. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  13. package/src/shade/RENDERER_CONTRACT.md +2 -1
  14. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  15. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  16. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  17. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +755 -0
  18. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  19. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  20. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  21. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  22. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  23. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  24. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  25. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  26. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  27. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  28. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  29. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  30. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  31. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  32. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  33. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  34. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  35. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  36. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  37. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
  38. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  39. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
  40. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  41. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
  42. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
  43. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
  44. package/src/shade/renderer/Renderer.d.ts +0 -6
  45. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  46. package/src/shade/renderer/Renderer.js +0 -29
  47. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  48. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  49. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  50. package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
  51. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  52. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  53. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  54. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
  55. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  56. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
  57. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  58. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  59. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
  60. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  61. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
  62. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  63. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
  64. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  65. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
  66. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  67. package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
  68. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  69. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  70. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  71. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
  72. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  73. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
  74. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  75. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  76. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  77. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  78. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  79. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  80. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  81. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  82. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  83. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
  85. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
  87. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
  89. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  90. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  91. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  92. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  93. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  94. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  95. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  96. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  98. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  100. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  101. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  102. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  103. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
  104. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  106. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  108. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  109. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  110. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  111. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  112. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
  113. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  114. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  115. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  116. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
  117. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  118. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
  119. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  120. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
  121. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  122. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  123. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  124. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  125. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  126. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  127. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
  128. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  129. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
  130. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  131. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  136. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  137. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  138. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  139. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  140. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  141. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  142. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
  143. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  144. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  145. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  146. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph_particles.js +5 -3
  148. package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
  149. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
  151. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
  153. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
  155. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
  157. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  158. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  159. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  160. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  161. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  163. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  164. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  165. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  166. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  167. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
  168. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  169. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  170. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  171. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  172. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  173. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  174. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  175. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  176. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  177. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  178. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  179. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
  180. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  181. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  182. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  183. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  184. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  185. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  186. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  187. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
  188. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  189. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
  190. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  191. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  192. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  193. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  194. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  195. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  196. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  197. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  198. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  200. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  201. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  202. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  203. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  204. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
  205. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  206. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  207. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  209. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  210. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  211. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  212. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  213. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  214. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  215. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  216. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  217. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  219. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  220. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  222. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
  224. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  225. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
  226. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  227. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
  228. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  229. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  230. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  231. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  232. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  233. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  234. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  235. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  236. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  237. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  238. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
  239. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  240. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
  241. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  242. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
  243. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  244. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
  245. package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
  246. package/src/shade/renderer/scene/Mesh.js +4 -6
  247. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  248. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
  249. package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
  250. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  251. package/src/shade/renderer/shader/ComputeShader.js +14 -17
  252. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  253. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  254. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  255. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  256. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  257. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +16 -7
  258. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  259. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1342 -1326
  260. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +13 -0
  261. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  262. package/src/shade/renderer/shadow/map/Shadowmap.js +14 -0
  263. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +79 -0
  264. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -0
  265. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +196 -0
  266. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts +91 -0
  267. package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts.map +1 -0
  268. package/src/shade/renderer/shadow/map/ShadowmapRegistry.js +156 -0
  269. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  270. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  271. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  272. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  273. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  274. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  275. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  276. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  277. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
  278. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  279. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  280. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  281. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
  282. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  283. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  284. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  285. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  286. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  287. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  288. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  289. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  290. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  291. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +233 -231
  292. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  293. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
  294. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  295. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  296. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  297. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  298. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  299. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  300. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  301. 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"}