@woosh/meep-engine 3.68.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 (584) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  5. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  6. package/package.json +1 -1
  7. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  8. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  9. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  10. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  11. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  12. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  13. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  14. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  15. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  16. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  17. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  18. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  19. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  20. package/src/core/bvh8/bvh8_depth.js +39 -0
  21. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  22. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  23. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  24. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  25. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  27. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  28. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  29. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  30. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  32. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  33. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  34. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  35. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  36. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  37. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  38. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  39. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  40. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  41. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  42. package/src/engine/graphics3/EntityRowHold.js +128 -0
  43. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  46. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  49. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  50. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  51. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  52. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  53. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  54. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  55. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  56. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  58. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  59. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  60. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  61. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  62. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  63. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  64. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  65. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  66. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  67. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  68. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  69. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  70. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  71. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  72. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  73. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  74. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  75. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  76. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  77. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  78. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  79. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  80. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  81. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  82. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  83. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  84. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  85. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  86. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  87. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  88. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  89. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  90. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  91. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  92. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  93. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  94. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  95. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  96. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  98. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  99. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  100. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  101. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  102. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  103. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  104. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  105. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  106. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  107. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  108. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  109. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  110. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  111. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  112. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  113. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  114. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  115. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  116. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  117. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  118. package/src/shade/playground/bvh_repro/README.md +8 -6
  119. package/src/shade/playground/bvh_repro/index.html +125 -124
  120. package/src/shade/playground/bvh_repro/main.js +259 -254
  121. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  122. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  123. package/src/shade/playground/grass_surfaces/main.js +3 -2
  124. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  125. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  126. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  127. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  128. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  129. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  130. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  131. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  132. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  133. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  134. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  135. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  136. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  137. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  138. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  139. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  140. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  141. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  142. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  143. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  144. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  145. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  146. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  147. package/src/shade/playground/trails/index.html +50 -0
  148. package/src/shade/playground/trails/main.d.ts +2 -0
  149. package/src/shade/playground/trails/main.d.ts.map +1 -0
  150. package/src/shade/playground/trails/main.js +258 -0
  151. package/src/shade/playground/water_surface/main.js +6 -3
  152. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  153. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  154. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  155. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  156. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  157. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  158. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  159. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  160. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  161. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  162. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  163. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  164. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  165. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  166. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  167. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  168. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  169. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  170. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  171. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  172. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  173. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  174. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  175. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  176. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  177. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  178. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  179. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  180. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  181. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  182. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  183. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  184. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  185. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  186. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  187. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  188. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  189. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  190. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  191. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  192. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  193. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  194. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  195. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  196. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  197. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  198. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  199. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  200. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  201. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  202. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  203. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  204. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  205. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  206. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  207. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  208. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  209. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  210. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
  211. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  212. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  213. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  214. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  215. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  216. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  217. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  218. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  219. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  220. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  221. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  222. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  223. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  224. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  225. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  226. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  227. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +340 -282
  228. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  229. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  231. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  232. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  233. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  234. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  236. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  237. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  238. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  239. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  240. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  241. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  242. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  243. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  244. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  245. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  246. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  247. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  248. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  249. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  250. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  251. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  252. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  253. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  254. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  255. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  256. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  257. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  258. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  259. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  260. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  261. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  262. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  263. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  264. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  265. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  266. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  267. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  268. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  269. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  270. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  271. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  272. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  273. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  274. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  275. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  276. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  280. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  281. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  282. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  283. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  284. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  285. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  286. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  287. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  288. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  289. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  290. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  291. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  292. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  293. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  298. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  299. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  300. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  301. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  302. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  303. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  304. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  305. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  306. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  307. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  308. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  309. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  310. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  311. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  312. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  313. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  314. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  315. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  316. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  317. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  318. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  319. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  320. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  321. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  322. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  323. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  324. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  325. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  326. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  327. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  328. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  329. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  330. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  331. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  332. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  333. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  334. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  335. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  336. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  337. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  338. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  339. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  340. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  341. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  342. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  343. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  344. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  345. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  346. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  347. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  348. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  349. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  350. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  351. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  352. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  353. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  354. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  355. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  356. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  357. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  358. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  359. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  360. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  361. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  362. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  363. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  364. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  365. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  366. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  367. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  368. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  369. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  370. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  371. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  372. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  373. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  374. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  375. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  376. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  377. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  378. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  379. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  380. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  381. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  382. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  383. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  384. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  385. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  386. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  387. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  388. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  389. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  390. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  391. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  393. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  394. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  396. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  397. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  398. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  399. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  400. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  401. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  402. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  403. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  404. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  405. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  406. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  407. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  408. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  409. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  410. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  411. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  412. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  413. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  414. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  415. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  416. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  417. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  418. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  420. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  421. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  422. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  423. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  424. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  426. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  427. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  428. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  429. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  430. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  431. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  432. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  433. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  434. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  435. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  436. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  437. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  438. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  439. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  440. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  441. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  442. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  443. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  444. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  445. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  446. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  447. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  448. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  449. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  450. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  451. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  452. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  453. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  454. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  455. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  456. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  457. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  458. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  459. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  460. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  461. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  462. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  463. package/src/shade/renderer/trails/graph_trails.js +155 -0
  464. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  465. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  466. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  467. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  468. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  469. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  470. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  471. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  472. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  473. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  474. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  475. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  476. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  477. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  478. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  479. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  480. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  481. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  482. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  483. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  484. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  485. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  486. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  487. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  488. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  489. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  490. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  491. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  492. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  493. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  494. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  495. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  496. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  497. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  498. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  499. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  500. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  501. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  502. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  503. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  504. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  505. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  506. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  507. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  508. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  509. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  510. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  511. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  512. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  513. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  514. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  515. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  516. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  517. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  518. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  519. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  520. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  521. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  522. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  523. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  524. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  525. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  526. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  527. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  528. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  529. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  530. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  531. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  532. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  533. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  534. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  535. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  536. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  537. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  538. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  539. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  540. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  541. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  542. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  543. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  544. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  545. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  546. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  547. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  548. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  549. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  550. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  551. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  552. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  553. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  554. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  555. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  556. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  557. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  558. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  559. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  560. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  561. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  562. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  563. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  564. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  565. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  566. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  567. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  568. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  569. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  570. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  571. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  572. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  573. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  574. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  575. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  576. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  577. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  578. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  579. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  580. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  581. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  582. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  583. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  584. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -0,0 +1,464 @@
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { ComputeShader } from "../../shader/ComputeShader.js";
3
+ import { AABB3_STRUCT } from "../../shader/chunk/geometry/aabb3/AABB3_STRUCT.js";
4
+ import {
5
+ chunk_geometry_read_triangle_bounds
6
+ } from "../../shader/chunk/geometry/format/chunk_geometry_read_triangle_bounds.js";
7
+ import { F32_MAX_DEFINITION } from "../../shader/chunk/math/F32_MAX_DEFINITION.js";
8
+ import { BVH8_BLAS_MAX_DEPTH } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
9
+ import { chunk_bvh8_node_grid } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js";
10
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
11
+ import { atomic_u32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
12
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
13
+ import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
14
+ import { GEOMETRY_METADATA_STRUCT } from "../GEOMETRY_METADATA_STRUCT.js";
15
+ import { MESHLET_METADATA_STRUCT } from "../meshlet/encoding/MESHLET_METADATA_STRUCT.js";
16
+ import { BLAS8_REFIT_TARGET_STRUCT } from "./BLAS8_REFIT_TARGET_STRUCT.js";
17
+
18
+ /**
19
+ * Nodes per workgroup. A workgroup serves one tree and one aligned run of this many of its nodes,
20
+ * which is what the lookup's second word counts in.
21
+ *
22
+ * @type {number}
23
+ */
24
+ export const BLAS8_REFIT_BATCH_WORKGROUP_SIZE = 64;
25
+
26
+ /**
27
+ * `u32` words of spine a node takes: its box's six floats, 24 bits to a word, under a flag.
28
+ *
29
+ * @type {number}
30
+ */
31
+ export const BLAS8_REFIT_SPINE_STRIDE_WORDS = 8;
32
+
33
+ const resources = new ShaderResourceSetDescriptor();
34
+
35
+ // Workgroups already covered by earlier sub-dispatches of the same batch, for a batch larger than
36
+ // the device's per-dimension cap. Four bytes, per dispatch: immediate data.
37
+ resources.setImmediate("dispatch_offset", u32);
38
+
39
+ resources.createGroup()
40
+ // one row per tree in the batch
41
+ .addStorageBuffer("targets", WebGPUArray.from(BLAS8_REFIT_TARGET_STRUCT), false)
42
+ // `(target_index, node_base)` per workgroup, flat
43
+ .addStorageBuffer("lookup", WebGPUArray.from(u32), false)
44
+ // The node arena, flat. Of a node, this kernel reads words 4 to 7 — its child block, its triangle
45
+ // run and its metas — and writes the rest: its origin, exponents and quantized boxes. Nothing it
46
+ // writes does it read, of any node.
47
+ .addStorageBuffer("nodes", WebGPUArray.from(u32), true)
48
+ // every node's box as its own lane found it, for the lane of the node above; zero at the start of
49
+ // every batch, which reads "not here yet"
50
+ .addStorageBuffer("spine", WebGPUArray.from(atomic_u32), true)
51
+ .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT), false)
52
+ .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT), false)
53
+ .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE, false);
54
+
55
+ const body = CodeChunk.from(
56
+ //language=WGSL
57
+ `
58
+ const NODE_STRIDE = 20u;
59
+ const NODE_CHILD_BASE = 4u;
60
+ const NODE_TRIANGLE_BASE = 5u;
61
+ const NODE_METAS = 6u;
62
+ const NODE_BOXES = 8u;
63
+
64
+ const SPINE_STRIDE = ${BLAS8_REFIT_SPINE_STRIDE_WORDS}u;
65
+ const SPINE_HERE = 0x80000000u;
66
+ const SPINE_BITS = 0x00ffffffu;
67
+
68
+ // how many rounds a lane looks for its children's boxes before finding the missing ones out for itself;
69
+ // the prefix scan's count
70
+ const LOOKS = 4u;
71
+
72
+ // what a node's four words of topology say
73
+ struct Blas8RefitShape {
74
+ child_base: u32,
75
+ triangle_base: u32,
76
+ metas: vec2<u32>,
77
+ // a bit per slot that holds a child node
78
+ internal: u32,
79
+ }
80
+
81
+ struct Blas8RefitLook {
82
+ found: bool,
83
+ box: ${AABB3_STRUCT.wgsl_ref},
84
+ }
85
+
86
+ fn blas8_refit_shape(node_word: u32) -> Blas8RefitShape {
87
+ let metas = vec2<u32>(nodes[node_word + NODE_METAS], nodes[node_word + NODE_METAS + 1u]);
88
+
89
+ // a child node's meta has 24 or more in its low five bits: bits 3 and 4 both set
90
+ let first = metas.x & (metas.x >> 1u) & 0x08080808u;
91
+ let second = metas.y & (metas.y >> 1u) & 0x08080808u;
92
+
93
+ let internal =
94
+ ((first >> 3u) & 1u) | ((first >> 10u) & 2u) | ((first >> 17u) & 4u) | ((first >> 24u) & 8u)
95
+ | ((second << 1u) & 16u) | ((second >> 6u) & 32u) | ((second >> 13u) & 64u) | ((second >> 20u) & 128u);
96
+
97
+ return Blas8RefitShape(nodes[node_word + NODE_CHILD_BASE], nodes[node_word + NODE_TRIANGLE_BASE], metas, internal);
98
+ }
99
+
100
+ fn blas8_refit_slot_meta(shape: Blas8RefitShape, slot: u32) -> u32 {
101
+ return (select(shape.metas.y, shape.metas.x, slot < 4u) >> ((slot & 3u) * 8u)) & 0xffu;
102
+ }
103
+
104
+ fn blas8_refit_empty_box() -> ${AABB3_STRUCT.wgsl_ref} {
105
+ return ${AABB3_STRUCT.wgsl_ref}(vec3<f32>(F32_MAX), vec3<f32>(-F32_MAX));
106
+ }
107
+
108
+ // the box of the triangles a leaf slot names, as the vertices stand now
109
+ fn blas8_refit_slot_triangles(
110
+ geometry: ${GEOMETRY_METADATA_STRUCT.wgsl_ref},
111
+ triangle_base: u32,
112
+ slot_meta: u32,
113
+ ) -> ${AABB3_STRUCT.wgsl_ref} {
114
+ var box = blas8_refit_empty_box();
115
+
116
+ let first = triangle_base + (slot_meta & 31u);
117
+ let count = countOneBits(slot_meta >> 5u);
118
+
119
+ for (var i = 0u; i < count; i++) {
120
+ let triangle = geometry_read_triangle_bounds(geometry, first + i);
121
+
122
+ box.min = min(box.min, triangle.min);
123
+ box.max = max(box.max, triangle.max);
124
+ }
125
+
126
+ return box;
127
+ }
128
+
129
+ // A node's box goes into the spine as 192 bits, 24 to a word, each word under its own flag: a reader
130
+ // that finds all eight flags has the box, and one that does not has nothing, whatever order the
131
+ // stores reach it in.
132
+ fn blas8_refit_publish(spine_word: u32, box: ${AABB3_STRUCT.wgsl_ref}) {
133
+ let low = bitcast<vec3<u32>>(box.min);
134
+ let high = bitcast<vec3<u32>>(box.max);
135
+
136
+ atomicStore(&spine[spine_word], SPINE_HERE | (low.x & SPINE_BITS));
137
+ atomicStore(&spine[spine_word + 1u], SPINE_HERE | (low.x >> 24u) | ((low.y & 0xffffu) << 8u));
138
+ atomicStore(&spine[spine_word + 2u], SPINE_HERE | (low.y >> 16u) | ((low.z & 0xffu) << 16u));
139
+ atomicStore(&spine[spine_word + 3u], SPINE_HERE | (low.z >> 8u));
140
+ atomicStore(&spine[spine_word + 4u], SPINE_HERE | (high.x & SPINE_BITS));
141
+ atomicStore(&spine[spine_word + 5u], SPINE_HERE | (high.x >> 24u) | ((high.y & 0xffffu) << 8u));
142
+ atomicStore(&spine[spine_word + 6u], SPINE_HERE | (high.y >> 16u) | ((high.z & 0xffu) << 16u));
143
+ atomicStore(&spine[spine_word + 7u], SPINE_HERE | (high.z >> 8u));
144
+ }
145
+
146
+ fn blas8_refit_look(spine_word: u32) -> Blas8RefitLook {
147
+ var seen: Blas8RefitLook;
148
+ seen.found = false;
149
+
150
+ let w0 = atomicLoad(&spine[spine_word]);
151
+
152
+ if ((w0 & SPINE_HERE) == 0u) {
153
+ return seen;
154
+ }
155
+
156
+ let w1 = atomicLoad(&spine[spine_word + 1u]);
157
+ let w2 = atomicLoad(&spine[spine_word + 2u]);
158
+ let w3 = atomicLoad(&spine[spine_word + 3u]);
159
+ let w4 = atomicLoad(&spine[spine_word + 4u]);
160
+ let w5 = atomicLoad(&spine[spine_word + 5u]);
161
+ let w6 = atomicLoad(&spine[spine_word + 6u]);
162
+ let w7 = atomicLoad(&spine[spine_word + 7u]);
163
+
164
+ if ((w1 & w2 & w3 & w4 & w5 & w6 & w7 & SPINE_HERE) == 0u) {
165
+ return seen;
166
+ }
167
+
168
+ seen.found = true;
169
+
170
+ seen.box.min = bitcast<vec3<f32>>(vec3<u32>(
171
+ (w0 & SPINE_BITS) | ((w1 & 0xffu) << 24u),
172
+ ((w1 & SPINE_BITS) >> 8u) | ((w2 & 0xffffu) << 16u),
173
+ ((w2 & SPINE_BITS) >> 16u) | ((w3 & SPINE_BITS) << 8u),
174
+ ));
175
+
176
+ seen.box.max = bitcast<vec3<f32>>(vec3<u32>(
177
+ (w4 & SPINE_BITS) | ((w5 & 0xffu) << 24u),
178
+ ((w5 & SPINE_BITS) >> 8u) | ((w6 & 0xffffu) << 16u),
179
+ ((w6 & SPINE_BITS) >> 16u) | ((w7 & SPINE_BITS) << 8u),
180
+ ));
181
+
182
+ return seen;
183
+ }
184
+
185
+ // The box of everything under a node, found without waiting for anyone: from the triangles, except
186
+ // where a node on the way down has published, whose box is then taken as it stands.
187
+ fn blas8_refit_subtree_box(
188
+ tree: ${BLAS8_REFIT_TARGET_STRUCT.wgsl_ref},
189
+ geometry: ${GEOMETRY_METADATA_STRUCT.wgsl_ref},
190
+ root: u32,
191
+ ) -> ${AABB3_STRUCT.wgsl_ref} {
192
+ var box = blas8_refit_empty_box();
193
+
194
+ // a node, and its child slots still to take; one entry a level
195
+ var stack: array<vec2u, ${BVH8_BLAS_MAX_DEPTH}>;
196
+ var pointer = 0u;
197
+
198
+ var node = root;
199
+ var pending = 0u;
200
+ var arriving = true;
201
+
202
+ loop {
203
+ let shape = blas8_refit_shape((tree.node_offset + node) * NODE_STRIDE);
204
+
205
+ if (arriving) {
206
+ for (var slot = 0u; slot < 8u; slot++) {
207
+ let slot_meta = blas8_refit_slot_meta(shape, slot);
208
+
209
+ if (slot_meta == 0u || (shape.internal & (1u << slot)) != 0u) {
210
+ continue;
211
+ }
212
+
213
+ let triangles = blas8_refit_slot_triangles(geometry, shape.triangle_base, slot_meta);
214
+
215
+ box.min = min(box.min, triangles.min);
216
+ box.max = max(box.max, triangles.max);
217
+ }
218
+
219
+ pending = shape.internal;
220
+ }
221
+
222
+ if (pending == 0u) {
223
+ if (pointer == 0u) {
224
+ break;
225
+ }
226
+
227
+ pointer--;
228
+
229
+ node = stack[pointer].x;
230
+ pending = stack[pointer].y;
231
+ arriving = false;
232
+
233
+ continue;
234
+ }
235
+
236
+ let slot = countTrailingZeros(pending);
237
+
238
+ pending &= pending - 1u;
239
+
240
+ let child = shape.child_base + countOneBits(shape.internal & ((1u << slot) - 1u));
241
+
242
+ let seen = blas8_refit_look((tree.spine_offset + child) * SPINE_STRIDE);
243
+
244
+ if (seen.found) {
245
+ box.min = min(box.min, seen.box.min);
246
+ box.max = max(box.max, seen.box.max);
247
+
248
+ arriving = false;
249
+
250
+ continue;
251
+ }
252
+
253
+ if (pending != 0u && pointer < ${BVH8_BLAS_MAX_DEPTH}u) {
254
+ stack[pointer] = vec2u(node, pending);
255
+ pointer++;
256
+ }
257
+
258
+ node = child;
259
+ arriving = true;
260
+ }
261
+
262
+ return box;
263
+ }
264
+
265
+ @compute @workgroup_size(${BLAS8_REFIT_BATCH_WORKGROUP_SIZE}, 1, 1)
266
+ fn main(
267
+ @builtin(workgroup_id) wg: vec3<u32>,
268
+ @builtin(local_invocation_id) lid: vec3<u32>,
269
+ ) {
270
+ // Which tree, and which run of its nodes: one lookup pair per workgroup.
271
+ let pair = (wg.x + dispatch_offset) * 2u;
272
+
273
+ // ("target" is a reserved word in WGSL)
274
+ let tree = targets[lookup[pair]];
275
+
276
+ let ordinal = lookup[pair + 1u] + lid.x;
277
+
278
+ if (ordinal >= tree.node_count) {
279
+ // the tail of a tree's last run; the next workgroup is another tree's
280
+ return;
281
+ }
282
+
283
+ // Last node first. A child's index is above its parent's, so the order workgroups are started in
284
+ // is the order the nodes depend on each other in, and a lane mostly finds what it looks for.
285
+ let node = tree.node_count - 1u - ordinal;
286
+
287
+ let node_word = (tree.node_offset + node) * NODE_STRIDE;
288
+
289
+ let geometry = geometries[tree.geometry_index];
290
+
291
+ let shape = blas8_refit_shape(node_word);
292
+
293
+ var slot_low: array<vec3<f32>, 8>;
294
+ var slot_high: array<vec3<f32>, 8>;
295
+
296
+ var box = blas8_refit_empty_box();
297
+
298
+ // The slots of triangles first. They are this lane's own work and take it a while, and for that
299
+ // while the lanes of the nodes below are at theirs: by the time this one turns to its child
300
+ // nodes, a child with only triangles under it has published.
301
+ for (var slot = 0u; slot < 8u; slot++) {
302
+ let slot_meta = blas8_refit_slot_meta(shape, slot);
303
+
304
+ if (slot_meta == 0u || (shape.internal & (1u << slot)) != 0u) {
305
+ continue;
306
+ }
307
+
308
+ let under = blas8_refit_slot_triangles(geometry, shape.triangle_base, slot_meta);
309
+
310
+ slot_low[slot] = under.min;
311
+ slot_high[slot] = under.max;
312
+
313
+ box.min = min(box.min, under.min);
314
+ box.max = max(box.max, under.max);
315
+ }
316
+
317
+ let spine_word = (tree.spine_offset + node) * SPINE_STRIDE;
318
+
319
+ // A node with nothing but triangles under it has its box now, and says so now: before any lane
320
+ // of this workgroup turns to its children, which may be this node.
321
+ if (shape.internal == 0u) {
322
+ blas8_refit_publish(spine_word, box);
323
+ }
324
+
325
+ // The child nodes, looked for in rounds: every one still missing, once a round. A node whose
326
+ // children have all turned up publishes there and then, inside the round, which is what lets the
327
+ // node above it find it in the next.
328
+ var missing = shape.internal;
329
+
330
+ for (var round = 0u; round < LOOKS && missing != 0u; round++) {
331
+ var unseen = missing;
332
+
333
+ while (unseen != 0u) {
334
+ let slot = countTrailingZeros(unseen);
335
+
336
+ unseen &= unseen - 1u;
337
+
338
+ let child = shape.child_base + countOneBits(shape.internal & ((1u << slot) - 1u));
339
+
340
+ let seen = blas8_refit_look((tree.spine_offset + child) * SPINE_STRIDE);
341
+
342
+ if (!seen.found) {
343
+ continue;
344
+ }
345
+
346
+ missing &= ~(1u << slot);
347
+
348
+ slot_low[slot] = seen.box.min;
349
+ slot_high[slot] = seen.box.max;
350
+
351
+ box.min = min(box.min, seen.box.min);
352
+ box.max = max(box.max, seen.box.max);
353
+ }
354
+
355
+ if (missing == 0u) {
356
+ blas8_refit_publish(spine_word, box);
357
+ }
358
+ }
359
+
360
+ if (missing != 0u) {
361
+ // not here, and not waited for
362
+ while (missing != 0u) {
363
+ let slot = countTrailingZeros(missing);
364
+
365
+ missing &= missing - 1u;
366
+
367
+ let child = shape.child_base + countOneBits(shape.internal & ((1u << slot) - 1u));
368
+
369
+ let under = blas8_refit_subtree_box(tree, geometry, child);
370
+
371
+ slot_low[slot] = under.min;
372
+ slot_high[slot] = under.max;
373
+
374
+ box.min = min(box.min, under.min);
375
+ box.max = max(box.max, under.max);
376
+ }
377
+
378
+ blas8_refit_publish(spine_word, box);
379
+ }
380
+
381
+ // this node, on the grid of its own box, and each slot's box in bytes on it
382
+ let grid = bvh8_node_grid(box.min, box.max);
383
+
384
+ var boxes: array<u32, 12>;
385
+
386
+ for (var slot = 0u; slot < 8u; slot++) {
387
+ if (blas8_refit_slot_meta(shape, slot) == 0u) {
388
+ continue;
389
+ }
390
+
391
+ let q_low = bvh8_node_grid_low(grid, slot_low[slot]);
392
+ let q_high = bvh8_node_grid_high(grid, slot_high[slot]);
393
+
394
+ let word = slot >> 2u;
395
+ let shift = (slot & 3u) * 8u;
396
+
397
+ // per axis: two words of low bytes, then two of high
398
+ boxes[word] |= q_low.x << shift;
399
+ boxes[2u + word] |= q_high.x << shift;
400
+ boxes[4u + word] |= q_low.y << shift;
401
+ boxes[6u + word] |= q_high.y << shift;
402
+ boxes[8u + word] |= q_low.z << shift;
403
+ boxes[10u + word] |= q_high.z << shift;
404
+ }
405
+
406
+ nodes[node_word] = bitcast<u32>(box.min.x);
407
+ nodes[node_word + 1u] = bitcast<u32>(box.min.y);
408
+ nodes[node_word + 2u] = bitcast<u32>(box.min.z);
409
+ nodes[node_word + 3u] = grid.exponent.x | (grid.exponent.y << 8u) | (grid.exponent.z << 16u) | (shape.internal << 24u);
410
+
411
+ for (var i = 0u; i < 12u; i++) {
412
+ nodes[node_word + NODE_BOXES + i] = boxes[i];
413
+ }
414
+ }
415
+ `, [
416
+ F32_MAX_DEFINITION,
417
+ AABB3_STRUCT.declaration_chunk,
418
+ GEOMETRY_METADATA_STRUCT.declaration_chunk,
419
+ BLAS8_REFIT_TARGET_STRUCT.declaration_chunk,
420
+ chunk_geometry_read_triangle_bounds,
421
+ chunk_bvh8_node_grid,
422
+ ]);
423
+
424
+ /**
425
+ * Refit every BVH8 in a batch, from one dispatch.
426
+ *
427
+ * One lane per node, across every tree the batch lists. A node holds its slots' boxes on a grid of
428
+ * its own box, so a lane has two things to find: the box of everything under each of its slots, and
429
+ * from their union its own. A slot of triangles is read off the vertex buffer as it stands *now*. A
430
+ * slot that is a child node depends on that child's lane — as a tile of a prefix scan depends on the
431
+ * tiles before it, and this takes the scan's shape (`graph_prefix_scan_csdldf`):
432
+ *
433
+ * - **Published under a flag.** A lane leaves its node's box in the `spine`, box and flag in the same
434
+ * atomic words, as soon as it has it. A reader has the whole box or none of it.
435
+ * - **Looked for, not waited for.** A lane looks for its children's boxes a fixed number of rounds,
436
+ * and publishes the moment the last turns up. What has not turned up by then the lane finds out
437
+ * for itself, from the triangles under that child, taking as it stands the box of any node on the
438
+ * way down that has published. Nothing spins on another lane,
439
+ * and nothing depends on when a store reaches whom.
440
+ * - **Never in place.** Everything a lane reads to find a box out — the vertices, and the four words
441
+ * of a node that say what it holds — no lane writes. Everything a lane writes, no lane reads.
442
+ * - **In the order of the dependency.** Lanes take a tree's nodes last to first, and a child's index
443
+ * is above its parent's, so a device that starts workgroups in order runs the children first. Within
444
+ * a lane the order is the same: its own triangles, its box published if that is all there is to it,
445
+ * and only then a look at its children. A device that keeps neither order is slower and no less
446
+ * right.
447
+ *
448
+ * So there are no counters, no parents, no seeding pass and nothing to repair: a zeroed spine, then
449
+ * this, whatever the trees' depth.
450
+ *
451
+ * Boxes are rounded outward at every step that rounds, so a refitted node holds what is under it
452
+ * exactly as a built one does; it is not the same node the builder would write, whose arithmetic is
453
+ * exact where this is `f32`.
454
+ *
455
+ * For a skinned mesh this runs against the per-instance clone, after the skinning pass has deformed
456
+ * its vertex region; `geometry_index` on the row is the clone's.
457
+ *
458
+ * @type {ComputeShader}
459
+ */
460
+ export const shader_blas8_refit_batch = ComputeShader.from({
461
+ label: "BLAS8/RefitBatch",
462
+ resources,
463
+ body,
464
+ });
@@ -69,6 +69,18 @@ export class MeshletBatch {
69
69
  attribute_index: Uint32Array;
70
70
  attribute_position: Float32Array;
71
71
  };
72
+ /**
73
+ * Re-order the triangles of one meshlet: triangle `i` becomes the triangle that was at `order[i]`.
74
+ *
75
+ * Only the meshlet's index section is rewritten, in place. Vertices, attributes, bounds and the
76
+ * meshlet's address are untouched, so the meshlet draws exactly what it drew before; what changes is
77
+ * which triangle a `(meshlet, triangle)` id names. Anything that recorded such an id beforehand —
78
+ * a BLAS leaf, most of all — names a different triangle afterwards.
79
+ *
80
+ * @param {number} meshlet_id
81
+ * @param {Uint8Array|number[]} order a permutation of `0 .. primitive_count - 1`
82
+ */
83
+ reorder_triangles(meshlet_id: number, order: Uint8Array | number[]): void;
72
84
  build_bounds(): void;
73
85
  /**
74
86
  *
@@ -1 +1 @@
1
- {"version":3,"file":"MeshletBatch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/meshlet/MeshletBatch.js"],"names":[],"mappings":"AA4DA;;GAEG;AACH;IAiBI;;;OAGG;IACH,oCAGC;IAXD,+BAEC;IA6BD;;;OAGG;IACH,wCAGC;IAfD;;;OAGG;IACH,mCAEC;IAuBD;;;OAGG;IACH,yBAEC;IAdD;;;OAGG;IACH,oBAEC;IAUD;;;OAGG;IACH,8BAEC;IAED;;;OAGG;IACH,QAFa,MAAM,CASlB;IAED;;;OAGG;IACH,cAFW,YAAY,WAQtB;IAED;;;;OAIG;IACH,YAFa,MAAM,CAiHlB;IAED;;;OAGG;IACH,iBAEC;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACL,EAAE,CAeb;IAED;;;OAGG;IACH,yBAFW,MAAM;;;;MAgChB;IAiMD,qBA+BC;IAED;;;OAGG;IACH,gBAFW,QAAQ,QASlB;IAIL;;;;OAIG;IACH,yBAFU,OAAO,CAEoB;;CAPpC;uBA7iBY,OAAO,gBAAgB,EAAE,QAAQ"}
1
+ {"version":3,"file":"MeshletBatch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/meshlet/MeshletBatch.js"],"names":[],"mappings":"AA4DA;;GAEG;AACH;IAiBI;;;OAGG;IACH,oCAGC;IAXD,+BAEC;IA6BD;;;OAGG;IACH,wCAGC;IAfD;;;OAGG;IACH,mCAEC;IAuBD;;;OAGG;IACH,yBAEC;IAdD;;;OAGG;IACH,oBAEC;IAUD;;;OAGG;IACH,8BAEC;IAED;;;OAGG;IACH,QAFa,MAAM,CASlB;IAED;;;OAGG;IACH,cAFW,YAAY,WAQtB;IAED;;;;OAIG;IACH,YAFa,MAAM,CAiHlB;IAED;;;OAGG;IACH,iBAEC;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACL,EAAE,CAeb;IAED;;;OAGG;IACH,yBAFW,MAAM;;;;MAgChB;IAED;;;;;;;;;;OAUG;IACH,8BAHW,MAAM,SACN,UAAU,GAAC,MAAM,EAAE,QA0B7B;IAiMD,qBA+BC;IAED;;;OAGG;IACH,gBAFW,QAAQ,QASlB;IAIL;;;;OAIG;IACH,yBAFU,OAAO,CAEoB;;CAPpC;uBAllBY,OAAO,gBAAgB,EAAE,QAAQ"}
@@ -349,6 +349,43 @@ export class MeshletBatch {
349
349
  }
350
350
  }
351
351
 
352
+ /**
353
+ * Re-order the triangles of one meshlet: triangle `i` becomes the triangle that was at `order[i]`.
354
+ *
355
+ * Only the meshlet's index section is rewritten, in place. Vertices, attributes, bounds and the
356
+ * meshlet's address are untouched, so the meshlet draws exactly what it drew before; what changes is
357
+ * which triangle a `(meshlet, triangle)` id names. Anything that recorded such an id beforehand —
358
+ * a BLAS leaf, most of all — names a different triangle afterwards.
359
+ *
360
+ * @param {number} meshlet_id
361
+ * @param {Uint8Array|number[]} order a permutation of `0 .. primitive_count - 1`
362
+ */
363
+ reorder_triangles(meshlet_id, order) {
364
+ assert.isNonNegativeInteger(meshlet_id, 'meshlet_id');
365
+ assert.lessThan(meshlet_id, this.#count, 'index overflow');
366
+
367
+ const header = this.read_header(meshlet_id);
368
+
369
+ const primitive_count = header.primitive_count;
370
+
371
+ assert.greaterThanOrEqual(order.length, primitive_count, 'order is too short');
372
+
373
+ const bytes = new Uint8Array(this.#data, header.address << 2, primitive_count * 3);
374
+
375
+ const original = bytes.slice();
376
+
377
+ for (let i = 0; i < primitive_count; i++) {
378
+ const source = order[i] * 3;
379
+ const target = i * 3;
380
+
381
+ assert.lessThan(order[i], primitive_count, 'order names a triangle the meshlet does not have');
382
+
383
+ bytes[target] = original[source];
384
+ bytes[target + 1] = original[source + 1];
385
+ bytes[target + 2] = original[source + 2];
386
+ }
387
+ }
388
+
352
389
  /**
353
390
  *
354
391
  * @param {Geometry} geometry
@@ -1 +1 @@
1
- {"version":3,"file":"shader_mesh_sdf_classify.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js"],"names":[],"mappings":"AAyCA;;;;;GAKG;AACH,mDAFW,OAAO,2DAA2D,EAAE,6BAA6B,QAS3G;AA/BD;;GAEG;AACH,yCAFU,YAAY,CAeQ;AA6B9B;;;;;;;;;;;;;;;GAeG;AACH,uCAFU,aAAa,CAsDpB;6BA/H0B,sCAAsC;8BAJrC,kCAAkC"}
1
+ {"version":3,"file":"shader_mesh_sdf_classify.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js"],"names":[],"mappings":"AAyCA;;;;;GAKG;AACH,mDAFW,OAAO,2DAA2D,EAAE,6BAA6B,QAS3G;AA/BD;;GAEG;AACH,yCAFU,YAAY,CAeQ;AA6B9B;;;;;;;;;;;;;;;GAeG;AACH,uCAFU,aAAa,CAsDpB;6BAjI0B,sCAAsC;8BAJrC,kCAAkC"}
@@ -1,6 +1,4 @@
1
1
  import { UINT32_MAX } from "../../../../../core/binary/UINT32_MAX.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
2
  import { chunk_point_query_blas_nearest } from "../../../shader/chunk/sdf/chunk_point_query_blas_nearest.js";
5
3
  import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
4
  import { ComputeShader } from "../../../shader/ComputeShader.js";
@@ -20,6 +18,8 @@ import {
20
18
  MESH_SDF_RANGES_RESOURCE
21
19
  } from "./chunk_mesh_sdf_bake.js";
22
20
  import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "./MESH_SDF_BAKE.js";
21
+ import { BVH8_INODE_STRUCT } from "../../../shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
22
+ import { BVH8_TRAVERSAL_STACK_SIZE } from "../../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
23
23
 
24
24
  /**
25
25
  * @type {WebGPUStruct}
@@ -48,7 +48,7 @@ export const MESH_SDF_CLASSIFY_SETTINGS = WebGPUStruct.from({
48
48
  export function mesh_sdf_add_blas_resources(group) {
49
49
  group
50
50
  .addStorageBuffer("blas_lookup", WebGPUArray.u32)
51
- .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT))
51
+ .addStorageBuffer("blas_data", WebGPUArray.from(BVH8_INODE_STRUCT))
52
52
  .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
53
53
  .add(MESHLET_METADATA_RESOURCE)
54
54
  .add(GEOMETRY_ATTRIBUTE_DATA_RESOURCE);
@@ -113,7 +113,7 @@ fn main(
113
113
  let centre = mesh_sdf_brick_corner(header, brick) + vec3<f32>(0.5 * f32(MESH_SDF_BRICK_VOXELS) * voxel);
114
114
  let reach = (MESH_SDF_BAND_VOXELS + MESH_SDF_BRICK_HALF_DIAGONAL) * voxel;
115
115
 
116
- var stack: array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
116
+ var stack: array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>;
117
117
 
118
118
  let nearest = point_query_blas_nearest(centre, reach, geometry, &stack, 0u);
119
119
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_mesh_sdf_evaluate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js"],"names":[],"mappings":"AAcA;;GAEG;AACH,yCAFU,YAAY,CAWQ;AAe9B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,uCAFU,aAAa,CAoFpB;6BA3I0B,sCAAsC;8BAJrC,kCAAkC"}
1
+ {"version":3,"file":"shader_mesh_sdf_evaluate.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js"],"names":[],"mappings":"AAcA;;GAEG;AACH,yCAFU,YAAY,CAWQ;AAe9B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,uCAFU,aAAa,CAoFpB;6BA5I0B,sCAAsC;8BAJrC,kCAAkC"}
@@ -1,4 +1,3 @@
1
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
2
1
  import { SURFACE_POINT_3D } from "../../../shader/chunk/sdf/SURFACE_POINT_3D.js";
3
2
  import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
4
3
  import { ComputeShader } from "../../../shader/ComputeShader.js";
@@ -11,6 +10,7 @@ import { MESH_SDF_HEADERS_RESOURCE } from "../MESH_SDF_RESOURCES.js";
11
10
  import { chunk_mesh_sdf_bake, chunk_mesh_sdf_bake_settle, MESH_SDF_ARENA_RESOURCE } from "./chunk_mesh_sdf_bake.js";
12
11
  import { MESH_SDF_BAKE_WORKGROUP_SIZE } from "./MESH_SDF_BAKE.js";
13
12
  import { mesh_sdf_add_blas_resources } from "./shader_mesh_sdf_classify.js";
13
+ import { BVH8_TRAVERSAL_STACK_SIZE } from "../../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
14
14
 
15
15
  /**
16
16
  * @type {WebGPUStruct}
@@ -93,7 +93,7 @@ fn main(
93
93
  let texel = (workgroup_id.x % MESH_SDF_GROUPS_PER_BRICK) * MESH_SDF_BAKE_WORKGROUP_SIZE + lane;
94
94
  let point = mesh_sdf_brick_corner(header, brick) + vec3<f32>(vec3<u32>(texel % t, (texel / t) % t, texel / (t * t))) * voxel;
95
95
 
96
- var stack: array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>;
96
+ var stack: array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>;
97
97
  var contact: ${SURFACE_POINT_3D.wgsl_ref};
98
98
 
99
99
  let band = MESH_SDF_BAND_VOXELS * voxel;
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wCAFU,SAAS,CAgHjB;0BAjJwB,oCAAoC"}
1
+ {"version":3,"file":"chunk_blas_query_band_sdf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,kCAFU,MAAM,CAEqE;AAErF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wCAFU,SAAS,CAgHjB;0BAlJwB,oCAAoC"}
@@ -1,5 +1,4 @@
1
1
  import { UINT32_MAX } from "../../../../core/binary/UINT32_MAX.js";
2
- import { BVH_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/BVH_TRAVERSAL_STACK_SIZE.js";
3
2
  import {
4
3
  chunk_geometry_read_triangle_vertices
5
4
  } from "../../shader/chunk/geometry/format/chunk_geometry_read_triangle_vertices.js";
@@ -13,6 +12,7 @@ import { PI_DECLARATION } from "../../shader/chunk/math/PI_DECLARATION.js";
13
12
  import { chunk_point_query_blas_nearest } from "../../shader/chunk/sdf/chunk_point_query_blas_nearest.js";
14
13
  import { SURFACE_POINT_3D } from "../../shader/chunk/sdf/SURFACE_POINT_3D.js";
15
14
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
15
+ import { BVH8_TRAVERSAL_STACK_SIZE } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
16
16
 
17
17
  /**
18
18
  * Strata along a side of each of the vote's two hemispheres, as UE 5.4 has them: 7 × 7 directions a
@@ -101,7 +101,7 @@ fn blas_query_band_sdf(
101
101
  band: f32,
102
102
  two_sided: bool,
103
103
  contact: ptr<function, ${SURFACE_POINT_3D.wgsl_ref}>,
104
- traversal_stack: ptr<function, array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>>,
104
+ traversal_stack: ptr<function, array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>>,
105
105
  stack_top: u32
106
106
  ) -> f32 {
107
107
  *contact = point_query_blas_nearest(point, band, geometry_index, traversal_stack, stack_top);
@@ -1 +1 @@
1
- {"version":3,"file":"shader_sdf_visualize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/shader_sdf_visualize.js"],"names":[],"mappings":"AAqKA;;;;;;;;;;;GAWG;AACH;IAT+B,KAAK;IACD,IAAI;IACZ,WAAW,EAA3B,MAAM;IACU,SAAS,EAAzB,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACU,sBAAsB,EAAtC,MAAM;IAEJ,MAAM,CAsGlB;AA3HD,+CASG;4BAvIyB,6BAA6B"}
1
+ {"version":3,"file":"shader_sdf_visualize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/sdf/shader_sdf_visualize.js"],"names":[],"mappings":"AAqKA;;;;;;;;;;;GAWG;AACH;IAT+B,KAAK;IACD,IAAI;IACZ,WAAW,EAA3B,MAAM;IACU,SAAS,EAAzB,MAAM;IACU,gBAAgB,EAAhC,MAAM;IACU,sBAAsB,EAAtC,MAAM;IAEJ,MAAM,CAsGlB;AA3HD,+CASG;4BAxIyB,6BAA6B"}
@@ -11,8 +11,7 @@ import {
11
11
  } from "./MESH_SDF_RESOURCES.js";
12
12
  import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
13
13
  import { DEPTH_BACKGROUND_VALUE } from "../../depth/DEPTH_BACKGROUND_VALUE.js";
14
- import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
15
- import { BVH_STRUCT } from "../../shader/chunk/bvh/BVH_STRUCT.js";
14
+ import { BVH8_TREE_TYPE } from "../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
16
15
  import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
17
16
  import { chunk_hash_u32_to_v4f32 } from "../../shader/chunk/color/chunk_hash_u32_to_v4f32.js";
18
17
  import {
@@ -34,6 +33,7 @@ import { chunk_ray_query_sdf_raycast } from "../../shadow/sdf/chunk_ray_query_sd
34
33
  import { SDF_DRAW_SETTINGS_STRUCT } from "../../shadow/sdf/SDF_DRAW_SETTINGS_STRUCT.js";
35
34
  import { GEOMETRY_METADATA_STRUCT } from "../GEOMETRY_METADATA_STRUCT.js";
36
35
  import { dynamic_chunk_sdf_construct_normal } from "./dynamic_chunk_sdf_construct_normal.js";
36
+ import { BVH8_INODE_STRUCT } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
37
37
 
38
38
  const resources = new ShaderResourceSetDescriptor();
39
39
 
@@ -53,12 +53,12 @@ resources.createGroup()
53
53
  resources.createGroup()
54
54
  .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
55
55
  .addStorageBuffer("scene_database", WebGPUArray.from(u32))
56
- .addStorageBuffer("tlas", BVH_STRUCT);
56
+ .addStorageBuffer("tlas", BVH8_TREE_TYPE);
57
57
 
58
58
  // debug
59
59
  resources.createGroup()
60
60
  .addStorageBuffer("blas_lookup", WebGPUArray.u32)
61
- .addStorageBuffer("blas_data", WebGPUArray.from(BVH2_NODE_STRUCT))
61
+ .addStorageBuffer("blas_data", WebGPUArray.from(BVH8_INODE_STRUCT))
62
62
 
63
63
  resources.createGroup()
64
64
  .addUniform("camera", CAMERA_UNIFORM_STRUCT);