@woosh/meep-engine 3.68.0 → 3.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  5. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  6. package/package.json +1 -1
  7. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  8. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  9. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  10. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  11. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  12. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  13. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  14. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  15. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  16. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  17. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  18. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  19. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  20. package/src/core/bvh8/bvh8_depth.js +39 -0
  21. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  22. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  23. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  24. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  25. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  27. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  28. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  29. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  30. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  32. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  33. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  34. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  35. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  36. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  37. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  38. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  39. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  40. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  41. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  42. package/src/engine/graphics3/EntityRowHold.js +128 -0
  43. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  46. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  49. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  50. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  51. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  52. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  53. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  54. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  55. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  56. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  58. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  59. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  60. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  61. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  62. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  63. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  64. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  65. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  66. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  67. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  68. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  69. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  70. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  71. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  72. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  73. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  74. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  75. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  76. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  77. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  78. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  79. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  80. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  81. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  82. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  83. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  84. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  85. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  86. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  87. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  88. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  89. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  90. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  91. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  92. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  93. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  94. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  95. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  96. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  98. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  99. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  100. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  101. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  102. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  103. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  104. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  105. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  106. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  107. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  108. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  109. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  110. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  111. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  112. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  113. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  114. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  115. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  116. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  117. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  118. package/src/shade/playground/bvh_repro/README.md +8 -6
  119. package/src/shade/playground/bvh_repro/index.html +125 -124
  120. package/src/shade/playground/bvh_repro/main.js +259 -254
  121. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  122. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  123. package/src/shade/playground/grass_surfaces/main.js +3 -2
  124. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  125. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  126. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  127. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  128. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  129. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  130. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  131. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  132. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  133. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  134. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  135. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  136. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  137. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  138. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  139. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  140. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  141. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  142. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  143. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  144. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  145. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  146. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  147. package/src/shade/playground/trails/index.html +50 -0
  148. package/src/shade/playground/trails/main.d.ts +2 -0
  149. package/src/shade/playground/trails/main.d.ts.map +1 -0
  150. package/src/shade/playground/trails/main.js +258 -0
  151. package/src/shade/playground/water_surface/main.js +6 -3
  152. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  153. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  154. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  155. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  156. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  157. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  158. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  159. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  160. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  161. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  162. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  163. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  164. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  165. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  166. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  167. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  168. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  169. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  170. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  171. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  172. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  173. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  174. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  175. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  176. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  177. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  178. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  179. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  180. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  181. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  182. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  183. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  184. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  185. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  186. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  187. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  188. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  189. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  190. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  191. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  192. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  193. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  194. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  195. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  196. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  197. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  198. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  199. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  200. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  201. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  202. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  203. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  204. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  205. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  206. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  207. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  208. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  209. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  210. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
  211. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  212. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  213. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  214. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  215. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  216. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  217. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  218. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  219. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  220. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  221. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  222. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  223. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  224. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  225. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  226. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  227. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +340 -282
  228. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  229. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  231. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  232. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  233. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  234. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  236. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  237. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  238. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  239. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  240. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  241. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  242. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  243. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  244. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  245. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  246. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  247. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  248. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  249. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  250. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  251. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  252. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  253. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  254. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  255. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  256. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  257. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  258. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  259. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  260. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  261. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  262. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  263. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  264. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  265. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  266. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  267. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  268. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  269. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  270. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  271. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  272. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  273. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  274. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  275. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  276. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  280. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  281. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  282. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  283. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  284. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  285. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  286. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  287. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  288. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  289. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  290. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  291. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  292. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  293. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  298. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  299. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  300. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  301. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  302. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  303. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  304. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  305. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  306. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  307. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  308. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  309. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  310. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  311. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  312. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  313. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  314. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  315. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  316. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  317. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  318. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  319. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  320. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  321. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  322. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  323. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  324. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  325. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  326. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  327. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  328. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  329. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  330. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  331. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  332. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  333. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  334. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  335. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  336. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  337. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  338. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  339. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  340. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  341. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  342. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  343. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  344. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  345. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  346. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  347. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  348. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  349. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  350. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  351. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  352. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  353. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  354. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  355. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  356. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  357. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  358. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  359. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  360. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  361. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  362. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  363. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  364. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  365. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  366. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  367. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  368. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  369. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  370. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  371. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  372. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  373. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  374. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  375. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  376. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  377. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  378. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  379. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  380. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  381. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  382. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  383. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  384. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  385. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  386. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  387. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  388. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  389. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  390. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  391. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  393. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  394. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  396. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  397. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  398. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  399. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  400. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  401. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  402. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  403. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  404. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  405. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  406. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  407. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  408. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  409. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  410. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  411. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  412. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  413. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  414. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  415. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  416. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  417. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  418. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  420. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  421. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  422. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  423. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  424. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  426. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  427. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  428. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  429. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  430. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  431. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  432. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  433. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  434. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  435. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  436. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  437. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  438. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  439. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  440. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  441. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  442. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  443. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  444. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  445. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  446. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  447. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  448. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  449. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  450. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  451. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  452. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  453. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  454. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  455. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  456. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  457. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  458. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  459. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  460. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  461. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  462. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  463. package/src/shade/renderer/trails/graph_trails.js +155 -0
  464. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  465. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  466. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  467. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  468. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  469. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  470. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  471. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  472. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  473. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  474. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  475. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  476. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  477. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  478. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  479. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  480. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  481. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  482. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  483. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  484. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  485. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  486. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  487. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  488. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  489. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  490. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  491. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  492. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  493. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  494. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  495. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  496. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  497. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  498. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  499. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  500. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  501. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  502. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  503. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  504. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  505. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  506. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  507. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  508. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  509. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  510. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  511. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  512. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  513. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  514. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  515. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  516. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  517. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  518. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  519. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  520. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  521. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  522. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  523. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  524. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  525. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  526. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  527. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  528. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  529. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  530. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  531. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  532. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  533. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  534. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  535. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  536. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  537. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  538. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  539. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  540. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  541. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  542. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  543. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  544. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  545. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  546. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  547. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  548. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  549. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  550. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  551. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  552. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  553. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  554. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  555. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  556. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  557. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  558. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  559. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  560. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  561. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  562. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  563. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  564. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  565. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  566. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  567. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  568. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  569. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  570. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  571. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  572. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  573. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  574. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  575. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  576. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  577. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  578. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  579. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  580. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  581. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  582. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  583. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  584. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -1 +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
  */
@@ -57,6 +57,20 @@ export const FLUID_SOLID_FLAG: number;
57
57
  * @type {number}
58
58
  */
59
59
  export const FLUID_FORCED_FLAG: number;
60
+ /**
61
+ * Bit 2 of a cell's solid flags: the forcing wrote the cell's drag this tick, from the porous obstacles
62
+ * in it (the cell's words of the forcing buffer's porous block). A reader of the drag reads a cell only
63
+ * under it. Never set on a solid cell.
64
+ * @type {number}
65
+ */
66
+ export const FLUID_POROUS_FLAG: number;
67
+ /**
68
+ * Words a cell takes in the forcing buffer's porous block: its drag over the step, `k·dt`, 1/(m/s),
69
+ * and the velocity of what drags on it, world m/s (`chunk_fluid_forcing_cell`'s
70
+ * `fluid_forcing_porous`).
71
+ * @type {number}
72
+ */
73
+ export const FLUID_FORCING_POROUS_WORDS: number;
60
74
  /**
61
75
  * The flags as WGSL constants.
62
76
  * @type {CodeChunk}
@@ -1 +1 @@
1
- {"version":3,"file":"FLUID_FORCING.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/FLUID_FORCING.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;GAGG;AACH,wCAFU,MAAM,CAEkD;AAElE;;;;;GAKG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;;;GAKG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;;;GAKG;AACH,4CAFU,MAAM,CAE6F;AAE7G;;;;;;GAMG;AACH,+CAFU,MAAM,CAEkE;AAElF;;;;GAIG;AACH,wCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;;;;GAKG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;;GAGG;AACH,wCAFU,SAAS,CAQjB;AAEF;;;GAGG;AACH,4CAFU,SAAS,CAcjB;0BAlGwB,oCAAoC"}
1
+ {"version":3,"file":"FLUID_FORCING.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/FLUID_FORCING.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,kCAFU,MAAM,CAEqB;AAErC;;;GAGG;AACH,wCAFU,MAAM,CAEkD;AAElE;;;;;GAKG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;;;GAKG;AACH,2CAFU,MAAM,CAE+B;AAE/C;;;;;GAKG;AACH,4CAFU,MAAM,CAE6F;AAE7G;;;;;;GAMG;AACH,+CAFU,MAAM,CAEkE;AAElF;;;;GAIG;AACH,wCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;;;;GAKG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;;;;GAKG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;;;;GAKG;AACH,yCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH,wCAFU,SAAS,CAUjB;AAEF;;;GAGG;AACH,4CAFU,SAAS,CAcjB;0BApHwB,oCAAoC"}
@@ -69,6 +69,22 @@ export const FLUID_SOLID_FLAG = 1;
69
69
  */
70
70
  export const FLUID_FORCED_FLAG = 2;
71
71
 
72
+ /**
73
+ * Bit 2 of a cell's solid flags: the forcing wrote the cell's drag this tick, from the porous obstacles
74
+ * in it (the cell's words of the forcing buffer's porous block). A reader of the drag reads a cell only
75
+ * under it. Never set on a solid cell.
76
+ * @type {number}
77
+ */
78
+ export const FLUID_POROUS_FLAG = 4;
79
+
80
+ /**
81
+ * Words a cell takes in the forcing buffer's porous block: its drag over the step, `k·dt`, 1/(m/s),
82
+ * and the velocity of what drags on it, world m/s (`chunk_fluid_forcing_cell`'s
83
+ * `fluid_forcing_porous`).
84
+ * @type {number}
85
+ */
86
+ export const FLUID_FORCING_POROUS_WORDS = 4;
87
+
72
88
  /**
73
89
  * The flags as WGSL constants.
74
90
  * @type {CodeChunk}
@@ -78,6 +94,8 @@ export const chunk_fluid_forcing_flags = CodeChunk.from(
78
94
  `
79
95
  const FLUID_SOLID_FLAG: u32 = ${FLUID_SOLID_FLAG}u;
80
96
  const FLUID_FORCED_FLAG: u32 = ${FLUID_FORCED_FLAG}u;
97
+ const FLUID_POROUS_FLAG: u32 = ${FLUID_POROUS_FLAG}u;
98
+ const FLUID_FORCING_POROUS_WORDS: u32 = ${FLUID_FORCING_POROUS_WORDS}u;
81
99
  `
82
100
  );
83
101
 
@@ -12,7 +12,9 @@
12
12
  * - `inverse_frame_dt`: `1 / (frame_dt · fixedStepTimeScale)`, 0 when no game time passed, which a
13
13
  * wake's node velocity is taken with;
14
14
  * - `forcing_v`, `forcing_w`: where the v and w faces start in the forcing buffer, which holds the u
15
- * faces from 0, each component's faces laid out over its own face lattice, x fastest.
15
+ * faces from 0, each component's faces laid out over its own face lattice, x fastest;
16
+ * - `forcing_porous`: where the cells' porous block starts in it, after the w faces,
17
+ * `FLUID_FORCING_POROUS_WORDS` a cell, x fastest.
16
18
  *
17
19
  * @type {WebGPUStruct}
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FLUID_FORCING_APPLY_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,yCAFU,YAAY,CAcE;6BAhCK,mCAAmC"}
1
+ {"version":3,"file":"FLUID_FORCING_APPLY_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yCAFU,YAAY,CAeE;6BAnCK,mCAAmC"}
@@ -16,7 +16,9 @@ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
16
16
  * - `inverse_frame_dt`: `1 / (frame_dt · fixedStepTimeScale)`, 0 when no game time passed, which a
17
17
  * wake's node velocity is taken with;
18
18
  * - `forcing_v`, `forcing_w`: where the v and w faces start in the forcing buffer, which holds the u
19
- * faces from 0, each component's faces laid out over its own face lattice, x fastest.
19
+ * faces from 0, each component's faces laid out over its own face lattice, x fastest;
20
+ * - `forcing_porous`: where the cells' porous block starts in it, after the w faces,
21
+ * `FLUID_FORCING_POROUS_WORDS` a cell, x fastest.
20
22
  *
21
23
  * @type {WebGPUStruct}
22
24
  */
@@ -32,4 +34,5 @@ export const FLUID_FORCING_APPLY_STRUCT = WebGPUStruct.from({
32
34
  inverse_frame_dt: f32,
33
35
  forcing_v: u32,
34
36
  forcing_w: u32,
37
+ forcing_porous: u32,
35
38
  }, "FluidForcingApply");
@@ -78,6 +78,15 @@ export class GPUFluidForcing {
78
78
  * @param {PipelineEnquiry} enquiry
79
79
  */
80
80
  static enquirePipelines(enquiry: PipelineEnquiry): void;
81
+ /**
82
+ * How wide a record is for the resolution cull. A solid narrower than half a cascade's cell slips
83
+ * between its cell centres and is left out of that cascade; a porous one drags on every cell it
84
+ * fills part of, by as much as it fills it, so every cascade keeps it.
85
+ *
86
+ * @param {FluidObstacleRecord} record
87
+ * @returns {number} metres
88
+ */
89
+ static "__#295@#resolved_extent"(record: FluidObstacleRecord): number;
81
90
  /**
82
91
  * The descriptor of a transient of `role`, `size` bytes, from `kept` (by role): the one kept for
83
92
  * the role while its size holds, a new one when it moves. A role's usage and clear range never
@@ -1 +1 @@
1
- {"version":3,"file":"GPUFluidForcing.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/GPUFluidForcing.js"],"names":[],"mappings":"AAuIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH;IAEI;;;;OAIG;IACH,iCAFW,eAAe,QAUzB;IA2ID;;;;;;;;;;;OAWG;IACH,kCAPW,wBAAwB,EAAE,QAC1B,MAAM,QACN,MAAM,SACN,MAAM,cACN,MAAM,GACJ,wBAAwB,CAcpC;IAmmBD;;;;OAIG;IACH,yCAJW,MAAM,0CAEN;QAAC,OAAO,yBAAwB;KAAC,QAc3C;IA+MD,iFAcC;IAWD,gFAiCC;IAWD,kFAsBC;IA+GD,gFA0CC;IA3nCD;;;OAGG;IACH;QAF8B,MAAM;OAwCnC;IA4BD;;;OAGG;IACH,4BAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;;;OAKG;IACH,2BAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;;;OAOG;IACH,mBAHW,MAAM,GACJ,MAAM,CAiBlB;IAED;;;;;OAKG;IACH,4BAEC;IAED;;;;;OAKG;IACH,2BAEC;IAED;;;;;OAKG;IACH,qBAHW,mBAAmB,GACjB,MAAM,CAQlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,UACN,mBAAmB,QAQ7B;IAED;;OAEG;IACH,qBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAHW,mBAAmB,EAAE,GACnB,MAAM,CAsBlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,UACN,mBAAmB,QAgB7B;IAED;;;OAGG;IACH,wBAHW,MAAM,SACN,MAAM,QAYhB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,SACN,MAAM,QAmBhB;IAED;;;OAGG;IACH,qBAHW,MAAM,SACN,MAAM,QAUhB;IAyID;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAf+B,KAAK,EAAzB,UAAU;QACW,cAAc,EAAnC,WAAW;QAEgB,MAAM,EAAjC,UAAU,MAAM,CAAC;QAID,UAAU,EAA1B,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QAEU,SAAS,EAAzB,MAAM;aA4ChB;IAyND;;;;;;;;;;;;OAYG;IACH;QAJ+B,KAAK,EAAzB,UAAU;QACe,KAAK,EAA9B,eAAe;QACe,MAAM,EAApC,eAAe,GAAC,IAAI;aA8H9B;IAmHD;;;;;;;;;;;OAWG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACe,OAAO,EAAhC,eAAe;QACC,EAAE,EAAlB,MAAM;QACJ,MAAM,GAAC,IAAI,CAuFvB;IAyDD;;;OAGG;IACH,gBAwBC;;CACJ;yBAp7CY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,6CAA6C,EAAE,eAAe;8BACrE,OAAO,uBAAuB,EAAE,eAAe;kCAC/C,OAAO,kFAAkF,EAAE,mBAAmB;kCAC9G,OAAO,2EAA2E,EAAE,mBAAmB;4BAtCxF,mCAAmC;yCADtB,mDAAmD"}
1
+ {"version":3,"file":"GPUFluidForcing.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/GPUFluidForcing.js"],"names":[],"mappings":"AAwIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH;IAEI;;;;OAIG;IACH,iCAFW,eAAe,QAUzB;IAqBD;;;;;;;OAOG;IACH,yCAHW,mBAAmB,GACjB,MAAM,CAIlB;IAyHD;;;;;;;;;;;OAWG;IACH,kCAPW,wBAAwB,EAAE,QAC1B,MAAM,QACN,MAAM,SACN,MAAM,cACN,MAAM,GACJ,wBAAwB,CAcpC;IAmmBD;;;;OAIG;IACH,yCAJW,MAAM,0CAEN;QAAC,OAAO,yBAAwB;KAAC,QAc3C;IA+MD,iFAcC;IAWD,gFAiCC;IAWD,kFAsBC;IAiHD,gFA0CC;IA7nCD;;;OAGG;IACH;QAF8B,MAAM;OAwCnC;IA4BD;;;OAGG;IACH,4BAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;OAGG;IACH,6BAEC;IAED;;;;;OAKG;IACH,2BAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;;;OAOG;IACH,mBAHW,MAAM,GACJ,MAAM,CAiBlB;IAED;;;;;OAKG;IACH,4BAEC;IAED;;;;;OAKG;IACH,2BAEC;IAED;;;;;OAKG;IACH,qBAHW,mBAAmB,GACjB,MAAM,CAQlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,UACN,mBAAmB,QAQ7B;IAED;;OAEG;IACH,qBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAHW,mBAAmB,EAAE,GACnB,MAAM,CAsBlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,UACN,mBAAmB,QAgB7B;IAED;;;OAGG;IACH,wBAHW,MAAM,SACN,MAAM,QAYhB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,SACN,MAAM,QAmBhB;IAED;;;OAGG;IACH,qBAHW,MAAM,SACN,MAAM,QAUhB;IAyID;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAf+B,KAAK,EAAzB,UAAU;QACW,cAAc,EAAnC,WAAW;QAEgB,MAAM,EAAjC,UAAU,MAAM,CAAC;QAID,UAAU,EAA1B,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QAEU,SAAS,EAAzB,MAAM;aA4ChB;IAyND;;;;;;;;;;;;OAYG;IACH;QAJ+B,KAAK,EAAzB,UAAU;QACe,KAAK,EAA9B,eAAe;QACe,MAAM,EAApC,eAAe,GAAC,IAAI;aA8H9B;IAmHD;;;;;;;;;;;OAWG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACe,OAAO,EAAhC,eAAe;QACC,EAAE,EAAlB,MAAM;QACJ,MAAM,GAAC,IAAI,CAyFvB;IAyDD;;;OAGG;IACH,gBAwBC;;CACJ;yBAn8CY,OAAO,8DAA8D,EAAE,UAAU;8BACjF,OAAO,6CAA6C,EAAE,eAAe;8BACrE,OAAO,uBAAuB,EAAE,eAAe;kCAC/C,OAAO,kFAAkF,EAAE,mBAAmB;kCAC9G,OAAO,2EAA2E,EAAE,mBAAmB;4BAvCxF,mCAAmC;yCADtB,mDAAmD"}
@@ -18,6 +18,7 @@ import {
18
18
  } from "./FLUID_DATABASE_SPEC.js";
19
19
  import {
20
20
  FLUID_FORCING_BRICK,
21
+ FLUID_FORCING_POROUS_WORDS,
21
22
  FLUID_FORCING_REBUILD_AGE,
22
23
  FLUID_FORCING_SURVIVOR_STRIDE
23
24
  } from "./FLUID_FORCING.js";
@@ -236,11 +237,24 @@ export class GPUFluidForcing {
236
237
  #plane_record = { plane: new Float32Array(4) };
237
238
 
238
239
  /**
239
- * Each obstacle row's extent (`fluid_obstacle_record_extent`), metres, indexed by row.
240
+ * Each obstacle row's extent (`fluid_obstacle_record_extent`), metres, indexed by row; `Infinity` for
241
+ * a porous one, which every cascade resolves (`GPUFluidForcing.#resolved_extent`).
240
242
  * @type {Float64Array}
241
243
  */
242
244
  #obstacle_extent = new Float64Array(0);
243
245
 
246
+ /**
247
+ * How wide a record is for the resolution cull. A solid narrower than half a cascade's cell slips
248
+ * between its cell centres and is left out of that cascade; a porous one drags on every cell it
249
+ * fills part of, by as much as it fills it, so every cascade keeps it.
250
+ *
251
+ * @param {FluidObstacleRecord} record
252
+ * @returns {number} metres
253
+ */
254
+ static #resolved_extent(record) {
255
+ return record.drag > 0 ? Infinity : fluid_obstacle_record_extent(record);
256
+ }
257
+
244
258
  /** Bumped by every add and remove of an effector or obstacle row, and by an obstacle's extent changing. */
245
259
  #sets_version = 0;
246
260
 
@@ -536,7 +550,7 @@ export class GPUFluidForcing {
536
550
  }
537
551
 
538
552
  for (let i = 0; i < records.length; i++) {
539
- this.#obstacle_extent[first + i] = fluid_obstacle_record_extent(records[i]);
553
+ this.#obstacle_extent[first + i] = GPUFluidForcing.#resolved_extent(records[i]);
540
554
  }
541
555
 
542
556
  return first;
@@ -555,7 +569,7 @@ export class GPUFluidForcing {
555
569
 
556
570
  table.set_record(row, record, OBSTACLE_WRITER);
557
571
 
558
- const extent = fluid_obstacle_record_extent(record);
572
+ const extent = GPUFluidForcing.#resolved_extent(record);
559
573
 
560
574
  if (extent !== this.#obstacle_extent[row]) {
561
575
  // which cascades resolve it may have moved
@@ -1365,6 +1379,7 @@ export class GPUFluidForcing {
1365
1379
  inverse_frame_dt: 0,
1366
1380
  forcing_v: 0,
1367
1381
  forcing_w: 0,
1382
+ forcing_porous: 0,
1368
1383
  },
1369
1384
  };
1370
1385
 
@@ -1390,6 +1405,7 @@ export class GPUFluidForcing {
1390
1405
 
1391
1406
  settings.forcing_v = faces_u;
1392
1407
  settings.forcing_w = faces_u + faces_v;
1408
+ settings.forcing_porous = faces_u + faces_v + faces_w;
1393
1409
 
1394
1410
  apply.cascade = cascade;
1395
1411
  apply.tree = tick.trees[slot];
@@ -1400,7 +1416,7 @@ export class GPUFluidForcing {
1400
1416
  apply.list = pass.read(tick.lists[slot]);
1401
1417
  apply.survivors = pass.read(tick.survivors);
1402
1418
  apply.commands = pass.read(tick.commands);
1403
- apply.output = pass.create('Fluid / forcing / forcing', GPUFluidForcing.#descriptor(this.#descriptors, ROLE_FORCING, 4 * (faces_u + faces_v + faces_w), GPUBufferUsage.STORAGE, 0));
1419
+ apply.output = pass.create('Fluid / forcing / forcing', GPUFluidForcing.#descriptor(this.#descriptors, ROLE_FORCING, 4 * (faces_u + faces_v + faces_w + nx * ny * nz * FLUID_FORCING_POROUS_WORDS), GPUBufferUsage.STORAGE, 0));
1404
1420
 
1405
1421
  // it writes the cascade's flags and persistent faces
1406
1422
  pass.make_side_effect();
@@ -6,9 +6,18 @@
6
6
  * centred at `c`, u face `i` at `i − ½` along x) in world metres, the window's world cell `corner` at
7
7
  * window-local 0: `(corner + p + ½)·h`.
8
8
  * - `fluid_forcing_solid(x, count) -> u32`: the solid test at a cell centre, the first of the brick's
9
- * `count` obstacles (its lowest row) whose field at `x` is within its inflation,
9
+ * `count` solid obstacles (its lowest row) whose field at `x` is within its inflation,
10
10
  * `fluid_obstacle_record_signed_distance(record, global, x) ≤ inflation`; `FLUID_FORCING_NONE` for
11
- * fluid. At most `FLUID_FORCING_OBSTACLE_LIMIT` fields, each at most 16 hull planes.
11
+ * fluid. A porous obstacle (`drag` above 0) is never solid. At most `FLUID_FORCING_OBSTACLE_LIMIT`
12
+ * fields, each at most 16 hull planes.
13
+ * - `fluid_forcing_porous(x, cell_size, count) -> vec4<f32>`: the drag of the brick's porous obstacles
14
+ * on the cell of side `cell_size` centred at `x`: in `x`, the sum of each one's `drag` times the
15
+ * share of the cell it fills, 1/m; in `yzw`, the velocity it drags toward, each obstacle's wall
16
+ * velocity at `x` weighed by its part of the drag, world m/s, zero where there is no drag. The
17
+ * share is the part of the cell's height inside the obstacle along four vertical lines through it,
18
+ * at a quarter of the cell in from each side (`fluid_obstacle_record_line_span`), so a layer
19
+ * thinner than the cell drags on it by as much as it fills it, and a layer whose sides are vertical
20
+ * fills it exactly.
12
21
  * - `fluid_forcing_wall_velocity(slot, x) -> vec3<f32>`: the wall's velocity at `x` of the brick's
13
22
  * obstacle `slot`, `rigid_velocity_at_point(v, ω, t, x)` (`fluid_obstacle_record_wall_velocity`).
14
23
  * - `fluid_forcing_deposit(x, dt, cell_size, count) -> vec3<f32>`: what the brick's `count` effectors
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_fluid_forcing_cell.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,uCAFU,SAAS,CAqDjB;0BAnFwB,oCAAoC"}
1
+ {"version":3,"file":"chunk_fluid_forcing_cell.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,uCAFU,SAAS,CAqGjB;0BA5IwB,oCAAoC"}