@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
@@ -10,25 +10,10 @@ export class Trail3DEditor extends ObjectEditor {
10
10
  spawnDistance: {
11
11
  description: string;
12
12
  };
13
- time: {
13
+ knots: {
14
14
  transient: boolean;
15
15
  };
16
- trailingIndex: {
17
- transient: boolean;
18
- };
19
- timeSinceLastUpdate: {
20
- transient: boolean;
21
- };
22
- distanceSinceLastUpdate: {
23
- transient: boolean;
24
- };
25
- tube: {
26
- transient: boolean;
27
- };
28
- mesh: {
29
- transient: boolean;
30
- };
31
- bvh: {
16
+ clearCount: {
32
17
  transient: boolean;
33
18
  };
34
19
  flags: {
@@ -1 +1 @@
1
- {"version":3,"file":"Trail3DEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/Trail3DEditor.js"],"names":[],"mappings":"AAKA;IACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2CC;CACJ;6BA/C4B,8BAA8B;+BAF5B,6BAA6B"}
1
+ {"version":3,"file":"Trail3DEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/Trail3DEditor.js"],"names":[],"mappings":"AAKA;IACI;;;;;;;;;;;;;;;;;;;;;;;;MA4BC;CACJ;6BAhC4B,8BAA8B;+BAF5B,6BAA6B"}
@@ -11,30 +11,15 @@ export class Trail3DEditor extends ObjectEditor {
11
11
  description: "How long does the trail persist in time"
12
12
  },
13
13
  radialSegments: {
14
- description: "Radial resolution of the tube (rebuild to take effect)"
14
+ description: "Radial resolution of the tube (fixed when the trail is registered)"
15
15
  },
16
16
  spawnDistance: {
17
17
  description: "Distance between segments when spawning by distance"
18
18
  },
19
- time: {
19
+ knots: {
20
20
  transient: true
21
21
  },
22
- trailingIndex: {
23
- transient: true
24
- },
25
- timeSinceLastUpdate: {
26
- transient: true
27
- },
28
- distanceSinceLastUpdate: {
29
- transient: true
30
- },
31
- tube: {
32
- transient: true
33
- },
34
- mesh: {
35
- transient: true
36
- },
37
- bvh: {
22
+ clearCount: {
38
23
  transient: true
39
24
  },
40
25
  flags: {
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.68.0",
9
+ "version": "3.70.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -17,6 +17,22 @@ export class BVH8Converter {
17
17
  * @type {BVH8}
18
18
  */
19
19
  bvh8: BVH8;
20
+ /**
21
+ * Marks the BVH2 nodes that are roots of a primitive cluster, one byte per BVH2 node, non-zero for a
22
+ * root; `null` for a tree with no clusters.
23
+ *
24
+ * A cluster root always becomes a BVH8 node of its own, and no leaf slot is formed out of a BVH2
25
+ * node that holds a cluster root beneath it. Together those two give the guarantee this exists for:
26
+ * every BVH8 node's leaf slots draw their primitives from one cluster, and the run of
27
+ * {@link BVH8#primitives} a cluster's nodes address is contiguous and holds that cluster's primitives
28
+ * and nothing else. A consumer whose primitives are stored per cluster can then re-order each
29
+ * cluster's own storage to match and drop the pool.
30
+ *
31
+ * Cluster subtrees must be disjoint.
32
+ *
33
+ * @type {Uint8Array|null}
34
+ */
35
+ cluster_roots: Uint8Array | null;
20
36
  /**
21
37
  * Fill the decision table for the subtree of the given node, bottom-up.
22
38
  * @param {number} node_index
@@ -1 +1 @@
1
- {"version":3,"file":"BVH8Converter.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/BVH8Converter.js"],"names":[],"mappings":"AAmCA;;GAEG;AACH;IAYI;;;;OAIG;IACH,mCAGC;IAnBD;;;OAGG;IACH,UAAI;IAEJ;;OAEG;IACH,WAAI;IAkBJ;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAgJlB;IAED;;;;;;;;OAQG;IACH,yBANW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,gBACpB,MAAM,KACN,MAAM,GACJ,MAAM,CAoDlB;IAED;;;;;OAKG;IACH,2BAJW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,eACpB,MAAM,QAkFhB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,GACJ,MAAM,CAiClB;IAED;;;;OAIG;IACH,0BAHW,MAAM,mBACN,MAAM,QAYhB;IAoJD,gBAoBC;;CACJ"}
1
+ {"version":3,"file":"BVH8Converter.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/BVH8Converter.js"],"names":[],"mappings":"AAoCA;;GAEG;AACH;IA6BI;;;;OAIG;IACH,mCAGC;IApCD;;;OAGG;IACH,UAAI;IAEJ;;OAEG;IACH,WAAI;IAEJ;;;;;;;;;;;;;;OAcG;IACH,eAFU,UAAU,GAAC,IAAI,CAEL;IAkBpB;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAmLlB;IAED;;;;;;;;OAQG;IACH,yBANW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,gBACpB,MAAM,KACN,MAAM,GACJ,MAAM,CAoDlB;IAED;;;;;OAKG;IACH,2BAJW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,eACpB,MAAM,QAoDhB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,GACJ,MAAM,CAiClB;IAED;;;;OAIG;IACH,0BAHW,MAAM,mBACN,MAAM,QAYhB;IAwJD,gBAoBC;;CACJ"}
@@ -3,6 +3,7 @@ import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_
3
3
  import { NULL_NODE } from "../../bvh2/bvh3/BVH.js";
4
4
  import { BinaryElementPool } from "../../geom/3d/topology/struct/binary/BinaryElementPool.js";
5
5
  import { v3_dot } from "../../geom/vec3/v3_dot.js";
6
+ import { bvh8_assign_slots_greedy } from "./bvh8_assign_slots_greedy.js";
6
7
  import { byte } from "./byte.js";
7
8
  import { encode_bounds_e } from "./encode_bounds_e.js";
8
9
 
@@ -48,6 +49,23 @@ export class BVH8Converter {
48
49
  */
49
50
  bvh8
50
51
 
52
+ /**
53
+ * Marks the BVH2 nodes that are roots of a primitive cluster, one byte per BVH2 node, non-zero for a
54
+ * root; `null` for a tree with no clusters.
55
+ *
56
+ * A cluster root always becomes a BVH8 node of its own, and no leaf slot is formed out of a BVH2
57
+ * node that holds a cluster root beneath it. Together those two give the guarantee this exists for:
58
+ * every BVH8 node's leaf slots draw their primitives from one cluster, and the run of
59
+ * {@link BVH8#primitives} a cluster's nodes address is contiguous and holds that cluster's primitives
60
+ * and nothing else. A consumer whose primitives are stored per cluster can then re-order each
61
+ * cluster's own storage to match and drop the pool.
62
+ *
63
+ * Cluster subtrees must be disjoint.
64
+ *
65
+ * @type {Uint8Array|null}
66
+ */
67
+ cluster_roots = null
68
+
51
69
  /**
52
70
  *
53
71
  * @param {BVH8} bvh8
@@ -90,22 +108,33 @@ export class BVH8Converter {
90
108
 
91
109
  const primitive_counts = new Uint32Array(bvh2.size);
92
110
 
111
+ const cluster_roots = this.cluster_roots;
112
+
113
+ // non-zero where a node holds a cluster root strictly beneath it
114
+ const spans_clusters = new Uint8Array(cluster_roots !== null ? bvh2.size : 0);
115
+
93
116
  for (let k = order.length - 1; k >= 0; k--) {
94
117
  const node = order[k];
95
118
 
96
119
  const node_surface_area = bvh2.node_get_surface_area(node);
97
120
 
121
+ const is_cluster_root = cluster_roots !== null && cluster_roots[node] !== 0;
122
+
98
123
  if (bvh2.node_is_leaf(node)) {
99
124
  const num_primitives = 1;
100
125
 
101
- // SAH cost
102
- const cost_leaf = node_surface_area * num_primitives;
126
+ // SAH cost; a cluster of one primitive is a node holding one leaf slot
127
+ const cost = is_cluster_root
128
+ ? node_surface_area * (num_primitives + 1)
129
+ : node_surface_area * num_primitives;
130
+
131
+ const type = is_cluster_root ? DECISION_TYPE.INTERNAL : DECISION_TYPE.LEAF;
103
132
 
104
133
  for (let i = 0; i < 7; i++) {
105
134
  const decision_ptr = decisions.element_address(node * 7 + i);
106
135
 
107
- decisions.data_view.setUint8(decision_ptr, DECISION_TYPE.LEAF);
108
- decisions.data_view.setFloat32(decision_ptr + DECISION_OFFSET_COST, cost_leaf);
136
+ decisions.data_view.setUint8(decision_ptr, type);
137
+ decisions.data_view.setFloat32(decision_ptr + DECISION_OFFSET_COST, cost);
109
138
  }
110
139
 
111
140
  primitive_counts[node] = num_primitives;
@@ -116,10 +145,21 @@ export class BVH8Converter {
116
145
 
117
146
  const num_primitives = primitive_counts[left] + primitive_counts[right];
118
147
 
148
+ let can_be_leaf = num_primitives <= 3;
149
+
150
+ if (cluster_roots !== null) {
151
+ const spans = (cluster_roots[left] | cluster_roots[right] | spans_clusters[left] | spans_clusters[right]) !== 0;
152
+
153
+ spans_clusters[node] = spans ? 1 : 0;
154
+
155
+ // a leaf slot holds one cluster's primitives, and a cluster root is a node
156
+ can_be_leaf = can_be_leaf && !spans && !is_cluster_root;
157
+ }
158
+
119
159
  // Separate case: i=0 (i=1 in the paper)
120
160
  // create a new subtree root
121
161
  {
122
- const cost_leaf = num_primitives <= 3 ? num_primitives * node_surface_area : Infinity;
162
+ const cost_leaf = can_be_leaf ? num_primitives * node_surface_area : Infinity;
123
163
 
124
164
  let cost_distribute = Infinity;
125
165
 
@@ -164,6 +204,19 @@ export class BVH8Converter {
164
204
  for (let i = 1; i < 7; i++) {
165
205
  const decision_ptr_i = decisions.element_address(node * 7 + i - 1);
166
206
 
207
+ if (is_cluster_root) {
208
+ // a cluster root is one root, however many its parent could afford
209
+ const decision_ptr = decisions.element_address(node * 7 + i);
210
+
211
+ for (let j = 0; j < 7; j++) {
212
+ decisions.data_view.setUint8(decision_ptr + j,
213
+ decisions.data_view.getUint8(decision_ptr_i + j)
214
+ );
215
+ }
216
+
217
+ continue;
218
+ }
219
+
167
220
  let cost_distribute = decisions.data_view.getFloat32(decision_ptr_i + DECISION_OFFSET_COST);
168
221
 
169
222
  let distribute_left = INVALID;
@@ -315,38 +368,8 @@ export class BVH8Converter {
315
368
  }
316
369
 
317
370
  const assignment = new Uint32Array(8);
318
- assignment.fill(INVALID);
319
-
320
- let slot_filled = 0; // bitfield
321
-
322
-
323
- // Greedy child ordering, the paper mentions this as an alternative
324
- // that works about as well as the auction algorithm in practice
325
- while (true) {
326
- let min_cost = Infinity;
327
371
 
328
- let min_slot = INVALID;
329
- let min_index = INVALID;
330
-
331
- // Find the cheapest unfilled slot of any unassigned child
332
- for (let c = 0; c < child_count; c++) {
333
- if (assignment[c] === INVALID) {
334
- for (let s = 0; s < 8; s++) {
335
- if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
336
- min_cost = cost[c * 8 + s];
337
-
338
- min_slot = s;
339
- min_index = c;
340
- }
341
- }
342
- }
343
- }
344
-
345
- if (min_slot === INVALID) break;
346
-
347
- slot_filled |= 1 << min_slot;
348
- assignment [min_index] = min_slot;
349
- }
372
+ bvh8_assign_slots_greedy(assignment, cost, child_count);
350
373
 
351
374
  // Permute children array according to assignment
352
375
  const children_copy = new Uint32Array(8);
@@ -507,7 +530,11 @@ export class BVH8Converter {
507
530
 
508
531
  const child_decision_ptr = this.#decisions.element_address(child_index * 7);
509
532
 
510
- const child_decision_type = this.#decisions.data_view.getUint8(child_decision_ptr);
533
+ // a BVH2 leaf asked for its children answers with itself: a cluster of one primitive, or a
534
+ // tree of one, and either way this node's one slot is that primitive
535
+ const child_decision_type = child_index === node_index_bvh2
536
+ ? DECISION_TYPE.LEAF
537
+ : this.#decisions.data_view.getUint8(child_decision_ptr);
511
538
 
512
539
  let child_meta = 0;
513
540
 
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Give each child of a wide node one of its eight slots, cheapest pair first.
3
+ *
4
+ * A ray visits a node's slots in an order fixed by the signs of its direction, so which slot a child
5
+ * sits in decides how early a ray going its way reaches it. `cost[child * 8 + slot]` says how badly a
6
+ * child suits a slot; the cheapest (child, slot) pair still open is taken until every child has a
7
+ * slot. Ylitie et al. name this greedy as doing about as well in practice as the auction algorithm
8
+ * they use.
9
+ *
10
+ * Of equal costs the first met wins: children in order, and for a child its slots in order. Two
11
+ * builders that fill the table with the same numbers get the same slots.
12
+ *
13
+ * @param {Uint32Array|number[]} assignment output, a slot per child; {@link BVH8_SLOT_UNASSIGNED}
14
+ * past `child_count`
15
+ * @param {Float32Array|number[]} cost 64 entries, `[child * 8 + slot]`; read for `child < child_count`
16
+ * @param {number} child_count at most 8
17
+ * @returns {number} the slots taken, a bit each
18
+ */
19
+ export function bvh8_assign_slots_greedy(assignment: Uint32Array | number[], cost: Float32Array | number[], child_count: number): number;
20
+ /**
21
+ * What {@link bvh8_assign_slots_greedy} leaves in `assignment` for a child it was not asked about.
22
+ * @type {number}
23
+ */
24
+ export const BVH8_SLOT_UNASSIGNED: number;
25
+ //# sourceMappingURL=bvh8_assign_slots_greedy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh8_assign_slots_greedy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_assign_slots_greedy.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,qDANW,WAAW,GAAC,MAAM,EAAE,QAEpB,YAAY,GAAC,MAAM,EAAE,eACrB,MAAM,GACJ,MAAM,CA2ClB;AAjED;;;GAGG;AACH,mCAFU,MAAM,CAE+B"}
@@ -0,0 +1,68 @@
1
+ import { assert } from "../../assert.js";
2
+
3
+ /**
4
+ * What {@link bvh8_assign_slots_greedy} leaves in `assignment` for a child it was not asked about.
5
+ * @type {number}
6
+ */
7
+ export const BVH8_SLOT_UNASSIGNED = 0xFFFFFFFF;
8
+
9
+ /**
10
+ * Give each child of a wide node one of its eight slots, cheapest pair first.
11
+ *
12
+ * A ray visits a node's slots in an order fixed by the signs of its direction, so which slot a child
13
+ * sits in decides how early a ray going its way reaches it. `cost[child * 8 + slot]` says how badly a
14
+ * child suits a slot; the cheapest (child, slot) pair still open is taken until every child has a
15
+ * slot. Ylitie et al. name this greedy as doing about as well in practice as the auction algorithm
16
+ * they use.
17
+ *
18
+ * Of equal costs the first met wins: children in order, and for a child its slots in order. Two
19
+ * builders that fill the table with the same numbers get the same slots.
20
+ *
21
+ * @param {Uint32Array|number[]} assignment output, a slot per child; {@link BVH8_SLOT_UNASSIGNED}
22
+ * past `child_count`
23
+ * @param {Float32Array|number[]} cost 64 entries, `[child * 8 + slot]`; read for `child < child_count`
24
+ * @param {number} child_count at most 8
25
+ * @returns {number} the slots taken, a bit each
26
+ */
27
+ export function bvh8_assign_slots_greedy(assignment, cost, child_count) {
28
+ assert.isNonNegativeInteger(child_count, 'child_count');
29
+ assert.lessThanOrEqual(child_count, 8, 'a node has eight slots');
30
+
31
+ for (let i = 0; i < 8; i++) {
32
+ assignment[i] = BVH8_SLOT_UNASSIGNED;
33
+ }
34
+
35
+ let slot_filled = 0;
36
+
37
+ for (; ;) {
38
+ let min_cost = Infinity;
39
+
40
+ let min_slot = BVH8_SLOT_UNASSIGNED;
41
+ let min_index = BVH8_SLOT_UNASSIGNED;
42
+
43
+ // the cheapest open slot of any child still without one
44
+ for (let c = 0; c < child_count; c++) {
45
+ if (assignment[c] !== BVH8_SLOT_UNASSIGNED) {
46
+ continue;
47
+ }
48
+
49
+ for (let s = 0; s < 8; s++) {
50
+ if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
51
+ min_cost = cost[c * 8 + s];
52
+
53
+ min_slot = s;
54
+ min_index = c;
55
+ }
56
+ }
57
+ }
58
+
59
+ if (min_slot === BVH8_SLOT_UNASSIGNED) {
60
+ break;
61
+ }
62
+
63
+ slot_filled |= 1 << min_slot;
64
+ assignment[min_index] = min_slot;
65
+ }
66
+
67
+ return slot_filled;
68
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"bvh8_from_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_from_proxy.js"],"names":[],"mappings":"AA0OA;;;;;;GAMG;AACH,0EAHW,MAAM,EAAE,kBACR,MAAM,EAAE,QAgBlB"}
1
+ {"version":3,"file":"bvh8_from_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_from_proxy.js"],"names":[],"mappings":"AA2MA;;;;;;GAMG;AACH,0EAHW,MAAM,EAAE,kBACR,MAAM,EAAE,QAgBlB"}
@@ -1,6 +1,7 @@
1
1
  import { assert } from "../../assert.js";
2
2
  import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_as_uint32.js";
3
3
  import { v3_dot } from "../../geom/vec3/v3_dot.js";
4
+ import { bvh8_assign_slots_greedy } from "./bvh8_assign_slots_greedy.js";
4
5
  import { byte } from "./byte.js";
5
6
  import { encode_bounds_e } from "./encode_bounds_e.js";
6
7
 
@@ -41,41 +42,9 @@ function bvh8_sort_children(node, children, child_count) {
41
42
  }
42
43
  }
43
44
 
44
- const INVALID = 0xFFFFFFFF;
45
-
46
45
  const assignment = new Uint32Array(8);
47
- assignment.fill(INVALID);
48
-
49
- let slot_filled = 0; // bitfield
50
-
51
-
52
- // Greedy child ordering, the paper mentions this as an alternative
53
- // that works about as well as the auction algorithm in practice
54
- while (true) {
55
- let min_cost = Infinity;
56
-
57
- let min_slot = INVALID;
58
- let min_index = INVALID;
59
-
60
- // Find the cheapest unfilled slot of any unassigned child
61
- for (let c = 0; c < child_count; c++) {
62
- if (assignment[c] === INVALID) {
63
- for (let s = 0; s < 8; s++) {
64
- if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
65
- min_cost = cost[c * 8 + s];
66
46
 
67
- min_slot = s;
68
- min_index = c;
69
- }
70
- }
71
- }
72
- }
73
-
74
- if (min_slot === INVALID) break;
75
-
76
- slot_filled |= 1 << min_slot;
77
- assignment [min_index] = min_slot;
78
- }
47
+ bvh8_assign_slots_greedy(assignment, cost, child_count);
79
48
 
80
49
  // Permute children array according to assignment
81
50
  const children_copy = new Array(8);
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Put a node on the grid of its own box, and write each of its occupied slots' boxes in bytes on it:
3
+ * the origin at the box's low corner, a power-of-two step an axis that spans the box in 255, a
4
+ * slot's low corner rounded down to the grid and its high corner up.
5
+ *
6
+ * Writes the node's origin, its three exponents and the quantized boxes of the slots named, and
7
+ * zeroes the boxes of the others. The node's child mask, its bases and its metas are left as they
8
+ * are.
9
+ *
10
+ * Every step is a single-precision one, in a fixed order, and it is the arithmetic the GPU's passes
11
+ * that fit nodes do (`shader_blas8_refit_batch`, the TLAS encode): the same boxes in give the same
12
+ * words out, there and here. A slot's box comes out holding the box it was given whenever that box
13
+ * lies inside the node's.
14
+ *
15
+ * @param {BVH8} bvh
16
+ * @param {number} node
17
+ * @param {ArrayLike<number>} box the node's own box, `[min.xyz, max.xyz]`, float32 values
18
+ * @param {ArrayLike<number>} slot_boxes six floats a slot, 48 in all; read for the slots in `occupied`
19
+ * @param {number} occupied the slots to write, a bit each
20
+ */
21
+ export function bvh8_node_fit_slots(bvh: BVH8, node: number, box: ArrayLike<number>, slot_boxes: ArrayLike<number>, occupied: number): void;
22
+ //# sourceMappingURL=bvh8_node_fit_slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh8_node_fit_slots.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_node_fit_slots.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qDALW,MAAM,OACN,UAAU,MAAM,CAAC,cACjB,UAAU,MAAM,CAAC,YACjB,MAAM,QA6ChB"}
@@ -0,0 +1,115 @@
1
+ import { assert } from "../../assert.js";
2
+ import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_as_uint32.js";
3
+ import { reinterpret_uint32_as_float32 } from "../../binary/reinterpret_uint32_as_float32.js";
4
+
5
+ const fround = Math.fround;
6
+
7
+ const ONE_OVER_255 = fround(1 / 255);
8
+
9
+ /**
10
+ * The next float up from a difference that cannot be negative. A difference of two floats is
11
+ * rounded, and a box must not shrink by the rounding. Nothing is added to an exact zero.
12
+ *
13
+ * @param {number} x a float32 value, zero or above
14
+ * @returns {number}
15
+ */
16
+ function round_up(x) {
17
+ return x > 0 ? reinterpret_uint32_as_float32(reinterpret_float32_as_uint32(x) + 1) : x;
18
+ }
19
+
20
+ /**
21
+ * The next float down, as {@link round_up} is the next up.
22
+ *
23
+ * @param {number} x a float32 value, zero or above
24
+ * @returns {number}
25
+ */
26
+ function round_down(x) {
27
+ return x > 0 ? reinterpret_uint32_as_float32(reinterpret_float32_as_uint32(x) - 1) : x;
28
+ }
29
+
30
+ /**
31
+ * The exponent byte of the smallest power of two that spans an extent in 255 steps; zero, a step of
32
+ * nothing, for no extent at all.
33
+ *
34
+ * @param {number} extent a float32 value
35
+ * @returns {number}
36
+ */
37
+ function step_exponent(extent) {
38
+ if (!(extent > 0)) {
39
+ return 0;
40
+ }
41
+
42
+ // the power of two at or below a 255th of the extent, and the next one up unless that one spans it
43
+ let exponent = (reinterpret_float32_as_uint32(fround(extent * ONE_OVER_255)) >>> 23) & 0xFF;
44
+
45
+ if (extent > fround(255 * reinterpret_uint32_as_float32(exponent << 23))) {
46
+ exponent += 1;
47
+ }
48
+
49
+ return exponent;
50
+ }
51
+
52
+ /**
53
+ * Put a node on the grid of its own box, and write each of its occupied slots' boxes in bytes on it:
54
+ * the origin at the box's low corner, a power-of-two step an axis that spans the box in 255, a
55
+ * slot's low corner rounded down to the grid and its high corner up.
56
+ *
57
+ * Writes the node's origin, its three exponents and the quantized boxes of the slots named, and
58
+ * zeroes the boxes of the others. The node's child mask, its bases and its metas are left as they
59
+ * are.
60
+ *
61
+ * Every step is a single-precision one, in a fixed order, and it is the arithmetic the GPU's passes
62
+ * that fit nodes do (`shader_blas8_refit_batch`, the TLAS encode): the same boxes in give the same
63
+ * words out, there and here. A slot's box comes out holding the box it was given whenever that box
64
+ * lies inside the node's.
65
+ *
66
+ * @param {BVH8} bvh
67
+ * @param {number} node
68
+ * @param {ArrayLike<number>} box the node's own box, `[min.xyz, max.xyz]`, float32 values
69
+ * @param {ArrayLike<number>} slot_boxes six floats a slot, 48 in all; read for the slots in `occupied`
70
+ * @param {number} occupied the slots to write, a bit each
71
+ */
72
+ export function bvh8_node_fit_slots(bvh, node, box, slot_boxes, occupied) {
73
+ assert.isNonNegativeInteger(node, 'node');
74
+ assert.isNonNegativeInteger(occupied, 'occupied');
75
+ assert.lessThan(occupied, 256, 'a node has eight slots');
76
+
77
+ const min_x = box[0], min_y = box[1], min_z = box[2];
78
+
79
+ const exponent_x = step_exponent(round_up(fround(box[3] - min_x)));
80
+ const exponent_y = step_exponent(round_up(fround(box[4] - min_y)));
81
+ const exponent_z = step_exponent(round_up(fround(box[5] - min_z)));
82
+
83
+ bvh.node_set_p(node, min_x, min_y, min_z);
84
+ bvh.node_set_e(node, exponent_x, exponent_y, exponent_z);
85
+
86
+ // a step of nothing takes every byte to zero
87
+ const per_cell_x = exponent_x > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_x << 23)) : 0;
88
+ const per_cell_y = exponent_y > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_y << 23)) : 0;
89
+ const per_cell_z = exponent_z > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_z << 23)) : 0;
90
+
91
+ for (let slot = 0; slot < 8; slot++) {
92
+ if ((occupied & (1 << slot)) === 0) {
93
+ bvh.node_set_quantized_min(node, slot, 0, 0, 0);
94
+ bvh.node_set_quantized_max(node, slot, 0, 0, 0);
95
+
96
+ continue;
97
+ }
98
+
99
+ const o = slot * 6;
100
+
101
+ bvh.node_set_quantized_min(
102
+ node, slot,
103
+ Math.floor(fround(round_down(fround(slot_boxes[o] - min_x)) * per_cell_x)),
104
+ Math.floor(fround(round_down(fround(slot_boxes[o + 1] - min_y)) * per_cell_y)),
105
+ Math.floor(fround(round_down(fround(slot_boxes[o + 2] - min_z)) * per_cell_z)),
106
+ );
107
+
108
+ bvh.node_set_quantized_max(
109
+ node, slot,
110
+ Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 3] - min_x)) * per_cell_x))),
111
+ Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 4] - min_y)) * per_cell_y))),
112
+ Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 5] - min_z)) * per_cell_z))),
113
+ );
114
+ }
115
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Levels of nodes in a BVH8, the root's included: 1 for a tree of one node, 0 for an empty one.
3
+ *
4
+ * @param {BVH8} bvh
5
+ * @returns {number}
6
+ */
7
+ export function bvh8_depth(bvh: BVH8): number;
8
+ //# sourceMappingURL=bvh8_depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bvh8_depth.d.ts","sourceRoot":"","sources":["../../../../src/core/bvh8/bvh8_depth.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,uCAFa,MAAM,CAkClB"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Levels of nodes in a BVH8, the root's included: 1 for a tree of one node, 0 for an empty one.
3
+ *
4
+ * @param {BVH8} bvh
5
+ * @returns {number}
6
+ */
7
+ export function bvh8_depth(bvh) {
8
+ if (bvh.nodes.size === 0) {
9
+ return 0;
10
+ }
11
+
12
+ let deepest = 0;
13
+
14
+ // (node, level) pairs
15
+ const stack = [0, 1];
16
+
17
+ while (stack.length > 0) {
18
+ const level = stack.pop();
19
+ const node = stack.pop();
20
+
21
+ if (level > deepest) {
22
+ deepest = level;
23
+ }
24
+
25
+ const imask = bvh.node_get_imask(node);
26
+ const base_index_child = bvh.node_get_base_index_child(node);
27
+
28
+ let child = 0;
29
+
30
+ for (let slot = 0; slot < 8; slot++) {
31
+ if ((imask & (1 << slot)) !== 0) {
32
+ stack.push(base_index_child + child, level + 1);
33
+ child++;
34
+ }
35
+ }
36
+ }
37
+
38
+ return deepest;
39
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The discrete Fourier transform of `n` complex values, in place, radix 2:
3
+ *
4
+ * X_k = Σ_j x_j · e^(∓2πi·jk/n)
5
+ *
6
+ * the minus sign forward, the plus sign inverse. The inverse is not scaled: a forward transform
7
+ * then an inverse one multiplies every value by `n`.
8
+ *
9
+ * Iterative Cooley–Tukey, decimation in time: a bit-reversal permutation, then `log2(n)` stages of
10
+ * butterflies. Each stage's twiddles are taken from `Math.cos` and `Math.sin` directly, `n − 1` pairs
11
+ * over the transform, so the error does not grow along a recurrence. Allocates nothing.
12
+ *
13
+ * @param {Float64Array|Float32Array|number[]} re real parts, read and written at `0..n−1`
14
+ * @param {Float64Array|Float32Array|number[]} im imaginary parts, likewise
15
+ * @param {number} n a power of two
16
+ * @param {boolean} inverse
17
+ */
18
+ export function complex_fft_radix2(re: Float64Array | Float32Array | number[], im: Float64Array | Float32Array | number[], n: number, inverse: boolean): void;
19
+ //# sourceMappingURL=complex_fft_radix2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complex_fft_radix2.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/complex/complex_fft_radix2.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,uCALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,MAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAClC,MAAM,WACN,OAAO,QAoDjB"}