@woosh/meep-engine 2.156.0 → 2.158.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 (695) hide show
  1. package/README.md +1 -3
  2. package/editor/view/ecs/components/common/AutoCanvasView.js +100 -53
  3. package/editor/view/ecs/components/common/TextController.js +59 -0
  4. package/editor/view/node-graph/NodeGraphCamera.js +90 -0
  5. package/editor/view/node-graph/NodeGraphEditorView.js +121 -22
  6. package/editor/view/node-graph/NodeGraphSelection.js +89 -0
  7. package/editor/view/node-graph/NodeGraphView.js +669 -453
  8. package/editor/view/node-graph/NodeView.js +211 -135
  9. package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -0
  10. package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -0
  11. package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -0
  12. package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -0
  13. package/editor/view/node-graph/actions/NodesMoveAction.js +41 -0
  14. package/editor/view/node-graph/actions/SelectionSetAction.js +60 -0
  15. package/editor/view/node-graph/connection_wire_geometry.js +107 -0
  16. package/package.json +1 -1
  17. package/samples/generation/SampleGenerator0.js +8 -1
  18. package/src/core/binary/reinterpret_float32_as_uint32.d.ts +7 -0
  19. package/src/core/binary/reinterpret_float32_as_uint32.d.ts.map +1 -0
  20. package/src/core/binary/reinterpret_float32_as_uint32.js +13 -0
  21. package/src/core/binary/reinterpret_uint32_as_float32.d.ts +7 -0
  22. package/src/core/binary/reinterpret_uint32_as_float32.d.ts.map +1 -0
  23. package/src/core/binary/reinterpret_uint32_as_float32.js +14 -0
  24. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
  25. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +1 -3
  26. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts +12 -0
  27. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +1 -0
  28. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +92 -0
  29. package/src/core/bvh8/BVH8.d.ts +127 -0
  30. package/src/core/bvh8/BVH8.d.ts.map +1 -0
  31. package/src/core/bvh8/BVH8.js +436 -0
  32. package/src/core/bvh8/NOTES.md +63 -0
  33. package/src/core/bvh8/build/BVH8Converter.d.ts +59 -0
  34. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -0
  35. package/src/core/bvh8/build/BVH8Converter.js +588 -0
  36. package/src/core/bvh8/build/NodeProxy.d.ts +66 -0
  37. package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -0
  38. package/src/core/bvh8/build/NodeProxy.js +308 -0
  39. package/src/core/bvh8/build/TriangleCluster.d.ts +29 -0
  40. package/src/core/bvh8/build/TriangleCluster.d.ts.map +1 -0
  41. package/src/core/bvh8/build/TriangleCluster.js +123 -0
  42. package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts +8 -0
  43. package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts.map +1 -0
  44. package/src/core/bvh8/build/aabb3_compute_merge_cost.js +29 -0
  45. package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts +10 -0
  46. package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts.map +1 -0
  47. package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +18 -0
  48. package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts +10 -0
  49. package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts.map +1 -0
  50. package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -0
  51. package/src/core/bvh8/build/bvh8_from_proxy.d.ts +9 -0
  52. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -0
  53. package/src/core/bvh8/build/bvh8_from_proxy.js +256 -0
  54. package/src/core/bvh8/build/byte.d.ts +7 -0
  55. package/src/core/bvh8/build/byte.d.ts.map +1 -0
  56. package/src/core/bvh8/build/byte.js +10 -0
  57. package/src/core/bvh8/build/encode_bounds_e.d.ts +9 -0
  58. package/src/core/bvh8/build/encode_bounds_e.d.ts.map +1 -0
  59. package/src/core/bvh8/build/encode_bounds_e.js +12 -0
  60. package/src/core/bvh8/bvh8_convert_to_dot.d.ts +11 -0
  61. package/src/core/bvh8/bvh8_convert_to_dot.d.ts.map +1 -0
  62. package/src/core/bvh8/bvh8_convert_to_dot.js +133 -0
  63. package/src/core/bvh8/bvh8_count_primitives.d.ts +22 -0
  64. package/src/core/bvh8/bvh8_count_primitives.d.ts.map +1 -0
  65. package/src/core/bvh8/bvh8_count_primitives.js +98 -0
  66. package/src/core/bvh8/bvh8_geometry_validate.d.ts +16 -0
  67. package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -0
  68. package/src/core/bvh8/bvh8_geometry_validate.js +149 -0
  69. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts +16 -0
  70. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -0
  71. package/src/core/bvh8/bvh8_geometry_validate_indirect.js +177 -0
  72. package/src/core/bvh8/bvh8_get_node_bounds.d.ts +9 -0
  73. package/src/core/bvh8/bvh8_get_node_bounds.d.ts.map +1 -0
  74. package/src/core/bvh8/bvh8_get_node_bounds.js +35 -0
  75. package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts +10 -0
  76. package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts.map +1 -0
  77. package/src/core/bvh8/bvh8_get_node_child_bounds.js +53 -0
  78. package/src/core/bvh8/bvh8_node_child_surface_area.d.ts +9 -0
  79. package/src/core/bvh8/bvh8_node_child_surface_area.d.ts.map +1 -0
  80. package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -0
  81. package/src/core/bvh8/bvh8_node_count_triangles.d.ts +8 -0
  82. package/src/core/bvh8/bvh8_node_count_triangles.d.ts.map +1 -0
  83. package/src/core/bvh8/bvh8_node_count_triangles.js +28 -0
  84. package/src/core/bvh8/bvh8_quality.d.ts +8 -0
  85. package/src/core/bvh8/bvh8_quality.d.ts.map +1 -0
  86. package/src/core/bvh8/bvh8_quality.js +73 -0
  87. package/src/core/bvh8/bvh8_validate_structure.d.ts +15 -0
  88. package/src/core/bvh8/bvh8_validate_structure.d.ts.map +1 -0
  89. package/src/core/bvh8/bvh8_validate_structure.js +87 -0
  90. package/src/core/collection/Uint32MinHeap.d.ts +56 -0
  91. package/src/core/collection/Uint32MinHeap.d.ts.map +1 -0
  92. package/src/core/collection/Uint32MinHeap.js +109 -0
  93. package/src/core/collection/list/FilteredListProjection.js +1 -1
  94. package/src/{engine/physics/island → core/collection/union-find}/union_find.d.ts +8 -5
  95. package/src/core/collection/union-find/union_find.d.ts.map +1 -0
  96. package/src/{engine/physics/island → core/collection/union-find}/union_find.js +8 -5
  97. package/src/core/dom/isImageBitmap.d.ts +7 -0
  98. package/src/core/dom/isImageBitmap.d.ts.map +1 -0
  99. package/src/core/dom/isImageBitmap.js +12 -0
  100. package/src/core/function/frameThrottle.d.ts +8 -0
  101. package/src/core/function/frameThrottle.d.ts.map +1 -0
  102. package/src/core/function/frameThrottle.js +23 -0
  103. package/src/{engine/physics/narrowphase/clip_against_axis_uv.d.ts → core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts} +3 -3
  104. package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts.map +1 -0
  105. package/src/{engine/physics/narrowphase/clip_against_axis_uv.js → core/geom/2d/polygon/polygon2_clip_axis_halfplane.js} +51 -51
  106. package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts → core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts} +9 -7
  107. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -0
  108. package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.js → core/geom/3d/aabb/aabb3_transform_oriented_inverse.js} +9 -7
  109. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +12 -0
  110. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -0
  111. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +46 -0
  112. package/src/core/geom/3d/box/box3_projected_half_extent.d.ts +28 -0
  113. package/src/core/geom/3d/box/box3_projected_half_extent.d.ts.map +1 -0
  114. package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -0
  115. package/src/core/geom/3d/frustum/read_cluster_frustum_corners.js +1 -1
  116. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +9 -0
  117. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -0
  118. package/src/core/geom/3d/frustum/read_frustum_corner.js +14 -0
  119. package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -0
  120. package/src/{engine/physics → core/geom/3d}/gjk/gjk.js +430 -372
  121. package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.d.ts +8 -5
  122. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -0
  123. package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.js +520 -544
  124. package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.d.ts +5 -4
  125. package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -0
  126. package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.js +71 -70
  127. package/src/{engine/physics → core/geom/3d}/gjk/mpr.d.ts +3 -3
  128. package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -0
  129. package/src/{engine/physics → core/geom/3d}/gjk/mpr.js +368 -362
  130. package/src/{engine/physics/integration/quat_integrate.d.ts → core/geom/3d/quaternion/quat3_integrate.d.ts} +2 -2
  131. package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -0
  132. package/src/{engine/physics/integration/quat_integrate.js → core/geom/3d/quaternion/quat3_integrate.js} +1 -1
  133. package/src/{engine/physics/narrowphase/PosedShape.d.ts → core/geom/3d/shape/PosedShape3D.d.ts} +26 -8
  134. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -0
  135. package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +60 -9
  136. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  137. package/src/core/geom/3d/shape/TransformedShape3D.js +15 -11
  138. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +1 -1
  139. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +1 -1
  140. package/src/core/math/complex/complex_add.d.ts +1 -1
  141. package/src/core/math/complex/complex_add.d.ts.map +1 -1
  142. package/src/core/math/complex/complex_add.js +12 -3
  143. package/src/core/math/complex/complex_div.d.ts +1 -1
  144. package/src/core/math/complex/complex_div.d.ts.map +1 -1
  145. package/src/core/math/complex/complex_div.js +11 -4
  146. package/src/core/math/complex/complex_mul.d.ts +1 -1
  147. package/src/core/math/complex/complex_mul.d.ts.map +1 -1
  148. package/src/core/math/complex/complex_mul.js +10 -3
  149. package/src/core/math/complex/complex_sub.d.ts +1 -1
  150. package/src/core/math/complex/complex_sub.d.ts.map +1 -1
  151. package/src/core/math/complex/complex_sub.js +12 -3
  152. package/src/{engine/physics/fluid/solver/optimal_sor_omega.d.ts → core/math/linalg/sor_optimal_omega.d.ts} +4 -3
  153. package/src/core/math/linalg/sor_optimal_omega.d.ts.map +1 -0
  154. package/src/{engine/physics/fluid/solver/optimal_sor_omega.js → core/math/linalg/sor_optimal_omega.js} +4 -3
  155. package/src/core/math/lookup/ParameterLookupTable.d.ts +123 -0
  156. package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -0
  157. package/src/core/math/lookup/ParameterLookupTable.js +495 -0
  158. package/src/core/math/lookup/ParameterLookupTableFlags.d.ts +5 -0
  159. package/src/core/math/lookup/ParameterLookupTableFlags.d.ts.map +1 -0
  160. package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -0
  161. package/src/core/math/physics/kinematics/computeInterceptPoint.d.ts.map +1 -0
  162. package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.js +79 -79
  163. package/src/core/math/physics/mie/ri_air.d.ts.map +1 -1
  164. package/src/core/math/physics/mie/ri_air.js +1 -3
  165. package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -1
  166. package/src/core/math/physics/mie/ri_ammonium_sulfate.js +1 -3
  167. package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -1
  168. package/src/core/math/physics/mie/ri_brine.js +1 -3
  169. package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -1
  170. package/src/core/math/physics/mie/ri_dust.js +1 -3
  171. package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -1
  172. package/src/core/math/physics/mie/ri_pollen.js +1 -3
  173. package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -1
  174. package/src/core/math/physics/mie/ri_smoke.js +1 -3
  175. package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -1
  176. package/src/core/math/physics/mie/ri_soot.js +1 -3
  177. package/src/core/math/physics/mie/ri_water.d.ts.map +1 -1
  178. package/src/core/math/physics/mie/ri_water.js +1 -3
  179. package/src/core/math/random/random_pick_weighted_index.d.ts +10 -0
  180. package/src/core/math/random/random_pick_weighted_index.d.ts.map +1 -0
  181. package/src/core/math/random/random_pick_weighted_index.js +26 -0
  182. package/src/core/model/node-graph/NodeGraph.d.ts +9 -0
  183. package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
  184. package/src/core/model/node-graph/NodeGraph.js +38 -0
  185. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +23 -0
  186. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  187. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +54 -0
  188. package/src/core/path/convertPathToURL.d.ts +9 -0
  189. package/src/core/path/convertPathToURL.d.ts.map +1 -0
  190. package/src/core/path/convertPathToURL.js +107 -0
  191. package/src/core/process/worker/WorkerBuilder.js +1 -1
  192. package/src/core/process/worker/extractTransferables.js +1 -1
  193. package/src/engine/animation/curve/draw/build_tangent_editor.d.ts.map +1 -1
  194. package/src/engine/animation/curve/draw/build_tangent_editor.js +8 -1
  195. package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
  196. package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +11 -5
  197. package/src/engine/asset/Asset.d.ts.map +1 -1
  198. package/src/engine/asset/Asset.js +16 -6
  199. package/src/engine/asset/AssetManager.d.ts +61 -52
  200. package/src/engine/asset/AssetManager.d.ts.map +1 -1
  201. package/src/engine/asset/AssetManager.js +1411 -1045
  202. package/src/engine/asset/AssetRequest.d.ts +1 -1
  203. package/src/engine/asset/AssetRequest.d.ts.map +1 -1
  204. package/src/engine/asset/AssetRequest.js +1 -1
  205. package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
  206. package/src/engine/asset/AssetRequestScope.js +7 -0
  207. package/src/engine/asset/PendingAsset.d.ts +32 -1
  208. package/src/engine/asset/PendingAsset.d.ts.map +1 -1
  209. package/src/engine/asset/PendingAsset.js +108 -61
  210. package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -2
  211. package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
  212. package/src/engine/asset/loaders/AssetLoader.js +19 -2
  213. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
  214. package/src/engine/asset/loaders/GLTFAssetLoader.js +123 -114
  215. package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts +1 -1
  216. package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
  217. package/src/engine/asset/loaders/JavascriptAssetLoader.js +31 -47
  218. package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
  219. package/src/engine/asset/loaders/SVGAssetLoader.js +2 -2
  220. package/src/engine/asset/loaders/SoundAssetLoader.js +1 -1
  221. package/src/engine/asset/loaders/TextAssetLoader.js +2 -2
  222. package/src/{core → engine/asset/loaders}/font/FontAsset.d.ts +1 -1
  223. package/src/engine/asset/loaders/font/FontAsset.d.ts.map +1 -0
  224. package/src/{core → engine/asset/loaders}/font/FontAsset.js +21 -21
  225. package/src/{core → engine/asset/loaders}/font/FontAssetLoader.d.ts +1 -1
  226. package/src/engine/asset/loaders/font/FontAssetLoader.d.ts.map +1 -0
  227. package/src/{core → engine/asset/loaders}/font/FontAssetLoader.js +20 -20
  228. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
  229. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
  230. package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -20
  231. package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +1 -1
  232. package/src/engine/asset/loaders/texture/TextureAssetLoader.js +8 -2
  233. package/src/engine/asset/preloader/AssetPreloader.js +1 -1
  234. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +1 -1
  235. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +1 -1
  236. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +19 -22
  237. package/src/engine/graphics/FrameThrottle.d.ts +1 -7
  238. package/src/engine/graphics/FrameThrottle.d.ts.map +1 -1
  239. package/src/engine/graphics/FrameThrottle.js +2 -24
  240. package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.d.ts +1 -1
  241. package/src/engine/graphics/debug/shape_to_visual_entity.d.ts.map +1 -0
  242. package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.js +159 -159
  243. package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.d.ts +1 -1
  244. package/src/engine/graphics/debug/visualize_tetrahedral_mesh.d.ts.map +1 -0
  245. package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.js +46 -46
  246. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts +1 -1
  247. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts.map +1 -1
  248. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -32
  249. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
  250. package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
  251. package/src/engine/graphics/ecs/trail2d/Trail2DFlags.d.ts +1 -0
  252. package/src/engine/graphics/ecs/trail2d/Trail2DFlags.js +9 -1
  253. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +1 -1
  254. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -76
  255. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +1 -1
  256. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -427
  257. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +1 -4
  258. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +1 -1
  259. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -6
  260. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  261. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +1 -8
  262. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +1 -1
  263. package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -14
  264. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +1 -11
  265. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -1
  266. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -46
  267. package/src/engine/graphics/sh3/prototypeSH3Probe.js +1 -1
  268. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +27 -0
  269. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -0
  270. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -0
  271. package/src/engine/graphics/texture/isImageBitmap.d.ts +1 -6
  272. package/src/engine/graphics/texture/isImageBitmap.d.ts.map +1 -1
  273. package/src/engine/graphics/texture/isImageBitmap.js +2 -12
  274. package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.d.ts +2 -2
  275. package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.d.ts.map +1 -0
  276. package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.js +55 -55
  277. package/src/engine/network/NetworkSession.d.ts +12 -1
  278. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  279. package/src/engine/network/NetworkSession.js +52 -1
  280. package/src/engine/network/README.md +45 -0
  281. package/src/engine/network/convertPathToURL.d.ts +1 -8
  282. package/src/engine/network/convertPathToURL.d.ts.map +1 -1
  283. package/src/engine/network/convertPathToURL.js +2 -107
  284. package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -1
  285. package/src/engine/network/core/quantize/quantize_float.js +7 -0
  286. package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -1
  287. package/src/engine/network/core/quantize/quantize_position.js +12 -1
  288. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  289. package/src/engine/network/orchestrator/NetworkPeer.js +15 -1
  290. package/src/engine/network/replication/Replicator.d.ts +8 -0
  291. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  292. package/src/engine/network/replication/Replicator.js +48 -0
  293. package/src/engine/network/transport/Channel.d.ts.map +1 -1
  294. package/src/engine/network/transport/Channel.js +46 -12
  295. package/src/engine/network/transport/ReliableCommandPipeline.d.ts +16 -0
  296. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
  297. package/src/engine/network/transport/ReliableCommandPipeline.js +29 -0
  298. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  299. package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -1
  300. package/src/engine/network/transport/fragments/packet_size.d.ts +5 -5
  301. package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
  302. package/src/engine/network/transport/fragments/packet_size.js +5 -5
  303. package/src/engine/physics/BULLET_REVIEW.md +1 -1
  304. package/src/engine/physics/JOLT_REVIEW.md +2 -2
  305. package/src/engine/physics/PLAN.md +1094 -945
  306. package/src/engine/physics/RAPIER_REVIEW.md +2 -2
  307. package/src/engine/physics/body/BodyStorage.d.ts +2 -12
  308. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
  309. package/src/engine/physics/body/BodyStorage.js +406 -452
  310. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  311. package/src/engine/physics/body/SolverBodyState.js +12 -3
  312. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +28 -3
  313. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  314. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +60 -24
  315. package/src/engine/physics/broadphase/generate_pairs.d.ts +9 -5
  316. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
  317. package/src/engine/physics/broadphase/generate_pairs.js +52 -37
  318. package/src/engine/physics/ccd/linear_sweep.d.ts +15 -5
  319. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  320. package/src/engine/physics/ccd/linear_sweep.js +122 -40
  321. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  322. package/src/engine/physics/constraint/solve_constraints.js +830 -805
  323. package/src/engine/physics/contact/ManifoldStore.d.ts +91 -16
  324. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  325. package/src/engine/physics/contact/ManifoldStore.js +204 -60
  326. package/src/engine/physics/ecs/BodyKind.d.ts +7 -3
  327. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
  328. package/src/engine/physics/ecs/BodyKind.js +29 -25
  329. package/src/engine/physics/ecs/Collider.d.ts +7 -0
  330. package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
  331. package/src/engine/physics/ecs/Collider.js +7 -0
  332. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +1 -1
  333. package/src/engine/physics/ecs/PhysicsSystem.d.ts +110 -6
  334. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  335. package/src/engine/physics/ecs/PhysicsSystem.js +467 -45
  336. package/src/engine/physics/ecs/RigidBody.d.ts +20 -5
  337. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
  338. package/src/engine/physics/ecs/RigidBody.js +307 -286
  339. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +6 -3
  340. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -1
  341. package/src/engine/physics/ecs/RigidBodyFlags.js +31 -28
  342. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +12 -4
  343. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
  344. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +19 -5
  345. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +10 -0
  346. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -0
  347. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -0
  348. package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +28 -0
  349. package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts.map +1 -0
  350. package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -0
  351. package/src/engine/physics/events/ContactEventBuffer.d.ts +11 -0
  352. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
  353. package/src/engine/physics/events/ContactEventBuffer.js +40 -0
  354. package/src/engine/physics/events/diff_manifolds.d.ts +30 -13
  355. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -1
  356. package/src/engine/physics/events/diff_manifolds.js +87 -50
  357. package/src/engine/physics/fluid/FluidField.d.ts +98 -26
  358. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  359. package/src/engine/physics/fluid/FluidField.js +684 -570
  360. package/src/engine/physics/fluid/FluidSimulator.d.ts +157 -6
  361. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  362. package/src/engine/physics/fluid/FluidSimulator.js +450 -83
  363. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +243 -0
  364. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +4 -3
  365. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  366. package/src/engine/physics/fluid/ecs/FluidComponent.js +4 -3
  367. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +72 -0
  368. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -0
  369. package/src/engine/physics/fluid/ecs/FluidObstacle.js +97 -0
  370. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +117 -0
  371. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -0
  372. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +348 -0
  373. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  374. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +62 -12
  375. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  376. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +135 -38
  377. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  378. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +85 -38
  379. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +27 -8
  380. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  381. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +171 -68
  382. package/src/engine/physics/fluid/prototype.js +25 -1
  383. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts +42 -0
  384. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -0
  385. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +136 -0
  386. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts +37 -0
  387. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -0
  388. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +169 -0
  389. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts +36 -0
  390. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -0
  391. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +100 -0
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +6 -0
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  394. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +6 -0
  395. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +7 -2
  396. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  397. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +17 -12
  398. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts +42 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +32 -22
  402. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -1
  403. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +43 -26
  404. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts +31 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts.map +1 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +30 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +92 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +26 -19
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -1
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +46 -42
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +38 -10
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -1
  415. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +158 -75
  416. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +22 -17
  417. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
  418. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -96
  419. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts +42 -0
  420. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -0
  421. package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +319 -0
  422. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +53 -0
  423. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -0
  424. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +236 -0
  425. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts +46 -0
  426. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -0
  427. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +217 -0
  428. package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts +40 -0
  429. package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts.map +1 -0
  430. package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +165 -0
  431. package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts +44 -0
  432. package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts.map +1 -0
  433. package/src/engine/physics/fluid/solver/v3_mac_clip_trace.js +95 -0
  434. package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts +38 -0
  435. package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts.map +1 -0
  436. package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.js +77 -0
  437. package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts +52 -0
  438. package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts.map +1 -0
  439. package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js +131 -0
  440. package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts +38 -0
  441. package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts.map +1 -0
  442. package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js +104 -0
  443. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +30 -1
  444. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
  445. package/src/engine/physics/inertia/world_inverse_inertia.js +160 -116
  446. package/src/engine/physics/integration/integrate_position.js +97 -97
  447. package/src/engine/physics/island/IslandBuilder.d.ts +49 -8
  448. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  449. package/src/engine/physics/island/IslandBuilder.js +93 -14
  450. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  451. package/src/engine/physics/narrowphase/box_box_manifold.js +683 -673
  452. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  453. package/src/engine/physics/narrowphase/box_triangle_contact.js +899 -749
  454. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +27 -0
  455. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  456. package/src/engine/physics/narrowphase/capsule_contacts.js +624 -459
  457. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
  458. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +58 -38
  459. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
  460. package/src/engine/physics/narrowphase/compute_penetration.js +369 -325
  461. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +3 -1
  462. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  463. package/src/engine/physics/narrowphase/convex_convex_manifold.js +568 -422
  464. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +6 -3
  465. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
  466. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +66 -10
  467. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +4 -1
  468. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  469. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +97 -94
  470. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
  471. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  472. package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1739
  473. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +14 -7
  474. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
  475. package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -69
  476. package/src/engine/physics/persistence/solver_caches.d.ts +20 -0
  477. package/src/engine/physics/persistence/solver_caches.d.ts.map +1 -0
  478. package/src/engine/physics/persistence/solver_caches.js +309 -0
  479. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  480. package/src/engine/physics/queries/overlap_shape.js +187 -184
  481. package/src/engine/physics/queries/raycast.d.ts +3 -2
  482. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  483. package/src/engine/physics/queries/raycast.js +37 -11
  484. package/src/engine/physics/queries/shape_cast.d.ts +18 -5
  485. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  486. package/src/engine/physics/queries/shape_cast.js +417 -393
  487. package/src/engine/physics/solver/solve_contacts.d.ts +22 -6
  488. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  489. package/src/engine/physics/solver/solve_contacts.js +1482 -1338
  490. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  491. package/src/engine/physics/vehicle/RaycastVehicle.js +344 -339
  492. package/src/engine/ui/DraggableAspect.d.ts +12 -3
  493. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  494. package/src/engine/ui/DraggableAspect.js +115 -83
  495. package/src/generation/COORDINATES.md +54 -0
  496. package/src/generation/GridTaskGroup.js +2 -2
  497. package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -0
  498. package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts +9 -1
  499. package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts.map +1 -1
  500. package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -59
  501. package/src/generation/automata/CellularAutomata.d.ts +6 -3
  502. package/src/generation/automata/CellularAutomata.d.ts.map +1 -1
  503. package/src/generation/automata/CellularAutomata.js +22 -19
  504. package/src/generation/filtering/CellFilter.d.ts +17 -0
  505. package/src/generation/filtering/CellFilter.d.ts.map +1 -1
  506. package/src/generation/filtering/CellFilter.js +117 -77
  507. package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
  508. package/src/generation/filtering/CellFilterCellMatcher.js +2 -0
  509. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts +5 -0
  510. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts.map +1 -1
  511. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +15 -0
  512. package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts +0 -1
  513. package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts.map +1 -1
  514. package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -50
  515. package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts +0 -1
  516. package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts.map +1 -1
  517. package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -59
  518. package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts +0 -1
  519. package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts.map +1 -1
  520. package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -33
  521. package/src/generation/filtering/numeric/CellFilterCache.d.ts +1 -0
  522. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  523. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts +3 -2
  524. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
  525. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +9 -35
  526. package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts +0 -1
  527. package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts.map +1 -1
  528. package/src/generation/filtering/numeric/complex/CellFilterCurvature.js +19 -43
  529. package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts +0 -1
  530. package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
  531. package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +2 -6
  532. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
  533. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +9 -12
  534. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
  535. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +2 -1
  536. package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts +0 -1
  537. package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
  538. package/src/generation/filtering/numeric/complex/CellFilterSobel.js +2 -6
  539. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts +5 -4
  540. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts.map +1 -1
  541. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.js +5 -4
  542. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts +17 -0
  543. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts.map +1 -0
  544. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -0
  545. package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.d.ts.map +1 -1
  546. package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +7 -1
  547. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
  548. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +7 -10
  549. package/src/generation/filtering/numeric/util/sampler_from_filter.d.ts.map +1 -1
  550. package/src/generation/filtering/numeric/util/sampler_from_filter.js +2 -1
  551. package/src/generation/grid/GridData.d.ts.map +1 -1
  552. package/src/generation/grid/GridData.js +14 -1
  553. package/src/generation/grid/actions/ContinuousGridCellAction.d.ts +10 -3
  554. package/src/generation/grid/actions/ContinuousGridCellAction.d.ts.map +1 -1
  555. package/src/generation/grid/actions/ContinuousGridCellAction.js +18 -3
  556. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts +11 -1
  557. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts.map +1 -1
  558. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +13 -3
  559. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +1 -1
  560. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +2 -2
  561. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +1 -1
  562. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
  563. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -6
  564. package/src/generation/grid/coords/grid_to_texel.d.ts +9 -0
  565. package/src/generation/grid/coords/grid_to_texel.d.ts.map +1 -0
  566. package/src/generation/grid/coords/grid_to_texel.js +10 -0
  567. package/src/generation/grid/coords/texel_to_grid.d.ts +9 -0
  568. package/src/generation/grid/coords/texel_to_grid.d.ts.map +1 -0
  569. package/src/generation/grid/coords/texel_to_grid.js +10 -0
  570. package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +2 -2
  571. package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
  572. package/src/generation/grid/generation/GridTaskApplyActionToCells.js +10 -6
  573. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
  574. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +20 -21
  575. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts +7 -0
  576. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts.map +1 -1
  577. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +18 -10
  578. package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
  579. package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +16 -7
  580. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts +5 -3
  581. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
  582. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +26 -23
  583. package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.d.ts.map +1 -1
  584. package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +10 -1
  585. package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
  586. package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +4 -0
  587. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +15 -8
  588. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
  589. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +89 -92
  590. package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
  591. package/src/generation/markers/GridActionRuleSet.js +10 -2
  592. package/src/generation/markers/GridCellActionPlaceMarker.d.ts +11 -0
  593. package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
  594. package/src/generation/markers/GridCellActionPlaceMarker.js +20 -3
  595. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +3 -1
  596. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
  597. package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +9 -2
  598. package/src/generation/markers/MarkerNode.d.ts +8 -3
  599. package/src/generation/markers/MarkerNode.d.ts.map +1 -1
  600. package/src/generation/markers/MarkerNode.js +12 -5
  601. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
  602. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts +1 -1
  603. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts.map +1 -1
  604. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.js +1 -1
  605. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +1 -1
  606. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
  607. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  608. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +1 -1
  609. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
  610. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -2
  611. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts +1 -1
  612. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts.map +1 -1
  613. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +2 -2
  614. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
  615. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +6 -4
  616. package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.d.ts.map +1 -1
  617. package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +1 -3
  618. package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
  619. package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +12 -11
  620. package/src/generation/markers/matcher/MarkerNodeMatcherAnd.js +2 -2
  621. package/src/generation/markers/transform/MarkerNodeTransformer.d.ts +4 -1
  622. package/src/generation/markers/transform/MarkerNodeTransformer.d.ts.map +1 -1
  623. package/src/generation/markers/transform/MarkerNodeTransformer.js +4 -1
  624. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
  625. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +1 -3
  626. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts +5 -0
  627. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
  628. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +15 -0
  629. package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.d.ts.map +1 -1
  630. package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +1 -3
  631. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
  632. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +2 -4
  633. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
  634. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +1 -3
  635. package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
  636. package/src/generation/placement/GridCellPlacementRule.js +1 -3
  637. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
  638. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -10
  639. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
  640. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +6 -4
  641. package/src/generation/placement/action/random/weighted/WeightedGridCellAction.d.ts.map +1 -1
  642. package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +1 -3
  643. package/src/generation/rules/CellMatcher.d.ts +3 -1
  644. package/src/generation/rules/CellMatcher.d.ts.map +1 -1
  645. package/src/generation/rules/CellMatcher.js +3 -1
  646. package/src/generation/rules/CellMatcherFromFilter.d.ts.map +1 -1
  647. package/src/generation/rules/CellMatcherFromFilter.js +1 -3
  648. package/src/generation/rules/CellMatcherLayerBitMaskTest.d.ts.map +1 -1
  649. package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -20
  650. package/src/generation/test_support/executeTaskTreeSync.d.ts +9 -0
  651. package/src/generation/test_support/executeTaskTreeSync.d.ts.map +1 -0
  652. package/src/generation/test_support/executeTaskTreeSync.js +78 -0
  653. package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +2 -1
  654. package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
  655. package/src/generation/theme/TerrainLayerRuleAggregator.js +9 -6
  656. package/src/generation/theme/Theme.d.ts +1 -1
  657. package/src/generation/theme/Theme.d.ts.map +1 -1
  658. package/src/generation/theme/Theme.js +2 -2
  659. package/src/generation/theme/ThemeEngine.d.ts +3 -3
  660. package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
  661. package/src/generation/theme/ThemeEngine.js +26 -16
  662. package/src/generation/theme/cell/CellProcessingRule.d.ts +3 -3
  663. package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
  664. package/src/generation/theme/cell/CellProcessingRule.js +6 -10
  665. package/src/generation/theme/cell/CellProcessingRuleSet.d.ts +1 -1
  666. package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
  667. package/src/generation/theme/cell/CellProcessingRuleSet.js +2 -2
  668. package/src/view/common/ListView.js +1 -1
  669. package/src/view/elements/BottomLeftResizeHandleView.d.ts.map +1 -1
  670. package/src/view/elements/BottomLeftResizeHandleView.js +13 -5
  671. package/src/core/font/FontAsset.d.ts.map +0 -1
  672. package/src/core/font/FontAssetLoader.d.ts.map +0 -1
  673. package/src/core/geom/3d/shape/util/shape_to_visual_entity.d.ts.map +0 -1
  674. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +0 -1
  675. package/src/core/process/action/AsynchronousDelayAction.d.ts.map +0 -1
  676. package/src/engine/physics/computeInterceptPoint.d.ts.map +0 -1
  677. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +0 -1
  678. package/src/engine/physics/gjk/gjk.d.ts.map +0 -1
  679. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +0 -1
  680. package/src/engine/physics/gjk/minkowski_support.d.ts.map +0 -1
  681. package/src/engine/physics/gjk/mpr.d.ts.map +0 -1
  682. package/src/engine/physics/integration/quat_integrate.d.ts.map +0 -1
  683. package/src/engine/physics/island/union_find.d.ts.map +0 -1
  684. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +0 -1
  685. package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +0 -1
  686. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +0 -1
  687. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts +0 -21
  688. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts.map +0 -1
  689. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +0 -68
  690. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts +0 -10
  691. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts.map +0 -1
  692. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.js +0 -17
  693. /package/src/{engine/physics → core/geom/3d}/gjk/NOTES.md +0 -0
  694. /package/src/{engine/physics → core/geom/3d}/gjk/gjk.d.ts +0 -0
  695. /package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.d.ts +0 -0
@@ -8,14 +8,24 @@
8
8
  * close to zero in the bulk; residual divergence at boundaries / under-converged solves
9
9
  * is normal.
10
10
  *
11
- * Boundary cells use one-sided differences. Solid cells have their velocity zeroed
12
- * (no-slip), and neighbour gradients across a solid face reflect the cell's own
13
- * pressure (consistent with the Neumann condition used in the solve), which keeps the
14
- * flow tangent to the boundary.
11
+ * Per-face ghost values mirror the boundary model the pressure solve uses (see
12
+ * {@link v3_grid_compute_solid_neighbour_mask}):
15
13
  *
16
- * Everything this needs is read straight from `neighbour_mask`, the same pre-baked
17
- * per-cell bitmask {@link v3_grid_solve_pressure} consumes (populated by
18
- * {@link FluidField.recomputeSolidNeighbourMask}). Encoding:
14
+ * - fluid neighbour (mask bit set): read its pressure.
15
+ * - SOLID neighbour (bit clear, in bounds): reflect the cell's own pressure —
16
+ * ∂p/∂n = 0 at the wall, the face contributes 0 to the gradient and flow
17
+ * stays tangent to the boundary.
18
+ * - OPEN face (bit clear, out of bounds — the domain edge): ghost pressure 0,
19
+ * matching the Dirichlet open boundary in the solve. Positive interior
20
+ * pressure therefore accelerates fluid OUT through the edge — the open
21
+ * boundary actually vents.
22
+ *
23
+ * Solid cells themselves have their velocity zeroed (no-slip).
24
+ *
25
+ * Everything this needs is read from `neighbour_mask` (the same pre-baked
26
+ * per-cell bitmask {@link v3_grid_solve_pressure} consumes, populated by
27
+ * {@link FluidField.recomputeSolidNeighbourMask}) plus the loop position
28
+ * (which face is at the domain edge is positional knowledge). Encoding:
19
29
  *
20
30
  * bit 0 (= 1) : -x neighbour is fluid
21
31
  * bit 1 (= 2) : +x neighbour is fluid
@@ -25,16 +35,11 @@
25
35
  * bit 5 (= 32) : +z neighbour is fluid
26
36
  * bit 7 (= 128) : this cell is itself solid
27
37
  *
28
- * A set neighbour bit means "that neighbour is fluid (in-bounds AND non-solid)", so a
29
- * clear bit reflects the cell's own pressure folding the boundary check and the
30
- * solid-neighbour check into one register-resident bit-test per face.
31
- *
32
- * Bit 7 carries the self-solid flag that used to require the separate `solid` array.
33
- * The solve can't use the low 6 bits for this (a solid cell and an isolated fluid cell
34
- * both have zero fluid-neighbour bits) but needs opposite handling here — the solid
35
- * must be zeroed for no-slip, while the isolated fluid's gradient already nets to zero
36
- * (every face reflects its own pressure) and must be left alone. Bit 7 distinguishes
37
- * them, so a single mask read drives both the zeroing and the gradient.
38
+ * Bit 7 carries the self-solid flag. The solve skips no-DOF cells via
39
+ * `diag === 0`, but this kernel needs opposite handling for the two no-DOF
40
+ * flavours — a solid must be zeroed for no-slip, while a sealed fluid cell's
41
+ * gradient already nets to zero (every face reflects its own pressure) and
42
+ * must be left alone. Bit 7 distinguishes them.
38
43
  *
39
44
  * @param {Float32Array} vel_x Mutated in place.
40
45
  * @param {Float32Array} vel_y Mutated in place.
@@ -1 +1 @@
1
- {"version":3,"file":"v3_grid_subtract_pressure_gradient.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,0DAVW,YAAY,SACZ,YAAY,SACZ,YAAY,YACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,kBACN,UAAU,QAgDpB"}
1
+ {"version":3,"file":"v3_grid_subtract_pressure_gradient.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,0DAVW,YAAY,SACZ,YAAY,SACZ,YAAY,YACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,kBACN,UAAU,QAuDpB"}
@@ -1,96 +1,108 @@
1
- import { assert } from "../../../../core/assert.js";
2
-
3
- /**
4
- * Subtract the pressure gradient from a velocity field in-place, making the velocity
5
- * (approximately) divergence-free:
6
- *
7
- * v(c) -= 0.5 * ( p(x+1) - p(x-1), p(y+1) - p(y-1), p(z+1) - p(z-1) )
8
- *
9
- * Pairs with {@link v3_grid_solve_pressure}. After this, divergence will be
10
- * close to zero in the bulk; residual divergence at boundaries / under-converged solves
11
- * is normal.
12
- *
13
- * Boundary cells use one-sided differences. Solid cells have their velocity zeroed
14
- * (no-slip), and neighbour gradients across a solid face reflect the cell's own
15
- * pressure (consistent with the Neumann condition used in the solve), which keeps the
16
- * flow tangent to the boundary.
17
- *
18
- * Everything this needs is read straight from `neighbour_mask`, the same pre-baked
19
- * per-cell bitmask {@link v3_grid_solve_pressure} consumes (populated by
20
- * {@link FluidField.recomputeSolidNeighbourMask}). Encoding:
21
- *
22
- * bit 0 (= 1) : -x neighbour is fluid
23
- * bit 1 (= 2) : +x neighbour is fluid
24
- * bit 2 (= 4) : -y neighbour is fluid
25
- * bit 3 (= 8) : +y neighbour is fluid
26
- * bit 4 (= 16) : -z neighbour is fluid
27
- * bit 5 (= 32) : +z neighbour is fluid
28
- * bit 7 (= 128) : this cell is itself solid
29
- *
30
- * A set neighbour bit means "that neighbour is fluid (in-bounds AND non-solid)", so a
31
- * clear bit reflects the cell's own pressure — folding the boundary check and the
32
- * solid-neighbour check into one register-resident bit-test per face.
33
- *
34
- * Bit 7 carries the self-solid flag that used to require the separate `solid` array.
35
- * The solve can't use the low 6 bits for this (a solid cell and an isolated fluid cell
36
- * both have zero fluid-neighbour bits) but needs opposite handling here — the solid
37
- * must be zeroed for no-slip, while the isolated fluid's gradient already nets to zero
38
- * (every face reflects its own pressure) and must be left alone. Bit 7 distinguishes
39
- * them, so a single mask read drives both the zeroing and the gradient.
40
- *
41
- * @param {Float32Array} vel_x Mutated in place.
42
- * @param {Float32Array} vel_y Mutated in place.
43
- * @param {Float32Array} vel_z Mutated in place.
44
- * @param {Float32Array} pressure From {@link v3_grid_solve_pressure}.
45
- * @param {number} res_x
46
- * @param {number} res_y
47
- * @param {number} res_z
48
- * @param {Uint8Array} neighbour_mask Length res_x*res_y*res_z. Same buffer the
49
- * pressure solve uses; MUST be recomputed whenever the solid mask changes.
50
- */
51
- export function v3_grid_subtract_pressure_gradient(vel_x, vel_y, vel_z, pressure, res_x, res_y, res_z, neighbour_mask) {
52
- const cell_count = res_x * res_y * res_z;
53
- assert.greaterThanOrEqual(vel_x.length, cell_count, "vel_x covers grid");
54
- assert.greaterThanOrEqual(vel_y.length, cell_count, "vel_y covers grid");
55
- assert.greaterThanOrEqual(vel_z.length, cell_count, "vel_z covers grid");
56
- assert.greaterThanOrEqual(pressure.length, cell_count, "pressure covers grid");
57
- assert.greaterThanOrEqual(neighbour_mask.length, cell_count, "neighbour_mask covers grid");
58
-
59
- const slice_size = res_x * res_y;
60
-
61
- for (let z = 0; z < res_z; z++) {
62
- const z_off = z * slice_size;
63
-
64
- for (let y = 0; y < res_y; y++) {
65
- const y_off = y * res_x;
66
-
67
- for (let x = 0; x < res_x; x++) {
68
- const c = z_off + y_off + x;
69
-
70
- const mask = neighbour_mask[c];
71
-
72
- if (mask & 128) {
73
- // Solid cell (bit 7): enforce no-slip.
74
- vel_x[c] = 0;
75
- vel_y[c] = 0;
76
- vel_z[c] = 0;
77
- continue;
78
- }
79
-
80
- // A clear bit means the neighbour is out-of-bounds or solid; reflect
81
- // the cell's own pressure so that face contributes 0 to the gradient,
82
- // consistent with ∂p/∂n = 0 at the wall.
83
- const p_xm = (mask & 1) ? pressure[c - 1] : pressure[c];
84
- const p_xp = (mask & 2) ? pressure[c + 1] : pressure[c];
85
- const p_ym = (mask & 4) ? pressure[c - res_x] : pressure[c];
86
- const p_yp = (mask & 8) ? pressure[c + res_x] : pressure[c];
87
- const p_zm = (mask & 16) ? pressure[c - slice_size] : pressure[c];
88
- const p_zp = (mask & 32) ? pressure[c + slice_size] : pressure[c];
89
-
90
- vel_x[c] -= 0.5 * (p_xp - p_xm);
91
- vel_y[c] -= 0.5 * (p_yp - p_ym);
92
- vel_z[c] -= 0.5 * (p_zp - p_zm);
93
- }
94
- }
95
- }
96
- }
1
+ import { assert } from "../../../../core/assert.js";
2
+
3
+ /**
4
+ * Subtract the pressure gradient from a velocity field in-place, making the velocity
5
+ * (approximately) divergence-free:
6
+ *
7
+ * v(c) -= 0.5 * ( p(x+1) - p(x-1), p(y+1) - p(y-1), p(z+1) - p(z-1) )
8
+ *
9
+ * Pairs with {@link v3_grid_solve_pressure}. After this, divergence will be
10
+ * close to zero in the bulk; residual divergence at boundaries / under-converged solves
11
+ * is normal.
12
+ *
13
+ * Per-face ghost values mirror the boundary model the pressure solve uses (see
14
+ * {@link v3_grid_compute_solid_neighbour_mask}):
15
+ *
16
+ * - fluid neighbour (mask bit set): read its pressure.
17
+ * - SOLID neighbour (bit clear, in bounds): reflect the cell's own pressure —
18
+ * ∂p/∂n = 0 at the wall, the face contributes 0 to the gradient and flow
19
+ * stays tangent to the boundary.
20
+ * - OPEN face (bit clear, out of bounds — the domain edge): ghost pressure 0,
21
+ * matching the Dirichlet open boundary in the solve. Positive interior
22
+ * pressure therefore accelerates fluid OUT through the edge — the open
23
+ * boundary actually vents.
24
+ *
25
+ * Solid cells themselves have their velocity zeroed (no-slip).
26
+ *
27
+ * Everything this needs is read from `neighbour_mask` (the same pre-baked
28
+ * per-cell bitmask {@link v3_grid_solve_pressure} consumes, populated by
29
+ * {@link FluidField.recomputeSolidNeighbourMask}) plus the loop position
30
+ * (which face is at the domain edge is positional knowledge). Encoding:
31
+ *
32
+ * bit 0 (= 1) : -x neighbour is fluid
33
+ * bit 1 (= 2) : +x neighbour is fluid
34
+ * bit 2 (= 4) : -y neighbour is fluid
35
+ * bit 3 (= 8) : +y neighbour is fluid
36
+ * bit 4 (= 16) : -z neighbour is fluid
37
+ * bit 5 (= 32) : +z neighbour is fluid
38
+ * bit 7 (= 128) : this cell is itself solid
39
+ *
40
+ * Bit 7 carries the self-solid flag. The solve skips no-DOF cells via
41
+ * `diag === 0`, but this kernel needs opposite handling for the two no-DOF
42
+ * flavours a solid must be zeroed for no-slip, while a sealed fluid cell's
43
+ * gradient already nets to zero (every face reflects its own pressure) and
44
+ * must be left alone. Bit 7 distinguishes them.
45
+ *
46
+ * @param {Float32Array} vel_x Mutated in place.
47
+ * @param {Float32Array} vel_y Mutated in place.
48
+ * @param {Float32Array} vel_z Mutated in place.
49
+ * @param {Float32Array} pressure From {@link v3_grid_solve_pressure}.
50
+ * @param {number} res_x
51
+ * @param {number} res_y
52
+ * @param {number} res_z
53
+ * @param {Uint8Array} neighbour_mask Length ≥ res_x*res_y*res_z. Same buffer the
54
+ * pressure solve uses; MUST be recomputed whenever the solid mask changes.
55
+ */
56
+ export function v3_grid_subtract_pressure_gradient(vel_x, vel_y, vel_z, pressure, res_x, res_y, res_z, neighbour_mask) {
57
+ const cell_count = res_x * res_y * res_z;
58
+ assert.greaterThanOrEqual(vel_x.length, cell_count, "vel_x covers grid");
59
+ assert.greaterThanOrEqual(vel_y.length, cell_count, "vel_y covers grid");
60
+ assert.greaterThanOrEqual(vel_z.length, cell_count, "vel_z covers grid");
61
+ assert.greaterThanOrEqual(pressure.length, cell_count, "pressure covers grid");
62
+ assert.greaterThanOrEqual(neighbour_mask.length, cell_count, "neighbour_mask covers grid");
63
+
64
+ const slice_size = res_x * res_y;
65
+ const last_x = res_x - 1;
66
+ const last_y = res_y - 1;
67
+ const last_z = res_z - 1;
68
+
69
+ for (let z = 0; z < res_z; z++) {
70
+ const z_off = z * slice_size;
71
+ const open_zm = z === 0;
72
+ const open_zp = z === last_z;
73
+
74
+ for (let y = 0; y < res_y; y++) {
75
+ const y_off = y * res_x;
76
+ const open_ym = y === 0;
77
+ const open_yp = y === last_y;
78
+
79
+ for (let x = 0; x < res_x; x++) {
80
+ const c = z_off + y_off + x;
81
+
82
+ const mask = neighbour_mask[c];
83
+
84
+ if (mask & 128) {
85
+ // Solid cell (bit 7): enforce no-slip.
86
+ vel_x[c] = 0;
87
+ vel_y[c] = 0;
88
+ vel_z[c] = 0;
89
+ continue;
90
+ }
91
+
92
+ // Per face: fluid neighbour its pressure; solid neighbour →
93
+ // reflect own pressure (Neumann); domain edge → ghost 0 (open).
94
+ const p_self = pressure[c];
95
+ const p_xm = (mask & 1) ? pressure[c - 1] : (x === 0 ? 0 : p_self);
96
+ const p_xp = (mask & 2) ? pressure[c + 1] : (x === last_x ? 0 : p_self);
97
+ const p_ym = (mask & 4) ? pressure[c - res_x] : (open_ym ? 0 : p_self);
98
+ const p_yp = (mask & 8) ? pressure[c + res_x] : (open_yp ? 0 : p_self);
99
+ const p_zm = (mask & 16) ? pressure[c - slice_size] : (open_zm ? 0 : p_self);
100
+ const p_zp = (mask & 32) ? pressure[c + slice_size] : (open_zp ? 0 : p_self);
101
+
102
+ vel_x[c] -= 0.5 * (p_xp - p_xm);
103
+ vel_y[c] -= 0.5 * (p_yp - p_ym);
104
+ vel_z[c] -= 0.5 * (p_zp - p_zm);
105
+ }
106
+ }
107
+ }
108
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Unconditionally stable MacCormack advection of a MAC (face-centered)
3
+ * velocity field — the staggered counterpart of
4
+ * {@link v3_grid_advect_maccormack_velocity}. Per component lattice:
5
+ *
6
+ * 1. forward: û = SL(src, back-trace by carrier·dt)
7
+ * 2. backward: ū = SL(û, trace by +carrier·dt)
8
+ * 3. correct: u* = û + ½·(src − ū)
9
+ * 4. limit: clamp to min/max of the 8 src faces around the back-traced
10
+ * position (Selle et al. 2008 monotone limiter; pinned faces
11
+ * participate — they hold valid boundary values)
12
+ *
13
+ * Solid handling matches {@link v3_mac_advect_sl_velocity}: PINNED faces pass
14
+ * their source value through (the projection owns them as boundary
15
+ * conditions), and every trace — backward in both passes, forward in the
16
+ * corrector — is CLIPPED against solid cells so momentum is never sampled
17
+ * from inside a wall or through one.
18
+ *
19
+ * The cross-component carrier reconstruction uses the exact fixed 4-tap MAC
20
+ * averages (face positions are grid-aligned in the cross axes — see the SL
21
+ * kernel), recomputed per pass; the carrier does not change between passes
22
+ * so both passes see identical trace vectors.
23
+ *
24
+ * Aliasing: per component, `out`, `src` and `fwd` must be distinct, and
25
+ * outputs must not alias any carrier lattice (cross-component carrier
26
+ * sampling — see {@link v3_mac_advect_sl_velocity}).
27
+ *
28
+ * @param {Float32Array[]} outputs `[out_u, out_v, out_w]`. Mutated.
29
+ * @param {Float32Array[]} sources `[src_u, src_v, src_w]`. Read.
30
+ * @param {Float32Array[]} carrier `[car_u, car_v, car_w]`.
31
+ * @param {Float32Array[]} forward_scratch `[fwd_u, fwd_v, fwd_w]`. Mutated.
32
+ * @param {number} res_x
33
+ * @param {number} res_y
34
+ * @param {number} res_z
35
+ * @param {number} time_delta
36
+ * @param {Uint8Array} face_solid_x
37
+ * @param {Uint8Array} face_solid_y
38
+ * @param {Uint8Array} face_solid_z
39
+ * @param {Uint8Array} solid Cell-centered solid flags (trace clipping).
40
+ */
41
+ export function v3_mac_advect_maccormack_velocity(outputs: Float32Array[], sources: Float32Array[], carrier: Float32Array[], forward_scratch: Float32Array[], res_x: number, res_y: number, res_z: number, time_delta: number, face_solid_x: Uint8Array, face_solid_y: Uint8Array, face_solid_z: Uint8Array, solid: Uint8Array): void;
42
+ //# sourceMappingURL=v3_mac_advect_maccormack_velocity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3_mac_advect_maccormack_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,2DAbW,YAAY,EAAE,WACd,YAAY,EAAE,WACd,YAAY,EAAE,mBACd,YAAY,EAAE,SACd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,gBACN,UAAU,gBACV,UAAU,gBACV,UAAU,SACV,UAAU,QA0MpB"}
@@ -0,0 +1,319 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { clamp } from "../../../../core/math/clamp.js";
3
+ import { scs3d_sample_linear } from "../../../graphics/texture/3d/scs3d_sample_linear.js";
4
+ import { v3_mac_clip_trace } from "./v3_mac_clip_trace.js";
5
+
6
+ const scratch_clip = new Float32Array(3);
7
+
8
+ /**
9
+ * Straight-line (loop-free, inlinable) test: is the cell containing the
10
+ * point solid? Same rounding/clamping as v3_mac_clip_trace. Kernels use this
11
+ * inline per trace and call the loop-bearing clip helper only on a hit — see
12
+ * the performance contract on {@link v3_mac_clip_trace}.
13
+ *
14
+ * @param {Uint8Array} solid
15
+ * @param {number} res_x
16
+ * @param {number} res_y
17
+ * @param {number} res_z
18
+ * @param {number} px
19
+ * @param {number} py
20
+ * @param {number} pz
21
+ * @return {boolean}
22
+ */
23
+ function end_in_solid(solid, res_x, res_y, res_z, px, py, pz) {
24
+ let x = (px + 0.5) | 0;
25
+ let y = (py + 0.5) | 0;
26
+ let z = (pz + 0.5) | 0;
27
+ if (x < 0) x = 0; else if (x >= res_x) x = res_x - 1;
28
+ if (y < 0) y = 0; else if (y >= res_y) y = res_y - 1;
29
+ if (z < 0) z = 0; else if (z >= res_z) z = res_z - 1;
30
+ return solid[z * res_x * res_y + y * res_x + x] !== 0;
31
+ }
32
+
33
+
34
+ /**
35
+ * Unconditionally stable MacCormack advection of a MAC (face-centered)
36
+ * velocity field — the staggered counterpart of
37
+ * {@link v3_grid_advect_maccormack_velocity}. Per component lattice:
38
+ *
39
+ * 1. forward: û = SL(src, back-trace by carrier·dt)
40
+ * 2. backward: ū = SL(û, trace by +carrier·dt)
41
+ * 3. correct: u* = û + ½·(src − ū)
42
+ * 4. limit: clamp to min/max of the 8 src faces around the back-traced
43
+ * position (Selle et al. 2008 monotone limiter; pinned faces
44
+ * participate — they hold valid boundary values)
45
+ *
46
+ * Solid handling matches {@link v3_mac_advect_sl_velocity}: PINNED faces pass
47
+ * their source value through (the projection owns them as boundary
48
+ * conditions), and every trace — backward in both passes, forward in the
49
+ * corrector — is CLIPPED against solid cells so momentum is never sampled
50
+ * from inside a wall or through one.
51
+ *
52
+ * The cross-component carrier reconstruction uses the exact fixed 4-tap MAC
53
+ * averages (face positions are grid-aligned in the cross axes — see the SL
54
+ * kernel), recomputed per pass; the carrier does not change between passes
55
+ * so both passes see identical trace vectors.
56
+ *
57
+ * Aliasing: per component, `out`, `src` and `fwd` must be distinct, and
58
+ * outputs must not alias any carrier lattice (cross-component carrier
59
+ * sampling — see {@link v3_mac_advect_sl_velocity}).
60
+ *
61
+ * @param {Float32Array[]} outputs `[out_u, out_v, out_w]`. Mutated.
62
+ * @param {Float32Array[]} sources `[src_u, src_v, src_w]`. Read.
63
+ * @param {Float32Array[]} carrier `[car_u, car_v, car_w]`.
64
+ * @param {Float32Array[]} forward_scratch `[fwd_u, fwd_v, fwd_w]`. Mutated.
65
+ * @param {number} res_x
66
+ * @param {number} res_y
67
+ * @param {number} res_z
68
+ * @param {number} time_delta
69
+ * @param {Uint8Array} face_solid_x
70
+ * @param {Uint8Array} face_solid_y
71
+ * @param {Uint8Array} face_solid_z
72
+ * @param {Uint8Array} solid Cell-centered solid flags (trace clipping).
73
+ */
74
+ export function v3_mac_advect_maccormack_velocity(outputs, sources, carrier, forward_scratch, res_x, res_y, res_z, time_delta, face_solid_x, face_solid_y, face_solid_z, solid) {
75
+ assert.equal(outputs.length, 3, "outputs is a 3-component array");
76
+ assert.equal(sources.length, 3, "sources is a 3-component array");
77
+ assert.equal(carrier.length, 3, "carrier is a 3-component array");
78
+ assert.equal(forward_scratch.length, 3, "forward_scratch is a 3-component array");
79
+
80
+ const out_u = outputs[0], out_v = outputs[1], out_w = outputs[2];
81
+ const src_u = sources[0], src_v = sources[1], src_w = sources[2];
82
+ const car_u = carrier[0], car_v = carrier[1], car_w = carrier[2];
83
+ const fwd_u = forward_scratch[0], fwd_v = forward_scratch[1], fwd_w = forward_scratch[2];
84
+
85
+ assert.notEqual(out_u, src_u, "out_u must not alias src_u");
86
+ assert.notEqual(out_u, fwd_u, "out_u must not alias fwd_u");
87
+ assert.notEqual(src_u, fwd_u, "src_u must not alias fwd_u");
88
+
89
+ const sx = res_x + 1;
90
+ const sy = res_y + 1;
91
+ const sz = res_z + 1;
92
+ const cell_slice = res_x * res_y;
93
+ const u_slice = sx * res_y;
94
+ const v_slice = res_x * sy;
95
+ const last_cx = res_x - 1;
96
+ const last_cy = res_y - 1;
97
+ const last_cz = res_z - 1;
98
+ const dt = time_delta;
99
+
100
+ // ─── u (x-faces): face (x,y,z) sits at (x − 0.5, y, z) ──────────────────
101
+ for (let pass = 0; pass < 2; pass++) {
102
+ for (let z = 0; z < res_z; z++) {
103
+ const f_z = z * u_slice;
104
+ const v_z = z * v_slice;
105
+ const w_z = z * cell_slice;
106
+ for (let y = 0; y < res_y; y++) {
107
+ const f_y = f_z + y * sx;
108
+ const v_lo = v_z + y * res_x;
109
+ const v_hi = v_lo + res_x;
110
+ const w_lo = w_z + y * res_x;
111
+ const w_hi = w_lo + cell_slice;
112
+ for (let x = 0; x <= res_x; x++) {
113
+ const f = f_y + x;
114
+ if (face_solid_x[f] !== 0) {
115
+ if (pass === 0) fwd_u[f] = src_u[f];
116
+ else out_u[f] = src_u[f];
117
+ continue;
118
+ }
119
+ const xa = x > 0 ? x - 1 : 0;
120
+ const xb = x < res_x ? x : last_cx;
121
+ const cu = car_u[f];
122
+ const cv = 0.25 * (car_v[v_lo + xa] + car_v[v_lo + xb] + car_v[v_hi + xa] + car_v[v_hi + xb]);
123
+ const cw = 0.25 * (car_w[w_lo + xa] + car_w[w_lo + xb] + car_w[w_hi + xa] + car_w[w_hi + xb]);
124
+ const px = x - 0.5;
125
+
126
+ // Back-trace end (shared by pass A and the limiter).
127
+ let bx = px - cu * dt;
128
+ let by = y - cv * dt;
129
+ let bz = z - cw * dt;
130
+ if (end_in_solid(solid, res_x, res_y, res_z, bx, by, bz)) {
131
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, px, y, z, bx, by, bz);
132
+ bx = scratch_clip[0]; by = scratch_clip[1]; bz = scratch_clip[2];
133
+ }
134
+
135
+ if (pass === 0) {
136
+ fwd_u[f] = scs3d_sample_linear(src_u, sx, res_y, res_z, bx + 0.5, by, bz);
137
+ continue;
138
+ }
139
+
140
+ // Forward probe through the forward result.
141
+ let qx = px + cu * dt;
142
+ let qy = y + cv * dt;
143
+ let qz = z + cw * dt;
144
+ if (end_in_solid(solid, res_x, res_y, res_z, qx, qy, qz)) {
145
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, px, y, z, qx, qy, qz);
146
+ qx = scratch_clip[0]; qy = scratch_clip[1]; qz = scratch_clip[2];
147
+ }
148
+ const backward = scs3d_sample_linear(fwd_u, sx, res_y, res_z, qx + 0.5, qy, qz);
149
+ const corrected = fwd_u[f] + 0.5 * (src_u[f] - backward);
150
+
151
+ out_u[f] = limit8(corrected, src_u,
152
+ bx + 0.5, by, bz,
153
+ sx, res_y, res_z, sx, u_slice);
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ // ─── v (y-faces): face (x,y,z) sits at (x, y − 0.5, z) ──────────────────
160
+ for (let pass = 0; pass < 2; pass++) {
161
+ for (let z = 0; z < res_z; z++) {
162
+ const f_z = z * v_slice;
163
+ const u_z = z * u_slice;
164
+ const w_z = z * cell_slice;
165
+ for (let y = 0; y <= res_y; y++) {
166
+ const f_y = f_z + y * res_x;
167
+ const ya = y > 0 ? y - 1 : 0;
168
+ const yb = y < res_y ? y : last_cy;
169
+ const u_lo = u_z + ya * sx;
170
+ const u_hi = u_z + yb * sx;
171
+ const w_lo = w_z + ya * res_x;
172
+ const w_hi = w_z + yb * res_x;
173
+ for (let x = 0; x < res_x; x++) {
174
+ const f = f_y + x;
175
+ if (face_solid_y[f] !== 0) {
176
+ if (pass === 0) fwd_v[f] = src_v[f];
177
+ else out_v[f] = src_v[f];
178
+ continue;
179
+ }
180
+ const cu = 0.25 * (car_u[u_lo + x] + car_u[u_lo + x + 1] + car_u[u_hi + x] + car_u[u_hi + x + 1]);
181
+ const cv = car_v[f];
182
+ const cw = 0.25 * (car_w[w_lo + x] + car_w[w_lo + x + cell_slice] + car_w[w_hi + x] + car_w[w_hi + x + cell_slice]);
183
+ const py = y - 0.5;
184
+
185
+ let bx = x - cu * dt;
186
+ let by = py - cv * dt;
187
+ let bz = z - cw * dt;
188
+ if (end_in_solid(solid, res_x, res_y, res_z, bx, by, bz)) {
189
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, x, py, z, bx, by, bz);
190
+ bx = scratch_clip[0]; by = scratch_clip[1]; bz = scratch_clip[2];
191
+ }
192
+
193
+ if (pass === 0) {
194
+ fwd_v[f] = scs3d_sample_linear(src_v, res_x, sy, res_z, bx, by + 0.5, bz);
195
+ continue;
196
+ }
197
+
198
+ let qx = x + cu * dt;
199
+ let qy = py + cv * dt;
200
+ let qz = z + cw * dt;
201
+ if (end_in_solid(solid, res_x, res_y, res_z, qx, qy, qz)) {
202
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, x, py, z, qx, qy, qz);
203
+ qx = scratch_clip[0]; qy = scratch_clip[1]; qz = scratch_clip[2];
204
+ }
205
+ const backward = scs3d_sample_linear(fwd_v, res_x, sy, res_z, qx, qy + 0.5, qz);
206
+ const corrected = fwd_v[f] + 0.5 * (src_v[f] - backward);
207
+
208
+ out_v[f] = limit8(corrected, src_v,
209
+ bx, by + 0.5, bz,
210
+ res_x, sy, res_z, res_x, v_slice);
211
+ }
212
+ }
213
+ }
214
+ }
215
+
216
+ // ─── w (z-faces): face (x,y,z) sits at (x, y, z − 0.5) ──────────────────
217
+ for (let pass = 0; pass < 2; pass++) {
218
+ for (let z = 0; z <= res_z; z++) {
219
+ const f_z = z * cell_slice;
220
+ const za = z > 0 ? z - 1 : 0;
221
+ const zb = z < res_z ? z : last_cz;
222
+ const u_lo = za * u_slice;
223
+ const u_hi = zb * u_slice;
224
+ const v_lo = za * v_slice;
225
+ const v_hi = zb * v_slice;
226
+ for (let y = 0; y < res_y; y++) {
227
+ const f_y = f_z + y * res_x;
228
+ const u_row_lo = u_lo + y * sx;
229
+ const u_row_hi = u_hi + y * sx;
230
+ const v_row_lo = v_lo + y * res_x;
231
+ const v_row_hi = v_hi + y * res_x;
232
+ for (let x = 0; x < res_x; x++) {
233
+ const f = f_y + x;
234
+ if (face_solid_z[f] !== 0) {
235
+ if (pass === 0) fwd_w[f] = src_w[f];
236
+ else out_w[f] = src_w[f];
237
+ continue;
238
+ }
239
+ const cu = 0.25 * (car_u[u_row_lo + x] + car_u[u_row_lo + x + 1] + car_u[u_row_hi + x] + car_u[u_row_hi + x + 1]);
240
+ const cv = 0.25 * (car_v[v_row_lo + x] + car_v[v_row_lo + x + res_x] + car_v[v_row_hi + x] + car_v[v_row_hi + x + res_x]);
241
+ const cw = car_w[f];
242
+ const pz = z - 0.5;
243
+
244
+ let bx = x - cu * dt;
245
+ let by = y - cv * dt;
246
+ let bz = pz - cw * dt;
247
+ if (end_in_solid(solid, res_x, res_y, res_z, bx, by, bz)) {
248
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, x, y, pz, bx, by, bz);
249
+ bx = scratch_clip[0]; by = scratch_clip[1]; bz = scratch_clip[2];
250
+ }
251
+
252
+ if (pass === 0) {
253
+ fwd_w[f] = scs3d_sample_linear(src_w, res_x, res_y, sz, bx, by, bz + 0.5);
254
+ continue;
255
+ }
256
+
257
+ let qx = x + cu * dt;
258
+ let qy = y + cv * dt;
259
+ let qz = pz + cw * dt;
260
+ if (end_in_solid(solid, res_x, res_y, res_z, qx, qy, qz)) {
261
+ v3_mac_clip_trace(scratch_clip, solid, res_x, res_y, res_z, x, y, pz, qx, qy, qz);
262
+ qx = scratch_clip[0]; qy = scratch_clip[1]; qz = scratch_clip[2];
263
+ }
264
+ const backward = scs3d_sample_linear(fwd_w, res_x, res_y, sz, qx, qy, qz + 0.5);
265
+ const corrected = fwd_w[f] + 0.5 * (src_w[f] - backward);
266
+
267
+ out_w[f] = limit8(corrected, src_w,
268
+ bx, by, bz + 0.5,
269
+ res_x, res_y, sz, res_x, cell_slice);
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Clamp `value` to the min/max of the 8 lattice taps around the fractional
278
+ * position `(lx, ly, lz)` in the lattice's own index space (clamped to its
279
+ * bounds — the same corner set the trilinear sampler interpolates from).
280
+ *
281
+ * @param {number} value
282
+ * @param {Float32Array} data
283
+ * @param {number} lx
284
+ * @param {number} ly
285
+ * @param {number} lz
286
+ * @param {number} dim_x
287
+ * @param {number} dim_y
288
+ * @param {number} dim_z
289
+ * @param {number} row lattice row stride
290
+ * @param {number} slice lattice slice stride
291
+ * @return {number}
292
+ */
293
+ function limit8(value, data, lx, ly, lz, dim_x, dim_y, dim_z, row, slice) {
294
+ const bx = clamp(lx, 0, dim_x - 1);
295
+ const by = clamp(ly, 0, dim_y - 1);
296
+ const bz = clamp(lz, 0, dim_z - 1);
297
+ const x0 = bx | 0;
298
+ const y0 = by | 0;
299
+ const z0 = bz | 0;
300
+ const x1 = bx === x0 ? x0 : x0 + 1;
301
+ const y1 = by === y0 ? y0 : y0 + 1;
302
+ const z1 = bz === z0 ? z0 : z0 + 1;
303
+
304
+ const z0_off = z0 * slice;
305
+ const z1_off = z1 * slice;
306
+ const y0_off = y0 * row;
307
+ const y1_off = y1 * row;
308
+
309
+ let mn = data[z0_off + y0_off + x0];
310
+ let mx = mn;
311
+ let v = data[z0_off + y0_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
312
+ v = data[z0_off + y1_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
313
+ v = data[z0_off + y1_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
314
+ v = data[z1_off + y0_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
315
+ v = data[z1_off + y0_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
316
+ v = data[z1_off + y1_off + x0]; if (v < mn) mn = v; else if (v > mx) mx = v;
317
+ v = data[z1_off + y1_off + x1]; if (v < mn) mn = v; else if (v > mx) mx = v;
318
+ return value < mn ? mn : (value > mx ? mx : value);
319
+ }