@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
@@ -6,14 +6,8 @@ import { Deque } from "../../../../core/collection/queue/Deque.js";
6
6
  import { round_up } from "../../../../core/math/round_up.js";
7
7
  import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
8
8
  import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
9
- import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
10
- import {
11
- BVH_NODE_BOUNDS_WORD,
12
- BVH_NODE_CHILD_1_WORD,
13
- BVH_NODE_CHILD_2_WORD
14
- } from "../../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
9
+ import { BVH8_INODE_STRUCT } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
15
10
  import { ensure_buffer_capacity } from "../make_temp_gpu_buffer.js";
16
- import { bvh2_derive_topology } from "./bvh2_derive_topology.js";
17
11
  import { GPUGeometryMeshletsBVH } from "./GPUGeometryMeshletsBVH.js";
18
12
 
19
13
  /**
@@ -35,12 +29,11 @@ export const BLAS_METADATA_STRUCT = WebGPUStruct.from({
35
29
  /**
36
30
  * Arena node index of the empty tree: what the lookup names for a geometry that has no tree yet.
37
31
  *
38
- * One internal node whose box is +inf below and -inf above. No ray enters it, so the ray queries
39
- * pop it and miss; no point is within any distance of it, so the point queries prune it; and it is
40
- * internal, so nothing ever fetches a triangle for it. Its children are itself, and are never
41
- * descended into. Every traversal reads `blas_lookup[geometry_index]` and starts walking without a
42
- * null check, so "no tree" has to be a tree — and it must not be whatever tree happens to sit at
43
- * the arena's end, which is what a record resident over zero bytes used to point at.
32
+ * One node with every slot empty, which is a node of zeroes: no slot holds a triangle or a child, so
33
+ * a query finds nothing in it and has nowhere to go from it. Every traversal reads
34
+ * `blas_lookup[geometry_index]` and starts walking without a null check, so "no tree" has to be a
35
+ * tree — and it must not be whatever tree happens to sit at the arena's end, which is what a record
36
+ * resident over zero bytes used to point at.
44
37
  *
45
38
  * @type {number}
46
39
  */
@@ -52,13 +45,6 @@ const DATA_INITIAL_CAPACITY = round_up(1024, DATA_SIZE_ALIGNMENT);
52
45
  const DATA_GROWTH_STEP = 1024;
53
46
  const DATA_GROWTH_MULTIPLIER = 1.2;
54
47
 
55
- /**
56
- * Words of dead shape-arena space below which a re-pack is not worth running, however large the
57
- * fraction. A scene of a few small topologies churning would otherwise re-pack on every release.
58
- * @type {number}
59
- */
60
- const SHAPE_ARENA_COMPACT_FLOOR = 4096;
61
-
62
48
  /**
63
49
  * Regions the node arena's allocator can describe at once — live trees plus the free gaps
64
50
  * between them. A scene's live trees are one per geometry plus one per skinned instance.
@@ -154,68 +140,6 @@ export class GPUGeometryBVHManager {
154
140
  */
155
141
  #allocator;
156
142
 
157
- /**
158
- * Parent of every node, and the node index of every leaf, for each *distinct topology* — one
159
- * arena each, addressed like {@link #buffer_data}.
160
- *
161
- * Separate from the nodes because they are separate things. Node bounds are per instance: a
162
- * skinned clone's are its own, recomputed every frame from its own deformed vertices. Parents
163
- * and leaf positions are the shape of the tree, and every copy of a geometry has the same
164
- * shape, so one derivation serves all of them.
165
- *
166
- * @type {GPUBuffer}
167
- */
168
- #buffer_parents;
169
-
170
- /**
171
- * @returns {GPUBuffer}
172
- */
173
- get buffer_parents() {
174
- return this.#buffer_parents;
175
- }
176
-
177
- /**
178
- * @type {GPUBuffer}
179
- */
180
- #buffer_leaf_nodes;
181
-
182
- /**
183
- * @returns {GPUBuffer}
184
- */
185
- get buffer_leaf_nodes() {
186
- return this.#buffer_leaf_nodes;
187
- }
188
-
189
- #buffer_parents_end = 0;
190
- #buffer_leaf_nodes_end = 0;
191
-
192
- /**
193
- * How many words of each shape arena live topologies actually occupy.
194
- *
195
- * The arenas are bump pointers, and a released topology used to leave its words where they
196
- * were — the same story the node arena was moved off a bump pointer to fix (MEEP-009), left
197
- * behind in the two arenas beside it. Streaming distinct geometries therefore grew both
198
- * buffers forever: a district-by-district tour of a converted map, where the whole set is
199
- * hundreds of thousands of distinct geometries, grows them monotonically until `createBuffer`
200
- * refuses.
201
- *
202
- * The difference between this and the end pointer is the waste, and
203
- * {@link #compact_shape_arenas} closes it when it is worth closing.
204
- *
205
- * @type {number}
206
- */
207
- #buffer_parents_used = 0;
208
-
209
- /** @type {number} */
210
- #buffer_leaf_nodes_used = 0;
211
-
212
- /**
213
- * Topology by the geometry whose nodes it was derived from, shared by every copy of it.
214
- *
215
- * @type {Map<MeshletGeometry, {parents_offset: number, leaf_nodes_offset: number, leaf_count: number, node_count: number, resident: boolean, derived: {parents: Uint32Array, leaf_nodes: Uint32Array}}>}
216
- */
217
- #topology = new Map();
218
-
219
143
  /**
220
144
  *
221
145
  * @type {number}
@@ -224,7 +148,7 @@ export class GPUGeometryBVHManager {
224
148
 
225
149
  /**
226
150
  * Moves whenever the answer of {@link get_refit_target} may have changed for any owner: a tree's
227
- * nodes uploaded, a shape uploaded, an owner removed. Registration alone does not move it —
151
+ * nodes uploaded, an owner removed. Registration alone does not move it —
228
152
  * nothing a refit can read has changed until {@link update} runs.
229
153
  *
230
154
  * A consumer that builds tables from those answers keeps them until this moves. Coarse on
@@ -278,37 +202,17 @@ export class GPUGeometryBVHManager {
278
202
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
279
203
  });
280
204
 
281
- this.#buffer_parents = device.createBuffer({
282
- label: "GPUGeometryBVHManager/parents",
283
- size: DATA_INITIAL_CAPACITY,
284
- usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
285
- });
286
-
287
- this.#buffer_leaf_nodes = device.createBuffer({
288
- label: "GPUGeometryBVHManager/leaf_nodes",
289
- size: DATA_INITIAL_CAPACITY,
290
- usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
291
- });
292
-
293
- // Node 0 is the empty tree, reserved before anything is appended — see BLAS_EMPTY_TREE_ADDRESS.
294
- const empty_tree = new Uint32Array(BVH2_NODE_STRUCT.size / Uint32Array.BYTES_PER_ELEMENT);
295
-
296
- new Float32Array(empty_tree.buffer, BVH_NODE_BOUNDS_WORD * Uint32Array.BYTES_PER_ELEMENT, 6)
297
- .set([Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity]);
298
-
299
- empty_tree[BVH_NODE_CHILD_1_WORD] = BLAS_EMPTY_TREE_ADDRESS;
300
- empty_tree[BVH_NODE_CHILD_2_WORD] = BLAS_EMPTY_TREE_ADDRESS;
301
-
302
- device.queue.writeBuffer(this.#buffer_data, BLAS_EMPTY_TREE_ADDRESS * BVH2_NODE_STRUCT.size, empty_tree);
205
+ // Node 0 is the empty tree — see BLAS_EMPTY_TREE_ADDRESS. A buffer is created zeroed, and the
206
+ // region is taken out of circulation below before anything else can be put there.
303
207
 
304
208
  // Capacity is what the buffer actually holds, not what was asked for — `createBuffer`
305
209
  // rounds up, and an allocator sized below its arena just refuses allocations that fit.
306
- this.#node_capacity = Math.floor(this.#buffer_data.size / BVH2_NODE_STRUCT.size);
210
+ this.#node_capacity = Math.floor(this.#buffer_data.size / BVH8_INODE_STRUCT.size);
307
211
 
308
212
  this.#allocator = new OffsetAllocator(this.#node_capacity, NODE_ALLOCATION_LIMIT);
309
213
 
310
- // Take node 0 out of circulation permanently: it holds the empty tree written above, and
311
- // a real tree handed that region would overwrite what every unresident geometry traces.
214
+ // Take node 0 out of circulation permanently: it is the empty tree, and a real tree handed
215
+ // that region would overwrite what every unresident geometry traces.
312
216
  const empty_tree_region = this.#allocator.allocate(1);
313
217
 
314
218
  assert.equal(
@@ -337,14 +241,6 @@ export class GPUGeometryBVHManager {
337
241
  r += this.#buffer_data.size;
338
242
  }
339
243
 
340
- if (this.#buffer_parents) {
341
- r += this.#buffer_parents.size;
342
- }
343
-
344
- if (this.#buffer_leaf_nodes) {
345
- r += this.#buffer_leaf_nodes.size;
346
- }
347
-
348
244
  return r;
349
245
  }
350
246
 
@@ -352,8 +248,8 @@ export class GPUGeometryBVHManager {
352
248
  * Bytes of the node arena that trees actually occupy: its capacity, less every region
353
249
  * {@link #allocator} still holds free.
354
250
  *
355
- * Beside {@link gpu_memory_usage}, which is what the arenas cost whether or not anything is
356
- * in them. The gap between the two is what a released tree gives back and what the next tree
251
+ * Beside {@link gpu_memory_usage}, which is what the arena and the lookup cost whether or not
252
+ * anything is in them. The gap between the two is what a released tree gives back and what the next tree
357
253
  * of that size takes, so it is the one worth watching.
358
254
  *
359
255
  * @returns {number} in bytes
@@ -361,22 +257,20 @@ export class GPUGeometryBVHManager {
361
257
  get gpu_memory_usage_occupied() {
362
258
  const free_nodes = this.#allocator.storageReport().totalFreeSpace;
363
259
 
364
- return (this.#node_capacity - free_nodes) * BVH2_NODE_STRUCT.size;
260
+ return (this.#node_capacity - free_nodes) * BVH8_INODE_STRUCT.size;
365
261
  }
366
262
 
367
263
  /**
368
- * The tree belonging to `owner`, registered against `source`'s shape if it does not exist yet.
264
+ * The tree belonging to `owner`, registered as a copy of `source`'s if it does not exist yet.
369
265
  *
370
266
  * Two arguments rather than one because those are two different questions. `owner` is the
371
267
  * identity the tree is looked up by; `source` is the geometry whose nodes it starts as. They
372
268
  * coincide for anything that owns its geometry outright, and they do not for a per-instance
373
- * copy — a skinned clone deforms its own vertices, so its bounds are its own and cannot be
374
- * written into the tree everyone else is tracing, but its *shape* is by definition the
375
- * source's. Keeping the two separate is what lets one derivation serve every copy.
269
+ * copy — a skinned clone deforms its own vertices, so its boxes are its own and cannot be
270
+ * written into the tree everyone else is tracing.
376
271
  *
377
272
  * @param {object} owner identity to look this tree up by — a geometry, a clone's metadata row
378
- * @param {MeshletGeometry} source geometry whose nodes this tree takes its shape and rest-pose
379
- * bounds from
273
+ * @param {MeshletGeometry} source geometry whose nodes this tree starts as
380
274
  * @returns {GPUGeometryMeshletsBVH}
381
275
  */
382
276
  obtain(owner, source) {
@@ -397,8 +291,7 @@ export class GPUGeometryBVHManager {
397
291
  *
398
292
  * `owner` is the identity the tree is looked up by and `source` is the geometry whose nodes it
399
293
  * holds. For an ordinary geometry those are the same object. For a per-instance copy they are
400
- * not: the copy needs a node region of its own, because its bounds move independently, while
401
- * the *shape* it is a copy of belongs to the source.
294
+ * not: the copy needs a node region of its own, because its boxes move independently.
402
295
  *
403
296
  * @param {object} owner
404
297
  * @param {MeshletGeometry} source
@@ -411,7 +304,7 @@ export class GPUGeometryBVHManager {
411
304
  // No bytes are taken now. The upload reads the geometry's tree as it is *then*, so a tree
412
305
  // that arrives after registration is uploaded once it exists rather than never — and a
413
306
  // geometry with none is not resident over nothing.
414
- bvh.topology = this.#obtain_topology(source);
307
+ bvh.source = source;
415
308
 
416
309
  this.#map.set(owner, bvh);
417
310
 
@@ -420,69 +313,26 @@ export class GPUGeometryBVHManager {
420
313
  return bvh;
421
314
  }
422
315
 
423
- /**
424
- * The parents/leaf-nodes derivation for a geometry, made once and shared by every tree that is
425
- * a copy of it.
426
- *
427
- * @param {MeshletGeometry} source
428
- * @returns {object} the topology record
429
- */
430
- #obtain_topology(source) {
431
- let topology = this.#topology.get(source);
432
-
433
- if (topology !== undefined) {
434
- return topology;
435
- }
436
-
437
- // Derivation waits for {@link #upload_pending_topology}, beside the residency decision it
438
- // feeds. A geometry can be registered before its BLAS bytes exist — nothing has to have
439
- // built one yet — and a record that says "not resident" is the honest answer for that,
440
- // rather than an empty derivation cached forever.
441
- topology = {
442
- source,
443
- leaf_count: 0,
444
- node_count: 0,
445
- parents_offset: 0,
446
- leaf_nodes_offset: 0,
447
- resident: false,
448
- };
449
-
450
- this.#topology.set(source, topology);
451
-
452
- return topology;
453
- }
454
-
455
316
  /**
456
317
  * Everything a refit needs to find a resident tree, or `undefined` while it is not resident.
457
318
  *
458
- * "Resident" means the owner's nodes and its shape are both in their arenas, and that they are
459
- * the same tree. A record snapshots its geometry's bytes when it is registered, and a geometry
460
- * registered before its tree exists is uploaded as nothing — resident over zero bytes, at the
461
- * arena's end. Its shape is derived later, from the bytes as they are then. Answering with that
462
- * shape's counts at that record's address would hand a refit whichever tree was appended next,
463
- * so the answer is withheld until the nodes actually uploaded are the tree the shape describes.
319
+ * The count is of the nodes that were uploaded, not of the geometry's tree as it is now: a
320
+ * refit writes exactly the region the record holds.
464
321
  *
465
322
  * @param {object} owner the identity passed to {@link obtain}
466
- * @returns {{node_word_offset: number, node_count: number, leaf_count: number, parents_offset: number, leaf_nodes_offset: number}|undefined}
323
+ * @returns {{node_offset: number, node_count: number}|undefined} the arena node the tree's root
324
+ * sits at, and the nodes in the tree
467
325
  */
468
326
  get_refit_target(owner) {
469
327
  const bvh = this.#map.get(owner);
470
328
 
471
- if (bvh === undefined || bvh.released || !bvh.resident || !bvh.topology.resident) {
472
- return undefined;
473
- }
474
-
475
- if (bvh.uploaded_byte_length !== bvh.topology.node_count * BVH2_NODE_STRUCT.size) {
476
- // the nodes in the arena are not the tree the shape was derived from
329
+ if (bvh === undefined || bvh.released || !bvh.resident) {
477
330
  return undefined;
478
331
  }
479
332
 
480
333
  return {
481
- node_word_offset: bvh.address * (BVH2_NODE_STRUCT.size / Uint32Array.BYTES_PER_ELEMENT),
482
- node_count: bvh.topology.node_count,
483
- leaf_count: bvh.topology.leaf_count,
484
- parents_offset: bvh.topology.parents_offset,
485
- leaf_nodes_offset: bvh.topology.leaf_nodes_offset,
334
+ node_offset: bvh.address,
335
+ node_count: bvh.uploaded_byte_length / BVH8_INODE_STRUCT.size,
486
336
  };
487
337
  }
488
338
 
@@ -555,134 +405,12 @@ export class GPUGeometryBVHManager {
555
405
 
556
406
  this.#map.delete(owner);
557
407
 
558
- this.#release_topology_if_orphaned(bvh.topology);
559
-
560
408
  // a refit target that answered a moment ago answers `undefined` now
561
409
  this.#residency_version += 1;
562
410
 
563
411
  return true;
564
412
  }
565
413
 
566
- /**
567
- * Re-pack the shape arenas when enough of them is dead to be worth the pass.
568
- *
569
- * Half, over a floor that keeps a handful of small topologies from re-packing on every
570
- * release. The re-pack is O(resident topologies) and the threshold makes it amortised: each
571
- * one is paid for by at least as many words released as it moves.
572
- */
573
- #compact_shape_arenas_if_wasteful() {
574
- const parents_waste = this.#buffer_parents_end - this.#buffer_parents_used;
575
- const leaf_nodes_waste = this.#buffer_leaf_nodes_end - this.#buffer_leaf_nodes_used;
576
-
577
- const wasteful = parents_waste > this.#buffer_parents_used
578
- || leaf_nodes_waste > this.#buffer_leaf_nodes_used;
579
-
580
- const worth_it = parents_waste + leaf_nodes_waste >= SHAPE_ARENA_COMPACT_FLOOR;
581
-
582
- if (wasteful && worth_it) {
583
- this.#compact_shape_arenas();
584
- }
585
- }
586
-
587
- /**
588
- * Re-pack both shape arenas so the live topologies sit at the front of them.
589
- *
590
- * A derivation is position-independent — it is copied into the arena verbatim and its address
591
- * is recorded separately, and every consumer reaches it through {@link get_refit_target} —
592
- * so a topology can be moved by writing it somewhere else and saying where. Nothing is read
593
- * between the move and the republish that {@link #residency_version} asks for.
594
- *
595
- * Rebuilt from the source rather than read back: `bvh2_derive_topology` is a pure function of
596
- * bytes the record already holds, and a readback would be a frame late.
597
- *
598
- * The buffers are not resized. Growing one destroys it, which an open encoder cannot survive,
599
- * and this is reachable from {@link remove}; shrinking is not worth a copy of the whole arena
600
- * when the space is about to be reused.
601
- */
602
- #compact_shape_arenas() {
603
- const queue = this.#device.queue;
604
-
605
- let parents_end = 0;
606
- let leaf_nodes_end = 0;
607
-
608
- for (const topology of this.#topology.values()) {
609
- if (!topology.resident) {
610
- continue;
611
- }
612
-
613
- const bytes = topology.source.bvh;
614
-
615
- if (bytes === undefined || bytes.byteLength === 0) {
616
- // the source lost its tree since; it is no longer resident in any useful sense
617
- topology.resident = false;
618
-
619
- continue;
620
- }
621
-
622
- const { parents, leaf_nodes } = bvh2_derive_topology(bytes);
623
-
624
- topology.parents_offset = parents_end;
625
- topology.leaf_nodes_offset = leaf_nodes_end;
626
-
627
- queue.writeBuffer(
628
- this.#buffer_parents,
629
- parents_end * Uint32Array.BYTES_PER_ELEMENT,
630
- parents, 0, parents.length
631
- );
632
-
633
- queue.writeBuffer(
634
- this.#buffer_leaf_nodes,
635
- leaf_nodes_end * Uint32Array.BYTES_PER_ELEMENT,
636
- leaf_nodes, 0, leaf_nodes.length
637
- );
638
-
639
- parents_end += parents.length;
640
- leaf_nodes_end += leaf_nodes.length;
641
- }
642
-
643
- this.#buffer_parents_end = parents_end;
644
- this.#buffer_leaf_nodes_end = leaf_nodes_end;
645
-
646
- this.#buffer_parents_used = parents_end;
647
- this.#buffer_leaf_nodes_used = leaf_nodes_end;
648
-
649
- // every offset just moved
650
- this.#residency_version += 1;
651
- }
652
-
653
- /**
654
- * Drop a shape once the last tree that had it is gone.
655
- *
656
- * The map entry holds a strong reference to the geometry it is keyed by, so leaving it would
657
- * keep every geometry a scene ever loaded alive for as long as the manager is — and its words
658
- * in the two shape arenas, which are bump pointers, are given back by re-packing rather than by
659
- * a free list. See {@link #buffer_parents_used}.
660
- *
661
- * @param {object} topology
662
- */
663
- #release_topology_if_orphaned(topology) {
664
- for (const bvh of this.#map.values()) {
665
- if (bvh.topology === topology) {
666
- return;
667
- }
668
- }
669
-
670
- for (const [source, candidate] of this.#topology) {
671
- if (candidate === topology) {
672
- this.#topology.delete(source);
673
-
674
- if (candidate.resident) {
675
- this.#buffer_parents_used -= candidate.node_count;
676
- this.#buffer_leaf_nodes_used -= candidate.leaf_count;
677
-
678
- this.#compact_shape_arenas_if_wasteful();
679
- }
680
-
681
- return;
682
- }
683
- }
684
- }
685
-
686
414
  /**
687
415
  * Make the node arena hold at least `size` nodes, keeping {@link #allocator} the same size as
688
416
  * the buffer it describes.
@@ -703,7 +431,7 @@ export class GPUGeometryBVHManager {
703
431
  this.#buffer_data = ensure_buffer_capacity(
704
432
  this.#device,
705
433
  this.#buffer_data,
706
- size * BVH2_NODE_STRUCT.size,
434
+ size * BVH8_INODE_STRUCT.size,
707
435
  DATA_SIZE_ALIGNMENT,
708
436
  DATA_GROWTH_STEP,
709
437
  DATA_GROWTH_MULTIPLIER
@@ -712,7 +440,7 @@ export class GPUGeometryBVHManager {
712
440
  // What the buffer actually came back as, not what was asked for: the helper grows by at
713
441
  // least a step and rounds up, and arena space the allocator does not know about is space
714
442
  // nothing can ever be put in.
715
- this.#node_capacity = Math.floor(this.#buffer_data.size / BVH2_NODE_STRUCT.size);
443
+ this.#node_capacity = Math.floor(this.#buffer_data.size / BVH8_INODE_STRUCT.size);
716
444
 
717
445
  this.#allocator.grow(this.#node_capacity);
718
446
  }
@@ -770,96 +498,11 @@ export class GPUGeometryBVHManager {
770
498
  }
771
499
 
772
500
  /**
773
- * Append every topology derived but not yet uploaded to its arena.
774
- *
775
- * Queue-free: the map is small (one entry per distinct geometry) and a `resident` flag says what
776
- * is left to do, which is one fewer thing to keep in step than a second queue would be.
777
- *
778
- * @returns {boolean} whether any shape became resident
779
- */
780
- #upload_pending_topology() {
781
- const queue = this.#device.queue;
782
-
783
- let uploaded = false;
784
-
785
- for (const topology of this.#topology.values()) {
786
- if (topology.resident) {
787
- continue;
788
- }
789
-
790
- const bytes = topology.source.bvh;
791
-
792
- if (bytes === undefined || bytes.byteLength === 0) {
793
- // no tree to take the shape of yet; try again next time
794
- continue;
795
- }
796
-
797
- const { parents, leaf_nodes } = bvh2_derive_topology(bytes);
798
-
799
- this.#buffer_parents = ensure_buffer_capacity(
800
- this.#device,
801
- this.#buffer_parents,
802
- (this.#buffer_parents_end + parents.length) * Uint32Array.BYTES_PER_ELEMENT,
803
- DATA_SIZE_ALIGNMENT,
804
- DATA_GROWTH_STEP,
805
- DATA_GROWTH_MULTIPLIER
806
- );
807
-
808
- this.#buffer_leaf_nodes = ensure_buffer_capacity(
809
- this.#device,
810
- this.#buffer_leaf_nodes,
811
- (this.#buffer_leaf_nodes_end + leaf_nodes.length) * Uint32Array.BYTES_PER_ELEMENT,
812
- DATA_SIZE_ALIGNMENT,
813
- DATA_GROWTH_STEP,
814
- DATA_GROWTH_MULTIPLIER
815
- );
816
-
817
- topology.parents_offset = this.#buffer_parents_end;
818
- topology.leaf_nodes_offset = this.#buffer_leaf_nodes_end;
819
-
820
- queue.writeBuffer(
821
- this.#buffer_parents,
822
- topology.parents_offset * Uint32Array.BYTES_PER_ELEMENT,
823
- parents, 0, parents.length
824
- );
825
-
826
- queue.writeBuffer(
827
- this.#buffer_leaf_nodes,
828
- topology.leaf_nodes_offset * Uint32Array.BYTES_PER_ELEMENT,
829
- leaf_nodes, 0, leaf_nodes.length
830
- );
831
-
832
- this.#buffer_parents_end += parents.length;
833
- this.#buffer_leaf_nodes_end += leaf_nodes.length;
834
-
835
- this.#buffer_parents_used += parents.length;
836
- this.#buffer_leaf_nodes_used += leaf_nodes.length;
837
-
838
- topology.leaf_count = leaf_nodes.length;
839
- // slots, not tree nodes — the arena numbers a tree's nodes with the free list's holes
840
- // in, and a refit's arrival counters are indexed by that numbering
841
- topology.node_count = parents.length;
842
- topology.resident = true;
843
-
844
- uploaded = true;
845
- }
846
-
847
- return uploaded;
848
- }
849
-
850
- /**
851
- * Bring the arenas up to date with everything registered since the last call, and move the
501
+ * Bring the arena up to date with everything registered since the last call, and move the
852
502
  * residency version if anything a refit reads has changed.
853
- *
854
- * Shapes first, and as their own question: they are not behind the node queue, so a frame in
855
- * which a shape arrives for an already-uploaded record still uploads it — and still moves the
856
- * version, because that record's refit answer has changed all the same.
857
503
  */
858
504
  update() {
859
- const topology_uploaded = this.#upload_pending_topology();
860
- const nodes_uploaded = this.#upload_pending_nodes();
861
-
862
- if (topology_uploaded || nodes_uploaded) {
505
+ if (this.#upload_pending_nodes()) {
863
506
  this.#residency_version += 1;
864
507
  }
865
508
  }
@@ -891,7 +534,7 @@ export class GPUGeometryBVHManager {
891
534
  has_work = true;
892
535
  break;
893
536
  }
894
- const bytes = record.topology.source.bvh;
537
+ const bytes = record.source.bvh;
895
538
  if (bytes !== undefined && bytes.byteLength > 0) {
896
539
  has_work = true;
897
540
  break;
@@ -918,7 +561,7 @@ export class GPUGeometryBVHManager {
918
561
 
919
562
  if (record.released) { continue; }
920
563
 
921
- const bytes = record.topology.source.bvh;
564
+ const bytes = record.source.bvh;
922
565
 
923
566
  if (bytes === undefined || bytes.byteLength === 0) {
924
567
  // no tree yet; try again next time
@@ -927,7 +570,7 @@ export class GPUGeometryBVHManager {
927
570
  continue;
928
571
  }
929
572
 
930
- const node_count = bytes.byteLength / BVH2_NODE_STRUCT.size;
573
+ const node_count = bytes.byteLength / BVH8_INODE_STRUCT.size;
931
574
 
932
575
  assert.isNonNegativeInteger(node_count, "node_count");
933
576
 
@@ -957,7 +600,7 @@ export class GPUGeometryBVHManager {
957
600
  // Every region first, while growing is still allowed to replace the buffer — see
958
601
  // #allocate_nodes. `used_node_count` is only the total; the regions need not be adjacent.
959
602
  for (const upload of uploads) {
960
- upload.allocation = this.#allocate_nodes(upload.bytes.byteLength / BVH2_NODE_STRUCT.size);
603
+ upload.allocation = this.#allocate_nodes(upload.bytes.byteLength / BVH8_INODE_STRUCT.size);
961
604
  }
962
605
 
963
606
  const device = this.#device;
@@ -991,12 +634,12 @@ export class GPUGeometryBVHManager {
991
634
  record.address = allocation.offset;
992
635
  record.resident = true;
993
636
  record.bvh = bytes;
994
- // what actually went into the arena, for `get_refit_target` to hold against the shape
637
+ // what actually went into the arena, which is what a refit of this record covers
995
638
  record.uploaded_byte_length = bytes.byteLength;
996
639
 
997
640
  encoder.copyBufferToBuffer(
998
641
  temp_data_buffer, offset,
999
- this.#buffer_data, allocation.offset * BVH2_NODE_STRUCT.size,
642
+ this.#buffer_data, allocation.offset * BVH8_INODE_STRUCT.size,
1000
643
  bytes.byteLength
1001
644
  );
1002
645
  }
@@ -1010,13 +653,11 @@ export class GPUGeometryBVHManager {
1010
653
  }
1011
654
 
1012
655
  /**
1013
- * Release the arena and its tables. For the geometry manager's own teardown: nothing is
656
+ * Release the arena and the lookup. For the geometry manager's own teardown: nothing is
1014
657
  * obtained, uploaded or traced afterwards. Safe to call twice.
1015
658
  */
1016
659
  destroy() {
1017
660
  this.#buffer_metadata.destroy();
1018
661
  this.#buffer_data.destroy();
1019
- this.#buffer_parents.destroy();
1020
- this.#buffer_leaf_nodes.destroy();
1021
662
  }
1022
663
  }
@@ -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
  export class GPUGeometryMeshletsBVH {
5
6
  /**
@@ -26,12 +27,11 @@ export class GPUGeometryMeshletsBVH {
26
27
  */
27
28
  allocation: Allocation | null;
28
29
  /**
29
- * The shape of this tree — parents and leaf positions — shared with every other copy of the same
30
- * geometry, because a copy differs only in where its bounds are.
30
+ * The geometry whose tree this one starts as a copy of.
31
31
  *
32
- * @type {object}
32
+ * @type {MeshletGeometry}
33
33
  */
34
- topology: object;
34
+ source: MeshletGeometry;
35
35
  /**
36
36
  * Whether {@link address} means anything yet. A record is registered before its nodes are
37
37
  * resident, and an address of 0 is a perfectly good arena position, so "not yet uploaded"
@@ -42,9 +42,7 @@ export class GPUGeometryMeshletsBVH {
42
42
  resident: boolean;
43
43
  /**
44
44
  * Bytes of {@link bvh} that {@link GPUGeometryBVHManager#update} actually copied into the arena
45
- * at {@link address}. `get_refit_target` holds it against the shape's node count: a record
46
- * registered before its geometry had a tree is uploaded as nothing, and a shape derived later,
47
- * from the bytes that exist by then, must not be answered for at that empty region.
45
+ * at {@link address}: the region a refit of this tree covers.
48
46
  *
49
47
  * @type {number}
50
48
  */
@@ -58,4 +56,5 @@ export class GPUGeometryMeshletsBVH {
58
56
  released: boolean;
59
57
  }
60
58
  export type Allocation = import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation;
59
+ export type MeshletGeometry = import("../MeshletGeometry.js").MeshletGeometry;
61
60
  //# sourceMappingURL=GPUGeometryMeshletsBVH.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUGeometryMeshletsBVH.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;IAEI;;;;;;OAMG;IACH,KAFU,WAAW,GAAC,SAAS,CAE3B;IAEJ;;;;;OAKG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;;;;OAMG;IACH,YAFU,UAAU,GAAC,IAAI,CAEP;IAElB;;;;;OAKG;IACH,UAFU,MAAM,CAEP;IAET;;;;;;OAMG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;;;;OAOG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;OAKG;IACH,UAFU,OAAO,CAEA;CACpB;yBAjEY,OAAO,sDAAsD,EAAE,UAAU"}
1
+ {"version":3,"file":"GPUGeometryMeshletsBVH.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;IAEI;;;;;;OAMG;IACH,KAFU,WAAW,GAAC,SAAS,CAE3B;IAEJ;;;;;OAKG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;;;;OAMG;IACH,YAFU,UAAU,GAAC,IAAI,CAEP;IAElB;;;;OAIG;IACH,QAFU,eAAe,CAElB;IAEP;;;;;;OAMG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;;OAKG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;OAKG;IACH,UAFU,OAAO,CAEA;CACpB;yBA/DY,OAAO,sDAAsD,EAAE,UAAU;8BACzE,OAAO,uBAAuB,EAAE,eAAe"}