@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,575 +0,0 @@
1
- import { assert } from "../../../../core/assert.js";
2
- import { RowFirstTable } from "../../../../core/collection/table/RowFirstTable.js";
3
- import { aabb3_array_set } from "../../../../core/geom/3d/aabb/aabb3_array_set.js";
4
- import { v3_orthonormal_matrix_from_normal } from "../../../../core/geom/vec3/v3_orthonormal_matrix_from_normal.js";
5
- import { max2 } from "../../../../core/math/max2.js";
6
- import { min2 } from "../../../../core/math/min2.js";
7
- import {
8
- TUBE_ATTRIBUTE_ADDRESS_ALPHA,
9
- TUBE_ATTRIBUTE_ADDRESS_BINORMAL,
10
- TUBE_ATTRIBUTE_ADDRESS_COLOR,
11
- TUBE_ATTRIBUTE_ADDRESS_NORMAL,
12
- TUBE_ATTRIBUTE_ADDRESS_OFF,
13
- TUBE_ATTRIBUTE_ADDRESS_POSITION,
14
- TUBE_ATTRIBUTE_ADDRESS_THICKNESS,
15
- tube_attributes_spec
16
- } from "./tube_attributes_spec.js";
17
-
18
- /**
19
- * Default number of radial subdivisions around the tube. Overridable per-tube
20
- * via {@link TubeX#setCount}; never hard-coded into the geometry.
21
- * @type {number}
22
- */
23
- const DEFAULT_RADIAL_SEGMENTS = 8;
24
-
25
- /**
26
- * Scratch for the arbitrary default frame written at build time; module-static so
27
- * setCount stays allocation-free on the data path.
28
- * @type {Float64Array}
29
- */
30
- const m3_default_frame = new Float64Array(9);
31
-
32
- /**
33
- * Dynamic, non-allocating 3D tube geometry — the volumetric analogue of
34
- * {@link RibbonX}.
35
- *
36
- * A tube is a ring buffer of `count` KNOTS along a centre-line. Each knot owns a
37
- * ring of `radial + 1` vertices: the extra vertex duplicates vertex 0 so the UV
38
- * seam (u = 0 meeting u = 1) closes cleanly when the texture wraps the tube.
39
- * Vertices are extruded in the vertex shader from the knot's stored tangent
40
- * frame, so the CPU only ever writes per-knot data (centre, frame, colour, …) —
41
- * never per-triangle.
42
- *
43
- * Like {@link RibbonX} the geometry is a fixed-capacity ring: {@link rotate}
44
- * recycles the oldest knot as the new head and rewrites a single segment's worth
45
- * of indices, so steady-state updates allocate nothing.
46
- *
47
- * **The knots are the tube; a drawable is what a renderer makes of them.** Nothing
48
- * here belongs to a renderer: {@link TubeXGeometry} wraps this data in three
49
- * attribute views for the legacy path, and the Shade path extrudes the same rows
50
- * into dynamic-mesh vertices. The three versions below are what tells either one
51
- * that its copy is stale.
52
- */
53
- export class TubeX {
54
-
55
- /**
56
- * @type {RowFirstTable}
57
- */
58
- #data = new RowFirstTable(tube_attributes_spec);
59
-
60
- /**
61
- * @type {Uint32Array}
62
- */
63
- #indices = new Uint32Array(0);
64
-
65
- /**
66
- * Bumped by every write to knot data. A consumer that has copied or uploaded the
67
- * rows compares its own against this to know whether it still holds the truth.
68
- *
69
- * @type {number}
70
- */
71
- #data_version = 0;
72
-
73
- /**
74
- * Bumped by every write to the index array, which after the build is
75
- * {@link rotate} and nothing else.
76
- *
77
- * @type {number}
78
- */
79
- #index_version = 0;
80
-
81
- /**
82
- * Bumped by {@link setCount}, which is the only thing that moves the buffers
83
- * themselves rather than their contents — a consumer holding views over them
84
- * has to build new ones.
85
- *
86
- * @type {number}
87
- */
88
- #layout_version = 0;
89
-
90
- /**
91
- * Knot index at the END (oldest) of the tube.
92
- * @type {number}
93
- */
94
- #tail_index = 0;
95
-
96
- /**
97
- * Knot index at the START (newest) of the tube.
98
- * @type {number}
99
- */
100
- #head_index = 0;
101
-
102
- /**
103
- * Index of the segment (knot-to-knot span of `radial` quads) currently at the
104
- * tail; recycled by {@link rotate}.
105
- * @type {number}
106
- */
107
- #tail_segment_index = 0;
108
-
109
- /**
110
- * Number of knots.
111
- * @type {number}
112
- */
113
- #count = 0;
114
-
115
- /**
116
- * Number of radial subdivisions. Ring vertex count per knot = radial + 1.
117
- * @type {number}
118
- */
119
- #radial = DEFAULT_RADIAL_SEGMENTS;
120
-
121
- /**
122
- * The knot rows, interleaved per {@link tube_attributes_spec} — `vertex_count`
123
- * records of `bytes_per_vertex` bytes, one per ring vertex.
124
- *
125
- * @returns {RowFirstTable}
126
- */
127
- get table() {
128
- return this.#data;
129
- }
130
-
131
- /**
132
- * Triangle indices over the ring vertices, sized by {@link setCount} and
133
- * rewritten one segment at a time by {@link rotate}.
134
- *
135
- * @returns {Uint32Array}
136
- */
137
- get indices() {
138
- return this.#indices;
139
- }
140
-
141
- /**
142
- * @returns {number} bytes one ring vertex occupies in {@link table}
143
- */
144
- get bytes_per_vertex() {
145
- return this.#data.spec.bytesPerRecord;
146
- }
147
-
148
- /**
149
- * @returns {number} ring vertices across the whole tube — `count * (radial + 1)`
150
- */
151
- get vertex_count() {
152
- return this.#count * this.#ring_vertex_count;
153
- }
154
-
155
- /**
156
- * @returns {number}
157
- */
158
- get data_version() {
159
- return this.#data_version;
160
- }
161
-
162
- /**
163
- * @returns {number}
164
- */
165
- get index_version() {
166
- return this.#index_version;
167
- }
168
-
169
- /**
170
- * @returns {number}
171
- */
172
- get layout_version() {
173
- return this.#layout_version;
174
- }
175
-
176
- /**
177
- * @returns {number} number of knots
178
- */
179
- getCount() {
180
- return this.#count;
181
- }
182
-
183
- /**
184
- * @returns {number} radial subdivisions
185
- */
186
- getRadialSegments() {
187
- return this.#radial;
188
- }
189
-
190
- getHeadIndex() {
191
- return this.#head_index;
192
- }
193
-
194
- getTailIndex() {
195
- return this.#tail_index;
196
- }
197
-
198
- /**
199
- * Number of vertices in a single knot ring (includes the duplicated seam vertex).
200
- * @returns {number}
201
- */
202
- get #ring_vertex_count() {
203
- return this.#radial + 1;
204
- }
205
-
206
- /**
207
- * Write the static angular `off` coordinate (uv.x) for every ring vertex. The
208
- * value goes 0 → 1 across the `radial + 1` vertices; vertex `radial` lands on
209
- * 1.0 so its shader angle is 2π — co-incident with vertex 0's angle 0, closing
210
- * the seam without a wrap-around index.
211
- */
212
- #initialize_off() {
213
- const data = this.#data;
214
- const count = this.#count;
215
- const radial = this.#radial;
216
- const v = this.#ring_vertex_count;
217
-
218
- for (let k = 0; k < count; k++) {
219
- const base = k * v;
220
- for (let j = 0; j <= radial; j++) {
221
- data.writeCellValue(base + j, TUBE_ATTRIBUTE_ADDRESS_OFF, j / radial);
222
- }
223
- }
224
- }
225
-
226
- /**
227
- * Seed every knot with a valid (arbitrary) orthonormal frame so the geometry is
228
- * well-formed from the moment it is built, before any head movement supplies a
229
- * real tangent. Without this the frames would be zero-initialised and the
230
- * transport's degeneracy fallback would have to cover the fresh-tube case; a
231
- * concrete default keeps the invariant "every knot frame is unit + orthonormal"
232
- * unconditionally true (read e.g. by getKnotNormal during transport).
233
- */
234
- #initialize_frame() {
235
- v3_orthonormal_matrix_from_normal(m3_default_frame, 0, 0, 1, 0);
236
-
237
- const nx = m3_default_frame[0], ny = m3_default_frame[1], nz = m3_default_frame[2];
238
- const bx = m3_default_frame[3], by = m3_default_frame[4], bz = m3_default_frame[5];
239
-
240
- const count = this.#count;
241
-
242
- for (let k = 0; k < count; k++) {
243
- this.setKnotFrame(k, nx, ny, nz, bx, by, bz);
244
- }
245
- }
246
-
247
- /**
248
- * Write the `radial` quads (2 triangles each) bridging the ring of knot `lo`
249
- * to the ring of knot `hi`, starting at `address` in the index array.
250
- * Winding matches the engine's static tube mesher (make_ring_faces).
251
- * @param {number} address index-array offset (in index entries)
252
- * @param {number} lo knot index whose ring is the "left" edge
253
- * @param {number} hi knot index whose ring is the "right" edge
254
- */
255
- #write_segment_indices(address, lo, hi) {
256
- const indices = this.#indices;
257
- const radial = this.#radial;
258
- const v = this.#ring_vertex_count;
259
-
260
- const lo_base = lo * v;
261
- const hi_base = hi * v;
262
-
263
- for (let r = 0; r < radial; r++) {
264
- const a = lo_base + r;
265
- const b = hi_base + r;
266
- const c = hi_base + r + 1;
267
- const d = lo_base + r + 1;
268
-
269
- const ci = address + r * 6;
270
-
271
- indices[ci] = a;
272
- indices[ci + 1] = b;
273
- indices[ci + 2] = d;
274
-
275
- indices[ci + 3] = b;
276
- indices[ci + 4] = c;
277
- indices[ci + 5] = d;
278
- }
279
- }
280
-
281
- /**
282
- * Build the index buffer as a linear strip of `count - 1` segments.
283
- */
284
- #initialize_index() {
285
- const segment_count = this.#count - 1;
286
- const indices_per_segment = this.#radial * 6;
287
-
288
- for (let s = 0; s < segment_count; s++) {
289
- this.#write_segment_indices(s * indices_per_segment, s, s + 1);
290
- }
291
- }
292
-
293
- /**
294
- * @param {number[]|Float32Array|Float64Array} result
295
- * @param {number} knot_index
296
- */
297
- getKnotPosition(result, knot_index) {
298
- const row = knot_index * this.#ring_vertex_count;
299
- const data = this.#data;
300
-
301
- result[0] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION);
302
- result[1] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION + 1);
303
- result[2] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION + 2);
304
- }
305
-
306
- /**
307
- * Read the stored ring normal of a knot. Used by the head to parallel-transport
308
- * its frame from the previous knot.
309
- * @param {number[]|Float32Array|Float64Array} result
310
- * @param {number} knot_index
311
- */
312
- getKnotNormal(result, knot_index) {
313
- const row = knot_index * this.#ring_vertex_count;
314
- const data = this.#data;
315
-
316
- result[0] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_NORMAL);
317
- result[1] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_NORMAL + 1);
318
- result[2] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_NORMAL + 2);
319
- }
320
-
321
- /**
322
- * Read the stored ring binormal of a knot.
323
- * @param {number[]|Float32Array|Float64Array} result
324
- * @param {number} knot_index
325
- */
326
- getKnotBinormal(result, knot_index) {
327
- const row = knot_index * this.#ring_vertex_count;
328
- const data = this.#data;
329
-
330
- result[0] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_BINORMAL);
331
- result[1] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_BINORMAL + 1);
332
- result[2] = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_BINORMAL + 2);
333
- }
334
-
335
- /**
336
- * Read a scalar attribute of a knot. Every vertex of the ring carries the same
337
- * value, so the first one answers for the knot.
338
- *
339
- * @param {number} knot_index
340
- * @param {number} attribute_index
341
- * @returns {number}
342
- */
343
- getKnotAttribute_Scalar(knot_index, attribute_index) {
344
- return this.#data.readCellValue(knot_index * this.#ring_vertex_count, attribute_index);
345
- }
346
-
347
- /**
348
- * Write a vec3 attribute to all ring vertices of a knot.
349
- * @param {number} knot_index
350
- * @param {number} attribute_index
351
- * @param {number} x
352
- * @param {number} y
353
- * @param {number} z
354
- */
355
- setKnotAttribute_Vector3(knot_index, attribute_index, x, y, z) {
356
- const data = this.#data;
357
- const v = this.#ring_vertex_count;
358
- const base = knot_index * v;
359
-
360
- for (let j = 0; j < v; j++) {
361
- const row = base + j;
362
- data.writeCellValue(row, attribute_index, x);
363
- data.writeCellValue(row, attribute_index + 1, y);
364
- data.writeCellValue(row, attribute_index + 2, z);
365
- }
366
-
367
- this.#data_version++;
368
- }
369
-
370
- /**
371
- * Write a scalar attribute to all ring vertices of a knot.
372
- * @param {number} knot_index
373
- * @param {number} attribute_index
374
- * @param {number} value
375
- */
376
- setKnotAttribute_Scalar(knot_index, attribute_index, value) {
377
- const data = this.#data;
378
- const v = this.#ring_vertex_count;
379
- const base = knot_index * v;
380
-
381
- for (let j = 0; j < v; j++) {
382
- data.writeCellValue(base + j, attribute_index, value);
383
- }
384
-
385
- this.#data_version++;
386
- }
387
-
388
- /**
389
- * Add `delta` to a scalar attribute on every ring vertex of a knot.
390
- * @param {number} knot_index
391
- * @param {number} attribute_index
392
- * @param {number} delta
393
- * @returns {number} incremented value
394
- */
395
- incrementKnotAttribute_Scalar(knot_index, attribute_index, delta) {
396
- const data = this.#data;
397
- const v = this.#ring_vertex_count;
398
- const base = knot_index * v;
399
-
400
- const value = data.readCellValue(base, attribute_index) + delta;
401
-
402
- for (let j = 0; j < v; j++) {
403
- data.writeCellValue(base + j, attribute_index, value);
404
- }
405
-
406
- this.#data_version++;
407
-
408
- return value;
409
- }
410
-
411
- /**
412
- * @param {number} knot_index
413
- * @param {number} x
414
- * @param {number} y
415
- * @param {number} z
416
- */
417
- setKnotPosition(knot_index, x, y, z) {
418
- assert.isNonNegativeInteger(knot_index, 'knot_index');
419
-
420
- this.setKnotAttribute_Vector3(knot_index, TUBE_ATTRIBUTE_ADDRESS_POSITION, x, y, z);
421
- }
422
-
423
- /**
424
- * Set the orienting tangent frame of a knot. `nx,ny,nz` and `bx,by,bz` must be
425
- * unit vectors, mutually orthogonal and perpendicular to the local tangent.
426
- * @param {number} knot_index
427
- * @param {number} nx
428
- * @param {number} ny
429
- * @param {number} nz
430
- * @param {number} bx
431
- * @param {number} by
432
- * @param {number} bz
433
- */
434
- setKnotFrame(knot_index, nx, ny, nz, bx, by, bz) {
435
- this.setKnotAttribute_Vector3(knot_index, TUBE_ATTRIBUTE_ADDRESS_NORMAL, nx, ny, nz);
436
- this.setKnotAttribute_Vector3(knot_index, TUBE_ATTRIBUTE_ADDRESS_BINORMAL, bx, by, bz);
437
- }
438
-
439
- /**
440
- * Linear colour, stored at half precision. Not limited to 0..1: values above 1 are HDR.
441
- *
442
- * @param {number} knot_index
443
- * @param {number} r
444
- * @param {number} g
445
- * @param {number} b
446
- */
447
- setKnotColor(knot_index, r, g, b) {
448
- assert.isNonNegativeInteger(knot_index, 'knot_index');
449
-
450
- this.setKnotAttribute_Vector3(knot_index, TUBE_ATTRIBUTE_ADDRESS_COLOR, r, g, b);
451
- }
452
-
453
- /**
454
- * @param {number} knot_index
455
- * @param {number} value
456
- */
457
- setKnotAlpha(knot_index, value) {
458
- this.setKnotAttribute_Scalar(knot_index, TUBE_ATTRIBUTE_ADDRESS_ALPHA, value);
459
- }
460
-
461
- /**
462
- * @param {number} knot_index
463
- * @param {number} value tube diameter
464
- */
465
- setKnotThickness(knot_index, value) {
466
- this.setKnotAttribute_Scalar(knot_index, TUBE_ATTRIBUTE_ADDRESS_THICKNESS, value);
467
- }
468
-
469
- /**
470
- * @param {number} count number of knots (>= 2)
471
- * @param {number} [radial] radial subdivisions (>= 3)
472
- */
473
- setCount(count, radial = DEFAULT_RADIAL_SEGMENTS) {
474
- assert.greaterThanOrEqual(count, 2, 'a tube needs at least 2 knots (one segment)');
475
- assert.isNonNegativeInteger(count, 'count');
476
- assert.greaterThanOrEqual(radial, 3, 'a tube ring needs at least 3 radial segments');
477
- assert.isNonNegativeInteger(radial, 'radial');
478
-
479
- this.#radial = radial;
480
-
481
- const v = radial + 1;
482
- const vertex_count = count * v;
483
-
484
- if (this.#data.length > vertex_count) {
485
- this.#data.removeRows(vertex_count, this.#data.length - vertex_count);
486
- }
487
-
488
- this.#data.setCapacity(vertex_count);
489
- this.#data.length = vertex_count;
490
-
491
- const segment_count = count - 1;
492
- const triangle_count = segment_count * radial * 2;
493
-
494
- // Uint32 (not Uint16): vertex count = count * (radial + 1) easily exceeds 65535 for a long
495
- // tube with high radial resolution.
496
- this.#indices = new Uint32Array(triangle_count * 3);
497
-
498
- this.#head_index = 0;
499
- this.#tail_index = count - 1;
500
- this.#tail_segment_index = segment_count - 1;
501
-
502
- this.#count = count;
503
-
504
- this.#initialize_off();
505
- this.#initialize_frame();
506
- this.#initialize_index();
507
-
508
- this.#layout_version++;
509
- this.#index_version++;
510
- }
511
-
512
- /**
513
- * NOTE: takes tube thickness into account.
514
- * @param {AABB3|ArrayLike<number>} result
515
- */
516
- computeBoundingBox(result) {
517
- const count = this.#count;
518
- const v = this.#ring_vertex_count;
519
- const data = this.#data;
520
-
521
- let _x0 = Infinity, _y0 = Infinity, _z0 = Infinity;
522
- let _x1 = -Infinity, _y1 = -Infinity, _z1 = -Infinity;
523
-
524
- for (let k = 0; k < count; k++) {
525
- const row = k * v;
526
-
527
- const half_thickness = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_THICKNESS) * 0.5;
528
-
529
- const x = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION);
530
- const y = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION + 1);
531
- const z = data.readCellValue(row, TUBE_ATTRIBUTE_ADDRESS_POSITION + 2);
532
-
533
- _x0 = min2(_x0, x - half_thickness);
534
- _y0 = min2(_y0, y - half_thickness);
535
- _z0 = min2(_z0, z - half_thickness);
536
- _x1 = max2(_x1, x + half_thickness);
537
- _y1 = max2(_y1, y + half_thickness);
538
- _z1 = max2(_z1, z + half_thickness);
539
- }
540
-
541
- aabb3_array_set(result, 0, _x0, _y0, _z0, _x1, _y1, _z1);
542
- }
543
-
544
- /**
545
- * Recycle the oldest knot as the new head, in O(radial). Mirrors
546
- * {@link RibbonX#rotate}: the head/tail pointers decrement together (preserving
547
- * `head === (tail + 1) mod count`), and the single tail segment's indices are
548
- * rewritten to bridge the previous head's ring to the recycled (new head) ring.
549
- */
550
- rotate() {
551
- const old_tail = this.#tail_index;
552
- const old_head = this.#head_index;
553
-
554
- const max_index = this.#count - 1;
555
-
556
- // The recycled slot (old tail) becomes the new head: head and tail step
557
- // back in lockstep so head stays exactly one slot ahead of tail.
558
- this.#tail_index = old_tail <= 0 ? max_index : old_tail - 1;
559
- this.#head_index = old_head <= 0 ? max_index : old_head - 1;
560
-
561
- const old_segment = this.#tail_segment_index;
562
- const address = old_segment * this.#radial * 6;
563
-
564
- this.#tail_segment_index = old_segment > 0 ? old_segment - 1 : this.#count - 2;
565
-
566
- // Bridge old head -> new head (== old tail slot) with a fresh segment. The new head (old_tail slot)
567
- // is the more head-ward knot, so it takes the `lo` position to match #initialize_index's winding
568
- // convention (lo = more head-ward); swapping the two would invert this segment's triangle winding.
569
- this.#write_segment_indices(address, old_tail, old_head);
570
-
571
- this.#index_version++;
572
- }
573
- }
574
-
575
- TubeX.DEFAULT_RADIAL_SEGMENTS = DEFAULT_RADIAL_SEGMENTS;
@@ -1,16 +0,0 @@
1
- /**
2
- * Fixed-function simulation for {@link TubeX} tubes — the 3D analogue of
3
- * {@link RibbonXFixedPhysicsSimulator}. Ages every knot, sets its alpha to `alpha` times the `fade`
4
- * curve at its age relative to `max_age`, and flows the along-tube UV coordinate with age.
5
- */
6
- export class TubeXFixedPhysicsSimulator {
7
- /**
8
- * @param {TubeX} tube
9
- * @param {number} max_age
10
- * @param {number} timeDelta
11
- * @param {number} alpha base alpha of a knot; the fade scales it
12
- * @param {AnimationCurve} fade opacity over the knot's age relative to `max_age`, `0..1`
13
- */
14
- update(tube: TubeX, max_age: number, timeDelta: number, alpha: number, fade: AnimationCurve): void;
15
- }
16
- //# sourceMappingURL=TubeXFixedPhysicsSimulator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TubeXFixedPhysicsSimulator.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH;IAEI;;;;;;OAMG;IACH,6BALW,MAAM,aACN,MAAM,SACN,MAAM,8BAkBhB;CACJ"}
@@ -1,34 +0,0 @@
1
- import { clamp01 } from "../../../../../core/math/clamp01.js";
2
- import { TUBE_ATTRIBUTE_ADDRESS_AGE, TUBE_ATTRIBUTE_ADDRESS_UV_V } from "../tube_attributes_spec.js";
3
-
4
- /**
5
- * Fixed-function simulation for {@link TubeX} tubes — the 3D analogue of
6
- * {@link RibbonXFixedPhysicsSimulator}. Ages every knot, sets its alpha to `alpha` times the `fade`
7
- * curve at its age relative to `max_age`, and flows the along-tube UV coordinate with age.
8
- */
9
- export class TubeXFixedPhysicsSimulator {
10
-
11
- /**
12
- * @param {TubeX} tube
13
- * @param {number} max_age
14
- * @param {number} timeDelta
15
- * @param {number} alpha base alpha of a knot; the fade scales it
16
- * @param {AnimationCurve} fade opacity over the knot's age relative to `max_age`, `0..1`
17
- */
18
- update(tube, max_age, timeDelta, alpha, fade) {
19
-
20
- const n = tube.getCount();
21
-
22
- for (let i = 0; i < n; i++) {
23
- const age = tube.incrementKnotAttribute_Scalar(i, TUBE_ATTRIBUTE_ADDRESS_AGE, timeDelta);
24
-
25
- const relative_age = clamp01(age / max_age);
26
-
27
- // fade out with age
28
- tube.setKnotAlpha(i, fade.evaluate(relative_age) * alpha);
29
-
30
- // flow the along-tube UV with age
31
- tube.setKnotAttribute_Scalar(i, TUBE_ATTRIBUTE_ADDRESS_UV_V, relative_age);
32
- }
33
- }
34
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * Per-vertex attribute layout for a {@link TubeX}.
3
- *
4
- * Unlike {@link RibbonX} (which extrudes in screen space and therefore stores
5
- * the neighbouring positions to derive a 2D normal), the tube extrudes in WORLD
6
- * space inside the vertex shader using a per-knot tangent frame. Every vertex of
7
- * a knot's ring shares the same centre/frame/colour/etc and differs only by `off`
8
- * (its angular position around the ring), so the heavy per-frame work is just
9
- * writing the knot centre + frame to the ring's `radial+1` rows.
10
- *
11
- * Layout is floats-first then a float16 colour triple, padded to a 4-byte multiple
12
- * so the interleaved Float32 view (stride = bytesPerRecord >> 2) stays aligned —
13
- * the same trick {@link ribbon_attributes_spec} relies on. The colour is linear and
14
- * not limited to 0..1, so a trail can be brighter than white.
15
- */
16
- export const tube_attributes_spec: RowFirstTableSpec;
17
- export const TUBE_ATTRIBUTE_ADDRESS_AGE: 0;
18
- export const TUBE_ATTRIBUTE_ADDRESS_POSITION: 1;
19
- export const TUBE_ATTRIBUTE_ADDRESS_NORMAL: 4;
20
- export const TUBE_ATTRIBUTE_ADDRESS_BINORMAL: 7;
21
- export const TUBE_ATTRIBUTE_ADDRESS_OFF: 10;
22
- export const TUBE_ATTRIBUTE_ADDRESS_UV_V: 11;
23
- export const TUBE_ATTRIBUTE_ADDRESS_ALPHA: 12;
24
- export const TUBE_ATTRIBUTE_ADDRESS_THICKNESS: 13;
25
- export const TUBE_ATTRIBUTE_ADDRESS_COLOR: 14;
26
- import { RowFirstTableSpec } from "../../../../core/collection/table/RowFirstTableSpec.js";
27
- //# sourceMappingURL=tube_attributes_spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tube_attributes_spec.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/trail/tube/tube_attributes_spec.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,qDAuC4B;AAG5B,2CAA4C;AAC5C,gDAAiD;AACjD,8CAA+C;AAC/C,gDAAiD;AACjD,4CAA6C;AAC7C,6CAA8C;AAC9C,8CAA+C;AAC/C,kDAAmD;AACnD,8CAA+C;kCAnEb,wDAAwD"}