@woosh/meep-engine 3.68.0 → 3.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  5. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  6. package/package.json +1 -1
  7. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  8. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  9. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  10. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  11. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  12. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  13. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  14. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  15. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  16. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  17. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  18. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  19. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  20. package/src/core/bvh8/bvh8_depth.js +39 -0
  21. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  22. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  23. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  24. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  25. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  27. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  28. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  29. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  30. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  32. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  33. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  34. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  35. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  36. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  37. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  38. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  39. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  40. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  41. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  42. package/src/engine/graphics3/EntityRowHold.js +128 -0
  43. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  46. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  49. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  50. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  51. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  52. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  53. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  54. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  55. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  56. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  58. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  59. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  60. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  61. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  62. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  63. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  64. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  65. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  66. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  67. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  68. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  69. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  70. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  71. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  72. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  73. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  74. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  75. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  76. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  77. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  78. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  79. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  80. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  81. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  82. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  83. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  84. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  85. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  86. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  87. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  88. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  89. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  90. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  91. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  92. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  93. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  94. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  95. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  96. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  98. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  99. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  100. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  101. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  102. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  103. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  104. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  105. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  106. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  107. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  108. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  109. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  110. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  111. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  112. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  113. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  114. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  115. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  116. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  117. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  118. package/src/shade/playground/bvh_repro/README.md +8 -6
  119. package/src/shade/playground/bvh_repro/index.html +125 -124
  120. package/src/shade/playground/bvh_repro/main.js +259 -254
  121. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  122. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  123. package/src/shade/playground/grass_surfaces/main.js +3 -2
  124. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  125. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  126. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  127. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  128. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  129. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  130. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  131. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  132. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  133. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  134. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  135. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  136. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  137. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  138. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  139. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  140. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  141. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  142. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  143. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  144. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  145. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  146. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  147. package/src/shade/playground/trails/index.html +50 -0
  148. package/src/shade/playground/trails/main.d.ts +2 -0
  149. package/src/shade/playground/trails/main.d.ts.map +1 -0
  150. package/src/shade/playground/trails/main.js +258 -0
  151. package/src/shade/playground/water_surface/main.js +6 -3
  152. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  153. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  154. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  155. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  156. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  157. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  158. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  159. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  160. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  161. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  162. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  163. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  164. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  165. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  166. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  167. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  168. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  169. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  170. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  171. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  172. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  173. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  174. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  175. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  176. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  177. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  178. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  179. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  180. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  181. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  182. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  183. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  184. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  185. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  186. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  187. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  188. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  189. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  190. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  191. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  192. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  193. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  194. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  195. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  196. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  197. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  198. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  199. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  200. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  201. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  202. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  203. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  204. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  205. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  206. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  207. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  208. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  209. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  210. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
  211. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  212. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  213. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  214. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  215. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  216. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  217. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  218. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  219. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  220. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  221. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  222. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  223. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  224. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  225. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  226. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  227. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +340 -282
  228. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  229. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  231. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  232. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  233. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  234. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  236. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  237. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  238. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  239. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  240. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  241. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  242. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  243. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  244. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  245. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  246. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  247. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  248. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  249. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  250. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  251. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  252. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  253. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  254. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  255. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  256. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  257. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  258. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  259. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  260. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  261. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  262. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  263. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  264. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  265. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  266. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  267. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  268. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  269. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  270. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  271. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  272. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  273. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  274. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  275. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  276. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  280. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  281. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  282. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  283. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  284. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  285. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  286. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  287. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  288. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  289. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  290. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  291. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  292. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  293. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  298. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  299. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  300. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  301. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  302. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  303. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  304. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  305. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  306. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  307. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  308. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  309. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  310. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  311. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  312. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  313. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  314. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  315. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  316. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  317. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  318. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  319. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  320. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  321. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  322. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  323. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  324. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  325. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  326. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  327. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  328. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  329. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  330. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  331. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  332. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  333. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  334. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  335. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  336. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  337. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  338. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  339. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  340. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  341. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  342. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  343. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  344. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  345. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  346. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  347. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  348. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  349. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  350. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  351. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  352. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  353. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  354. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  355. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  356. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  357. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  358. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  359. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  360. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  361. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  362. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  363. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  364. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  365. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  366. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  367. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  368. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  369. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  370. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  371. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  372. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  373. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  374. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  375. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  376. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  377. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  378. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  379. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  380. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  381. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  382. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  383. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  384. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  385. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  386. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  387. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  388. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  389. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  390. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  391. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  393. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  394. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  396. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  397. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  398. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  399. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  400. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  401. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  402. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  403. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  404. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  405. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  406. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  407. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  408. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  409. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  410. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  411. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  412. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  413. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  414. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  415. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  416. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  417. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  418. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  420. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  421. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  422. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  423. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  424. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  426. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  427. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  428. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  429. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  430. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  431. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  432. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  433. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  434. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  435. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  436. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  437. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  438. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  439. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  440. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  441. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  442. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  443. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  444. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  445. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  446. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  447. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  448. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  449. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  450. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  451. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  452. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  453. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  454. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  455. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  456. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  457. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  458. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  459. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  460. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  461. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  462. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  463. package/src/shade/renderer/trails/graph_trails.js +155 -0
  464. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  465. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  466. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  467. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  468. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  469. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  470. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  471. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  472. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  473. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  474. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  475. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  476. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  477. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  478. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  479. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  480. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  481. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  482. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  483. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  484. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  485. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  486. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  487. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  488. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  489. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  490. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  491. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  492. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  493. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  494. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  495. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  496. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  497. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  498. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  499. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  500. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  501. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  502. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  503. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  504. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  505. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  506. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  507. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  508. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  509. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  510. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  511. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  512. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  513. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  514. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  515. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  516. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  517. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  518. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  519. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  520. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  521. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  522. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  523. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  524. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  525. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  526. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  527. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  528. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  529. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  530. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  531. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  532. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  533. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  534. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  535. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  536. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  537. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  538. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  539. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  540. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  541. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  542. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  543. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  544. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  545. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  546. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  547. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  548. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  549. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  550. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  551. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  552. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  553. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  554. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  555. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  556. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  557. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  558. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  559. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  560. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  561. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  562. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  563. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  564. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  565. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  566. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  567. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  568. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  569. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  570. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  571. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  572. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  573. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  574. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  575. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  576. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  577. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  578. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  579. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  580. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  581. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  582. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  583. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  584. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -1,3 +1,25 @@
1
+ /**
2
+ * Nearest point of one geometry's surface to a point, through its tree: `primitive` is the
3
+ * `(meshlet << 8) | triangle` id of the nearest triangle within `max_distance`, or all ones when there
4
+ * is none.
5
+ *
6
+ * A node is visited once for its own triangles: those of the slots whose boxes are nearer than the best
7
+ * found, one after another, and each time one of them is nearer still the rest are held to it. Its
8
+ * child nodes are then taken nearest box first, and what is left of them waits on the stack as one
9
+ * entry:
10
+ *
11
+ * - one other child worth a visit waits as itself, and is visited whatever has been found by then;
12
+ * - several wait as their node; on the way back the node is read again and the nearest of those that
13
+ * still beats the best is taken.
14
+ *
15
+ * So the stack is as deep as the tree and no deeper, whatever the fan-out.
16
+ *
17
+ * `stack` is the caller's, used from `stack_top` up and handed back as it was found below that. The
18
+ * walk reads and writes the first word of an entry and nothing else of it: which of a waiting node's
19
+ * slots are still to visit stays with the walk, a byte a level ({@link chunk_bvh8_waiting_slots}).
20
+ *
21
+ * @type {CodeChunk}
22
+ */
1
23
  export const chunk_point_query_blas_nearest: CodeChunk;
2
24
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
25
  //# sourceMappingURL=chunk_point_query_blas_nearest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_point_query_blas_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js"],"names":[],"mappings":"AAgBA,uDAsHE;0BArIwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_point_query_blas_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,6CAFU,SAAS,CA8IjB;0BAjLwB,6BAA6B"}
@@ -1,135 +1,182 @@
1
+ import { assert } from "../../../../../core/assert.js";
1
2
  import { UINT32_MAX } from "../../../../../core/binary/UINT32_MAX.js";
3
+ import { GEOMETRY_METADATA_STRUCT } from "../../../geometry/GEOMETRY_METADATA_STRUCT.js";
4
+ import { MESHLET_METADATA_STRUCT } from "../../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
2
5
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
- import { BVH_NULL_NODE_DEFINITION } from "../bvh/BVH_NULL_NODE_DEFINITION.js";
4
- import { BVH_TRAVERSAL_STACK_SIZE } from "../bvh/BVH_TRAVERSAL_STACK_SIZE.js";
5
- import {
6
- chunk_aabb3_unsigned_distance_sqr_to_point
7
- } from "../geometry/aabb3/chunk_aabb3_unsigned_distance_sqr_to_point.js";
8
- import { chunk_geometry_read_triangle_vertices } from "../geometry/format/chunk_geometry_read_triangle_vertices.js";
6
+ import { chunk_read_meshlet_resolved_index } from "../geometry/meshlet/chunk_read_meshlet_resolved_index.js";
7
+ import { chunk_read_meshlet_vertex_position } from "../geometry/meshlet/chunk_read_meshlet_vertex_position.js";
9
8
  import { chunk_compute_triangle_face_normal } from "../geometry/normal/chunk_compute_triangle_face_normal.js";
10
- import { chunk_f32_array_as_vec3 } from "../geometry/vec3/chunk_f32_array_as_vec3.js";
11
9
  import {
12
10
  chunk_triangle_closest_point_to_point_barycentric
13
11
  } from "./chunk_triangle_closest_point_to_point_barycentric.js";
14
12
  import { SURFACE_POINT_3D } from "./SURFACE_POINT_3D.js";
13
+ import { BVH8_INODE_STRUCT } from "../bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
14
+ import { BVH8_BLAS_MAX_DEPTH, BVH8_TRAVERSAL_STACK_SIZE } from "../bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
15
+ import { chunk_bvh8_node_slot_distances } from "../bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js";
16
+ import { BVH8_WAITING_SLOTS_CAPACITY, chunk_bvh8_waiting_slots } from "../bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js";
15
17
 
18
+ assert.lessThanOrEqual(BVH8_BLAS_MAX_DEPTH, BVH8_WAITING_SLOTS_CAPACITY, 'a BLAS may be deeper than the walk can keep slots for');
16
19
 
20
+ /**
21
+ * Nearest point of one geometry's surface to a point, through its tree: `primitive` is the
22
+ * `(meshlet << 8) | triangle` id of the nearest triangle within `max_distance`, or all ones when there
23
+ * is none.
24
+ *
25
+ * A node is visited once for its own triangles: those of the slots whose boxes are nearer than the best
26
+ * found, one after another, and each time one of them is nearer still the rest are held to it. Its
27
+ * child nodes are then taken nearest box first, and what is left of them waits on the stack as one
28
+ * entry:
29
+ *
30
+ * - one other child worth a visit waits as itself, and is visited whatever has been found by then;
31
+ * - several wait as their node; on the way back the node is read again and the nearest of those that
32
+ * still beats the best is taken.
33
+ *
34
+ * So the stack is as deep as the tree and no deeper, whatever the fan-out.
35
+ *
36
+ * `stack` is the caller's, used from `stack_top` up and handed back as it was found below that. The
37
+ * walk reads and writes the first word of an entry and nothing else of it: which of a waiting node's
38
+ * slots are still to visit stays with the walk, a byte a level ({@link chunk_bvh8_waiting_slots}).
39
+ *
40
+ * @type {CodeChunk}
41
+ */
17
42
  export const chunk_point_query_blas_nearest = CodeChunk.from(
18
43
  //language=WGSL
19
44
  `
20
- fn point_query_blas_nearest (
21
- position:vec3<f32>,
45
+ fn point_query_blas_nearest(
46
+ position: vec3<f32>,
22
47
  max_distance: f32,
23
- geometry_index:u32,
24
- stack:ptr<function, array<u32,${BVH_TRAVERSAL_STACK_SIZE}> >,
25
- stack_top:u32
26
- ) -> ${SURFACE_POINT_3D.wgsl_ref}{
27
-
48
+ geometry_index: u32,
49
+ stack: ptr<function, array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>>,
50
+ stack_top: u32,
51
+ ) -> ${SURFACE_POINT_3D.wgsl_ref} {
52
+
28
53
  let geometry = geometries[geometry_index];
29
-
54
+
30
55
  let blas_address = blas_lookup[geometry_index];
31
-
32
- var pointer = stack_top + 1;
33
-
34
- var node_index = 0u;
35
-
56
+
36
57
  var nearest_distance_sqr = max_distance * max_distance;
37
-
58
+
38
59
  var out: ${SURFACE_POINT_3D.wgsl_ref};
39
- out.primitive = ${UINT32_MAX}; // used to indicate a miss on output
40
-
41
- for(;pointer > stack_top && pointer < ${BVH_TRAVERSAL_STACK_SIZE};){
42
-
43
- let node = blas_data[ blas_address + node_index ];
44
-
45
- let child_1 = node.child_1;
46
- let child_2 = node.child_2;
47
-
48
- if(child_1 != BVH_NULL_NODE){
49
- // not a leaf node
50
- let child_1_bounds = blas_data[ blas_address + child_1 ].bounds;
51
- let distance_sqr_to_child1 = aabb3_unsigned_distance_sqr_to_point(child_1_bounds, position);
52
-
53
- let child_2_bounds = blas_data[ blas_address + child_2 ].bounds;
54
- let distance_sqr_to_child2 = aabb3_unsigned_distance_sqr_to_point(child_2_bounds, position);
55
-
56
- // sort children
57
- var sorted_children = vec2(child_1, child_2);
58
- var sorted_distances = vec2(distance_sqr_to_child1, distance_sqr_to_child2);
59
-
60
- if (distance_sqr_to_child2 < distance_sqr_to_child1) {
61
-
62
- sorted_children = sorted_children.yx;
63
- sorted_distances = sorted_distances.yx;
60
+ out.primitive = ${UINT32_MAX}u; // a miss, until something is found
64
61
 
62
+ // the walk's own part of the stack
63
+ let stack_end = min(stack_top + ${BVH8_WAITING_SLOTS_CAPACITY}u, ${BVH8_TRAVERSAL_STACK_SIZE}u);
64
+
65
+ var pointer = stack_top;
66
+
67
+ // the slots still to visit of each node waiting on the stack; none for a child waiting as itself
68
+ var waiting = vec4<u32>(0u);
69
+
70
+ // the node being looked at, and which of its child slots are still to visit
71
+ var node_index = blas_address;
72
+ var pending = 0u;
73
+ var arriving = true;
74
+
75
+ loop {
76
+ let node: ${BVH8_INODE_STRUCT.wgsl_ref} = blas_data[node_index];
77
+ let distances = bvh8_node_slot_distances_sqr(node, position);
78
+
79
+ let imask = node.data[0].w >> 24u;
80
+
81
+ if (arriving) {
82
+ // this node's own triangles first: what they find prunes its children
83
+ let runs = bvh8_node_slot_runs(node);
84
+
85
+ var run = bvh8_slot_runs_within(runs, distances, nearest_distance_sqr);
86
+
87
+ if (run != 0u) {
88
+ // a node's triangles are one run of one meshlet
89
+ let triangle_base = node.data[1].y;
90
+
91
+ let meshlet_header = meshlet_metadata[geometry.meshlets_address + (triangle_base >> 8u)];
92
+
93
+ while (run != 0u) {
94
+ let encoded_triangle_id = triangle_base + countTrailingZeros(run);
95
+
96
+ run &= run - 1u;
97
+
98
+ let corner = (encoded_triangle_id & 0xffu) * 3u;
99
+
100
+ let a = read_meshlet_vertex_position(meshlet_header, read_meshlet_resolved_index(meshlet_header, corner));
101
+ let b = read_meshlet_vertex_position(meshlet_header, read_meshlet_resolved_index(meshlet_header, corner + 1u));
102
+ let c = read_meshlet_vertex_position(meshlet_header, read_meshlet_resolved_index(meshlet_header, corner + 2u));
103
+
104
+ let barycentric = triangle_closest_point_to_point_barycentric(position, a, b, c);
105
+
106
+ let contact = a * barycentric.x + b * barycentric.y + c * (1.0 - barycentric.x - barycentric.y);
107
+
108
+ let offset = position - contact;
109
+ let distance_sqr = dot(offset, offset);
110
+
111
+ if (distance_sqr < nearest_distance_sqr) {
112
+ nearest_distance_sqr = distance_sqr;
113
+
114
+ out.position = contact;
115
+ out.normal = compute_triangle_face_normal(a, b, c);
116
+ out.primitive = encoded_triangle_id;
117
+
118
+ // slots no nearer than this are done with
119
+ run &= bvh8_slot_runs_within(runs, distances, nearest_distance_sqr);
120
+ }
121
+ }
65
122
  }
66
-
67
- if(sorted_distances.y < nearest_distance_sqr){
68
- // both children are within range
69
-
70
- node_index = sorted_children.x;
71
-
72
- stack[ pointer ] = sorted_children.y;
73
-
74
- pointer ++;
75
-
76
- }else if(sorted_distances.x < nearest_distance_sqr){
77
-
78
- node_index = sorted_children.x;
79
-
80
- }else{
81
-
82
- pointer --;
83
- node_index = stack[pointer];
84
-
85
- }
86
-
87
- }else{
88
-
89
- pointer --;
90
- node_index = stack[pointer];
91
-
92
- let triangle_index = child_2;
93
- let triangle = geometry_read_triangle_vertices(geometry, child_2);
94
-
95
- let a = triangle.a.position;
96
- let b = triangle.b.position;
97
- let c = triangle.c.position;
98
-
99
- let barycentric2 = triangle_closest_point_to_point_barycentric(position, a, b, c);
100
-
101
- let u = barycentric2.x;
102
- let v = barycentric2.y;
103
- let w = 1 - u - v;
104
-
105
- let contact = a*u + b*v + c*w;
106
-
107
- let distance_to_triangle = distance(position, contact);
108
- let distance_to_triangle_sqr = distance_to_triangle * distance_to_triangle;
109
-
110
- if (distance_to_triangle_sqr >= nearest_distance_sqr) {
111
- continue;
123
+
124
+ pending = imask;
125
+ }
126
+
127
+ // the children still to visit that are worth one
128
+ let worthwhile = bvh8_slots_within(distances, nearest_distance_sqr) & pending;
129
+
130
+ if (worthwhile != 0u) {
131
+ let nearest_slot = bvh8_nearest_slot_among(distances, worthwhile);
132
+
133
+ // the node's children sit in one block, in slot order
134
+ let child_block = blas_address + node.data[1].x;
135
+
136
+ let later = worthwhile & ~(1u << nearest_slot);
137
+
138
+ if (later != 0u && pointer < stack_end) {
139
+ let lone = (later & (later - 1u)) == 0u;
140
+
141
+ stack[pointer].x = select(node_index, child_block + countOneBits(imask & (later - 1u)), lone);
142
+
143
+ pointer++;
144
+
145
+ waiting = bvh8_waiting_slots_push(waiting, select(later, 0u, lone));
112
146
  }
113
-
114
- nearest_distance_sqr = distance_to_triangle_sqr;
115
-
116
- out.position = contact;
117
- out.normal = compute_triangle_face_normal(a,b,c);
118
- out.primitive = triangle_index;
119
-
147
+
148
+ node_index = child_block + countOneBits(imask & ((1u << nearest_slot) - 1u));
149
+ arriving = true;
150
+
151
+ continue;
152
+ }
153
+
154
+ // nothing more under this node: back to whatever waits
155
+ if (pointer == stack_top) {
156
+ break;
120
157
  }
121
-
158
+
159
+ pointer--;
160
+
161
+ node_index = stack[pointer].x;
162
+ pending = bvh8_waiting_slots_latest(waiting);
163
+ arriving = pending == 0u;
164
+
165
+ waiting = bvh8_waiting_slots_pop(waiting);
122
166
  }
123
-
167
+
124
168
  return out;
125
169
  }
126
170
  `, [
127
- BVH_NULL_NODE_DEFINITION,
171
+ BVH8_INODE_STRUCT.declaration_chunk,
172
+ GEOMETRY_METADATA_STRUCT.declaration_chunk,
173
+ MESHLET_METADATA_STRUCT.declaration_chunk,
128
174
  SURFACE_POINT_3D.declaration_chunk,
129
- chunk_f32_array_as_vec3,
130
- chunk_geometry_read_triangle_vertices,
131
- chunk_aabb3_unsigned_distance_sqr_to_point,
175
+ chunk_bvh8_node_slot_distances,
176
+ chunk_bvh8_waiting_slots,
177
+ chunk_read_meshlet_resolved_index,
178
+ chunk_read_meshlet_vertex_position,
132
179
  chunk_triangle_closest_point_to_point_barycentric,
133
180
  chunk_compute_triangle_face_normal,
134
181
  ]
135
- );
182
+ );
@@ -1,3 +1,24 @@
1
+ /**
2
+ * The nearest point of any instance's surface to a point in the world, within `max_distance`:
3
+ *
4
+ * ```wgsl
5
+ * fn scene_point_query_nearest(position: vec3<f32>, max_distance: f32) -> SurfacePoint3D
6
+ * ```
7
+ *
8
+ * `primitive` is the `meshes` row of the instance the point lies on, or all ones when there is none;
9
+ * `position` and `normal` are in the world.
10
+ *
11
+ * The TLAS is walked nearest box first: an instance, or a child node, is passed by once the best
12
+ * found is nearer than its box. A node's instances are asked before its children, each in its own
13
+ * space ({@link chunk_point_query_blas_nearest}).
14
+ *
15
+ * One stack serves both levels, a node in the first word of an entry: the BLAS under an instance
16
+ * takes the entries above the TLAS walk's own.
17
+ *
18
+ * The enclosing shader binds `tlas`, `scene_database` and the BLAS buffers.
19
+ *
20
+ * @type {CodeChunk}
21
+ */
1
22
  export const chunk_scene_point_query_nearest: CodeChunk;
2
23
  import { CodeChunk } from "../../compiler/CodeChunk.js";
3
24
  //# sourceMappingURL=chunk_scene_point_query_nearest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_scene_point_query_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js"],"names":[],"mappings":"AAeA,wDAqHE;0BAlIwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_scene_point_query_nearest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8CAFU,SAAS,CAyIjB;0BA1KwB,6BAA6B"}
@@ -1,11 +1,11 @@
1
+ import { assert } from "../../../../../core/assert.js";
1
2
  import { UINT32_MAX } from "../../../../../core/binary/UINT32_MAX.js";
2
3
  import { chunk_scene_database_access } from "../../../scene/chunk_scene_database_access.js";
3
4
  import { CodeChunk } from "../../compiler/CodeChunk.js";
4
- import { BVH_NULL_NODE_DEFINITION } from "../bvh/BVH_NULL_NODE_DEFINITION.js";
5
- import { BVH_TRAVERSAL_STACK_SIZE } from "../bvh/BVH_TRAVERSAL_STACK_SIZE.js";
6
- import {
7
- chunk_aabb3_unsigned_distance_sqr_to_point
8
- } from "../geometry/aabb3/chunk_aabb3_unsigned_distance_sqr_to_point.js";
5
+ import { BVH8_TLAS_MAX_DEPTH, BVH8_TRAVERSAL_STACK_SIZE } from "../bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js";
6
+ import { chunk_bvh8_node_slot_distances } from "../bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js";
7
+ import { chunk_bvh8_tree_read } from "../bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
8
+ import { BVH8_WAITING_SLOTS_CAPACITY, chunk_bvh8_waiting_slots } from "../bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js";
9
9
  import { chunk_mat4_inverse } from "../geometry/mat4/chunk_mat4_inverse.js";
10
10
  import { chunk_v3_matrix4_project } from "../geometry/vec3/chunk_v3_matrix4_project.js";
11
11
  import { chunk_v3_matrix4_rotate } from "../geometry/vec3/chunk_v3_matrix4_rotate.js";
@@ -13,121 +13,162 @@ import { F32_MAX_DEFINITION } from "../math/F32_MAX_DEFINITION.js";
13
13
  import { chunk_point_query_blas_nearest } from "./chunk_point_query_blas_nearest.js";
14
14
  import { SURFACE_POINT_3D } from "./SURFACE_POINT_3D.js";
15
15
 
16
+ assert.lessThanOrEqual(BVH8_TLAS_MAX_DEPTH, BVH8_WAITING_SLOTS_CAPACITY, 'the TLAS may be deeper than the walk can keep slots for');
17
+
18
+ /**
19
+ * The nearest point of any instance's surface to a point in the world, within `max_distance`:
20
+ *
21
+ * ```wgsl
22
+ * fn scene_point_query_nearest(position: vec3<f32>, max_distance: f32) -> SurfacePoint3D
23
+ * ```
24
+ *
25
+ * `primitive` is the `meshes` row of the instance the point lies on, or all ones when there is none;
26
+ * `position` and `normal` are in the world.
27
+ *
28
+ * The TLAS is walked nearest box first: an instance, or a child node, is passed by once the best
29
+ * found is nearer than its box. A node's instances are asked before its children, each in its own
30
+ * space ({@link chunk_point_query_blas_nearest}).
31
+ *
32
+ * One stack serves both levels, a node in the first word of an entry: the BLAS under an instance
33
+ * takes the entries above the TLAS walk's own.
34
+ *
35
+ * The enclosing shader binds `tlas`, `scene_database` and the BLAS buffers.
36
+ *
37
+ * @type {CodeChunk}
38
+ */
16
39
  export const chunk_scene_point_query_nearest = CodeChunk.from(
17
40
  //language=WGSL
18
41
  `
19
- fn scene_point_query_nearest(position: vec3<f32>, max_distance: f32) -> ${SURFACE_POINT_3D.wgsl_ref}{
42
+ fn scene_point_query_nearest(position: vec3<f32>, max_distance: f32) -> ${SURFACE_POINT_3D.wgsl_ref} {
43
+ var stack: array<vec2u, ${BVH8_TRAVERSAL_STACK_SIZE}>;
44
+ var pointer = 0u;
45
+
46
+ // the slots still to visit of each node waiting on the stack; none for a child waiting as itself
47
+ var waiting = vec4<u32>(0u);
20
48
 
21
- var stack = array<u32, ${BVH_TRAVERSAL_STACK_SIZE}>();
22
- var node_index = tlas.root;
23
- var pointer = 1u;
24
-
25
49
  var nearest_distance_sqr = max_distance * max_distance;
26
-
50
+
27
51
  var out: ${SURFACE_POINT_3D.wgsl_ref};
28
- out.primitive = ${UINT32_MAX}; // used to indicate a miss on output
29
-
52
+ out.primitive = ${UINT32_MAX}u; // a miss, until something is found
30
53
 
31
- for(;pointer > 0u && pointer <= ${BVH_TRAVERSAL_STACK_SIZE};){
54
+ // the node being looked at, and which of its child slots are still to visit
55
+ var node_index = 0u;
56
+ var pending = 0u;
57
+ var arriving = true;
32
58
 
33
- let node = tlas.nodes[node_index];
34
- let child_1 = node.child_1;
35
- let child_2 = node.child_2;
59
+ loop {
60
+ let node = bvh8_tree_read_node(&tlas, node_index);
61
+ let distances = bvh8_node_slot_distances_sqr(node, position);
36
62
 
37
- if(child_1 != BVH_NULL_NODE){
38
- // not a leaf node
39
- let child_1_bounds = tlas.nodes[ child_1 ].bounds;
40
- let distance_sqr_to_child1 = aabb3_unsigned_distance_sqr_to_point(child_1_bounds, position);
63
+ let imask = node.data[0].w >> 24u;
41
64
 
42
- let child_2_bounds = tlas.nodes[ child_2 ].bounds;
43
- let distance_sqr_to_child2 = aabb3_unsigned_distance_sqr_to_point(child_2_bounds, position);
65
+ if (arriving) {
66
+ // this node's own instances first: what they find prunes its children
67
+ let runs = bvh8_node_slot_runs(node);
44
68
 
45
- // sort children
46
- var sorted_children = vec2(child_1, child_2);
47
- var sorted_distances = vec2(distance_sqr_to_child1, distance_sqr_to_child2);
69
+ var run = bvh8_slot_runs_within(runs, distances, nearest_distance_sqr);
48
70
 
49
- if (distance_sqr_to_child2 < distance_sqr_to_child1) {
71
+ while (run != 0u) {
72
+ let offset = countTrailingZeros(run);
50
73
 
51
- sorted_children = sorted_children.yx;
52
- sorted_distances = sorted_distances.yx;
74
+ run &= run - 1u;
53
75
 
54
- }
76
+ // a leaf's payload is the instance's meshes row
77
+ let mesh_id = bvh8_tree_read_payload(&tlas, node, offset);
55
78
 
56
- if(sorted_distances.y < nearest_distance_sqr){
57
- // both children are within range
79
+ let mesh = scene_read_mesh(&scene_database, mesh_id);
80
+ let placement = scene_read_node(&scene_database, mesh.node);
58
81
 
59
- node_index = sorted_children.x;
82
+ let geometry_position = v3_matrix4_project(position, mat4_inverse(placement.global));
60
83
 
61
- stack[ pointer ] = sorted_children.y;
84
+ let geometry_hit = point_query_blas_nearest(
85
+ geometry_position,
86
+ F32_MAX, // TODO consider passing a sensible max-distance
87
+ mesh.geometry,
88
+ &stack,
89
+ pointer
90
+ );
62
91
 
63
- pointer ++;
92
+ if (geometry_hit.primitive == ${UINT32_MAX}u) {
93
+ // a geometry with no triangles
94
+ continue;
95
+ }
64
96
 
65
- }else if(sorted_distances.x < nearest_distance_sqr){
97
+ let mesh_hit_point = v3_matrix4_project(geometry_hit.position, placement.global);
66
98
 
67
- node_index = sorted_children.x;
99
+ let offset_to_mesh = mesh_hit_point - position;
100
+ let distance_to_mesh_sqr = dot(offset_to_mesh, offset_to_mesh);
68
101
 
69
- }else{
102
+ if (distance_to_mesh_sqr >= nearest_distance_sqr) {
103
+ continue;
104
+ }
70
105
 
71
- pointer --;
72
- node_index = stack[pointer];
106
+ nearest_distance_sqr = distance_to_mesh_sqr;
73
107
 
74
- }
108
+ out.primitive = mesh_id;
109
+ out.normal = v3_matrix4_rotate(geometry_hit.normal, placement.global);
110
+ out.position = mesh_hit_point;
75
111
 
76
- }else{
112
+ // slots no nearer than this are done with
113
+ run &= bvh8_slot_runs_within(runs, distances, nearest_distance_sqr);
114
+ }
77
115
 
78
- pointer --;
79
- node_index = stack[pointer];
116
+ pending = imask;
117
+ }
80
118
 
81
- let mesh_id = child_2;
82
- let mesh = scene_read_mesh(&scene_database, mesh_id);
83
- let node = scene_read_node(&scene_database, mesh.node);
119
+ // the children still to visit that are worth one
120
+ let worthwhile = bvh8_slots_within(distances, nearest_distance_sqr) & pending;
84
121
 
85
- let geometry_id = mesh.geometry;
122
+ if (worthwhile != 0u) {
123
+ let nearest_slot = bvh8_nearest_slot_among(distances, worthwhile);
86
124
 
87
- let geometry_position = v3_matrix4_project(position, mat4_inverse(node.global));
125
+ // the node's children sit in one block, in slot order
126
+ let child_block = node.data[1].x;
88
127
 
89
- let geometry_hit = point_query_blas_nearest(
90
- geometry_position,
91
- F32_MAX, // TODO consider passing a sensible max-distance
92
- geometry_id,
93
- &stack,
94
- pointer
95
- );
128
+ let later = worthwhile & ~(1u << nearest_slot);
96
129
 
97
- if(geometry_hit.primitive == ${UINT32_MAX}){
98
- // got nothing, this should not happen though
99
- continue;
100
- }
130
+ if (later != 0u && pointer < ${BVH8_TLAS_MAX_DEPTH}u) {
131
+ let lone = (later & (later - 1u)) == 0u;
101
132
 
102
- let mesh_hit_point = v3_matrix4_project(geometry_hit.position, node.global);
133
+ stack[pointer].x = select(node_index, child_block + countOneBits(imask & (later - 1u)), lone);
103
134
 
104
- let distance_to_mesh = distance(mesh_hit_point, position);
105
- let distance_to_mesh2 = distance_to_mesh*distance_to_mesh;
135
+ pointer++;
106
136
 
107
- if (distance_to_mesh2 >= nearest_distance_sqr) {
108
- continue;
137
+ waiting = bvh8_waiting_slots_push(waiting, select(later, 0u, lone));
109
138
  }
110
139
 
111
- nearest_distance_sqr = distance_to_mesh2;
140
+ node_index = child_block + countOneBits(imask & ((1u << nearest_slot) - 1u));
141
+ arriving = true;
112
142
 
113
- out.primitive = mesh_id;
114
- out.normal = v3_matrix4_rotate(geometry_hit.normal, node.global);
115
- out.position = mesh_hit_point;
143
+ continue;
144
+ }
116
145
 
146
+ // nothing more under this node: back to whatever waits
147
+ if (pointer == 0u) {
148
+ break;
117
149
  }
150
+
151
+ pointer--;
152
+
153
+ node_index = stack[pointer].x;
154
+ pending = bvh8_waiting_slots_latest(waiting);
155
+ arriving = pending == 0u;
156
+
157
+ waiting = bvh8_waiting_slots_pop(waiting);
118
158
  }
119
-
159
+
120
160
  return out;
121
161
  }
122
- `, [
162
+ `, [
123
163
  SURFACE_POINT_3D.declaration_chunk,
124
- BVH_NULL_NODE_DEFINITION,
125
164
  F32_MAX_DEFINITION,
165
+ chunk_bvh8_tree_read,
166
+ chunk_bvh8_node_slot_distances,
167
+ chunk_bvh8_waiting_slots,
126
168
  chunk_point_query_blas_nearest,
127
- chunk_aabb3_unsigned_distance_sqr_to_point,
128
169
  chunk_v3_matrix4_project,
129
170
  chunk_v3_matrix4_rotate,
130
171
  chunk_mat4_inverse,
131
172
  chunk_scene_database_access,
132
173
  ]
133
- );
174
+ );
@@ -5,8 +5,11 @@
5
5
  * fn scene_sdf_raymarch_hit(ray: Ray) -> SceneSDFHit // t = F32_MAX for none
6
6
  * ```
7
7
  *
8
- * The TLAS is walked nearest box first; in every instance it meets, the ray marches that geometry's
9
- * sparse field at level 0 in its local space, whose t is the world one.
8
+ * The TLAS is walked with the ray, nearer slots first by the ray's octant, and the ray is shortened
9
+ * at every hit; in every instance whose box it still reaches, the ray marches that geometry's sparse
10
+ * field at level 0 in its local space, whose t is the world one.
11
+ *
12
+ * The enclosing shader binds `tlas`, `scene_database` and the mesh SDF buffers.
10
13
  *
11
14
  * @type {CodeChunk}
12
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_scene_sdf_raymarch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;GAWG;AACH,2CAFU,SAAS,CAiGjB;AAEF;;;;;;;;GAQG;AACH,uCAFU,SAAS,CAYjB;0BA5IwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_scene_sdf_raymarch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;GAcG;AACH,2CAFU,SAAS,CAwHjB;AAEF;;;;;;;;GAQG;AACH,uCAFU,SAAS,CAYjB;0BAtKwB,6BAA6B"}