@woosh/meep-engine 3.69.0 → 3.70.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 (398) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  5. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  6. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  7. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  8. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  9. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  10. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  11. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  12. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  13. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  14. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  15. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  16. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  17. package/src/core/bvh8/bvh8_depth.js +39 -0
  18. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  19. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  20. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  21. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  22. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  24. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  25. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  26. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  27. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  28. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  29. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  30. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  31. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  32. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  33. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  34. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  35. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  36. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  37. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  38. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  39. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  40. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  41. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  42. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  43. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  44. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  45. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  46. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  47. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  48. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  49. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  50. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  51. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  52. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  53. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  54. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  55. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  56. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  57. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  58. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  59. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  60. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  61. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  62. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  63. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  64. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  65. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  66. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  67. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  68. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  69. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  70. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  71. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  72. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  73. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  74. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  75. package/src/shade/playground/bvh_repro/README.md +8 -6
  76. package/src/shade/playground/bvh_repro/index.html +125 -124
  77. package/src/shade/playground/bvh_repro/main.js +259 -254
  78. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  79. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  80. package/src/shade/playground/grass_surfaces/main.js +3 -2
  81. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  82. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  83. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  84. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  85. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  86. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  87. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  88. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  89. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  90. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  91. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  92. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  93. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  94. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  95. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  96. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  97. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  98. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  99. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  100. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  101. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  102. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  103. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  104. package/src/shade/playground/water_surface/main.js +6 -3
  105. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  106. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  107. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  108. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  109. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  110. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  111. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  112. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  113. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  114. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  115. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  116. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  117. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  118. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  119. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  120. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  121. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  122. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  123. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  124. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  125. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  126. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  127. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  128. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  129. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  130. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  131. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  132. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  133. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  134. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  135. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  136. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  137. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  138. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  139. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  140. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  141. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  142. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  143. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  144. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  145. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +2 -1
  147. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  148. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  150. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  151. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  152. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  153. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  154. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  155. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  156. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  158. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  159. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  160. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  161. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  162. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  164. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  165. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  167. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  168. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  170. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  171. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  172. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  173. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  174. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  176. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  177. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  179. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  180. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  182. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  183. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  185. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  186. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  188. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  189. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  190. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  191. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  192. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  193. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  195. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  197. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  198. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  199. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  201. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  203. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  205. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  206. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  207. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  208. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  209. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  210. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  211. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  212. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  213. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  214. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  215. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  216. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  217. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  218. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  219. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  220. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  221. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  222. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  224. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  225. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  226. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  227. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  228. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  229. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  230. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  231. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  232. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  233. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  234. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  235. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  236. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  237. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  238. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  239. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  240. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  241. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  242. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  243. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  244. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  245. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  246. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  247. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  248. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  249. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  250. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  251. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  252. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  253. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  254. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  255. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  256. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  257. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  258. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  259. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  260. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  261. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  262. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  263. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  264. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  265. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  266. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  267. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  268. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  269. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  270. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  271. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  272. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  273. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  274. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  275. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  276. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  277. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  278. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  279. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  280. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  281. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  282. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  283. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  284. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  285. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  286. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  287. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  288. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  289. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  290. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  291. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  292. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  293. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  294. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  295. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  296. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  297. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  298. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  299. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  300. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  301. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  302. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  303. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  304. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  305. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  306. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  307. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  308. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  309. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  310. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  311. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  312. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  313. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  315. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  316. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  318. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  319. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  320. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  321. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  322. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  324. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  325. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  327. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  328. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  329. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  330. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  331. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  332. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  333. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  334. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  335. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  336. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  337. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  338. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  339. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  340. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  341. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  342. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  343. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  344. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  345. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  346. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  347. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  348. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  349. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  350. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  351. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  352. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  353. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  354. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  355. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  356. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  357. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  358. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  359. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  360. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  361. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  362. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  363. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  364. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  365. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  366. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  367. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  368. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  369. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  370. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  371. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  372. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  373. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  374. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  375. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  376. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  377. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  378. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  379. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  380. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  381. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  382. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  383. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  384. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  385. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  386. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  387. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  388. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  389. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  390. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  391. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  392. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  393. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  394. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  395. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  396. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  397. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  398. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -1,95 +1,95 @@
1
- import { f32, u32, vec3f } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../renderer/shader/type/WebGPUArray.js";
3
- import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
4
- import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
5
- import { ComputeShader } from "../../renderer/shader/ComputeShader.js";
6
- import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
- import { BVH2_NODE_STRUCT } from "../../renderer/shader/chunk/bvh/BVH2_NODE_STRUCT.js";
8
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../renderer/shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
9
- import {
10
- chunk_ray_query_blas_nearest
11
- } from "../../renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js";
12
- import { RAY_STRUCT } from "../../renderer/shader/chunk/geometry/ray/RAY_STRUCT.js";
13
- import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
14
- import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../renderer/geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
15
- import {
16
- MESHLET_METADATA_STRUCT
17
- } from "../../renderer/geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
18
-
19
- export const BLAS_POINTS_WORKGROUP_SIZE = 64;
20
-
21
- /**
22
- * @type {WebGPUStruct}
23
- */
24
- export const BLAS_POINTS_SETTINGS_STRUCT = WebGPUStruct.from({
25
- origin: vec3f,
26
- point_count: u32,
27
- geometry_index: u32,
28
- tmax: f32,
29
- }, "BlasPointsSettings");
30
-
31
- const resources = new ShaderResourceSetDescriptor();
32
-
33
- // per-dispatch, 32 bytes, read-only: immediate data rather than a uniform buffer
34
- resources.setImmediate("settings", BLAS_POINTS_SETTINGS_STRUCT);
35
- resources.createGroup()
36
- // three f32 per point, in the geometry's own space
37
- .addStorageBuffer("targets", WebGPUArray.from(f32), false)
38
- .addStorageBuffer("blas_lookup", WebGPUArray.from(u32), false)
39
- .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT), false)
40
- .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false)
41
- .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT), false)
42
- .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE, false)
43
- .addStorageBuffer("out_t", WebGPUArray.from(f32), true)
44
- .addStorageBuffer("out_expected", WebGPUArray.from(f32), true);
45
-
46
- const body = CodeChunk.from(
47
- //language=WGSL
48
- `
49
- @compute @workgroup_size(${BLAS_POINTS_WORKGROUP_SIZE}, 1, 1)
50
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
51
- let i = gid.x;
52
-
53
- if (i >= settings.point_count) {
54
- return;
55
- }
56
-
57
- let target = vec3<f32>(targets[i * 3u], targets[i * 3u + 1u], targets[i * 3u + 2u]);
58
-
59
- var ray: ${RAY_STRUCT.wgsl_ref};
60
-
61
- ray.origin = settings.origin;
62
- ray.direction = normalize(target - settings.origin);
63
- ray.tmax = settings.tmax;
64
-
65
- var stack: array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
66
-
67
- let hit = ray_query_blas_nearest(ray, settings.geometry_index, &stack, 0u);
68
-
69
- out_t[i] = hit.t;
70
- out_expected[i] = length(target - settings.origin);
71
- }
72
- `, [
73
- RAY_STRUCT.declaration_chunk,
74
- chunk_ray_query_blas_nearest,
75
- ]);
76
-
77
- /**
78
- * Ask the traversal about points the caller chooses, rather than about triangle centroids.
79
- *
80
- * Centroid rays answer "is this triangle reachable at all", and every triangle of a large flat
81
- * surface can be reachable at its middle while a band of it is not reachable at its edge — which is
82
- * the shape of failure a centroid audit reports as clean. Sampling the surface on a grid asks the
83
- * finer question, and answers it in the geometry's own coordinates rather than in pixels, so the
84
- * region that fails can be pointed at rather than described.
85
- *
86
- * A point known to lie on a surface must produce a hit at or before its own distance. Anything
87
- * further, or nothing at all, is the traversal declining a surface it was aimed at.
88
- *
89
- * @type {ComputeShader}
90
- */
91
- export const shader_blas_audit_points = ComputeShader.from({
92
- label: "BLAS/AuditPoints",
93
- resources,
94
- body,
95
- });
1
+ import { f32, u32, vec3f } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../renderer/shader/type/WebGPUArray.js";
3
+ import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
4
+ import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../../renderer/shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { BVH8_INODE_STRUCT } from "../../renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
8
+ import { BVH8_TRAVERSAL_STACK_SIZE } from "../../renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
9
+ import {
10
+ chunk_ray_query_blas_nearest
11
+ } from "../../renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js";
12
+ import { RAY_STRUCT } from "../../renderer/shader/chunk/geometry/ray/RAY_STRUCT.js";
13
+ import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
14
+ import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../renderer/geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
15
+ import {
16
+ MESHLET_METADATA_STRUCT
17
+ } from "../../renderer/geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
18
+
19
+ export const BLAS_POINTS_WORKGROUP_SIZE = 64;
20
+
21
+ /**
22
+ * @type {WebGPUStruct}
23
+ */
24
+ export const BLAS_POINTS_SETTINGS_STRUCT = WebGPUStruct.from({
25
+ origin: vec3f,
26
+ point_count: u32,
27
+ geometry_index: u32,
28
+ tmax: f32,
29
+ }, "BlasPointsSettings");
30
+
31
+ const resources = new ShaderResourceSetDescriptor();
32
+
33
+ // per-dispatch, 32 bytes, read-only: immediate data rather than a uniform buffer
34
+ resources.setImmediate("settings", BLAS_POINTS_SETTINGS_STRUCT);
35
+ resources.createGroup()
36
+ // three f32 per point, in the geometry's own space
37
+ .addStorageBuffer("targets", WebGPUArray.from(f32), false)
38
+ .addStorageBuffer("blas_lookup", WebGPUArray.from(u32), false)
39
+ .addStorageBuffer("blas_data", WebGPUArray.from(BVH8_INODE_STRUCT), false)
40
+ .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false)
41
+ .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT), false)
42
+ .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE, false)
43
+ .addStorageBuffer("out_t", WebGPUArray.from(f32), true)
44
+ .addStorageBuffer("out_expected", WebGPUArray.from(f32), true);
45
+
46
+ const body = CodeChunk.from(
47
+ //language=WGSL
48
+ `
49
+ @compute @workgroup_size(${BLAS_POINTS_WORKGROUP_SIZE}, 1, 1)
50
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
51
+ let i = gid.x;
52
+
53
+ if (i >= settings.point_count) {
54
+ return;
55
+ }
56
+
57
+ let aim = vec3<f32>(targets[i * 3u], targets[i * 3u + 1u], targets[i * 3u + 2u]);
58
+
59
+ var ray: ${RAY_STRUCT.wgsl_ref};
60
+
61
+ ray.origin = settings.origin;
62
+ ray.direction = normalize(aim - settings.origin);
63
+ ray.tmax = settings.tmax;
64
+
65
+ var stack: array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>;
66
+
67
+ let hit = ray_query_blas_nearest(ray, settings.geometry_index, &stack, 0u);
68
+
69
+ out_t[i] = hit.t;
70
+ out_expected[i] = length(aim - settings.origin);
71
+ }
72
+ `, [
73
+ RAY_STRUCT.declaration_chunk,
74
+ chunk_ray_query_blas_nearest,
75
+ ]);
76
+
77
+ /**
78
+ * Ask the traversal about points the caller chooses, rather than about triangle centroids.
79
+ *
80
+ * Centroid rays answer "is this triangle reachable at all", and every triangle of a large flat
81
+ * surface can be reachable at its middle while a band of it is not reachable at its edge — which is
82
+ * the shape of failure a centroid audit reports as clean. Sampling the surface on a grid asks the
83
+ * finer question, and answers it in the geometry's own coordinates rather than in pixels, so the
84
+ * region that fails can be pointed at rather than described.
85
+ *
86
+ * A point known to lie on a surface must produce a hit at or before its own distance. Anything
87
+ * further, or nothing at all, is the traversal declining a surface it was aimed at.
88
+ *
89
+ * @type {ComputeShader}
90
+ */
91
+ export const shader_blas_audit_points = ComputeShader.from({
92
+ label: "BLAS/AuditPoints",
93
+ resources,
94
+ body,
95
+ });
@@ -1,4 +1,12 @@
1
1
  export const BLAS_VISIBILITY_WORKGROUP_SIZE: 64;
2
+ /**
3
+ * Triangle ids a meshlet can hold, used or not: the audit asks about every one of them, so that a
4
+ * thread's index says which triangle it is without a table. `(meshlet << 8) | triangle` is the id;
5
+ * a thread's index is `meshlet * BLAS_VISIBILITY_MESHLET_STRIDE + triangle`.
6
+ *
7
+ * @type {number}
8
+ */
9
+ export const BLAS_VISIBILITY_MESHLET_STRIDE: number;
2
10
  /**
3
11
  * @type {WebGPUStruct}
4
12
  */
@@ -14,7 +22,7 @@ export const BLAS_VISIBILITY_SETTINGS_STRUCT: WebGPUStruct;
14
22
  * The ray goes from the camera to a triangle's centroid. That point is inside the triangle, so the
15
23
  * ray intersects it, so the query must return a hit — this triangle if nothing is in front, some
16
24
  * other one if something is. Only a miss is impossible, and a miss is therefore a traversal that
17
- * failed to reach a leaf whose box it was inside.
25
+ * failed to reach a slot whose box it was inside.
18
26
  *
19
27
  * Which triangles miss, and where they are, is the whole diagnosis.
20
28
  *
@@ -1 +1 @@
1
- {"version":3,"file":"shader_blas_audit_visibility.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js"],"names":[],"mappings":"AAyBA,gDAAiD;AAEjD;;GAEG;AACH,8CAFU,YAAY,CASO;AA4E7B;;;;;;;;;;;;;;;;GAgBG;AACH,2CAFU,aAAa,CAMpB;6BApI0B,4CAA4C;8BAE3C,wCAAwC"}
1
+ {"version":3,"file":"shader_blas_audit_visibility.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js"],"names":[],"mappings":"AAwBA,gDAAiD;AAEjD;;;;;;GAMG;AACH,6CAFU,MAAM,CAE8D;AAE9E;;GAEG;AACH,8CAFU,YAAY,CAOO;AAiF7B;;;;;;;;;;;;;;;;GAgBG;AACH,2CAFU,aAAa,CAMpB;6BA/I0B,4CAA4C;8BAE3C,wCAAwC"}
@@ -1,135 +1,146 @@
1
- import { f32, u32, vec3f } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../renderer/shader/type/WebGPUArray.js";
3
- import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
4
- import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
5
- import { ComputeShader } from "../../renderer/shader/ComputeShader.js";
6
- import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
- import {
8
- BVH_NODE_CHILD_2_WORD,
9
- BVH_NODE_STRIDE_WORDS
10
- } from "../../renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
11
- import { BVH2_NODE_STRUCT } from "../../renderer/shader/chunk/bvh/BVH2_NODE_STRUCT.js";
12
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../renderer/shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
13
- import {
14
- chunk_ray_query_blas_nearest
15
- } from "../../renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js";
16
- import {
17
- chunk_geometry_read_triangle_vertices
18
- } from "../../renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_vertices.js";
19
- import { RAY_STRUCT } from "../../renderer/shader/chunk/geometry/ray/RAY_STRUCT.js";
20
- import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
21
- import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../renderer/geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
22
- import {
23
- MESHLET_METADATA_STRUCT
24
- } from "../../renderer/geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
25
-
26
- export const BLAS_VISIBILITY_WORKGROUP_SIZE = 64;
27
-
28
- /**
29
- * @type {WebGPUStruct}
30
- */
31
- export const BLAS_VISIBILITY_SETTINGS_STRUCT = WebGPUStruct.from({
32
- origin: vec3f,
33
- leaf_count: u32,
34
- node_word_offset: u32,
35
- leaf_nodes_offset: u32,
36
- geometry_index: u32,
37
- tmax: f32,
38
- }, "BlasVisibilitySettings");
39
-
40
- const resources = new ShaderResourceSetDescriptor();
41
-
42
- // per-dispatch, 32 bytes, read-only: immediate data rather than a uniform buffer
43
- resources.setImmediate("settings", BLAS_VISIBILITY_SETTINGS_STRUCT);
44
- resources.createGroup()
45
- .addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), false)
46
- .addStorageBuffer("blas_lookup", WebGPUArray.from(u32), false)
47
- .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT), false)
48
- .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false)
49
- .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT), false)
50
- .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE, false)
51
- .addStorageBuffer("nodes", WebGPUArray.from(f32), false)
52
- // per leaf: the parametric t the traversal came back with, negative for a miss
53
- .addStorageBuffer("out_t", WebGPUArray.from(f32), true)
54
- // per leaf: the triangle the traversal returned, or 0xFFFFFFFF
55
- .addStorageBuffer("out_triangle", WebGPUArray.from(u32), true)
56
- // per leaf: the distance to the point the ray was aimed at, which the answer cannot exceed
57
- .addStorageBuffer("out_expected_t", WebGPUArray.from(f32), true);
58
-
59
- const body = CodeChunk.from(
60
- //language=WGSL
61
- `
62
- const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
63
- const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
64
-
65
- @compute @workgroup_size(${BLAS_VISIBILITY_WORKGROUP_SIZE}, 1, 1)
66
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
67
- let i = gid.x;
68
-
69
- if (i >= settings.leaf_count) {
70
- return;
71
- }
72
-
73
- let leaf_node = leaf_nodes[settings.leaf_nodes_offset + i];
74
-
75
- let node_word = settings.node_word_offset + leaf_node * NODE_STRIDE;
76
-
77
- let meshlet_triangle_id = bitcast<u32>(nodes[node_word + NODE_CHILD_2]);
78
-
79
- let triangle = geometry_read_triangle_vertices(
80
- geometries[settings.geometry_index],
81
- meshlet_triangle_id
82
- );
83
-
84
- // Aim at the triangle's own centroid, which is strictly inside it. The ray provably intersects
85
- // this triangle, so the traversal has to come back with *something* — this one, or something
86
- // occluding it. A miss is not a geometric possibility; it is the traversal failing to reach a
87
- // leaf whose box, by construction, the ray passes through.
88
- let centre = (triangle.a.position + triangle.b.position + triangle.c.position) / 3.0;
89
-
90
- var ray: ${RAY_STRUCT.wgsl_ref};
91
-
92
- ray.origin = settings.origin;
93
- ray.direction = normalize(centre - settings.origin);
94
- ray.tmax = settings.tmax;
95
-
96
- var stack: array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
97
-
98
- let hit = ray_query_blas_nearest(ray, settings.geometry_index, &stack, 0u);
99
-
100
- out_t[i] = hit.t;
101
- out_triangle[i] = select(0xFFFFFFFFu, hit.triangle, hit.t >= 0.0);
102
-
103
- // The ray was aimed at a point on this triangle, so the nearest surface along it is at most
104
- // this far. An answer beyond it is not an occlusion and not a miss — it is the traversal
105
- // walking past a surface it was pointed at, which is what a hole in the traced image is.
106
- out_expected_t[i] = length(centre - settings.origin);
107
- }
108
- `, [
109
- RAY_STRUCT.declaration_chunk,
110
- chunk_geometry_read_triangle_vertices,
111
- chunk_ray_query_blas_nearest,
112
- ]);
113
-
114
- /**
115
- * Ask the traversal, once per triangle, whether it can find that triangle.
116
- *
117
- * Every structural check on the tree has passed, which narrows the fault to the traversal itself —
118
- * and traversal is the one thing no readback of the tree can exercise. So this runs the real
119
- * `ray_query_blas_nearest`, the same function the path tracer calls, along a ray whose answer is
120
- * known in advance.
121
- *
122
- * The ray goes from the camera to a triangle's centroid. That point is inside the triangle, so the
123
- * ray intersects it, so the query must return a hit — this triangle if nothing is in front, some
124
- * other one if something is. Only a miss is impossible, and a miss is therefore a traversal that
125
- * failed to reach a leaf whose box it was inside.
126
- *
127
- * Which triangles miss, and where they are, is the whole diagnosis.
128
- *
129
- * @type {ComputeShader}
130
- */
131
- export const shader_blas_audit_visibility = ComputeShader.from({
132
- label: "BLAS/AuditVisibility",
133
- resources,
134
- body,
135
- });
1
+ import { f32, u32, vec3f } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../renderer/shader/type/WebGPUArray.js";
3
+ import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
4
+ import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../../renderer/shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { BVH8_INODE_STRUCT } from "../../renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
8
+ import { BVH8_TRAVERSAL_STACK_SIZE } from "../../renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
9
+ import {
10
+ chunk_ray_query_blas_nearest
11
+ } from "../../renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js";
12
+ import {
13
+ chunk_geometry_read_triangle_positions
14
+ } from "../../renderer/shader/chunk/geometry/format/chunk_geometry_read_triangle_positions.js";
15
+ import { RAY_STRUCT } from "../../renderer/shader/chunk/geometry/ray/RAY_STRUCT.js";
16
+ import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
17
+ import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../renderer/geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
18
+ import {
19
+ GEOMETRY_MESHLET_TRIANGLE_LIMIT
20
+ } from "../../renderer/geometry/meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
21
+ import {
22
+ MESHLET_METADATA_STRUCT
23
+ } from "../../renderer/geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
24
+
25
+ export const BLAS_VISIBILITY_WORKGROUP_SIZE = 64;
26
+
27
+ /**
28
+ * Triangle ids a meshlet can hold, used or not: the audit asks about every one of them, so that a
29
+ * thread's index says which triangle it is without a table. `(meshlet << 8) | triangle` is the id;
30
+ * a thread's index is `meshlet * BLAS_VISIBILITY_MESHLET_STRIDE + triangle`.
31
+ *
32
+ * @type {number}
33
+ */
34
+ export const BLAS_VISIBILITY_MESHLET_STRIDE = GEOMETRY_MESHLET_TRIANGLE_LIMIT;
35
+
36
+ /**
37
+ * @type {WebGPUStruct}
38
+ */
39
+ export const BLAS_VISIBILITY_SETTINGS_STRUCT = WebGPUStruct.from({
40
+ origin: vec3f,
41
+ meshlet_count: u32,
42
+ geometry_index: u32,
43
+ tmax: f32,
44
+ }, "BlasVisibilitySettings");
45
+
46
+ const resources = new ShaderResourceSetDescriptor();
47
+
48
+ // per-dispatch, 24 bytes, read-only: immediate data rather than a uniform buffer
49
+ resources.setImmediate("settings", BLAS_VISIBILITY_SETTINGS_STRUCT);
50
+ resources.createGroup()
51
+ .addStorageBuffer("blas_lookup", WebGPUArray.from(u32), false)
52
+ .addStorageBuffer("blas_data", WebGPUArray.from(BVH8_INODE_STRUCT), false)
53
+ .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false)
54
+ .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT), false)
55
+ .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE, false)
56
+ // per triangle id: the parametric t the traversal came back with, negative for a miss
57
+ .addStorageBuffer("out_t", WebGPUArray.from(f32), true)
58
+ // per triangle id: the triangle the traversal returned, or 0xFFFFFFFF
59
+ .addStorageBuffer("out_triangle", WebGPUArray.from(u32), true)
60
+ // per triangle id: the distance to the point the ray was aimed at, which the answer cannot exceed;
61
+ // negative for an id the meshlet does not hold, which no ray was sent for
62
+ .addStorageBuffer("out_expected_t", WebGPUArray.from(f32), true);
63
+
64
+ const body = CodeChunk.from(
65
+ //language=WGSL
66
+ `
67
+ const MESHLET_STRIDE = ${BLAS_VISIBILITY_MESHLET_STRIDE}u;
68
+
69
+ @compute @workgroup_size(${BLAS_VISIBILITY_WORKGROUP_SIZE}, 1, 1)
70
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
71
+ let i = gid.x;
72
+
73
+ let meshlet = i / MESHLET_STRIDE;
74
+ let triangle = i % MESHLET_STRIDE;
75
+
76
+ if (meshlet >= settings.meshlet_count) {
77
+ return;
78
+ }
79
+
80
+ let geometry = geometries[settings.geometry_index];
81
+
82
+ if (triangle >= meshlet_metadata[geometry.meshlets_address + meshlet].primitive_count) {
83
+ // not a triangle
84
+ out_expected_t[i] = -1.0;
85
+
86
+ return;
87
+ }
88
+
89
+ var a: vec3<f32>;
90
+ var b: vec3<f32>;
91
+ var c: vec3<f32>;
92
+
93
+ geometry_read_triangle_positions(&a, &b, &c, geometry, (meshlet << 8u) | triangle);
94
+
95
+ // Aim at the triangle's own centroid, which is strictly inside it. The ray provably intersects
96
+ // this triangle, so the traversal has to come back with *something* — this one, or something
97
+ // occluding it. A miss is not a geometric possibility; it is the traversal failing to reach a
98
+ // slot whose box, by construction, the ray passes through.
99
+ let centre = (a + b + c) / 3.0;
100
+
101
+ var ray: ${RAY_STRUCT.wgsl_ref};
102
+
103
+ ray.origin = settings.origin;
104
+ ray.direction = normalize(centre - settings.origin);
105
+ ray.tmax = settings.tmax;
106
+
107
+ var stack: array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>;
108
+
109
+ let hit = ray_query_blas_nearest(ray, settings.geometry_index, &stack, 0u);
110
+
111
+ out_t[i] = hit.t;
112
+ out_triangle[i] = select(0xFFFFFFFFu, hit.triangle, hit.t >= 0.0);
113
+
114
+ // The ray was aimed at a point on this triangle, so the nearest surface along it is at most
115
+ // this far. An answer beyond it is not an occlusion and not a miss — it is the traversal
116
+ // walking past a surface it was pointed at, which is what a hole in the traced image is.
117
+ out_expected_t[i] = length(centre - settings.origin);
118
+ }
119
+ `, [
120
+ RAY_STRUCT.declaration_chunk,
121
+ chunk_geometry_read_triangle_positions,
122
+ chunk_ray_query_blas_nearest,
123
+ ]);
124
+
125
+ /**
126
+ * Ask the traversal, once per triangle, whether it can find that triangle.
127
+ *
128
+ * Every structural check on the tree has passed, which narrows the fault to the traversal itself —
129
+ * and traversal is the one thing no readback of the tree can exercise. So this runs the real
130
+ * `ray_query_blas_nearest`, the same function the path tracer calls, along a ray whose answer is
131
+ * known in advance.
132
+ *
133
+ * The ray goes from the camera to a triangle's centroid. That point is inside the triangle, so the
134
+ * ray intersects it, so the query must return a hit — this triangle if nothing is in front, some
135
+ * other one if something is. Only a miss is impossible, and a miss is therefore a traversal that
136
+ * failed to reach a slot whose box it was inside.
137
+ *
138
+ * Which triangles miss, and where they are, is the whole diagnosis.
139
+ *
140
+ * @type {ComputeShader}
141
+ */
142
+ export const shader_blas_audit_visibility = ComputeShader.from({
143
+ label: "BLAS/AuditVisibility",
144
+ resources,
145
+ body,
146
+ });
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * The leaf audit, on a skinned clone: its tree as the frame's refit left it, against the deformed
3
- * triangles the intersector fetches for those leaves now.
3
+ * triangles the intersector fetches now.
4
4
  *
5
5
  * `verify_leaf_triangles` needs a target, and a clone's owner handle lives inside the skinning
6
- * context. Every copy of a geometry shares one shape, so the clone's target is its source's with
7
- * the clone's own node address substituted — and that address is what the published lookup holds
6
+ * context. A copy of a geometry has as many nodes as its source, so the clone's target is the
7
+ * source's count at the clone's own address — and that address is what the published lookup holds
8
8
  * for the clone's geometry row.
9
9
  *
10
- * The refit and this audit run a frame apart at most, so a leaf may be a little larger than its
11
- * triangle; a leaf that is *somewhere else* is a leaf the frame did not refit. The pattern of those
12
- * is the point: reported as runs of leaf ordinals and as the workgroups of 64 they fall in.
10
+ * The refit and this audit run a frame apart at most, so a slot may be a little larger than its
11
+ * triangles; a slot that is *somewhere else* is a node the frame did not refit. The pattern of those
12
+ * is the point: reported as runs of node indices and as the refit's workgroups they fall in.
13
13
  *
14
14
  * @param {object} options
15
15
  * @param {Renderer} options.renderer
@@ -1 +1 @@
1
- {"version":3,"file":"verify_clone_leaves.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_clone_leaves.js"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAN6B,QAAQ;IACX,KAAK;IACJ,MAAM,EAAtB,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,QAAQ,MAAM,CAAC,CA4D3B"}
1
+ {"version":3,"file":"verify_clone_leaves.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_clone_leaves.js"],"names":[],"mappings":"AAwDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAN6B,QAAQ;IACX,KAAK;IACJ,MAAM,EAAtB,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,QAAQ,MAAM,CAAC,CAyE3B"}