@woosh/meep-engine 3.69.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 (398) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/package.json +1 -1
  4. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  5. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  6. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  7. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  8. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  9. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  10. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  11. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  12. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  13. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  14. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  15. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  16. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  17. package/src/core/bvh8/bvh8_depth.js +39 -0
  18. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  19. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  20. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  21. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  22. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  24. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  25. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  26. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  27. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  28. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  29. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  30. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  31. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  32. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  33. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  34. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  35. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  36. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  37. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  38. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  39. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  40. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  41. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  42. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  43. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  44. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  45. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  46. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  47. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  48. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  49. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  50. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  51. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  52. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  53. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  54. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  55. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  56. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  57. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  58. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  59. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  60. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  61. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  62. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  63. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  64. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  65. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  66. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  67. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  68. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  69. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  70. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  71. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  72. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  73. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  74. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  75. package/src/shade/playground/bvh_repro/README.md +8 -6
  76. package/src/shade/playground/bvh_repro/index.html +125 -124
  77. package/src/shade/playground/bvh_repro/main.js +259 -254
  78. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  79. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  80. package/src/shade/playground/grass_surfaces/main.js +3 -2
  81. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  82. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  83. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  84. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  85. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  86. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  87. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  88. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  89. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  90. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  91. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  92. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  93. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  94. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  95. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  96. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  97. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  98. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  99. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  100. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  101. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  102. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  103. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  104. package/src/shade/playground/water_surface/main.js +6 -3
  105. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  106. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  107. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  108. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  109. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  110. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  111. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  112. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  113. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  114. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  115. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  116. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  117. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  118. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  119. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  120. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  121. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  122. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  123. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  124. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  125. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  126. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  127. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  128. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  129. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  130. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  131. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  132. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  133. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  134. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  135. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  136. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  137. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  138. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  139. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  140. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  141. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  142. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  143. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  144. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  145. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +2 -1
  147. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  148. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  150. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  151. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  152. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  153. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  154. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  155. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  156. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  157. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  158. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  159. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  160. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  161. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  162. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  164. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  165. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  166. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  167. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  168. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  170. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  171. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  172. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  173. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  174. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  175. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  176. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  177. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  178. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  179. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  180. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  182. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  183. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  185. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  186. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  188. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  189. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  190. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  191. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  192. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  193. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  194. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  195. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  197. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  198. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  199. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  200. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  201. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  203. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  205. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  206. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  207. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  208. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  209. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  210. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  211. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  212. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  213. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  214. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  215. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  216. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  217. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  218. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  219. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  220. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  221. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  222. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  224. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  225. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  226. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  227. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  228. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  229. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  230. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  231. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  232. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  233. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  234. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  235. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  236. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  237. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  238. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  239. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  240. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  241. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  242. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  243. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  244. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  245. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  246. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  247. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  248. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  249. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  250. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  251. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  252. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  253. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  254. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  255. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  256. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  257. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  258. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  259. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  260. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  261. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  262. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  263. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  264. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  265. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  266. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  267. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  268. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  269. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  270. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  271. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  272. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  273. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  274. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  275. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  276. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  277. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  278. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  279. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  280. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  281. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  282. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  283. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  284. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  285. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  286. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  287. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  288. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  289. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  290. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  291. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  292. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  293. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  294. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  295. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  296. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  297. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  298. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  299. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  300. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  301. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  302. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  303. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  304. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  305. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  306. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  307. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  308. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  309. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  310. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  311. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  312. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  313. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  315. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  316. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  318. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  319. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  320. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  321. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  322. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  324. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  325. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  327. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  328. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  329. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  330. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  331. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  332. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  333. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  334. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  335. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  336. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  337. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  338. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  339. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  340. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  341. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  342. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  343. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  344. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  345. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  346. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  347. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  348. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  349. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  350. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  351. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  352. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  353. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  354. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  355. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  356. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  357. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  358. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  359. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  360. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  361. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  362. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  363. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  364. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  365. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  366. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  367. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  368. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  369. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  370. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  371. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  372. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  373. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  374. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  375. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  376. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  377. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  378. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  379. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  380. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  381. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  382. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  383. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  384. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  385. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  386. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  387. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  388. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  389. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  390. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  391. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  392. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  393. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  394. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  395. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  396. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  397. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  398. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -16,6 +16,7 @@ import { FluidMacPasses } from "./mac/FluidMacPasses.js";
16
16
  import { FluidMacVelocitySet } from "./mac/FluidMacVelocitySet.js";
17
17
  import { GPUFluidPressureSolve } from "./pressure/GPUFluidPressureSolve.js";
18
18
  import { FLUID_FORCING_BRICK_CELLS } from "./forcing/FLUID_FORCING.js";
19
+ import { fluid_far_field_place, fluid_far_field_value, fluid_far_record, fluid_far_record_copy, fluid_far_record_read } from "./FLUID_FAR_FIELD_STRUCT.js";
19
20
 
20
21
  /**
21
22
  * @typedef {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
@@ -83,27 +84,22 @@ export function gpu_fluid_cascade_frame_keep(from, to) {
83
84
  }
84
85
 
85
86
  /**
86
- * The far field's velocity and `Λ` from a {@link FluidAtmosphere} record, checking that it carries
87
- * no body force: `force` is a CPU-field term and not part of the far field (§6), so the GPU fluid
88
- * drops it, and says so in development.
87
+ * The far field and `Λ` from a {@link FluidAtmosphere} record, checking that it carries no body
88
+ * force: `force` is a CPU-field term and not part of the far field (§6), so the GPU fluid drops it,
89
+ * and says so in development.
89
90
  *
90
91
  * @param {Float64Array|number[]} atmosphere
91
92
  * @param {number} offset
92
- * @param {Float32Array} out_far_velocity receives `v_far`, rounded to f32
93
+ * @param {{mean: Float32Array, sigma: number, offset: Float64Array, length: number}} out_far receives
94
+ * the far field (`fluid_far_record`), its mean rounded to f32
93
95
  * @returns {number} `Λ`
94
96
  */
95
- function read_far_field(atmosphere, offset, out_far_velocity) {
97
+ function read_far_field(atmosphere, offset, out_far) {
96
98
  assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_X], 0, 'a body force reaches the GPU fluid, which drops it');
97
99
  assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_Y], 0, 'a body force reaches the GPU fluid, which drops it');
98
100
  assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_Z], 0, 'a body force reaches the GPU fluid, which drops it');
99
101
 
100
- out_far_velocity[0] = atmosphere[offset + FluidAtmosphere.VELOCITY_X];
101
- out_far_velocity[1] = atmosphere[offset + FluidAtmosphere.VELOCITY_Y];
102
- out_far_velocity[2] = atmosphere[offset + FluidAtmosphere.VELOCITY_Z];
103
-
104
- for (let axis = 0; axis < 3; axis++) {
105
- assert.isFinite(out_far_velocity[axis], 'v_far');
106
- }
102
+ fluid_far_record_read(out_far, atmosphere, offset);
107
103
 
108
104
  const lambda = atmosphere[offset + FluidAtmosphere.LAMBDA];
109
105
 
@@ -146,8 +142,8 @@ function restrict_value() {
146
142
  keep: 1,
147
143
  box_size: new Uint32Array(3),
148
144
  child_offset: new Int32Array(3),
149
- child_far_velocity: new Float32Array(3),
150
- far_velocity: new Float32Array(3),
145
+ child_far: fluid_far_field_value(),
146
+ far: fluid_far_field_value(),
151
147
  };
152
148
  }
153
149
 
@@ -168,11 +164,13 @@ function restrict_value() {
168
164
  * `FLUID_FORCED_FLAG` where the tick's forcing was written for the cell's faces. A step reads these
169
165
  * unless it is handed another buffer. `GPUFluidForcing` writes them before each step of the
170
166
  * cascade, with {@link solid_bricks} saying which bricks it last wrote;
171
- * - **its read record**: the instant its velocity was last brought to, `t_s`, with `v_far(t_s)`
172
- * ({@link read_far_velocity}, rounded to f32 as the device holds it) and `Λ(t_s)`
173
- * ({@link read_lambda}), on the CPU. The velocity is a deviation from `v_far(t_s)`, so every read of
174
- * it at an instant `t` is `v_far(t) + (v − v_far(t_s))·e^(−(Λ(t) − Λ(t_s)))` (§6); {@link update_read}
175
- * computes that factor, {@link read_keep}, on the CPU, and the device never sees `Λ`.
167
+ * - **its read record**: the instant its velocity was last brought to, `t_s`, with `v_far(t_s)` —
168
+ * its mean ({@link read_far_velocity}, rounded to f32 as the device holds it) and its turbulence's
169
+ * `σ`, offset and length scale — and `Λ(t_s)` ({@link read_lambda}), on the CPU. The velocity is a
170
+ * deviation from `v_far(t_s)`, so every read of it at an instant `t` at a point `x` is
171
+ * `v_far(t, x) + (v − v_far(t_s, x))·e^(−(Λ(t) − Λ(t_s)))` (§6); {@link update_read} computes that
172
+ * factor, {@link read_keep}, on the CPU, and the device never sees `Λ`. Each pass lays the far field
173
+ * over its own lattice (`FLUID_FAR_FIELD_STRUCT`), so the device never sees the offset either.
176
174
  *
177
175
  * It is created at the far field of a {@link FluidAtmosphere} record: velocity `v_far`, pressure 0,
178
176
  * the read record that instant.
@@ -285,13 +283,23 @@ export class GPUFluidCascade {
285
283
  /** The read record: `t_s` and `Λ(t_s)`, f64. */
286
284
  #read_time = 0;
287
285
  #read_lambda = 0;
288
- /** `v_far(t_s)`, as the device holds it. */
289
- #read_far_velocity = new Float32Array(3);
286
+ /** `v_far(t_s)`: its mean as the device holds it, its turbulence. */
287
+ #read_far = fluid_far_record();
290
288
  /** `e^(−(Λ(t) − Λ(t_s)))` at the last {@link update_read}. */
291
289
  #read_keep = 1;
292
290
 
293
291
  /** Scratch for an atmosphere's `v_far`. */
294
- #far_scratch = new Float32Array(3);
292
+ #far_scratch = fluid_far_record();
293
+
294
+ /**
295
+ * The turbulence tile a pass binds when it is handed none: one texel, never read, since a far field
296
+ * with turbulence asserts a tile.
297
+ * @type {GPUTexture}
298
+ */
299
+ #no_turbulence;
300
+
301
+ /** @type {GPUTextureView} */
302
+ #no_turbulence_view;
295
303
 
296
304
  /** The window as the published field reads it, rewritten on every query. */
297
305
  #cells_window = fluid_cascade_window_value();
@@ -311,7 +319,7 @@ export class GPUFluidCascade {
311
319
  #advected = { u: null, v: null, w: null };
312
320
 
313
321
  /** What the step's passes bind of the parent, rebound for every step. */
314
- #parent_bindings = { uniform: null, u: null, v: null, w: null, pressure: null };
322
+ #parent_bindings = { uniform: null, u: null, v: null, w: null, pressure: null, turbulence: null };
315
323
 
316
324
  /** The step's ghosts' views and buffer, rebound for every step. */
317
325
  #ghosts = { u: null, v: null, w: null, pressure: null };
@@ -374,7 +382,7 @@ export class GPUFluidCascade {
374
382
  this.#corner.set(corner);
375
383
  this.#cell_size = cell_size;
376
384
 
377
- this.#read_lambda = read_far_field(atmosphere, atmosphere_offset, this.#read_far_velocity);
385
+ this.#read_lambda = read_far_field(atmosphere, atmosphere_offset, this.#read_far);
378
386
  this.#read_time = atmosphere[atmosphere_offset + FluidAtmosphere.TIME];
379
387
 
380
388
  const [nx, ny, nz] = this.#resolution;
@@ -428,11 +436,22 @@ export class GPUFluidCascade {
428
436
  usage: GPUBufferUsage.STORAGE,
429
437
  });
430
438
 
431
- // a new texture is 0, so only a component the far field moves is written
439
+ this.#no_turbulence = device.createTexture({
440
+ label: 'Fluid / cascade / no turbulence',
441
+ size: [1, 1, 1],
442
+ dimension: '3d',
443
+ format: 'rgba16float',
444
+ usage: GPUTextureUsage.TEXTURE_BINDING,
445
+ });
446
+
447
+ this.#no_turbulence_view = this.#no_turbulence.createView();
448
+
449
+ // a new texture is 0, so only a component the far field moves is written; with turbulence the
450
+ // eddies come in through the fills and the atmosphere, as everything else of the fluid warms up
432
451
  const textures = this.#velocity.textures;
433
452
 
434
453
  for (let component = 0; component < 3; component++) {
435
- const value = this.#read_far_velocity[component];
454
+ const value = this.#read_far.mean[component];
436
455
 
437
456
  if (value === 0) {
438
457
  continue;
@@ -567,7 +586,41 @@ export class GPUFluidCascade {
567
586
  * @returns {Readonly<Float32Array>}
568
587
  */
569
588
  get read_far_velocity() {
570
- return this.#read_far_velocity;
589
+ return this.#read_far.mean;
590
+ }
591
+
592
+ /**
593
+ * `v_far(t_s)` laid over this cascade's window as a {@link FLUID_FAR_FIELD_STRUCT} value: cell
594
+ * coordinate 0 at window-local cell 0. What its publish subtracts.
595
+ *
596
+ * @param {{mean: Float32Array, sigma: number, origin: Float32Array, scale: Float32Array}} out
597
+ * @returns {{mean: Float32Array, sigma: number, origin: Float32Array, scale: Float32Array}} `out`
598
+ */
599
+ describe_far(out) {
600
+ const far = this.#read_far;
601
+ const corner = this.#corner;
602
+
603
+ fluid_far_field_place(out, far, far.offset, far.length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
604
+
605
+ return out;
606
+ }
607
+
608
+ /**
609
+ * The turbulence tile a pass binds: `turbulence`, or this cascade's stand-in when it is `null`, which
610
+ * only a far field with no turbulence may take.
611
+ *
612
+ * @param {GPUTextureView|null} turbulence
613
+ * @param {number} sigma the larger `σ` the pass reads
614
+ * @returns {GPUTextureView}
615
+ */
616
+ #turbulence_view(turbulence, sigma) {
617
+ if (turbulence !== null) {
618
+ return turbulence;
619
+ }
620
+
621
+ assert.equal(sigma, 0, 'a far field with turbulence is handed the turbulence tile');
622
+
623
+ return this.#no_turbulence_view;
571
624
  }
572
625
 
573
626
  /**
@@ -651,16 +704,23 @@ export class GPUFluidCascade {
651
704
  * @param {GPUFluidCascade|null} parent a cascade of twice the cell and the same resolution, or `null`
652
705
  */
653
706
  describe_parent(out, out_bindings, parent) {
654
- out.read_far_velocity.set(this.#read_far_velocity);
707
+ const read = this.#read_far;
708
+ const h = this.#cell_size;
655
709
 
656
710
  if (parent === null) {
657
- out.origin.fill(0);
711
+ // no window to address: the origin only places the far field, at this window's corner,
712
+ // which keeps the positions a read takes small
713
+ out.origin.set(this.#corner);
658
714
  out.keep = 1;
659
715
  fluid_cascade_window_empty(out.cells);
660
716
  fluid_cascade_window_empty(out.faces_u);
661
717
  fluid_cascade_window_empty(out.faces_v);
662
718
  fluid_cascade_window_empty(out.faces_w);
663
- out.far_velocity.set(this.#read_far_velocity);
719
+
720
+ const o = out.origin;
721
+
722
+ fluid_far_field_place(out.read, read, read.offset, read.length, o[0], o[1], o[2], h, h);
723
+ fluid_far_field_place(out.far, read, read.offset, read.length, o[0], o[1], o[2], h, h);
664
724
 
665
725
  out_bindings.u = this.#far_field_views[0];
666
726
  out_bindings.v = this.#far_field_views[1];
@@ -687,7 +747,13 @@ export class GPUFluidCascade {
687
747
  fluid_cascade_window_place(out.faces_u, parent.#corner, parent.#resolution, 0);
688
748
  fluid_cascade_window_place(out.faces_v, parent.#corner, parent.#resolution, 1);
689
749
  fluid_cascade_window_place(out.faces_w, parent.#corner, parent.#resolution, 2);
690
- out.far_velocity.set(parent.#read_far_velocity);
750
+
751
+ const o = out.origin;
752
+ const far = parent.#read_far;
753
+
754
+ // the read is this cascade's far field; the parent's state deviates from the parent's, at its level
755
+ fluid_far_field_place(out.read, read, read.offset, read.length, o[0], o[1], o[2], h, h);
756
+ fluid_far_field_place(out.far, far, far.offset, far.length, o[0], o[1], o[2], h, parent.#cell_size);
691
757
 
692
758
  const velocity = parent.#velocity;
693
759
  out_bindings.u = velocity.u;
@@ -719,6 +785,8 @@ export class GPUFluidCascade {
719
785
  * @param {GPUFluidCascadePressureArm} [options.arm]
720
786
  * @param {number} [options.count] V-cycles under {@link GPUFluidCascadePressureArm.VCycles}, red-black
721
787
  * sweeps under {@link GPUFluidCascadePressureArm.SOR}
788
+ * @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile
789
+ * (`GPUSceneWind#turbulence`); `null`, the default, only for a far field with none
722
790
  */
723
791
  record_step({
724
792
  graph,
@@ -732,6 +800,7 @@ export class GPUFluidCascade {
732
800
  vorticity_confinement = 0,
733
801
  arm = GPUFluidCascadePressureArm.VCycles,
734
802
  count = GPU_FLUID_CASCADE_V_CYCLES,
803
+ turbulence = null,
735
804
  }) {
736
805
  assert.notOk(this.#destroyed, 'the cascade is destroyed');
737
806
  assert.defined(graph, 'graph');
@@ -748,8 +817,8 @@ export class GPUFluidCascade {
748
817
  assert.ok(arm ===GPUFluidCascadePressureArm.VCycles || arm === GPUFluidCascadePressureArm.SOR, 'arm');
749
818
  assert.isNonNegativeInteger(count, 'count');
750
819
 
751
- const far_end = this.#far_scratch;
752
- const lambda_end = read_far_field(atmosphere, atmosphere_offset, far_end);
820
+ const end = this.#far_scratch;
821
+ const lambda_end = read_far_field(atmosphere, atmosphere_offset, end);
753
822
  const time_end = atmosphere[atmosphere_offset + FluidAtmosphere.TIME];
754
823
 
755
824
  assert.greaterThanOrEqual(time_end, this.#read_time, 'the step ends at or after the read record');
@@ -763,8 +832,9 @@ export class GPUFluidCascade {
763
832
  cascade: this,
764
833
  dt: 0,
765
834
  corner: new Int32Array(3),
766
- far_start: new Float32Array(3),
767
- far_end: new Float32Array(3),
835
+ far_start: fluid_far_field_value(),
836
+ far_end: fluid_far_field_value(),
837
+ turbulence: null,
768
838
  keep: 1,
769
839
  band: false,
770
840
  parent: fluid_cascade_parent_value(),
@@ -784,8 +854,17 @@ export class GPUFluidCascade {
784
854
 
785
855
  record.dt = dt;
786
856
  record.corner.set(this.#corner);
787
- record.far_start.set(this.#read_far_velocity);
788
- record.far_end.set(far_end);
857
+
858
+ // the start's mean and σ where the end's offset puts the eddies: what the far field alone
859
+ // brings to each face by the step's end
860
+ const start = this.#read_far;
861
+ const corner = this.#corner;
862
+ const length = end.sigma !== 0 ? end.length : start.length;
863
+
864
+ fluid_far_field_place(record.far_start, start, end.offset, length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
865
+ fluid_far_field_place(record.far_end, end, end.offset, length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
866
+
867
+ record.turbulence = this.#turbulence_view(turbulence, Math.max(start.sigma, end.sigma));
789
868
  record.keep = Math.exp(Math.min(0, this.#read_lambda - lambda_end));
790
869
  record.band = relaxation_band;
791
870
  record.solid = solid;
@@ -798,7 +877,7 @@ export class GPUFluidCascade {
798
877
  // the step brings the velocity to t₁
799
878
  this.#read_time = time_end;
800
879
  this.#read_lambda = lambda_end;
801
- this.#read_far_velocity.set(far_end);
880
+ fluid_far_record_copy(this.#read_far, end);
802
881
 
803
882
  const pass = graph.add('Fluid / cascade step', record, GPUFluidCascade.#execute);
804
883
 
@@ -840,8 +919,10 @@ export class GPUFluidCascade {
840
919
  * one inside the window and on the 4-cell lattice
841
920
  * @param {number} options.box_count 0 to 3
842
921
  * @param {GPUFluidCascade|null} options.parent the parent to fill from, or `null` for the far field
922
+ * @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile; `null`, the
923
+ * default, only for a far field with none
843
924
  */
844
- record_fill({ graph, boxes, box_count, parent }) {
925
+ record_fill({ graph, boxes, box_count, parent, turbulence = null }) {
845
926
  assert.notOk(this.#destroyed, 'the cascade is destroyed');
846
927
  assert.defined(graph, 'graph');
847
928
  assert.isNonNegativeInteger(box_count, 'box_count');
@@ -857,6 +938,7 @@ export class GPUFluidCascade {
857
938
  fill: fill_value(),
858
939
  parent: fluid_cascade_parent_value(),
859
940
  parent_bindings: { u: null, v: null, w: null, pressure: null },
941
+ turbulence: null,
860
942
  group_count_x: 1,
861
943
  group_count_y: 1,
862
944
  };
@@ -915,6 +997,8 @@ export class GPUFluidCascade {
915
997
 
916
998
  this.describe_parent(record.parent, record.parent_bindings, parent);
917
999
 
1000
+ record.turbulence = this.#turbulence_view(turbulence, Math.max(record.parent.read.sigma, record.parent.far.sigma));
1001
+
918
1002
  graph.add('Fluid / cascade fill', record, GPUFluidCascade.#execute_fill).make_side_effect();
919
1003
  }
920
1004
 
@@ -930,8 +1014,10 @@ export class GPUFluidCascade {
930
1014
  * @param {object} options
931
1015
  * @param {FrameGraph} options.graph
932
1016
  * @param {GPUFluidCascade} options.child a cascade of half the cell and the same resolution
1017
+ * @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile; `null`, the
1018
+ * default, only for a far field with none
933
1019
  */
934
- record_restrict({ graph, child }) {
1020
+ record_restrict({ graph, child, turbulence = null }) {
935
1021
  assert.notOk(this.#destroyed, 'the cascade is destroyed');
936
1022
  assert.defined(graph, 'graph');
937
1023
  assert.ok(child instanceof GPUFluidCascade, 'child is a cascade');
@@ -942,6 +1028,7 @@ export class GPUFluidCascade {
942
1028
  cascade: this,
943
1029
  child: null,
944
1030
  value: restrict_value(),
1031
+ turbulence: null,
945
1032
  group_count_x: 1,
946
1033
  group_count_y: 1,
947
1034
  group_count_z: 1,
@@ -978,10 +1065,18 @@ export class GPUFluidCascade {
978
1065
  fluid_cascade_window_place(value.faces_v, this.#corner, resolution, 1);
979
1066
  fluid_cascade_window_place(value.faces_w, this.#corner, resolution, 2);
980
1067
 
981
- value.child_far_velocity.set(child.#read_far_velocity);
982
- value.far_velocity.set(this.#read_far_velocity);
1068
+ // both far fields over this cascade's cells: the parent faces the restriction writes
1069
+ const corner = this.#corner;
1070
+ const h = this.#cell_size;
1071
+ const child_far = child.#read_far;
1072
+ const far = this.#read_far;
1073
+
1074
+ fluid_far_field_place(value.child_far, child_far, child_far.offset, child_far.length, corner[0], corner[1], corner[2], h, child.#cell_size);
1075
+ fluid_far_field_place(value.far, far, far.offset, far.length, corner[0], corner[1], corner[2], h, h);
983
1076
  value.keep = gpu_fluid_cascade_frame_keep(child.#read_lambda, this.#read_lambda);
984
1077
 
1078
+ record.turbulence = this.#turbulence_view(turbulence, Math.max(child_far.sigma, far.sigma));
1079
+
985
1080
  record.child = child;
986
1081
  record.group_count_x = Math.ceil(value.box_size[0] / GRID_TILE_SIZE[0]);
987
1082
  record.group_count_y = Math.ceil(value.box_size[1] / GRID_TILE_SIZE[1]);
@@ -991,7 +1086,7 @@ export class GPUFluidCascade {
991
1086
  }
992
1087
 
993
1088
  /** The restriction's bindings, rebound for every restriction. */
994
- #restrict_bindings = { restriction: null, child_u: null, child_v: null, child_w: null, out_u: null, out_v: null, out_w: null };
1089
+ #restrict_bindings = { restriction: null, child_u: null, child_v: null, child_w: null, out_u: null, out_v: null, out_w: null, fluid_turbulence: null };
995
1090
 
996
1091
  #restrict_dispatch = { encoder: null, bindings: null, group_count_x: 1, group_count_y: 1, group_count_z: 1 };
997
1092
 
@@ -1009,6 +1104,7 @@ export class GPUFluidCascade {
1009
1104
  }
1010
1105
  } finally {
1011
1106
  record.child = null;
1107
+ record.turbulence = null;
1012
1108
  cascade.#free_restrictions.push(record);
1013
1109
  }
1014
1110
  }
@@ -1028,6 +1124,7 @@ export class GPUFluidCascade {
1028
1124
  b.out_u = this.#velocity.u;
1029
1125
  b.out_v = this.#velocity.v;
1030
1126
  b.out_w = this.#velocity.w;
1127
+ b.fluid_turbulence = record.turbulence;
1031
1128
 
1032
1129
  const dispatch = this.#restrict_dispatch;
1033
1130
  dispatch.encoder = encoder;
@@ -1040,13 +1137,13 @@ export class GPUFluidCascade {
1040
1137
 
1041
1138
  dispatch.encoder = null;
1042
1139
  dispatch.bindings = null;
1043
- b.restriction = b.child_u = b.child_v = b.child_w = null;
1140
+ b.restriction = b.child_u = b.child_v = b.child_w = b.fluid_turbulence = null;
1044
1141
  }
1045
1142
 
1046
1143
  /** The fill's bindings, rebound for every fill. */
1047
1144
  #fill_bindings = {
1048
1145
  fill: null, parent: null, parent_u: null, parent_v: null, parent_w: null, parent_pressure: null,
1049
- velocity_u: null, velocity_v: null, velocity_w: null, pressure: null,
1146
+ velocity_u: null, velocity_v: null, velocity_w: null, pressure: null, fluid_turbulence: null,
1050
1147
  };
1051
1148
 
1052
1149
  #fill_dispatch = { encoder: null, bindings: null, group_count_x: 1, group_count_y: 1, group_count_z: 1 };
@@ -1066,6 +1163,7 @@ export class GPUFluidCascade {
1066
1163
  } finally {
1067
1164
  record.parent_bindings.u = record.parent_bindings.v = record.parent_bindings.w = null;
1068
1165
  record.parent_bindings.pressure = null;
1166
+ record.turbulence = null;
1069
1167
  cascade.#free_fills.push(record);
1070
1168
  }
1071
1169
  }
@@ -1087,6 +1185,7 @@ export class GPUFluidCascade {
1087
1185
  b.velocity_v = this.#velocity.v;
1088
1186
  b.velocity_w = this.#velocity.w;
1089
1187
  b.pressure = this.#pressure;
1188
+ b.fluid_turbulence = record.turbulence;
1090
1189
 
1091
1190
  const dispatch = this.#fill_dispatch;
1092
1191
  dispatch.encoder = encoder;
@@ -1098,7 +1197,7 @@ export class GPUFluidCascade {
1098
1197
 
1099
1198
  dispatch.encoder = null;
1100
1199
  dispatch.bindings = null;
1101
- b.fill = b.parent = b.parent_u = b.parent_v = b.parent_w = b.parent_pressure = null;
1200
+ b.fill = b.parent = b.parent_u = b.parent_v = b.parent_w = b.parent_pressure = b.fluid_turbulence = null;
1102
1201
  }
1103
1202
 
1104
1203
  /**
@@ -1116,6 +1215,7 @@ export class GPUFluidCascade {
1116
1215
  record.forcing = null;
1117
1216
  record.parent_bindings.u = record.parent_bindings.v = record.parent_bindings.w = null;
1118
1217
  record.parent_bindings.pressure = null;
1218
+ record.turbulence = null;
1119
1219
  cascade.#free_records.push(record);
1120
1220
  }
1121
1221
  }
@@ -1165,6 +1265,7 @@ export class GPUFluidCascade {
1165
1265
  parent.v = record.parent_bindings.v;
1166
1266
  parent.w = record.parent_bindings.w;
1167
1267
  parent.pressure = record.parent_bindings.pressure;
1268
+ parent.turbulence = record.turbulence;
1168
1269
 
1169
1270
  mac.record_ghosts(encoder, parent, ghosts);
1170
1271
 
@@ -1200,7 +1301,7 @@ export class GPUFluidCascade {
1200
1301
 
1201
1302
  mac.record_gradient(encoder, advected, this.#pressure, solid, velocity, ghosts);
1202
1303
 
1203
- parent.uniform = parent.u = parent.v = parent.w = parent.pressure = null;
1304
+ parent.uniform = parent.u = parent.v = parent.w = parent.pressure = parent.turbulence = null;
1204
1305
  ghosts.u = ghosts.v = ghosts.w = ghosts.pressure = null;
1205
1306
  forward.u = forward.v = forward.w = null;
1206
1307
  advected.u = advected.v = advected.w = null;
@@ -1225,6 +1326,7 @@ export class GPUFluidCascade {
1225
1326
  this.#no_forcing.destroy();
1226
1327
  this.#no_confinement.destroy();
1227
1328
  this.#far_field_pressure.destroy();
1329
+ this.#no_turbulence.destroy();
1228
1330
 
1229
1331
  for (const texture of this.#far_field_faces) {
1230
1332
  texture.destroy();
@@ -48,7 +48,9 @@ export const GPU_FLUID_CASCADE_STACK_LIMIT: number;
48
48
  * `read_keep` (`k`). All retained: nothing is allocated to read them.
49
49
  *
50
50
  * Created placed around `anchor` and filled from the far field of `atmosphere` (velocity `v_far`,
51
- * pressure 0); after that nothing is allocated per tick.
51
+ * pressure 0): its mean at creation, and with turbulence, at the first tick that has any, every
52
+ * cascade's whole window filled from its parent, coarsest first, so the coarsest takes the far field's
53
+ * eddies exactly and every finer one its parent's. After that nothing is allocated per tick.
52
54
  */
53
55
  export class GPUFluidCascadeStack {
54
56
  /**
@@ -148,8 +150,11 @@ export class GPUFluidCascadeStack {
148
150
  * @param {number} [options.vorticity_confinement] its strength ε, per second, ≥ 0, for both of the
149
151
  * tick's steps, each with its own cell and step (`GPUFluidCascade#record_step`); 0, the default,
150
152
  * records no curl pass
153
+ * @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile
154
+ * (`GPUSceneWind#turbulence`), which every pass that reads the far field binds; `null`, the default,
155
+ * only for a far field with none
151
156
  */
152
- record_tick({ graph, tick, dt, anchor, atmosphere, atmosphere_offset, forcing, vorticity_confinement }: {
157
+ record_tick({ graph, tick, dt, anchor, atmosphere, atmosphere_offset, forcing, vorticity_confinement, turbulence }: {
153
158
  graph: FrameGraph;
154
159
  tick: number;
155
160
  dt: number;
@@ -158,6 +163,7 @@ export class GPUFluidCascadeStack {
158
163
  atmosphere_offset: number;
159
164
  forcing?: GPUFluidForcing | null;
160
165
  vorticity_confinement?: number;
166
+ turbulence?: GPUTextureView | null;
161
167
  }): void;
162
168
  /**
163
169
  * Record the frame's publish into `graph`, after its last tick (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md
@@ -167,7 +173,8 @@ export class GPUFluidCascadeStack {
167
173
  * wind.set_cascades(count, resolution)
168
174
  * wind.set_cascade_window(c, corner, cell_size) every cascade
169
175
  * wind.set_cascade_decay(c, k) k = e^(−(Λ(t) − Λ(t_s,c))), read_keep
170
- * wind.set_far_velocity(v_far(t))
176
+ * wind.set_far_velocity(u(t)) the far field's mean
177
+ * wind.set_turbulence(σ, offset, L) its turbulence
171
178
  *
172
179
  * A tile holds `v − v_far(t_s,c)` and `k` is taken for `t`, so a cascade that did not step reads
173
180
  * from its old tile through its new decay. A cascade that is published takes the field's
@@ -1 +1 @@
1
- {"version":3,"file":"GPUFluidCascadeStack.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/fluid/GPUFluidCascadeStack.js"],"names":[],"mappings":"AASA;;;;GAIG;AAEH;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IACI;;;;;OAKG;IACH,iCAFW,OAAO,0CAA0C,EAAE,eAAe,QAK5E;IAgWD;;;;OAIG;IACH,uCAJW,MAAM,4BAEN;QAAC,OAAO,EAAE,OAAO,wCAAwC,EAAE,sBAAsB,CAAA;KAAC,QAkC5F;IArVD;;;;;;;;;;OAUG;IACH;QAT8B,MAAM;QACE,UAAU,EAArC,UAAU,MAAM,CAAC;QAED,SAAS,EAAzB,MAAM;QACU,aAAa,EAA7B,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QACL,iBAAiB,EAAjC,MAAM;OAwChB;IA/DD;;;;OAIG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;;OAIG;IACH,UAFU,OAAO,CAED;IAqDhB,wBAAwB;IACxB,4BAEC;IAED;;;OAGG;IACH,uCAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,eAAe,CAI3B;IAED;;;;;OAKG;IACH,qBAFW,YAAY,GAAC,MAAM,EAAE,QAY/B;IAED;;;;;;OAMG;IACH,wBAHW,YAAY,GAAC,MAAM,EAAE,UACrB,MAAM,QAMhB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH;QAd+B,KAAK,EAAzB,UAAU;QACM,IAAI,EAApB,MAAM;QAEU,EAAE,EAAlB,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;QACyB,OAAO,GAAtC,eAAe,GAAC,IAAI;QAEH,qBAAqB,GAAtC,MAAM;aA8FhB;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACY,IAAI,EAA1B,YAAY;QACmB,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;aAyDhB;IA4CD;;OAEG;IACH,gBAUC;;CACJ;yBApdY,OAAO,2DAA2D,EAAE,UAAU;2BAC9E,OAAO,yBAAyB,EAAE,YAAY;8BAC9C,OAAO,8BAA8B,EAAE,eAAe;gCARnC,sBAAsB"}
1
+ {"version":3,"file":"GPUFluidCascadeStack.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/fluid/GPUFluidCascadeStack.js"],"names":[],"mappings":"AAUA;;;;GAIG;AAEH;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH;IACI;;;;;OAKG;IACH,iCAFW,OAAO,0CAA0C,EAAE,eAAe,QAK5E;IAuZD;;;;OAIG;IACH,uCAJW,MAAM,4BAEN;QAAC,OAAO,EAAE,OAAO,wCAAwC,EAAE,sBAAsB,CAAA;KAAC,QAmC5F;IAvYD;;;;;;;;;;OAUG;IACH;QAT8B,MAAM;QACE,UAAU,EAArC,UAAU,MAAM,CAAC;QAED,SAAS,EAAzB,MAAM;QACU,aAAa,EAA7B,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QACL,iBAAiB,EAAjC,MAAM;OAwChB;IA/DD;;;;OAIG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;;OAIG;IACH,UAFU,OAAO,CAED;IAqDhB,wBAAwB;IACxB,4BAEC;IAED;;;OAGG;IACH,uCAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,eAAe,CAI3B;IAED;;;;;OAKG;IACH,qBAFW,YAAY,GAAC,MAAM,EAAE,QAY/B;IAED;;;;;;OAMG;IACH,wBAHW,YAAY,GAAC,MAAM,EAAE,UACrB,MAAM,QAMhB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;QAjB+B,KAAK,EAAzB,UAAU;QACM,IAAI,EAApB,MAAM;QAEU,EAAE,EAAlB,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;QACyB,OAAO,GAAtC,eAAe,GAAC,IAAI;QAEH,qBAAqB,GAAtC,MAAM;QAGwB,UAAU,GAAxC,iBAAe,IAAI;aAoH7B;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACY,IAAI,EAA1B,YAAY;QACmB,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;aA8DhB;IA+DD;;OAEG;IACH,gBAUC;;CACJ;yBA9gBY,OAAO,2DAA2D,EAAE,UAAU;2BAC9E,OAAO,yBAAyB,EAAE,YAAY;8BAC9C,OAAO,8BAA8B,EAAE,eAAe;gCATnC,sBAAsB"}