@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
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * @typedef {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation} Allocation
3
+ * @typedef {import("../MeshletGeometry.js").MeshletGeometry} MeshletGeometry
3
4
  */
4
5
 
5
6
  export class GPUGeometryMeshletsBVH {
@@ -31,12 +32,11 @@ export class GPUGeometryMeshletsBVH {
31
32
  allocation = null;
32
33
 
33
34
  /**
34
- * The shape of this tree — parents and leaf positions — shared with every other copy of the same
35
- * geometry, because a copy differs only in where its bounds are.
35
+ * The geometry whose tree this one starts as a copy of.
36
36
  *
37
- * @type {object}
37
+ * @type {MeshletGeometry}
38
38
  */
39
- topology;
39
+ source;
40
40
 
41
41
  /**
42
42
  * Whether {@link address} means anything yet. A record is registered before its nodes are
@@ -49,9 +49,7 @@ export class GPUGeometryMeshletsBVH {
49
49
 
50
50
  /**
51
51
  * Bytes of {@link bvh} that {@link GPUGeometryBVHManager#update} actually copied into the arena
52
- * at {@link address}. `get_refit_target` holds it against the shape's node count: a record
53
- * registered before its geometry had a tree is uploaded as nothing, and a shape derived later,
54
- * from the bytes that exist by then, must not be answered for at that empty region.
52
+ * at {@link address}: the region a refit of this tree covers.
55
53
  *
56
54
  * @type {number}
57
55
  */
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Build a BVH8 over a meshlet batch that addresses the batch's own triangles, with no index table
3
+ * between the tree and the geometry.
4
+ *
5
+ * A BVH8 node names its triangles as one run: `base_index_triangle`, plus an offset of at most 23.
6
+ * A tree built over a mesh therefore wants the triangles in the tree's order, which is usually paid
7
+ * for with a second, re-ordered index buffer ({@link BVH8#primitives}). A meshlet already owns a
8
+ * private index list of at most {@link GEOMETRY_MESHLET_TRIANGLE_LIMIT} triangles whose order nothing
9
+ * else depends on, so the order is imposed there instead:
10
+ *
11
+ * - the tree is built so that every meshlet is one subtree, and every node at or below a meshlet's root
12
+ * holds triangles of that meshlet alone ({@link meshlet_batch_to_clustered_bvh},
13
+ * {@link BVH8Converter#cluster_roots});
14
+ * - each meshlet's triangles are then re-ordered into the order its nodes visit them
15
+ * ({@link MeshletBatch#reorder_triangles}).
16
+ *
17
+ * `base_index_triangle` comes out as `(meshlet_index << 8) | triangle_index`, the id every ray query
18
+ * in the engine already resolves through `geometry_read_triangle_vertices`. A run never crosses a
19
+ * meshlet, so adding a slot's offset to it stays inside the low byte and the sum is again such an id.
20
+ * Nodes above the meshlet roots hold no triangles.
21
+ *
22
+ * Throws for a batch whose tree comes out deeper than {@link BVH8_BLAS_MAX_DEPTH}: the traversal's stack
23
+ * could not walk it. By then the triangles have been re-ordered and `bvh8` holds the refused tree.
24
+ *
25
+ * **This re-orders the triangles inside `meshlets`.** Any `(meshlet, triangle)` id recorded before the
26
+ * call is stale after it; build this before anything else that names triangles.
27
+ *
28
+ * @param {BVH8} bvh8 output; {@link BVH8#primitives} is left empty
29
+ * @param {MeshletBatch} meshlets triangles are re-ordered within each meshlet
30
+ * @param {Float32Array} bounding_box bounds of the whole batch
31
+ * @param {number} [optimization] treelet optimization passes over the binary tree the BVH8 is collapsed from
32
+ */
33
+ export function bvh8_build_for_meshlets(bvh8: BVH8, meshlets: MeshletBatch, bounding_box: Float32Array, optimization?: number): void;
34
+ export type BVH8 = import("../../../../core/bvh8/BVH8.js").BVH8;
35
+ export type MeshletBatch = import("../meshlet/MeshletBatch.js").MeshletBatch;
36
+ //# sourceMappingURL=bvh8_build_for_meshlets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh8_build_for_meshlets.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js"],"names":[],"mappings":"AA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,8CALW,IAAI,YACJ,YAAY,gBACZ,YAAY,iBACZ,MAAM,QAsHhB;mBAzKY,OAAO,+BAA+B,EAAE,IAAI;2BAC5C,OAAO,4BAA4B,EAAE,YAAY"}
@@ -0,0 +1,179 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
3
+ import { BVH8Converter } from "../../../../core/bvh8/build/BVH8Converter.js";
4
+ import { bvh8_depth } from "../../../../core/bvh8/bvh8_depth.js";
5
+ import { BVH8_BLAS_MAX_DEPTH } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
6
+ import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
7
+ import { meshlet_batch_to_clustered_bvh } from "./meshlet_batch_to_clustered_bvh.js";
8
+
9
+ /**
10
+ * @typedef {import("../../../../core/bvh8/BVH8.js").BVH8} BVH8
11
+ * @typedef {import("../meshlet/MeshletBatch.js").MeshletBatch} MeshletBatch
12
+ */
13
+
14
+ /**
15
+ * Triangles in a batch, by its meshlets' own headers. A batch put together from stored buffers has
16
+ * no count of its own to give.
17
+ *
18
+ * @param {MeshletBatch} meshlets
19
+ * @returns {number}
20
+ */
21
+ function count_triangles(meshlets) {
22
+ let count = 0;
23
+
24
+ for (let i = 0; i < meshlets.count; i++) {
25
+ count += meshlets.read_header(i).primitive_count;
26
+ }
27
+
28
+ return count;
29
+ }
30
+
31
+ /**
32
+ * Build a BVH8 over a meshlet batch that addresses the batch's own triangles, with no index table
33
+ * between the tree and the geometry.
34
+ *
35
+ * A BVH8 node names its triangles as one run: `base_index_triangle`, plus an offset of at most 23.
36
+ * A tree built over a mesh therefore wants the triangles in the tree's order, which is usually paid
37
+ * for with a second, re-ordered index buffer ({@link BVH8#primitives}). A meshlet already owns a
38
+ * private index list of at most {@link GEOMETRY_MESHLET_TRIANGLE_LIMIT} triangles whose order nothing
39
+ * else depends on, so the order is imposed there instead:
40
+ *
41
+ * - the tree is built so that every meshlet is one subtree, and every node at or below a meshlet's root
42
+ * holds triangles of that meshlet alone ({@link meshlet_batch_to_clustered_bvh},
43
+ * {@link BVH8Converter#cluster_roots});
44
+ * - each meshlet's triangles are then re-ordered into the order its nodes visit them
45
+ * ({@link MeshletBatch#reorder_triangles}).
46
+ *
47
+ * `base_index_triangle` comes out as `(meshlet_index << 8) | triangle_index`, the id every ray query
48
+ * in the engine already resolves through `geometry_read_triangle_vertices`. A run never crosses a
49
+ * meshlet, so adding a slot's offset to it stays inside the low byte and the sum is again such an id.
50
+ * Nodes above the meshlet roots hold no triangles.
51
+ *
52
+ * Throws for a batch whose tree comes out deeper than {@link BVH8_BLAS_MAX_DEPTH}: the traversal's stack
53
+ * could not walk it. By then the triangles have been re-ordered and `bvh8` holds the refused tree.
54
+ *
55
+ * **This re-orders the triangles inside `meshlets`.** Any `(meshlet, triangle)` id recorded before the
56
+ * call is stale after it; build this before anything else that names triangles.
57
+ *
58
+ * @param {BVH8} bvh8 output; {@link BVH8#primitives} is left empty
59
+ * @param {MeshletBatch} meshlets triangles are re-ordered within each meshlet
60
+ * @param {Float32Array} bounding_box bounds of the whole batch
61
+ * @param {number} [optimization] treelet optimization passes over the binary tree the BVH8 is collapsed from
62
+ */
63
+ export function bvh8_build_for_meshlets(bvh8, meshlets, bounding_box, optimization = 1) {
64
+ assert.defined(bvh8, 'bvh8');
65
+ assert.equal(meshlets.isMeshletBatch, true, 'meshlets.isMeshletBatch !== true');
66
+ assert.isArrayLike(bounding_box, 'bounding_box');
67
+
68
+ const meshlet_count = meshlets.count;
69
+
70
+ if (meshlet_count === 0) {
71
+ bvh8.clear();
72
+ return;
73
+ }
74
+
75
+ const bvh2 = new BVH();
76
+ const meshlet_roots = new Uint32Array(meshlet_count);
77
+
78
+ meshlet_batch_to_clustered_bvh({
79
+ bvh: bvh2,
80
+ meshlets,
81
+ bounding_box,
82
+ meshlet_roots,
83
+ optimization,
84
+ });
85
+
86
+ const cluster_roots = new Uint8Array(bvh2.size);
87
+
88
+ for (let i = 0; i < meshlet_count; i++) {
89
+ cluster_roots[meshlet_roots[i]] = 1;
90
+ }
91
+
92
+ const converter = new BVH8Converter(bvh8, bvh2);
93
+
94
+ converter.cluster_roots = cluster_roots;
95
+ converter.convert();
96
+
97
+ // ===========
98
+ // The pool now lists every triangle id in the order the nodes address them, one meshlet after
99
+ // another. Find where each meshlet's run starts
100
+ // ===========
101
+ const pool = bvh8.primitives.data_uint32;
102
+ const pool_size = bvh8.primitives.size;
103
+
104
+ assert.equal(pool_size, count_triangles(meshlets), 'the tree must hold every triangle of the batch');
105
+
106
+ const run_start = new Uint32Array(meshlet_count);
107
+
108
+ for (let i = 0, previous = -1; i < pool_size; i++) {
109
+ const meshlet_index = pool[i] >>> 8;
110
+
111
+ if (meshlet_index !== previous) {
112
+ run_start[meshlet_index] = i;
113
+ previous = meshlet_index;
114
+ }
115
+ }
116
+
117
+ // ===========
118
+ // Point every node at its run inside the meshlet, instead of inside the pool
119
+ // ===========
120
+ const node_count = bvh8.nodes.size;
121
+
122
+ for (let node = 0; node < node_count; node++) {
123
+ const imask = bvh8.node_get_imask(node);
124
+
125
+ let has_triangles = false;
126
+
127
+ for (let slot = 0; slot < 8; slot++) {
128
+ if ((imask & (1 << slot)) === 0 && bvh8.node_get_meta(node, slot) !== 0) {
129
+ has_triangles = true;
130
+ break;
131
+ }
132
+ }
133
+
134
+ if (!has_triangles) {
135
+ bvh8.node_set_base_index_triangle(node, 0);
136
+ continue;
137
+ }
138
+
139
+ const base = bvh8.node_get_base_index_triangle(node);
140
+
141
+ const meshlet_index = pool[base] >>> 8;
142
+
143
+ const base_in_meshlet = base - run_start[meshlet_index];
144
+
145
+ assert.lessThan(base_in_meshlet, GEOMETRY_MESHLET_TRIANGLE_LIMIT, 'run starts outside of its meshlet');
146
+
147
+ bvh8.node_set_base_index_triangle(node, ((meshlet_index << 8) | base_in_meshlet) >>> 0);
148
+ }
149
+
150
+ // ===========
151
+ // Put each meshlet's triangles in the order of its run
152
+ // ===========
153
+ const order = new Uint8Array(GEOMETRY_MESHLET_TRIANGLE_LIMIT);
154
+
155
+ for (let meshlet_index = 0; meshlet_index < meshlet_count; meshlet_index++) {
156
+ const triangle_count = meshlets.read_header(meshlet_index).primitive_count;
157
+
158
+ const start = run_start[meshlet_index];
159
+
160
+ for (let i = 0; i < triangle_count; i++) {
161
+ const id = pool[start + i];
162
+
163
+ assert.equal(id >>> 8, meshlet_index, "a meshlet's run holds another meshlet's triangle");
164
+
165
+ order[i] = id & 0xFF;
166
+ }
167
+
168
+ meshlets.reorder_triangles(meshlet_index, order);
169
+ }
170
+
171
+ // the order lives in the meshlets now
172
+ bvh8.primitives.clear();
173
+
174
+ const depth = bvh8_depth(bvh8);
175
+
176
+ if (depth > BVH8_BLAS_MAX_DEPTH) {
177
+ throw new Error(`BVH8 over ${count_triangles(meshlets)} triangles in ${meshlet_count} meshlets is ${depth} levels deep, the traversal holds ${BVH8_BLAS_MAX_DEPTH}`);
178
+ }
179
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Binary BVH over the triangles of a meshlet batch, in which every meshlet is one subtree.
3
+ *
4
+ * Treelets are optimized on either side of the meshlet roots and never across them, where an
5
+ * optimization of the whole tree would be free to trade triangles between meshlets: the tree above
6
+ * the roots sees each meshlet as a leaf, and the tree below one holds that meshlet's triangles and
7
+ * no others. That is the property a
8
+ * wide BVH needs in order to address triangles as a run inside a meshlet, see
9
+ * {@link bvh8_build_for_meshlets}.
10
+ *
11
+ * A leaf's user data is `(meshlet_index << 8) | triangle_index`, as everywhere else.
12
+ *
13
+ * @param {Object} options
14
+ * @param {BVH} options.bvh output, anything it held is released
15
+ * @param {MeshletBatch} options.meshlets every meshlet must hold at least one triangle
16
+ * @param {Float32Array} options.bounding_box bounds of the whole batch
17
+ * @param {Uint32Array} options.meshlet_roots output, the node each meshlet is rooted at, by meshlet
18
+ * index. A meshlet of one triangle is rooted at that triangle's leaf.
19
+ * @param {number} [options.optimization] treelet optimization passes
20
+ */
21
+ export function meshlet_batch_to_clustered_bvh({ bvh, meshlets, bounding_box, meshlet_roots, optimization }: {
22
+ bvh: BVH;
23
+ meshlets: MeshletBatch;
24
+ bounding_box: Float32Array;
25
+ meshlet_roots: Uint32Array;
26
+ optimization?: number;
27
+ }): void;
28
+ export type BVH = import("../../../../core/bvh2/bvh3/BVH.js").BVH;
29
+ export type MeshletBatch = import("../meshlet/MeshletBatch.js").MeshletBatch;
30
+ //# sourceMappingURL=meshlet_batch_to_clustered_bvh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshlet_batch_to_clustered_bvh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js"],"names":[],"mappings":"AA8CA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAPwB,GAAG,EAAhB,GAAG;IACmB,QAAQ,EAA9B,YAAY;IACU,YAAY,EAAlC,YAAY;IACS,aAAa,EAAlC,WAAW;IAEM,YAAY,GAA7B,MAAM;SA8IhB;kBAlMY,OAAO,mCAAmC,EAAE,GAAG;2BAC/C,OAAO,4BAA4B,EAAE,YAAY"}
@@ -0,0 +1,207 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { NULL_NODE } from "../../../../core/bvh2/bvh3/BVH.js";
3
+ import { ebvh_build_hierarchy } from "../../../../core/bvh2/bvh3/ebvh_build_hierarchy.js";
4
+ import { ebvh_optimize_treelet } from "../../../../core/bvh2/bvh3/ebvh_optimize_treelet.js";
5
+ import {
6
+ array_quick_sort_by_lookup_uint
7
+ } from "../../../../core/collection/array/array_quick_sort_by_lookup_uint.js";
8
+ import { v3_morton_encode_bounded } from "../../../../core/geom/3d/morton/v3_morton_encode_bounded.js";
9
+ import { aabb3_compute_from_triangle } from "../../../../core/geom/3d/triangle/aabb3_compute_from_triangle.js";
10
+ import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
11
+
12
+ /**
13
+ * @typedef {import("../../../../core/bvh2/bvh3/BVH.js").BVH} BVH
14
+ * @typedef {import("../meshlet/MeshletBatch.js").MeshletBatch} MeshletBatch
15
+ */
16
+
17
+ /**
18
+ * Arrange `count` unattached nodes into a hierarchy, nearest in Morton order first.
19
+ *
20
+ * @param {BVH} bvh
21
+ * @param {Uint32Array} nodes the nodes to arrange; left in an unspecified order
22
+ * @param {Uint32Array} codes Morton code of each of `nodes`, by position
23
+ * @param {number} count
24
+ * @param {Uint32Array} scratch_order at least `count` long
25
+ * @param {Uint32Array} scratch_nodes at least `2 * count` long
26
+ * @returns {number} root of the hierarchy; `nodes[0]` itself when `count` is 1
27
+ */
28
+ function build_hierarchy_by_morton(bvh, nodes, codes, count, scratch_order, scratch_nodes) {
29
+ for (let i = 0; i < count; i++) {
30
+ scratch_order[i] = i;
31
+ }
32
+
33
+ array_quick_sort_by_lookup_uint(scratch_order, codes, 0, count - 1);
34
+
35
+ for (let i = 0; i < count; i++) {
36
+ scratch_nodes[i] = nodes[scratch_order[i]];
37
+ }
38
+
39
+ // a binary tree over `count` leaves has `count - 1` parents
40
+ for (let i = 0; i < count - 1; i++) {
41
+ scratch_nodes[count + i] = bvh.allocate_node();
42
+ }
43
+
44
+ return ebvh_build_hierarchy(bvh, scratch_nodes, count, scratch_nodes, count);
45
+ }
46
+
47
+ /**
48
+ * Binary BVH over the triangles of a meshlet batch, in which every meshlet is one subtree.
49
+ *
50
+ * Treelets are optimized on either side of the meshlet roots and never across them, where an
51
+ * optimization of the whole tree would be free to trade triangles between meshlets: the tree above
52
+ * the roots sees each meshlet as a leaf, and the tree below one holds that meshlet's triangles and
53
+ * no others. That is the property a
54
+ * wide BVH needs in order to address triangles as a run inside a meshlet, see
55
+ * {@link bvh8_build_for_meshlets}.
56
+ *
57
+ * A leaf's user data is `(meshlet_index << 8) | triangle_index`, as everywhere else.
58
+ *
59
+ * @param {Object} options
60
+ * @param {BVH} options.bvh output, anything it held is released
61
+ * @param {MeshletBatch} options.meshlets every meshlet must hold at least one triangle
62
+ * @param {Float32Array} options.bounding_box bounds of the whole batch
63
+ * @param {Uint32Array} options.meshlet_roots output, the node each meshlet is rooted at, by meshlet
64
+ * index. A meshlet of one triangle is rooted at that triangle's leaf.
65
+ * @param {number} [options.optimization] treelet optimization passes
66
+ */
67
+ export function meshlet_batch_to_clustered_bvh({
68
+ bvh,
69
+ meshlets,
70
+ bounding_box,
71
+ meshlet_roots,
72
+ optimization = 1
73
+ }) {
74
+
75
+ assert.defined(bvh, 'bvh');
76
+ assert.defined(meshlets, 'meshlets');
77
+ assert.defined(bounding_box, 'bounding_box');
78
+
79
+ const meshlet_count = meshlets.count;
80
+
81
+ assert.greaterThanOrEqual(meshlet_roots.length, meshlet_count, 'meshlet_roots is too short');
82
+
83
+ bvh.release_all();
84
+
85
+ if (meshlet_count === 0) {
86
+ bvh.root = NULL_NODE;
87
+ return;
88
+ }
89
+
90
+ const scratch_size = Math.max(meshlet_count, GEOMETRY_MESHLET_TRIANGLE_LIMIT);
91
+
92
+ const scratch_codes = new Uint32Array(scratch_size);
93
+ const scratch_order = new Uint32Array(scratch_size);
94
+ const scratch_nodes = new Uint32Array(scratch_size * 2);
95
+
96
+ // ===========
97
+ // The tree over the meshlets, each one a leaf for now
98
+ // ===========
99
+ for (let i = 0; i < meshlet_count; i++) {
100
+ const header = meshlets.read_header(i);
101
+
102
+ assert.greaterThan(header.primitive_count, 0, 'meshlet holds no triangles');
103
+
104
+ const bb = header.bounds_box;
105
+
106
+ const node = bvh.allocate_node();
107
+
108
+ bvh.node_set_aabb(node, bb);
109
+
110
+ meshlet_roots[i] = node;
111
+
112
+ scratch_codes[i] = v3_morton_encode_bounded(
113
+ (bb[0] + bb[3]) * 0.5,
114
+ (bb[1] + bb[4]) * 0.5,
115
+ (bb[2] + bb[5]) * 0.5,
116
+ bounding_box,
117
+ );
118
+ }
119
+
120
+ const root = build_hierarchy_by_morton(bvh, meshlet_roots, scratch_codes, meshlet_count, scratch_order, scratch_nodes);
121
+
122
+ bvh.root = root;
123
+
124
+ for (let i = 0; i < optimization; i++) {
125
+ ebvh_optimize_treelet(bvh, root);
126
+ }
127
+
128
+ // ===========
129
+ // The tree inside each meshlet, grown under its leaf
130
+ // ===========
131
+ const triangle_nodes = new Uint32Array(GEOMETRY_MESHLET_TRIANGLE_LIMIT);
132
+ const triangle_aabb = new Float32Array(6);
133
+
134
+ for (let meshlet_index = 0; meshlet_index < meshlet_count; meshlet_index++) {
135
+ const meshlet = meshlets.read_meshlet(meshlet_index);
136
+
137
+ const meshlet_bounds = meshlet.header.bounds_box;
138
+
139
+ // NOTE: indices and vertices are per-meshlet, there are no global attributes
140
+ const meshlet_indices = meshlet.attribute_index;
141
+ const meshlet_positions = meshlet.attribute_position;
142
+
143
+ const triangle_count = meshlet.header.primitive_count;
144
+
145
+ const meshlet_root = meshlet_roots[meshlet_index];
146
+
147
+ for (let triangle_index = 0; triangle_index < triangle_count; triangle_index++) {
148
+ const index3 = triangle_index * 3;
149
+
150
+ aabb3_compute_from_triangle(
151
+ triangle_aabb, 0,
152
+ meshlet_positions,
153
+ meshlet_indices[index3],
154
+ meshlet_indices[index3 + 1],
155
+ meshlet_indices[index3 + 2],
156
+ );
157
+
158
+ // the leaf of a one-triangle meshlet is the meshlet's own node
159
+ const node = triangle_count === 1 ? meshlet_root : bvh.allocate_node();
160
+
161
+ bvh.node_set_aabb(node, triangle_aabb);
162
+
163
+ // NOTE: we already limit the number of triangles per meshlet to 256, so this is safe.
164
+ bvh.node_set_user_data(node, (((meshlet_index & 0x00FFFFFF) << 8) | (triangle_index & 0xFF)) >>> 0);
165
+
166
+ triangle_nodes[triangle_index] = node;
167
+
168
+ scratch_codes[triangle_index] = v3_morton_encode_bounded(
169
+ (triangle_aabb[0] + triangle_aabb[3]) * 0.5,
170
+ (triangle_aabb[1] + triangle_aabb[4]) * 0.5,
171
+ (triangle_aabb[2] + triangle_aabb[5]) * 0.5,
172
+ meshlet_bounds,
173
+ );
174
+ }
175
+
176
+ if (triangle_count === 1) {
177
+ continue;
178
+ }
179
+
180
+ const subtree = build_hierarchy_by_morton(bvh, triangle_nodes, scratch_codes, triangle_count, scratch_order, scratch_nodes);
181
+
182
+ // the meshlet's node is already wired into the tree above, so it takes over as the root
183
+ bvh.node_assign_children(meshlet_root, bvh.node_get_child1(subtree), bvh.node_get_child2(subtree));
184
+ bvh.release_node(subtree);
185
+
186
+ for (let i = 0; i < optimization; i++) {
187
+ ebvh_optimize_treelet(bvh, meshlet_root);
188
+ }
189
+ }
190
+
191
+ // ===========
192
+ // The tree above was measured with every meshlet a leaf; bring it up to date
193
+ // ===========
194
+ for (let meshlet_index = 0; meshlet_index < meshlet_count; meshlet_index++) {
195
+ let node = bvh.node_get_parent(meshlet_roots[meshlet_index]);
196
+
197
+ while (node !== NULL_NODE) {
198
+ const child_1 = bvh.node_get_child1(node);
199
+ const child_2 = bvh.node_get_child2(node);
200
+
201
+ bvh.node_set_combined_aabb(node, child_1, child_2);
202
+ bvh.node_set_height(node, 1 + Math.max(bvh.node_get_height(child_1), bvh.node_get_height(child_2)));
203
+
204
+ node = bvh.node_get_parent(node);
205
+ }
206
+ }
207
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Nodes per workgroup. A workgroup serves one tree and one aligned run of this many of its nodes,
3
+ * which is what the lookup's second word counts in.
4
+ *
5
+ * @type {number}
6
+ */
7
+ export const BLAS8_REFIT_BATCH_WORKGROUP_SIZE: number;
8
+ /**
9
+ * `u32` words of spine a node takes: its box's six floats, 24 bits to a word, under a flag.
10
+ *
11
+ * @type {number}
12
+ */
13
+ export const BLAS8_REFIT_SPINE_STRIDE_WORDS: number;
14
+ /**
15
+ * Refit every BVH8 in a batch, from one dispatch.
16
+ *
17
+ * One lane per node, across every tree the batch lists. A node holds its slots' boxes on a grid of
18
+ * its own box, so a lane has two things to find: the box of everything under each of its slots, and
19
+ * from their union its own. A slot of triangles is read off the vertex buffer as it stands *now*. A
20
+ * slot that is a child node depends on that child's lane — as a tile of a prefix scan depends on the
21
+ * tiles before it, and this takes the scan's shape (`graph_prefix_scan_csdldf`):
22
+ *
23
+ * - **Published under a flag.** A lane leaves its node's box in the `spine`, box and flag in the same
24
+ * atomic words, as soon as it has it. A reader has the whole box or none of it.
25
+ * - **Looked for, not waited for.** A lane looks for its children's boxes a fixed number of rounds,
26
+ * and publishes the moment the last turns up. What has not turned up by then the lane finds out
27
+ * for itself, from the triangles under that child, taking as it stands the box of any node on the
28
+ * way down that has published. Nothing spins on another lane,
29
+ * and nothing depends on when a store reaches whom.
30
+ * - **Never in place.** Everything a lane reads to find a box out — the vertices, and the four words
31
+ * of a node that say what it holds — no lane writes. Everything a lane writes, no lane reads.
32
+ * - **In the order of the dependency.** Lanes take a tree's nodes last to first, and a child's index
33
+ * is above its parent's, so a device that starts workgroups in order runs the children first. Within
34
+ * a lane the order is the same: its own triangles, its box published if that is all there is to it,
35
+ * and only then a look at its children. A device that keeps neither order is slower and no less
36
+ * right.
37
+ *
38
+ * So there are no counters, no parents, no seeding pass and nothing to repair: a zeroed spine, then
39
+ * this, whatever the trees' depth.
40
+ *
41
+ * Boxes are rounded outward at every step that rounds, so a refitted node holds what is under it
42
+ * exactly as a built one does; it is not the same node the builder would write, whose arithmetic is
43
+ * exact where this is `f32`.
44
+ *
45
+ * For a skinned mesh this runs against the per-instance clone, after the skinning pass has deformed
46
+ * its vertex region; `geometry_index` on the row is the clone's.
47
+ *
48
+ * @type {ComputeShader}
49
+ */
50
+ export const shader_blas8_refit_batch: ComputeShader;
51
+ import { ComputeShader } from "../../shader/ComputeShader.js";
52
+ //# sourceMappingURL=shader_blas8_refit_batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_blas8_refit_batch.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js"],"names":[],"mappings":"AAiBA;;;;;GAKG;AACH,+CAFU,MAAM,CAEmC;AAEnD;;;;GAIG;AACH,6CAFU,MAAM,CAEgC;AAyYhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,uCAFU,aAAa,CAMpB;8BA9c2B,+BAA+B"}