@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
@@ -1 +1 @@
1
- {"version":3,"file":"shader_fluid_cascade_fill.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js"],"names":[],"mappings":"AA2GA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wCAFU,aAAa,CAMpB;8BAxI2B,+BAA+B"}
1
+ {"version":3,"file":"shader_fluid_cascade_fill.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js"],"names":[],"mappings":"AA4GA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wCAFU,aAAa,CAMpB;8BAzI2B,+BAA+B"}
@@ -10,10 +10,11 @@ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
10
10
  import { chunk_fluid_cascade_parent_pressure, chunk_fluid_cascade_parent_velocity } from "./chunk_fluid_cascade_parent.js";
11
11
  import { FLUID_CASCADE_FILL_BRICK, FLUID_CASCADE_FILL_STRUCT } from "./FLUID_CASCADE_FILL_STRUCT.js";
12
12
  import { FLUID_CASCADE_PARENT_STRUCT } from "./FLUID_CASCADE_PARENT_STRUCT.js";
13
+ import { fluid_turbulence_add_resources } from "../../wind/chunk_fluid_turbulence.js";
13
14
 
14
15
  const resources = new ShaderResourceSetDescriptor();
15
16
 
16
- resources.createGroup()
17
+ fluid_turbulence_add_resources(resources.createGroup())
17
18
  .addUniform("fill", FLUID_CASCADE_FILL_STRUCT)
18
19
  .addUniform("parent", FLUID_CASCADE_PARENT_STRUCT)
19
20
  .addTexture("parent_u", "unfilterable-float", "3d")
@@ -1 +1 @@
1
- {"version":3,"file":"shader_fluid_cascade_ghosts.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js"],"names":[],"mappings":"AAwEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,0CAFU,aAAa,CAMpB;8BA1G2B,+BAA+B"}
1
+ {"version":3,"file":"shader_fluid_cascade_ghosts.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,0CAFU,aAAa,CAMpB;8BA3G2B,+BAA+B"}
@@ -1,108 +1,109 @@
1
- import { chunk_grid_tile_window } from "../../shader/chunk/grid/chunk_grid_tile_window.js";
2
- import { ComputeShader } from "../../shader/ComputeShader.js";
3
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
5
- import { f32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
7
- import { FLUID_MAC_STEP_STRUCT } from "../mac/FLUID_MAC_STEP_STRUCT.js";
8
- import { FLUID_CASCADE_GHOST_DEPTH } from "./FLUID_CASCADE_GHOSTS.js";
9
- import { chunk_fluid_cascade_parent_pressure, chunk_fluid_cascade_parent_velocity } from "./chunk_fluid_cascade_parent.js";
10
- import { FLUID_CASCADE_PARENT_STRUCT } from "./FLUID_CASCADE_PARENT_STRUCT.js";
11
-
12
- const resources = new ShaderResourceSetDescriptor();
13
-
14
- resources.createGroup()
15
- .addUniform("step", FLUID_MAC_STEP_STRUCT)
16
- .addUniform("parent", FLUID_CASCADE_PARENT_STRUCT)
17
- .addTexture("parent_u", "unfilterable-float", "3d")
18
- .addTexture("parent_v", "unfilterable-float", "3d")
19
- .addTexture("parent_w", "unfilterable-float", "3d")
20
- .addStorageBuffer("parent_pressure", WebGPUArray.from(f32), false)
21
- .addStorageTexture("ghost_u", "r32float", "3d", "write-only")
22
- .addStorageTexture("ghost_v", "r32float", "3d", "write-only")
23
- .addStorageTexture("ghost_w", "r32float", "3d", "write-only")
24
- .addStorageBuffer("ghost_pressure", WebGPUArray.from(f32), true);
25
-
26
- const body = CodeChunk.from(
27
- //language=WGSL
28
- `
29
- const FLUID_CASCADE_GHOST_DEPTH = ${FLUID_CASCADE_GHOST_DEPTH};
30
-
31
- @compute @workgroup_size(4, 4, 4)
32
- fn main(@builtin(global_invocation_id) id: vec3<u32>) {
33
- // the velocity ghosts: shell texel t holds window-local face t - depth, of every face past the window.
34
- // Pressure ghosts also use cell = face (t - depth), so any invocation inside step.cells.size is inside
35
- // all three face lattices and the pressure window, and exits immediately.
36
- let face = vec3<i32>(id) - vec3<i32>(FLUID_CASCADE_GHOST_DEPTH);
37
-
38
- if (grid_tile_window_contains(face, step.cells.size)) {
39
- return;
40
- }
41
-
42
- let offset = step.cells.corner - parent.origin;
43
- let reach = vec3<u32>(2u * u32(FLUID_CASCADE_GHOST_DEPTH));
44
-
45
- if (all(id < step.faces_u.size + reach) && !grid_tile_window_contains(face, step.faces_u.size)) {
46
- textureStore(ghost_u, id, vec4<f32>(fluid_parent_face_u(face, offset), 0.0, 0.0, 0.0));
47
- }
48
-
49
- if (all(id < step.faces_v.size + reach) && !grid_tile_window_contains(face, step.faces_v.size)) {
50
- textureStore(ghost_v, id, vec4<f32>(fluid_parent_face_v(face, offset), 0.0, 0.0, 0.0));
51
- }
52
-
53
- if (all(id < step.faces_w.size + reach) && !grid_tile_window_contains(face, step.faces_w.size)) {
54
- textureStore(ghost_w, id, vec4<f32>(fluid_parent_face_w(face, offset), 0.0, 0.0, 0.0));
55
- }
56
-
57
- // the pressure ghosts: element p_id = face + 1, x fastest over the window and a cell each side
58
- let p_coord = face + vec3<i32>(1);
59
- let n = step.cells.size + vec3<u32>(2u);
60
-
61
- if (all(p_coord >= vec3<i32>(0)) && all(vec3<u32>(p_coord) < n)) {
62
- let p_id = vec3<u32>(p_coord);
63
- ghost_pressure[p_id.x + n.x * (p_id.y + n.y * p_id.z)] = fluid_parent_pressure(face + offset);
64
- }
65
- }
66
- `, [
67
- chunk_grid_tile_window,
68
- chunk_fluid_cascade_parent_velocity,
69
- chunk_fluid_cascade_parent_pressure,
70
- ]
71
- );
72
-
73
- /**
74
- * A step's ghosts (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §7, §9, D3): the parent's identity read,
75
- * evaluated once at every face of a shell `FLUID_CASCADE_GHOST_DEPTH` faces deep around the
76
- * window, and the parent's pressure at the centre of every cell one past it, into transients the
77
- * step's passes read with one texel or element where the parent read takes eight.
78
- *
79
- * Read as of the cascade's record, the step's start, as the seams read the parent. A per-step cache:
80
- * the persistent textures still hold no ghost, and the toroidal windows are the window's alone.
81
- *
82
- * Measured on an RTX 4090 at 64×32×64 against the seams reading the parent per tap (four cascades,
83
- * the stacks driven alike, their recorded ticks replayed paired and interleaved, p10 of 200; the four
84
- * cascades' state after 32 ticks bit for bit the same): a tick that steps cascade 0 alone
85
- * 246.8 → 144.4 µs, one with a coarse step 489.5 → 291.8. Of cascade 0's step, predict 45 → 16 µs,
86
- * correct 89 → 27, the smoother 63 → 53, residual and restriction 22 → 18, the gradient 6 → 4, for
87
- * this pass's 9.
88
- *
89
- * One invocation a texel of the largest face shell, 4 × 4 × 4 a workgroup, dispatched
90
- * `ceil((N + 1 + 2·depth) / 4)` on each axis; an invocation inside the window writes nothing.
91
- *
92
- * Bindings:
93
- * - `step`: {@link FLUID_MAC_STEP_STRUCT}, the window;
94
- * - `parent`: {@link FLUID_CASCADE_PARENT_STRUCT}, `parent_u`, `parent_v`, `parent_w` and
95
- * `parent_pressure`, the parent;
96
- * - `ghost_u`, `ghost_v`, `ghost_w`: written, `r32float` 3-D storage textures of the face lattices
97
- * grown by the depth on every side, window-local face `f` at texel `f + depth`;
98
- * - `ghost_pressure`: written, `array<f32>` over the window grown by one cell on every side, x fastest.
99
- *
100
- * Two storage buffers and three storage textures.
101
- *
102
- * @type {ComputeShader}
103
- */
104
- export const shader_fluid_cascade_ghosts = ComputeShader.from({
105
- label: "Fluid / cascade ghosts",
106
- body,
107
- resources,
108
- });
1
+ import { chunk_grid_tile_window } from "../../shader/chunk/grid/chunk_grid_tile_window.js";
2
+ import { ComputeShader } from "../../shader/ComputeShader.js";
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
5
+ import { f32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
7
+ import { FLUID_MAC_STEP_STRUCT } from "../mac/FLUID_MAC_STEP_STRUCT.js";
8
+ import { FLUID_CASCADE_GHOST_DEPTH } from "./FLUID_CASCADE_GHOSTS.js";
9
+ import { chunk_fluid_cascade_parent_pressure, chunk_fluid_cascade_parent_velocity } from "./chunk_fluid_cascade_parent.js";
10
+ import { FLUID_CASCADE_PARENT_STRUCT } from "./FLUID_CASCADE_PARENT_STRUCT.js";
11
+ import { fluid_turbulence_add_resources } from "../../wind/chunk_fluid_turbulence.js";
12
+
13
+ const resources = new ShaderResourceSetDescriptor();
14
+
15
+ fluid_turbulence_add_resources(resources.createGroup())
16
+ .addUniform("step", FLUID_MAC_STEP_STRUCT)
17
+ .addUniform("parent", FLUID_CASCADE_PARENT_STRUCT)
18
+ .addTexture("parent_u", "unfilterable-float", "3d")
19
+ .addTexture("parent_v", "unfilterable-float", "3d")
20
+ .addTexture("parent_w", "unfilterable-float", "3d")
21
+ .addStorageBuffer("parent_pressure", WebGPUArray.from(f32), false)
22
+ .addStorageTexture("ghost_u", "r32float", "3d", "write-only")
23
+ .addStorageTexture("ghost_v", "r32float", "3d", "write-only")
24
+ .addStorageTexture("ghost_w", "r32float", "3d", "write-only")
25
+ .addStorageBuffer("ghost_pressure", WebGPUArray.from(f32), true);
26
+
27
+ const body = CodeChunk.from(
28
+ //language=WGSL
29
+ `
30
+ const FLUID_CASCADE_GHOST_DEPTH = ${FLUID_CASCADE_GHOST_DEPTH};
31
+
32
+ @compute @workgroup_size(4, 4, 4)
33
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
34
+ // the velocity ghosts: shell texel t holds window-local face t - depth, of every face past the window.
35
+ // Pressure ghosts also use cell = face (t - depth), so any invocation inside step.cells.size is inside
36
+ // all three face lattices and the pressure window, and exits immediately.
37
+ let face = vec3<i32>(id) - vec3<i32>(FLUID_CASCADE_GHOST_DEPTH);
38
+
39
+ if (grid_tile_window_contains(face, step.cells.size)) {
40
+ return;
41
+ }
42
+
43
+ let offset = step.cells.corner - parent.origin;
44
+ let reach = vec3<u32>(2u * u32(FLUID_CASCADE_GHOST_DEPTH));
45
+
46
+ if (all(id < step.faces_u.size + reach) && !grid_tile_window_contains(face, step.faces_u.size)) {
47
+ textureStore(ghost_u, id, vec4<f32>(fluid_parent_face_u(face, offset), 0.0, 0.0, 0.0));
48
+ }
49
+
50
+ if (all(id < step.faces_v.size + reach) && !grid_tile_window_contains(face, step.faces_v.size)) {
51
+ textureStore(ghost_v, id, vec4<f32>(fluid_parent_face_v(face, offset), 0.0, 0.0, 0.0));
52
+ }
53
+
54
+ if (all(id < step.faces_w.size + reach) && !grid_tile_window_contains(face, step.faces_w.size)) {
55
+ textureStore(ghost_w, id, vec4<f32>(fluid_parent_face_w(face, offset), 0.0, 0.0, 0.0));
56
+ }
57
+
58
+ // the pressure ghosts: element p_id = face + 1, x fastest over the window and a cell each side
59
+ let p_coord = face + vec3<i32>(1);
60
+ let n = step.cells.size + vec3<u32>(2u);
61
+
62
+ if (all(p_coord >= vec3<i32>(0)) && all(vec3<u32>(p_coord) < n)) {
63
+ let p_id = vec3<u32>(p_coord);
64
+ ghost_pressure[p_id.x + n.x * (p_id.y + n.y * p_id.z)] = fluid_parent_pressure(face + offset);
65
+ }
66
+ }
67
+ `, [
68
+ chunk_grid_tile_window,
69
+ chunk_fluid_cascade_parent_velocity,
70
+ chunk_fluid_cascade_parent_pressure,
71
+ ]
72
+ );
73
+
74
+ /**
75
+ * A step's ghosts (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §7, §9, D3): the parent's identity read,
76
+ * evaluated once at every face of a shell `FLUID_CASCADE_GHOST_DEPTH` faces deep around the
77
+ * window, and the parent's pressure at the centre of every cell one past it, into transients the
78
+ * step's passes read with one texel or element where the parent read takes eight.
79
+ *
80
+ * Read as of the cascade's record, the step's start, as the seams read the parent. A per-step cache:
81
+ * the persistent textures still hold no ghost, and the toroidal windows are the window's alone.
82
+ *
83
+ * Measured on an RTX 4090 at 64×32×64 against the seams reading the parent per tap (four cascades,
84
+ * the stacks driven alike, their recorded ticks replayed paired and interleaved, p10 of 200; the four
85
+ * cascades' state after 32 ticks bit for bit the same): a tick that steps cascade 0 alone
86
+ * 246.8 → 144.4 µs, one with a coarse step 489.5 → 291.8. Of cascade 0's step, predict 45 → 16 µs,
87
+ * correct 89 → 27, the smoother 63 → 53, residual and restriction 22 → 18, the gradient 6 → 4, for
88
+ * this pass's 9.
89
+ *
90
+ * One invocation a texel of the largest face shell, 4 × 4 × 4 a workgroup, dispatched
91
+ * `ceil((N + 1 + 2·depth) / 4)` on each axis; an invocation inside the window writes nothing.
92
+ *
93
+ * Bindings:
94
+ * - `step`: {@link FLUID_MAC_STEP_STRUCT}, the window;
95
+ * - `parent`: {@link FLUID_CASCADE_PARENT_STRUCT}, `parent_u`, `parent_v`, `parent_w` and
96
+ * `parent_pressure`, the parent;
97
+ * - `ghost_u`, `ghost_v`, `ghost_w`: written, `r32float` 3-D storage textures of the face lattices
98
+ * grown by the depth on every side, window-local face `f` at texel `f + depth`;
99
+ * - `ghost_pressure`: written, `array<f32>` over the window grown by one cell on every side, x fastest.
100
+ *
101
+ * Two storage buffers and three storage textures.
102
+ *
103
+ * @type {ComputeShader}
104
+ */
105
+ export const shader_fluid_cascade_ghosts = ComputeShader.from({
106
+ label: "Fluid / cascade ghosts",
107
+ body,
108
+ resources,
109
+ });
@@ -12,8 +12,9 @@
12
12
  * more inside the child's window: the child's edge row and relaxation band are not fed back.
13
13
  *
14
14
  * Frames: the child's faces are deviations from `v_far` at its record and the parent's from `v_far`
15
- * at its own, which is older (the parent is about to step); the mean deviation is carried to the
16
- * parent's record by `keep`.
15
+ * at its own, which is older (the parent is about to step); the mean deviation, taken at the parent
16
+ * face from the child's far field there, is carried to the parent's record by `keep` and added to the
17
+ * parent's far field there. With turbulence each far field is one tap of the tile a face.
17
18
  *
18
19
  * One invocation a parent cell of the box, 8 × 8 × 4 a workgroup, dispatched over the box. A cell
19
20
  * writes its −x, −y, −z faces, and the box's last cell on an axis its + face there. Reads 12 child
@@ -22,7 +23,8 @@
22
23
  * Bindings:
23
24
  * - `restriction`: {@link FLUID_CASCADE_RESTRICT_STRUCT};
24
25
  * - `child_u`, `child_v`, `child_w`: the child's persistent faces;
25
- * - `out_u`, `out_v`, `out_w`: written, the parent's persistent faces.
26
+ * - `out_u`, `out_v`, `out_w`: written, the parent's persistent faces;
27
+ * - the turbulence tile (`fluid_turbulence_add_resources`).
26
28
  *
27
29
  * @type {ComputeShader}
28
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"shader_fluid_cascade_restrict.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,4CAFU,aAAa,CAMpB;8BA5H2B,+BAA+B"}
1
+ {"version":3,"file":"shader_fluid_cascade_restrict.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js"],"names":[],"mappings":"AAuGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,4CAFU,aAAa,CAMpB;8BAxI2B,+BAA+B"}
@@ -3,10 +3,12 @@ import { ComputeShader } from "../../shader/ComputeShader.js";
3
3
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
4
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
5
5
  import { FLUID_CASCADE_RESTRICT_STRUCT } from "./FLUID_CASCADE_RESTRICT_STRUCT.js";
6
+ import { fluid_turbulence_add_resources } from "../../wind/chunk_fluid_turbulence.js";
7
+ import { chunk_fluid_far_field } from "../chunk_fluid_far_field.js";
6
8
 
7
9
  const resources = new ShaderResourceSetDescriptor();
8
10
 
9
- resources.createGroup()
11
+ fluid_turbulence_add_resources(resources.createGroup())
10
12
  .addUniform("restriction", FLUID_CASCADE_RESTRICT_STRUCT)
11
13
  .addTexture("child_u", "unfilterable-float", "3d")
12
14
  .addTexture("child_v", "unfilterable-float", "3d")
@@ -18,28 +20,31 @@ resources.createGroup()
18
20
  const body = CodeChunk.from(
19
21
  //language=WGSL
20
22
  `
21
- // a child face's deviation from the far field at the child's record
23
+ // a child face less the child's far field's mean, at the child's record
22
24
  fn fluid_restrict_child_u(face: vec3<i32>) -> f32 {
23
25
  let storage = grid_tile_window_storage(face, restriction.child_u.corner_storage, restriction.child_u.period);
24
- return textureLoad(child_u, storage, 0).r - restriction.child_far_velocity.x;
26
+ return textureLoad(child_u, storage, 0).r - restriction.child_far.mean.x;
25
27
  }
26
28
 
27
29
  fn fluid_restrict_child_v(face: vec3<i32>) -> f32 {
28
30
  let storage = grid_tile_window_storage(face, restriction.child_v.corner_storage, restriction.child_v.period);
29
- return textureLoad(child_v, storage, 0).r - restriction.child_far_velocity.y;
31
+ return textureLoad(child_v, storage, 0).r - restriction.child_far.mean.y;
30
32
  }
31
33
 
32
34
  fn fluid_restrict_child_w(face: vec3<i32>) -> f32 {
33
35
  let storage = grid_tile_window_storage(face, restriction.child_w.corner_storage, restriction.child_w.period);
34
- return textureLoad(child_w, storage, 0).r - restriction.child_far_velocity.z;
36
+ return textureLoad(child_w, storage, 0).r - restriction.child_far.mean.z;
35
37
  }
36
38
 
37
- // parent face P of each component: the mean of the four child faces on it, as of the parent's record
39
+ // parent face P of each component: the mean of the four child faces on it, as a deviation from the
40
+ // child's far field at the face, carried to the parent's record and added to the parent's far field there
38
41
  fn fluid_restrict_u(face: vec3<i32>) {
39
42
  let c = 2 * face + restriction.child_offset;
40
43
  let sum = (fluid_restrict_child_u(c) + fluid_restrict_child_u(c + vec3<i32>(0, 1, 0)))
41
44
  + (fluid_restrict_child_u(c + vec3<i32>(0, 0, 1)) + fluid_restrict_child_u(c + vec3<i32>(0, 1, 1)));
42
- let value = restriction.far_velocity.x + (0.25 * sum) * restriction.keep;
45
+ let at = vec3<f32>(face) - vec3<f32>(0.5, 0.0, 0.0);
46
+ let child_eddy = restriction.child_far.sigma * fluid_far_unit(restriction.child_far, at).x;
47
+ let value = fluid_far_field(restriction.far, at).x + (0.25 * sum - child_eddy) * restriction.keep;
43
48
 
44
49
  textureStore(out_u, grid_tile_window_storage(face, restriction.faces_u.corner_storage, restriction.faces_u.period), vec4<f32>(value, 0.0, 0.0, 0.0));
45
50
  }
@@ -48,7 +53,9 @@ fn fluid_restrict_v(face: vec3<i32>) {
48
53
  let c = 2 * face + restriction.child_offset;
49
54
  let sum = (fluid_restrict_child_v(c) + fluid_restrict_child_v(c + vec3<i32>(1, 0, 0)))
50
55
  + (fluid_restrict_child_v(c + vec3<i32>(0, 0, 1)) + fluid_restrict_child_v(c + vec3<i32>(1, 0, 1)));
51
- let value = restriction.far_velocity.y + (0.25 * sum) * restriction.keep;
56
+ let at = vec3<f32>(face) - vec3<f32>(0.0, 0.5, 0.0);
57
+ let child_eddy = restriction.child_far.sigma * fluid_far_unit(restriction.child_far, at).y;
58
+ let value = fluid_far_field(restriction.far, at).y + (0.25 * sum - child_eddy) * restriction.keep;
52
59
 
53
60
  textureStore(out_v, grid_tile_window_storage(face, restriction.faces_v.corner_storage, restriction.faces_v.period), vec4<f32>(value, 0.0, 0.0, 0.0));
54
61
  }
@@ -57,7 +64,9 @@ fn fluid_restrict_w(face: vec3<i32>) {
57
64
  let c = 2 * face + restriction.child_offset;
58
65
  let sum = (fluid_restrict_child_w(c) + fluid_restrict_child_w(c + vec3<i32>(1, 0, 0)))
59
66
  + (fluid_restrict_child_w(c + vec3<i32>(0, 1, 0)) + fluid_restrict_child_w(c + vec3<i32>(1, 1, 0)));
60
- let value = restriction.far_velocity.z + (0.25 * sum) * restriction.keep;
67
+ let at = vec3<f32>(face) - vec3<f32>(0.0, 0.0, 0.5);
68
+ let child_eddy = restriction.child_far.sigma * fluid_far_unit(restriction.child_far, at).z;
69
+ let value = fluid_far_field(restriction.far, at).z + (0.25 * sum - child_eddy) * restriction.keep;
61
70
 
62
71
  textureStore(out_w, grid_tile_window_storage(face, restriction.faces_w.corner_storage, restriction.faces_w.period), vec4<f32>(value, 0.0, 0.0, 0.0));
63
72
  }
@@ -88,6 +97,7 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
88
97
  }
89
98
  `, [
90
99
  chunk_grid_tile_window,
100
+ chunk_fluid_far_field,
91
101
  ]
92
102
  );
93
103
 
@@ -105,8 +115,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
105
115
  * more inside the child's window: the child's edge row and relaxation band are not fed back.
106
116
  *
107
117
  * Frames: the child's faces are deviations from `v_far` at its record and the parent's from `v_far`
108
- * at its own, which is older (the parent is about to step); the mean deviation is carried to the
109
- * parent's record by `keep`.
118
+ * at its own, which is older (the parent is about to step); the mean deviation, taken at the parent
119
+ * face from the child's far field there, is carried to the parent's record by `keep` and added to the
120
+ * parent's far field there. With turbulence each far field is one tap of the tile a face.
110
121
  *
111
122
  * One invocation a parent cell of the box, 8 × 8 × 4 a workgroup, dispatched over the box. A cell
112
123
  * writes its −x, −y, −z faces, and the box's last cell on an axis its + face there. Reads 12 child
@@ -115,7 +126,8 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
115
126
  * Bindings:
116
127
  * - `restriction`: {@link FLUID_CASCADE_RESTRICT_STRUCT};
117
128
  * - `child_u`, `child_v`, `child_w`: the child's persistent faces;
118
- * - `out_u`, `out_v`, `out_w`: written, the parent's persistent faces.
129
+ * - `out_u`, `out_v`, `out_w`: written, the parent's persistent faces;
130
+ * - the turbulence tile (`fluid_turbulence_add_resources`).
119
131
  *
120
132
  * @type {ComputeShader}
121
133
  */
@@ -18,8 +18,12 @@
18
18
  *
19
19
  * The step runs from `t₀`, the instant the cascade's velocity was last brought to (its read record),
20
20
  * to `t₁` (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §6, §8):
21
- * - `far_velocity`: `v_far(t₀)`, m/s: what the velocity the step starts from is a deviation from.
22
- * - `far_velocity_end`: `v_far(t₁)`, m/s.
21
+ * - `far`: `v_far(t₀)`, what the velocity the step starts from is a deviation from, as the air the
22
+ * far field alone moves arrives at each point by `t₁`: its mean and `σ` at `t₀`, its eddies where
23
+ * the mean has carried them by `t₁` ({@link FLUID_FAR_FIELD_STRUCT}, over the window's cells, cell
24
+ * coordinate 0 at window-local cell 0). The eddies that arrive at a face by `t₁` are where the
25
+ * end's offset puts them, so `far` and `far_end` share `origin` and `scale`, and one tap serves both.
26
+ * - `far_end`: `v_far(t₁)`, over the same lattice.
23
27
  * - `keep`: `e^(−(Λ(t₁) − Λ(t₀)))`, the deviation the atmosphere leaves over the step.
24
28
  * - `deviation_limit`: m/s, `FLUID_CASCADE_DEVIATION_CELLS·h/dt`, the clamp on `|v − v_far(t₁)|`.
25
29
  * - `band`: 1 when the faces of rows 2..5 relax toward the parent, 0 when they do not.
@@ -1 +1 @@
1
- {"version":3,"file":"FLUID_MAC_STEP_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,iDAamB;6BA/CU,mCAAmC"}
1
+ {"version":3,"file":"FLUID_MAC_STEP_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,iDAamB;6BApDU,mCAAmC"}
@@ -1,6 +1,7 @@
1
1
  import { GRID_TILE_WINDOW_STRUCT } from "../../shader/chunk/grid/GRID_TILE_WINDOW_STRUCT.js";
2
- import { f32, u32, vec3f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
3
  import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
4
+ import { FLUID_FAR_FIELD_STRUCT } from "../FLUID_FAR_FIELD_STRUCT.js";
4
5
 
5
6
  /**
6
7
  * What the MAC passes of one cascade step read, as the uniform `step`.
@@ -22,8 +23,12 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
22
23
  *
23
24
  * The step runs from `t₀`, the instant the cascade's velocity was last brought to (its read record),
24
25
  * to `t₁` (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §6, §8):
25
- * - `far_velocity`: `v_far(t₀)`, m/s: what the velocity the step starts from is a deviation from.
26
- * - `far_velocity_end`: `v_far(t₁)`, m/s.
26
+ * - `far`: `v_far(t₀)`, what the velocity the step starts from is a deviation from, as the air the
27
+ * far field alone moves arrives at each point by `t₁`: its mean and `σ` at `t₀`, its eddies where
28
+ * the mean has carried them by `t₁` ({@link FLUID_FAR_FIELD_STRUCT}, over the window's cells, cell
29
+ * coordinate 0 at window-local cell 0). The eddies that arrive at a face by `t₁` are where the
30
+ * end's offset puts them, so `far` and `far_end` share `origin` and `scale`, and one tap serves both.
31
+ * - `far_end`: `v_far(t₁)`, over the same lattice.
27
32
  * - `keep`: `e^(−(Λ(t₁) − Λ(t₀)))`, the deviation the atmosphere leaves over the step.
28
33
  * - `deviation_limit`: m/s, `FLUID_CASCADE_DEVIATION_CELLS·h/dt`, the clamp on `|v − v_far(t₁)|`.
29
34
  * - `band`: 1 when the faces of rows 2..5 relax toward the parent, 0 when they do not.
@@ -39,9 +44,9 @@ export const FLUID_MAC_STEP_STRUCT = WebGPUStruct.from({
39
44
  faces_u: GRID_TILE_WINDOW_STRUCT,
40
45
  faces_v: GRID_TILE_WINDOW_STRUCT,
41
46
  faces_w: GRID_TILE_WINDOW_STRUCT,
42
- far_velocity: vec3f,
47
+ far: FLUID_FAR_FIELD_STRUCT,
48
+ far_end: FLUID_FAR_FIELD_STRUCT,
43
49
  dt_over_h: f32,
44
- far_velocity_end: vec3f,
45
50
  rhs_scale: f32,
46
51
  keep: f32,
47
52
  deviation_limit: f32,
@@ -1,18 +1,3 @@
1
- /**
2
- * @typedef {import("../../../device/ShadeGPUCommandContext.js").ShadeGPUCommandContext} ShadeGPUCommandContext
3
- * @typedef {import("./FluidMacVelocitySet.js").FluidMacVelocitySet} FluidMacVelocitySet
4
- * @typedef {{u: GPUTextureView, v: GPUTextureView, w: GPUTextureView}} FluidMacVelocityViews a MAC
5
- * velocity field's three component views: a {@link FluidMacVelocitySet}'s, or a frame graph's
6
- * transient textures'
7
- * @typedef {{uniform: GPUBuffer, u: GPUTextureView, v: GPUTextureView, w: GPUTextureView, pressure: GPUBuffer}} FluidCascadeParentBindings
8
- * what a step reads of its parent beyond its window: `uniform`, the parent as
9
- * {@link FLUID_CASCADE_PARENT_STRUCT}; `u`, `v`, `w`, its persistent faces; `pressure`, its pressure.
10
- * A far-field parent binds stand-ins it never reads.
11
- * @typedef {{u: GPUTextureView, v: GPUTextureView, w: GPUTextureView, pressure: GPUBuffer}} FluidCascadeGhostBindings
12
- * a step's ghosts (`shader_fluid_cascade_ghosts`): `u`, `v`, `w`, the velocity shells, transient
13
- * `r32float` textures of each face lattice grown by `FLUID_CASCADE_GHOST_DEPTH` on every side;
14
- * `pressure`, the pressure ghosts over the window grown by one cell.
15
- */
16
1
  /**
17
2
  * Records the MAC passes of one cascade's step (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §8): the
18
3
  * advection (predict, then correct), the right-hand side of the pressure solve, and the gradient
@@ -61,15 +46,27 @@ export class FluidMacPasses {
61
46
  *
62
47
  * @param {number} h cell size, m
63
48
  * @param {number} dt time step, s
64
- * @param {ArrayLike<number>} far_velocity `v_far(t₀)`, m/s: what the velocity the step starts from
65
- * is a deviation from
66
- * @param {ArrayLike<number>} far_velocity_end `v_far(t₁)`, m/s
49
+ * @param {{mean: ArrayLike<number>, sigma: number, origin: ArrayLike<number>, scale: ArrayLike<number>}} far
50
+ * `v_far(t₀)` as {@link FLUID_MAC_STEP_STRUCT} `far` holds it, over the window's cells: what the
51
+ * velocity the step starts from is a deviation from
52
+ * @param {{mean: ArrayLike<number>, sigma: number, origin: ArrayLike<number>, scale: ArrayLike<number>}} far_end
53
+ * `v_far(t₁)`, likewise
67
54
  * @param {number} keep `e^(−(Λ(t₁) − Λ(t₀)))`, in [0, 1]
68
55
  * @param {boolean} band whether the faces of rows 2..5 relax toward the parent
69
56
  * @param {number} confinement the vorticity confinement's strength ε, per second, ≥ 0: 0 for none,
70
57
  * and then {@link record_curl} is not recorded for the step
71
58
  */
72
- set_step(h: number, dt: number, far_velocity: ArrayLike<number>, far_velocity_end: ArrayLike<number>, keep: number, band: boolean, confinement: number): void;
59
+ set_step(h: number, dt: number, far: {
60
+ mean: ArrayLike<number>;
61
+ sigma: number;
62
+ origin: ArrayLike<number>;
63
+ scale: ArrayLike<number>;
64
+ }, far_end: {
65
+ mean: ArrayLike<number>;
66
+ sigma: number;
67
+ origin: ArrayLike<number>;
68
+ scale: ArrayLike<number>;
69
+ }, keep: number, band: boolean, confinement: number): void;
73
70
  /**
74
71
  * The step's vorticity confinement, pass 1 (`shader_fluid_mac_curl`): the curl of the persistent
75
72
  * velocity and the force it makes in every cell, for the correct pass. Recorded only for a step whose
@@ -146,8 +143,9 @@ export type FluidMacVelocityViews = {
146
143
  };
147
144
  /**
148
145
  * what a step reads of its parent beyond its window: `uniform`, the parent as
149
- * {@link FLUID_CASCADE_PARENT_STRUCT }; `u`, `v`, `w`, its persistent faces; `pressure`, its pressure.
150
- * A far-field parent binds stand-ins it never reads.
146
+ * {@link FLUID_CASCADE_PARENT_STRUCT }; `u`, `v`, `w`, its persistent faces; `pressure`, its pressure;
147
+ * `turbulence`, the far field's turbulence tile, which the step's far field reads too. A far-field
148
+ * parent binds stand-ins it never reads.
151
149
  */
152
150
  export type FluidCascadeParentBindings = {
153
151
  uniform: GPUBuffer;
@@ -155,6 +153,7 @@ export type FluidCascadeParentBindings = {
155
153
  v: GPUTextureView;
156
154
  w: GPUTextureView;
157
155
  pressure: GPUBuffer;
156
+ turbulence: GPUTextureView;
158
157
  };
159
158
  /**
160
159
  * a step's ghosts (`shader_fluid_cascade_ghosts`): `u`, `v`, `w`, the velocity shells, transient
@@ -1 +1 @@
1
- {"version":3,"file":"FluidMacPasses.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/mac/FluidMacPasses.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACI;;;;OAIG;IACH,iCAFW,OAAO,6CAA6C,EAAE,eAAe,QAW/E;IA2ED;;;;;OAKG;IACH,kBAHW,UAAU,MAAM,CAAC,UACjB,UAAU,MAAM,CAAC,QAkC3B;IAED;;;;;;;;;;;;OAYG;IACH,YAVW,MAAM,MACN,MAAM,gBACN,UAAU,MAAM,CAAC,oBAEjB,UAAU,MAAM,CAAC,QACjB,MAAM,QACN,OAAO,eACP,MAAM,QA+BhB;IAaD;;;;;;;;;OASG;IACH,qBALW,sBAAsB,UACtB,qBAAqB,kDAmB/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,uBAbW,sBAAsB,UACtB,qBAAqB,WACrB,qBAAqB,OACrB,qBAAqB,wEAOrB,0BAA0B,UAC1B,yBAAyB,QAwCnC;IAED;;;;;;;OAOG;IACH,uBAJW,sBAAsB,UACtB,0BAA0B,UAC1B,yBAAyB,QAgBnC;IAuBD;;;;;;;;;OASG;IACH,2BANW,sBAAsB,YACtB,qBAAqB,6DAmB/B;IAED;;;;;;;;;OASG;IACH,yBAPW,sBAAsB,YACtB,qBAAqB,8CAGrB,qBAAqB,UACrB,yBAAyB,QAmBnC;;CACJ;qCA3ZY,OAAO,2CAA2C,EAAE,sBAAsB;kCAC1E,OAAO,0BAA0B,EAAE,mBAAmB;;;;;;oCACtD;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAgB;CAAC;;;;;;yCAGzD;IAAC,OAAO,YAAY;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,QAAQ,YAAW;CAAC;;;;;;wCAIlG;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,QAAQ,YAAW;CAAC"}
1
+ {"version":3,"file":"FluidMacPasses.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/mac/FluidMacPasses.js"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACI;;;;OAIG;IACH,iCAFW,OAAO,6CAA6C,EAAE,eAAe,QAW/E;IA2ED;;;;;OAKG;IACH,kBAHW,UAAU,MAAM,CAAC,UACjB,UAAU,MAAM,CAAC,QAkC3B;IAED;;;;;;;;;;;;;;OAcG;IACH,YAZW,MAAM,MACN,MAAM,OACN;QAAC,IAAI,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,WAG7F;QAAC,IAAI,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,MAAM,CAAC,CAAA;KAAC,QAE7F,MAAM,QACN,OAAO,eACP,MAAM,QA0BhB;IAaD;;;;;;;;;OASG;IACH,qBALW,sBAAsB,UACtB,qBAAqB,kDAmB/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,uBAbW,sBAAsB,UACtB,qBAAqB,WACrB,qBAAqB,OACrB,qBAAqB,wEAOrB,0BAA0B,UAC1B,yBAAyB,QA0CnC;IAED;;;;;;;OAOG;IACH,uBAJW,sBAAsB,UACtB,0BAA0B,UAC1B,yBAAyB,QAkBnC;IAuBD;;;;;;;;;OASG;IACH,2BANW,sBAAsB,YACtB,qBAAqB,6DAmB/B;IAED;;;;;;;;;OASG;IACH,yBAPW,sBAAsB,YACtB,qBAAqB,8CAGrB,qBAAqB,UACrB,yBAAyB,QAmBnC;;CACJ;qCApbY,OAAO,2CAA2C,EAAE,sBAAsB;kCAC1E,OAAO,0BAA0B,EAAE,mBAAmB;;;;;;oCACtD;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAgB;CAAC;;;;;;;yCAGzD;IAAC,OAAO,YAAY;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,QAAQ,YAAY;IAAC,UAAU,iBAAgB;CAAC;;;;;;wCAK9H;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,CAAC,iBAAiB;IAAC,QAAQ,YAAW;CAAC"}