@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
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Reads a version-0 {@link GlobalFluidEffector} stream as version 1: `force`, `wind` and `drag` as
3
+ * they were; the gust (`gust`, `gust_period`, three phases), which version 1 no longer has, dropped;
4
+ * then no turbulence, at the default length scale.
5
+ *
6
+ * Every value an f64, in and out.
7
+ */
8
+ export class GlobalFluidEffectorSerializationUpgrader_0_1 extends BinaryClassUpgrader {
9
+ /**
10
+ * @param {BinaryBuffer} source
11
+ * @param {BinaryBuffer} target
12
+ */
13
+ upgrade(source: BinaryBuffer, target: BinaryBuffer): void;
14
+ }
15
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
16
+ //# sourceMappingURL=GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalFluidEffectorSerializationUpgrader_0_1.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH;IAII;;;OAGG;IACH,0DAeC;CACJ;oCAlCmC,oDAAoD"}
@@ -0,0 +1,35 @@
1
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
2
+ import { GlobalFluidEffector } from "./GlobalFluidEffector.js";
3
+
4
+ /**
5
+ * Reads a version-0 {@link GlobalFluidEffector} stream as version 1: `force`, `wind` and `drag` as
6
+ * they were; the gust (`gust`, `gust_period`, three phases), which version 1 no longer has, dropped;
7
+ * then no turbulence, at the default length scale.
8
+ *
9
+ * Every value an f64, in and out.
10
+ */
11
+ export class GlobalFluidEffectorSerializationUpgrader_0_1 extends BinaryClassUpgrader {
12
+ __startVersion = 0;
13
+ __targetVersion = 1;
14
+
15
+ /**
16
+ * @param {BinaryBuffer} source
17
+ * @param {BinaryBuffer} target
18
+ */
19
+ upgrade(source, target) {
20
+ // force, wind, drag
21
+ for (let i = 0; i < 7; i++) {
22
+ target.writeFloat64(source.readFloat64());
23
+ }
24
+
25
+ // the gust, its period and its three phases
26
+ for (let i = 0; i < 5; i++) {
27
+ source.readFloat64();
28
+ }
29
+
30
+ const defaults = new GlobalFluidEffector();
31
+
32
+ target.writeFloat64(defaults.turbulence_intensity);
33
+ target.writeFloat64(defaults.turbulence_length);
34
+ }
35
+ }
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Air the atmosphere alone acts on relaxes toward the far field at `D` while carrying the
9
9
  * far field's own changes, so its deviation `e = v − v_far` obeys `de/dt = −D·e` whatever
10
- * the gust does and however `D` varied: the step is exact over any interval, one tick or
10
+ * the mean does and however `D` varied: the step is exact over any interval, one tick or
11
11
  * many, and a face equal to the far field stays equal to it.
12
12
  *
13
13
  * The body force is applied exactly in the same linear step, through the forced response
@@ -9,7 +9,7 @@ import { FluidAtmosphere, FluidFieldAtmosphere } from "./FluidAtmosphere.js";
9
9
  *
10
10
  * Air the atmosphere alone acts on relaxes toward the far field at `D` while carrying the
11
11
  * far field's own changes, so its deviation `e = v − v_far` obeys `de/dt = −D·e` whatever
12
- * the gust does and however `D` varied: the step is exact over any interval, one tick or
12
+ * the mean does and however `D` varied: the step is exact over any interval, one tick or
13
13
  * many, and a face equal to the far field stays equal to it.
14
14
  *
15
15
  * The body force is applied exactly in the same linear step, through the forced response
@@ -8,7 +8,7 @@
8
8
  * of rows; one with no record of its own (a mesh, a heightmap, a scaled wrapper) is one row, its
9
9
  * oriented box (`shape_record_pack_bounding_box`), until the SDF stage. A hull's planes are rows of a
10
10
  * plane table, `vec4<f32>` each in core's `(n, offset)` layout, from `shape_parameters.x` for
11
- * `shape_parameters.y` planes. 80 bytes.
11
+ * `shape_parameters.y` planes. 96 bytes.
12
12
  *
13
13
  * Written field by field in two halves: {@link fluid_obstacle_write_gpu_shape} when the collider's
14
14
  * shape changes, {@link fluid_obstacle_write_gpu_motion} every frame, so an obstacle whose inflation
@@ -25,6 +25,14 @@
25
25
  * `fluid_obstacle_record_signed_distance` and `fluid_obstacle_record_wall_velocity`
26
26
  * (`chunk_fluid_obstacle_record`) are those, with CPU twins.
27
27
  *
28
+ * ## Solid or porous
29
+ *
30
+ * A record whose `drag` is 0 is **solid**: the air in it moves with the wall, and the faces of its
31
+ * cells are pinned. One whose `drag` is above 0 is **porous**: the air passes through it and is
32
+ * slowed toward the wall's velocity by `drag · |u − v| · (u − v)` a second, `u` the air's velocity
33
+ * and `v` the wall's (`FluidObstacle.drag`). The solid is the limit of the porous as the drag grows
34
+ * without bound. A porous record has no inflation: what it slows is what its surface holds.
35
+ *
28
36
  * @type {WebGPUStruct}
29
37
  */
30
38
  export const FLUID_OBSTACLE_RECORD_STRUCT: WebGPUStruct;
@@ -1 +1 @@
1
- {"version":3,"file":"FLUID_OBSTACLE_RECORD_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,2CAFU,YAAY,CAmBI;6BAhDG,wDAAwD"}
1
+ {"version":3,"file":"FLUID_OBSTACLE_RECORD_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,2CAFU,YAAY,CAqBI;6BA1DG,wDAAwD"}
@@ -11,7 +11,7 @@ import { WebGPUStruct } from "../../../../shade/renderer/shader/type/WebGPUStruc
11
11
  * of rows; one with no record of its own (a mesh, a heightmap, a scaled wrapper) is one row, its
12
12
  * oriented box (`shape_record_pack_bounding_box`), until the SDF stage. A hull's planes are rows of a
13
13
  * plane table, `vec4<f32>` each in core's `(n, offset)` layout, from `shape_parameters.x` for
14
- * `shape_parameters.y` planes. 80 bytes.
14
+ * `shape_parameters.y` planes. 96 bytes.
15
15
  *
16
16
  * Written field by field in two halves: {@link fluid_obstacle_write_gpu_shape} when the collider's
17
17
  * shape changes, {@link fluid_obstacle_write_gpu_motion} every frame, so an obstacle whose inflation
@@ -28,6 +28,14 @@ import { WebGPUStruct } from "../../../../shade/renderer/shader/type/WebGPUStruc
28
28
  * `fluid_obstacle_record_signed_distance` and `fluid_obstacle_record_wall_velocity`
29
29
  * (`chunk_fluid_obstacle_record`) are those, with CPU twins.
30
30
  *
31
+ * ## Solid or porous
32
+ *
33
+ * A record whose `drag` is 0 is **solid**: the air in it moves with the wall, and the faces of its
34
+ * cells are pinned. One whose `drag` is above 0 is **porous**: the air passes through it and is
35
+ * slowed toward the wall's velocity by `drag · |u − v| · (u − v)` a second, `u` the air's velocity
36
+ * and `v` the wall's (`FluidObstacle.drag`). The solid is the limit of the porous as the drag grows
37
+ * without bound. A porous record has no inflation: what it slows is what its surface holds.
38
+ *
31
39
  * @type {WebGPUStruct}
32
40
  */
33
41
  export const FLUID_OBSTACLE_RECORD_STRUCT = WebGPUStruct.from({
@@ -47,4 +55,6 @@ export const FLUID_OBSTACLE_RECORD_STRUCT = WebGPUStruct.from({
47
55
  angular_velocity: vec3f,
48
56
  /** The transforms row that poses the record; `NODE3D_SCENE_ID` (0) for the world. */
49
57
  node: u32,
58
+ /** `FluidObstacle.drag`, 1/m: 0 for a solid, above 0 for a porous obstacle's drag. */
59
+ drag: f32,
50
60
  }, "FluidObstacleRecord");
@@ -8,6 +8,7 @@
8
8
  * @property {number} inflation metres
9
9
  * @property {Float32Array} angular_velocity `[x, y, z]`, world rad/s
10
10
  * @property {number} node the transforms row that poses the record
11
+ * @property {number} drag 1/m: 0 for a solid, above 0 for a porous obstacle's drag
11
12
  */
12
13
  /**
13
14
  * A staging record for one row of {@link FLUID_OBSTACLE_RECORD_STRUCT}: what
@@ -54,5 +55,9 @@ export type FluidObstacleRecord = {
54
55
  * the transforms row that poses the record
55
56
  */
56
57
  node: number;
58
+ /**
59
+ * 1/m: 0 for a solid, above 0 for a porous obstacle's drag
60
+ */
61
+ drag: number;
57
62
  };
58
63
  //# sourceMappingURL=fluid_obstacle_record_create.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fluid_obstacle_record_create.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;GAUG;AACH,gDAFa,mBAAmB,CAa/B;;;;;sBAhCa,YAAY;;;;sBACZ,YAAY;;;;gBACZ,MAAM;;;;mBACN,YAAY;;;;qBACZ,YAAY;;;;eACZ,MAAM;;;;sBACN,YAAY;;;;UACZ,MAAM"}
1
+ {"version":3,"file":"fluid_obstacle_record_create.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;GAUG;AACH,gDAFa,mBAAmB,CAc/B;;;;;sBAlCa,YAAY;;;;sBACZ,YAAY;;;;gBACZ,MAAM;;;;mBACN,YAAY;;;;qBACZ,YAAY;;;;eACZ,MAAM;;;;sBACN,YAAY;;;;UACZ,MAAM;;;;UACN,MAAM"}
@@ -8,6 +8,7 @@
8
8
  * @property {number} inflation metres
9
9
  * @property {Float32Array} angular_velocity `[x, y, z]`, world rad/s
10
10
  * @property {number} node the transforms row that poses the record
11
+ * @property {number} drag 1/m: 0 for a solid, above 0 for a porous obstacle's drag
11
12
  */
12
13
 
13
14
  /**
@@ -31,5 +32,6 @@ export function fluid_obstacle_record_create() {
31
32
  inflation: 0,
32
33
  angular_velocity: new Float32Array(3),
33
34
  node: 0,
35
+ drag: 0,
34
36
  };
35
37
  }
@@ -39,8 +39,8 @@ export function fluid_obstacle_record_plane_count(record: FluidObstacleRecord):
39
39
  */
40
40
  export function fluid_obstacle_write_gpu_shape(record: FluidObstacleRecord, planes: Float32Array, plane_index: number, shape: AbstractShape3D, element: number): number;
41
41
  /**
42
- * Write the motion half of a record: the obstacle's inflation and its body's linear and angular
43
- * velocity, comparing each as it is assigned. Every record of a collider's run takes the same.
42
+ * Write the motion half of a record: the obstacle's inflation and drag and its body's linear and
43
+ * angular velocity, comparing each as it is assigned. Every record of a collider's run takes the same.
44
44
  * Allocates nothing.
45
45
  *
46
46
  * @param {FluidObstacleRecord} record
@@ -64,7 +64,8 @@ export function fluid_obstacle_write_gpu_motion(record: FluidObstacleRecord, obs
64
64
  * - {@link fluid_obstacle_write_gpu_shape}: the shape record, its pose within the collider and a
65
65
  * hull's planes. A collider's shape is shared and never mutated, so it changes only when the
66
66
  * collider is handed another shape object, which is when a caller writes this half, and on link;
67
- * - {@link fluid_obstacle_write_gpu_motion}: the inflation and the body's velocities, every frame.
67
+ * - {@link fluid_obstacle_write_gpu_motion}: the inflation, the drag and the body's velocities,
68
+ * every frame.
68
69
  *
69
70
  * So an obstacle whose inflation and motion have not changed (a static wall, a sleeping body) writes
70
71
  * nothing, and its pose is its node's. A caller links a collider as
@@ -1 +1 @@
1
- {"version":3,"file":"fluid_obstacle_write_gpu_record.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js"],"names":[],"mappings":"AAgEA;;;;;;GAMG;AACH,qEAFa,MAAM,CAUlB;AAED;;;;;GAKG;AACH,oEAFa,MAAM,CAclB;AAED;;;;;;GAMG;AACH,gFAFa,MAAM,CAOlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,oFAPW,YAAY,eACZ,MAAM,mCAEN,MAAM,GACJ,MAAM,CA4FlB;AAED;;;;;;;;;GASG;AACH,wHAFa,OAAO,CAyCnB;AAhQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,4CAFU,MAAM,CAE+B"}
1
+ {"version":3,"file":"fluid_obstacle_write_gpu_record.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js"],"names":[],"mappings":"AAiEA;;;;;;GAMG;AACH,qEAFa,MAAM,CAUlB;AAED;;;;;GAKG;AACH,oEAFa,MAAM,CAclB;AAED;;;;;;GAMG;AACH,gFAFa,MAAM,CAOlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,oFAPW,YAAY,eACZ,MAAM,mCAEN,MAAM,GACJ,MAAM,CA4FlB;AAED;;;;;;;;;GASG;AACH,wHAFa,OAAO,CAgDnB;AAxQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,4CAFU,MAAM,CAE+B"}
@@ -28,7 +28,8 @@ import { shape_record_pack_bounding_box } from "../../../../core/geom/3d/shape/r
28
28
  * - {@link fluid_obstacle_write_gpu_shape}: the shape record, its pose within the collider and a
29
29
  * hull's planes. A collider's shape is shared and never mutated, so it changes only when the
30
30
  * collider is handed another shape object, which is when a caller writes this half, and on link;
31
- * - {@link fluid_obstacle_write_gpu_motion}: the inflation and the body's velocities, every frame.
31
+ * - {@link fluid_obstacle_write_gpu_motion}: the inflation, the drag and the body's velocities,
32
+ * every frame.
32
33
  *
33
34
  * So an obstacle whose inflation and motion have not changed (a static wall, a sleeping body) writes
34
35
  * nothing, and its pose is its node's. A caller links a collider as
@@ -221,8 +222,8 @@ export function fluid_obstacle_write_gpu_shape(record, planes, plane_index, shap
221
222
  }
222
223
 
223
224
  /**
224
- * Write the motion half of a record: the obstacle's inflation and its body's linear and angular
225
- * velocity, comparing each as it is assigned. Every record of a collider's run takes the same.
225
+ * Write the motion half of a record: the obstacle's inflation and drag and its body's linear and
226
+ * angular velocity, comparing each as it is assigned. Every record of a collider's run takes the same.
226
227
  * Allocates nothing.
227
228
  *
228
229
  * @param {FluidObstacleRecord} record
@@ -240,6 +241,13 @@ export function fluid_obstacle_write_gpu_motion(record, obstacle, body) {
240
241
  changed = true;
241
242
  }
242
243
 
244
+ const drag = Math.fround(obstacle.drag);
245
+
246
+ if (record.drag !== drag) {
247
+ record.drag = drag;
248
+ changed = true;
249
+ }
250
+
243
251
  const linear = body.linearVelocity;
244
252
  const linear_velocity = record.linear_velocity;
245
253
 
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Texels of the far field's turbulence tile on x, y and z: 128 × 32 × 128, y up.
3
+ *
4
+ * The tile repeats, so the far field's turbulence repeats every `16·L` across the wind and `4·L`
5
+ * up, `L` the length scale: four of the spectrum's most energetic wavelength (`≈ 4.05·L`) across,
6
+ * one up. 4 MiB as `rgba16float`.
7
+ *
8
+ * @type {ReadonlyArray<number>}
9
+ */
10
+ export const FLUID_TURBULENCE_TILE_RESOLUTION: ReadonlyArray<number>;
11
+ /**
12
+ * Texels of the turbulence tile per length scale `L`: the tile's spacing is `L/8`.
13
+ *
14
+ * The von Kármán spectrum is a function of `k·L` alone, so a tile laid out in units of `L` is the same
15
+ * tile for every `L`: the length scale is only how far apart its texels are in the world, and changing
16
+ * it regenerates nothing. Eight a length keeps the spectrum's peak (`≈ 4·L`) at 32 texels and resolves
17
+ * wavelengths down to `L` at 8 texels each, the fewest a trilinear read and the solver's advection
18
+ * carry without visible loss; shorter ones, down to the tile's Nyquist `L/4`, are in it too.
19
+ *
20
+ * @type {number}
21
+ */
22
+ export const FLUID_TURBULENCE_TEXELS_PER_LENGTH: number;
23
+ /**
24
+ * The seed the engine's turbulence tile is generated from: one tile, the same on every machine.
25
+ * @type {number}
26
+ */
27
+ export const FLUID_TURBULENCE_TILE_SEED: number;
28
+ //# sourceMappingURL=FLUID_TURBULENCE_TILE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FLUID_TURBULENCE_TILE.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,+CAFU,cAAc,MAAM,CAAC,CAE+C;AAE9E;;;;;;;;;;GAUG;AACH,iDAFU,MAAM,CAEoC;AAEpD;;;GAGG;AACH,yCAFU,MAAM,CAEmC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Texels of the far field's turbulence tile on x, y and z: 128 × 32 × 128, y up.
3
+ *
4
+ * The tile repeats, so the far field's turbulence repeats every `16·L` across the wind and `4·L`
5
+ * up, `L` the length scale: four of the spectrum's most energetic wavelength (`≈ 4.05·L`) across,
6
+ * one up. 4 MiB as `rgba16float`.
7
+ *
8
+ * @type {ReadonlyArray<number>}
9
+ */
10
+ export const FLUID_TURBULENCE_TILE_RESOLUTION = Object.freeze([128, 32, 128]);
11
+
12
+ /**
13
+ * Texels of the turbulence tile per length scale `L`: the tile's spacing is `L/8`.
14
+ *
15
+ * The von Kármán spectrum is a function of `k·L` alone, so a tile laid out in units of `L` is the same
16
+ * tile for every `L`: the length scale is only how far apart its texels are in the world, and changing
17
+ * it regenerates nothing. Eight a length keeps the spectrum's peak (`≈ 4·L`) at 32 texels and resolves
18
+ * wavelengths down to `L` at 8 texels each, the fewest a trilinear read and the solver's advection
19
+ * carry without visible loss; shorter ones, down to the tile's Nyquist `L/4`, are in it too.
20
+ *
21
+ * @type {number}
22
+ */
23
+ export const FLUID_TURBULENCE_TEXELS_PER_LENGTH = 8;
24
+
25
+ /**
26
+ * The seed the engine's turbulence tile is generated from: one tile, the same on every machine.
27
+ * @type {number}
28
+ */
29
+ export const FLUID_TURBULENCE_TILE_SEED = 0x6b6172;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The far field a {@link FluidAtmosphere} record describes, at a WORLD point: its mean `u`, plus
3
+ * `σ·T((x − o) ⊙ S⁻¹)` when it has turbulence, `T` the engine's tile read trilinearly
4
+ * ({@link fluid_turbulence_tile_sample}), as every GPU reader of the far field reads it.
5
+ *
6
+ * With `σ = 0` it is `u`, and the tile is never made. Allocates nothing once the tile exists.
7
+ *
8
+ * @param {Float64Array|Float32Array|number[]} out receives `[x, y, z]`, WORLD units per second
9
+ * @param {Float64Array|number[]} atmosphere
10
+ * @param {number} offset where the record starts
11
+ * @param {number} x
12
+ * @param {number} y
13
+ * @param {number} z
14
+ */
15
+ export function fluid_atmosphere_velocity_at(out: Float64Array | Float32Array | number[], atmosphere: Float64Array | number[], offset: number, x: number, y: number, z: number): void;
16
+ //# sourceMappingURL=fluid_atmosphere_velocity_at.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid_atmosphere_velocity_at.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,kDAPW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,cAClC,YAAY,GAAC,MAAM,EAAE,UACrB,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,QA4BhB"}
@@ -0,0 +1,49 @@
1
+ import { FluidAtmosphere } from "../FluidAtmosphere.js";
2
+ import { fluid_turbulence_inverse_tile_size } from "./fluid_turbulence_inverse_tile_size.js";
3
+ import { fluid_turbulence_tile_data } from "./fluid_turbulence_tile_data.js";
4
+ import { fluid_turbulence_tile_sample } from "./fluid_turbulence_tile_sample.js";
5
+
6
+ const inverse_size = new Float64Array(3);
7
+ const coordinate = new Float64Array(3);
8
+
9
+ /**
10
+ * The far field a {@link FluidAtmosphere} record describes, at a WORLD point: its mean `u`, plus
11
+ * `σ·T((x − o) ⊙ S⁻¹)` when it has turbulence, `T` the engine's tile read trilinearly
12
+ * ({@link fluid_turbulence_tile_sample}), as every GPU reader of the far field reads it.
13
+ *
14
+ * With `σ = 0` it is `u`, and the tile is never made. Allocates nothing once the tile exists.
15
+ *
16
+ * @param {Float64Array|Float32Array|number[]} out receives `[x, y, z]`, WORLD units per second
17
+ * @param {Float64Array|number[]} atmosphere
18
+ * @param {number} offset where the record starts
19
+ * @param {number} x
20
+ * @param {number} y
21
+ * @param {number} z
22
+ */
23
+ export function fluid_atmosphere_velocity_at(out, atmosphere, offset, x, y, z) {
24
+ const sigma = atmosphere[offset + FluidAtmosphere.TURBULENCE_SIGMA];
25
+
26
+ const ux = atmosphere[offset + FluidAtmosphere.VELOCITY_X];
27
+ const uy = atmosphere[offset + FluidAtmosphere.VELOCITY_Y];
28
+ const uz = atmosphere[offset + FluidAtmosphere.VELOCITY_Z];
29
+
30
+ if (sigma === 0) {
31
+ out[0] = ux;
32
+ out[1] = uy;
33
+ out[2] = uz;
34
+
35
+ return;
36
+ }
37
+
38
+ fluid_turbulence_inverse_tile_size(inverse_size, atmosphere[offset + FluidAtmosphere.TURBULENCE_LENGTH]);
39
+
40
+ coordinate[0] = (x - atmosphere[offset + FluidAtmosphere.TURBULENCE_OFFSET_X]) * inverse_size[0];
41
+ coordinate[1] = (y - atmosphere[offset + FluidAtmosphere.TURBULENCE_OFFSET_Y]) * inverse_size[1];
42
+ coordinate[2] = (z - atmosphere[offset + FluidAtmosphere.TURBULENCE_OFFSET_Z]) * inverse_size[2];
43
+
44
+ fluid_turbulence_tile_sample(out, fluid_turbulence_tile_data(), coordinate);
45
+
46
+ out[0] = ux + sigma * out[0];
47
+ out[1] = uy + sigma * out[1];
48
+ out[2] = uz + sigma * out[2];
49
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * One over the turbulence tile's size in the world on each axis, for a length scale `L`: a world
3
+ * distance times it is a distance in tiles. The tile is `n·L / FLUID_TURBULENCE_TEXELS_PER_LENGTH`
4
+ * on an axis of `n` texels.
5
+ *
6
+ * @param {Float64Array|Float32Array|number[]} out receives x, y, z
7
+ * @param {number} length `L`, WORLD units, > 0
8
+ * @returns {Float64Array|Float32Array|number[]} `out`
9
+ */
10
+ export function fluid_turbulence_inverse_tile_size(out: Float64Array | Float32Array | number[], length: number): Float64Array | Float32Array | number[];
11
+ //# sourceMappingURL=fluid_turbulence_inverse_tile_size.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid_turbulence_inverse_tile_size.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wDAJW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,UAClC,MAAM,GACJ,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,CAQ9C"}
@@ -0,0 +1,18 @@
1
+ import { FLUID_TURBULENCE_TEXELS_PER_LENGTH, FLUID_TURBULENCE_TILE_RESOLUTION } from "./FLUID_TURBULENCE_TILE.js";
2
+
3
+ /**
4
+ * One over the turbulence tile's size in the world on each axis, for a length scale `L`: a world
5
+ * distance times it is a distance in tiles. The tile is `n·L / FLUID_TURBULENCE_TEXELS_PER_LENGTH`
6
+ * on an axis of `n` texels.
7
+ *
8
+ * @param {Float64Array|Float32Array|number[]} out receives x, y, z
9
+ * @param {number} length `L`, WORLD units, > 0
10
+ * @returns {Float64Array|Float32Array|number[]} `out`
11
+ */
12
+ export function fluid_turbulence_inverse_tile_size(out, length) {
13
+ for (let axis = 0; axis < 3; axis++) {
14
+ out[axis] = FLUID_TURBULENCE_TEXELS_PER_LENGTH / (FLUID_TURBULENCE_TILE_RESOLUTION[axis] * length);
15
+ }
16
+
17
+ return out;
18
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The engine's turbulence tile and its levels ({@link fluid_turbulence_tile_generate_levels} at
3
+ * {@link FLUID_TURBULENCE_TILE_RESOLUTION}, {@link FLUID_TURBULENCE_TEXELS_PER_LENGTH} and
4
+ * {@link FLUID_TURBULENCE_TILE_SEED}, a full mip chain), every value rounded to `float16`, as the device
5
+ * holds it. Three values a texel, x fastest. Generated on the first call and kept: about 0.3 s and
6
+ * 7 MiB, once a process, and only for a scene that asks for turbulence. Never write to them.
7
+ *
8
+ * @returns {Float32Array[]}
9
+ */
10
+ export function fluid_turbulence_tile_levels(): Float32Array[];
11
+ /**
12
+ * The engine's turbulence tile at full resolution: level 0 of {@link fluid_turbulence_tile_levels},
13
+ * what a read of the far field at a point takes. Three values a texel, x fastest.
14
+ *
15
+ * @returns {Float32Array}
16
+ */
17
+ export function fluid_turbulence_tile_data(): Float32Array;
18
+ /**
19
+ * The tile's levels as an `rgba16float` texture's mips: four halves a texel, alpha 0, x fastest, level
20
+ * 0 first. Allocates the result, about 4.6 MiB, for one upload.
21
+ *
22
+ * @returns {Uint16Array[]}
23
+ */
24
+ export function fluid_turbulence_tile_data_rgba16(): Uint16Array[];
25
+ //# sourceMappingURL=fluid_turbulence_tile_data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid_turbulence_tile_data.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js"],"names":[],"mappings":"AAUA;;;;;;;;GAQG;AACH,gDAFa,YAAY,EAAE,CAgB1B;AAED;;;;;GAKG;AACH,8CAFa,YAAY,CAIxB;AAED;;;;;GAKG;AACH,qDAFa,WAAW,EAAE,CAezB"}
@@ -0,0 +1,65 @@
1
+ import { half_to_float_uint16 } from "../../../../core/binary/half_to_float_uint16.js";
2
+ import { to_half_float_uint16 } from "../../../../core/binary/to_half_float_uint16.js";
3
+ import { FLUID_TURBULENCE_TEXELS_PER_LENGTH, FLUID_TURBULENCE_TILE_RESOLUTION, FLUID_TURBULENCE_TILE_SEED } from "./FLUID_TURBULENCE_TILE.js";
4
+ import { fluid_turbulence_tile_generate_levels } from "./fluid_turbulence_tile_generate.js";
5
+
6
+ /**
7
+ * @type {Float32Array[]|null}
8
+ */
9
+ let levels = null;
10
+
11
+ /**
12
+ * The engine's turbulence tile and its levels ({@link fluid_turbulence_tile_generate_levels} at
13
+ * {@link FLUID_TURBULENCE_TILE_RESOLUTION}, {@link FLUID_TURBULENCE_TEXELS_PER_LENGTH} and
14
+ * {@link FLUID_TURBULENCE_TILE_SEED}, a full mip chain), every value rounded to `float16`, as the device
15
+ * holds it. Three values a texel, x fastest. Generated on the first call and kept: about 0.3 s and
16
+ * 7 MiB, once a process, and only for a scene that asks for turbulence. Never write to them.
17
+ *
18
+ * @returns {Float32Array[]}
19
+ */
20
+ export function fluid_turbulence_tile_levels() {
21
+ if (levels === null) {
22
+ const generated = fluid_turbulence_tile_generate_levels(FLUID_TURBULENCE_TILE_RESOLUTION, FLUID_TURBULENCE_TEXELS_PER_LENGTH, FLUID_TURBULENCE_TILE_SEED);
23
+
24
+ for (const values of generated) {
25
+ for (let i = 0; i < values.length; i++) {
26
+ values[i] = half_to_float_uint16(to_half_float_uint16(values[i]));
27
+ }
28
+ }
29
+
30
+ levels = generated;
31
+ }
32
+
33
+ return levels;
34
+ }
35
+
36
+ /**
37
+ * The engine's turbulence tile at full resolution: level 0 of {@link fluid_turbulence_tile_levels},
38
+ * what a read of the far field at a point takes. Three values a texel, x fastest.
39
+ *
40
+ * @returns {Float32Array}
41
+ */
42
+ export function fluid_turbulence_tile_data() {
43
+ return fluid_turbulence_tile_levels()[0];
44
+ }
45
+
46
+ /**
47
+ * The tile's levels as an `rgba16float` texture's mips: four halves a texel, alpha 0, x fastest, level
48
+ * 0 first. Allocates the result, about 4.6 MiB, for one upload.
49
+ *
50
+ * @returns {Uint16Array[]}
51
+ */
52
+ export function fluid_turbulence_tile_data_rgba16() {
53
+ return fluid_turbulence_tile_levels().map(values => {
54
+ const count = values.length / 3;
55
+ const out = new Uint16Array(4 * count);
56
+
57
+ for (let i = 0; i < count; i++) {
58
+ out[4 * i] = to_half_float_uint16(values[3 * i]);
59
+ out[4 * i + 1] = to_half_float_uint16(values[3 * i + 1]);
60
+ out[4 * i + 2] = to_half_float_uint16(values[3 * i + 2]);
61
+ }
62
+
63
+ return out;
64
+ });
65
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * A repeating tile of isotropic, divergence-free turbulence with the von Kármán spectrum, unit rms:
3
+ * the mean over the tile of each component's square, averaged over the three components, is 1.
4
+ * Level 0 of {@link fluid_turbulence_tile_generate_levels}.
5
+ *
6
+ * @param {ArrayLike<number>} resolution texels on x, y and z, each a power of two, 2 or more
7
+ * @param {number} texels_per_length texels per length scale `L`, > 0
8
+ * @param {number} seed
9
+ * @returns {Float32Array} three values a texel, `(u, v, w)`, x fastest, then y, then z
10
+ */
11
+ export function fluid_turbulence_tile_generate(resolution: ArrayLike<number>, texels_per_length: number, seed: number): Float32Array;
12
+ /**
13
+ * Texels of level `level` of a tile on each axis: the tile's halved `level` times, and at least 1.
14
+ *
15
+ * @param {number[]} out
16
+ * @param {ArrayLike<number>} resolution level 0's
17
+ * @param {number} level
18
+ * @returns {number[]} `out`
19
+ */
20
+ export function fluid_turbulence_tile_level_size(out: number[], resolution: ArrayLike<number>, level: number): number[];
21
+ /**
22
+ * A repeating tile of isotropic, divergence-free turbulence with the von Kármán spectrum, and its
23
+ * levels: level `ℓ` is the same field band-limited to what texels `2^ℓ` times as large can hold.
24
+ *
25
+ * The tile is laid out in units of the length scale `L`: `texels_per_length` texels a length. In
26
+ * those units the von Kármán energy spectrum is
27
+ *
28
+ * E(k) ∝ (kL)⁴ / (1 + (kL)²)^(17/6)
29
+ *
30
+ * which rises as k⁴ from the largest scales, peaks at a wavelength of about `4.05·L`, and falls as
31
+ * the inertial range's k^(−5/3) below it.
32
+ *
33
+ * Spectral synthesis, Shinozuka's: each wavenumber of the tile's lattice draws a complex Gaussian
34
+ * vector, projects it onto the plane normal to the wavenumber, which makes the field divergence-free,
35
+ * and scales it by `sqrt(E(k) / (4π k²))`, an isotropic field's amplitude at a lattice point; an
36
+ * inverse FFT then gives the field, of which the real part is kept. The mean (`k = 0`) and the
37
+ * Nyquist planes are left at zero.
38
+ *
39
+ * A level keeps the wavenumbers below its own Nyquist and no others, and is the inverse FFT of those at
40
+ * its own texel centres: an ideal low-pass of level 0, evaluated where a sampler reads that level, so
41
+ * a read of level `ℓ` is level 0 with every wavelength shorter than two of its texels taken out, and
42
+ * nothing aliased in. Every level is scaled as level 0 is to unit rms, so a level holds the energy of
43
+ * its band and no more.
44
+ *
45
+ * Deterministic in `seed`, and the same level 0 whatever the level count. Allocates the levels and
46
+ * about 13 MB of transforms, once: this is an asset's generation, not a per-frame path.
47
+ *
48
+ * @param {ArrayLike<number>} resolution texels on x, y and z, each a power of two, 2 or more
49
+ * @param {number} texels_per_length texels per length scale `L`, > 0
50
+ * @param {number} seed
51
+ * @param {number} [level_count] levels to make, 1 or more; by default down to one texel on the
52
+ * longest axis, a full mip chain
53
+ * @returns {Float32Array[]} per level, three values a texel, `(u, v, w)`, x fastest, then y, then z
54
+ */
55
+ export function fluid_turbulence_tile_generate_levels(resolution: ArrayLike<number>, texels_per_length: number, seed: number, level_count?: number): Float32Array[];
56
+ //# sourceMappingURL=fluid_turbulence_tile_generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid_turbulence_tile_generate.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,2DALW,UAAU,MAAM,CAAC,qBACjB,MAAM,QACN,MAAM,GACJ,YAAY,CAIxB;AAED;;;;;;;GAOG;AACH,sDALW,MAAM,EAAE,cACR,UAAU,MAAM,CAAC,SACjB,MAAM,GACJ,MAAM,EAAE,CAQpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,kEAPW,UAAU,MAAM,CAAC,qBACjB,MAAM,QACN,MAAM,gBACN,MAAM,GAEJ,YAAY,EAAE,CA2L1B"}