@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.
- package/README.md +1 -3
- package/editor/view/ecs/components/common/AutoCanvasView.js +100 -53
- package/editor/view/ecs/components/common/TextController.js +59 -0
- package/editor/view/node-graph/NodeGraphCamera.js +90 -0
- package/editor/view/node-graph/NodeGraphEditorView.js +121 -22
- package/editor/view/node-graph/NodeGraphSelection.js +89 -0
- package/editor/view/node-graph/NodeGraphView.js +669 -453
- package/editor/view/node-graph/NodeView.js +211 -135
- package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -0
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -0
- package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -0
- package/editor/view/node-graph/actions/NodesMoveAction.js +41 -0
- package/editor/view/node-graph/actions/SelectionSetAction.js +60 -0
- package/editor/view/node-graph/connection_wire_geometry.js +107 -0
- package/package.json +1 -1
- package/samples/generation/SampleGenerator0.js +8 -1
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts +7 -0
- package/src/core/binary/reinterpret_float32_as_uint32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_float32_as_uint32.js +13 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts +7 -0
- package/src/core/binary/reinterpret_uint32_as_float32.d.ts.map +1 -0
- package/src/core/binary/reinterpret_uint32_as_float32.js +14 -0
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +1 -3
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts +12 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +1 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +92 -0
- package/src/core/bvh8/BVH8.d.ts +127 -0
- package/src/core/bvh8/BVH8.d.ts.map +1 -0
- package/src/core/bvh8/BVH8.js +436 -0
- package/src/core/bvh8/NOTES.md +63 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts +59 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -0
- package/src/core/bvh8/build/BVH8Converter.js +588 -0
- package/src/core/bvh8/build/NodeProxy.d.ts +66 -0
- package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -0
- package/src/core/bvh8/build/NodeProxy.js +308 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts +29 -0
- package/src/core/bvh8/build/TriangleCluster.d.ts.map +1 -0
- package/src/core/bvh8/build/TriangleCluster.js +123 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts +8 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +29 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts +10 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts.map +1 -0
- package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +18 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts +10 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts +9 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_from_proxy.js +256 -0
- package/src/core/bvh8/build/byte.d.ts +7 -0
- package/src/core/bvh8/build/byte.d.ts.map +1 -0
- package/src/core/bvh8/build/byte.js +10 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts +9 -0
- package/src/core/bvh8/build/encode_bounds_e.d.ts.map +1 -0
- package/src/core/bvh8/build/encode_bounds_e.js +12 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts +11 -0
- package/src/core/bvh8/bvh8_convert_to_dot.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_convert_to_dot.js +133 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts +22 -0
- package/src/core/bvh8/bvh8_count_primitives.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_count_primitives.js +98 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate.js +149 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts +16 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.js +177 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts +9 -0
- package/src/core/bvh8/bvh8_get_node_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_bounds.js +35 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts +10 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_get_node_child_bounds.js +53 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts +9 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts +8 -0
- package/src/core/bvh8/bvh8_node_count_triangles.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_node_count_triangles.js +28 -0
- package/src/core/bvh8/bvh8_quality.d.ts +8 -0
- package/src/core/bvh8/bvh8_quality.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_quality.js +73 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts +15 -0
- package/src/core/bvh8/bvh8_validate_structure.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_validate_structure.js +87 -0
- package/src/core/collection/Uint32MinHeap.d.ts +56 -0
- package/src/core/collection/Uint32MinHeap.d.ts.map +1 -0
- package/src/core/collection/Uint32MinHeap.js +109 -0
- package/src/core/collection/list/FilteredListProjection.js +1 -1
- package/src/{engine/physics/island → core/collection/union-find}/union_find.d.ts +8 -5
- package/src/core/collection/union-find/union_find.d.ts.map +1 -0
- package/src/{engine/physics/island → core/collection/union-find}/union_find.js +8 -5
- package/src/core/dom/isImageBitmap.d.ts +7 -0
- package/src/core/dom/isImageBitmap.d.ts.map +1 -0
- package/src/core/dom/isImageBitmap.js +12 -0
- package/src/core/function/frameThrottle.d.ts +8 -0
- package/src/core/function/frameThrottle.d.ts.map +1 -0
- package/src/core/function/frameThrottle.js +23 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.d.ts → core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts} +3 -3
- package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/clip_against_axis_uv.js → core/geom/2d/polygon/polygon2_clip_axis_halfplane.js} +51 -51
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts → core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts} +9 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.js → core/geom/3d/aabb/aabb3_transform_oriented_inverse.js} +9 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +12 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -0
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +46 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts +28 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.d.ts.map +1 -0
- package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -0
- package/src/core/geom/3d/frustum/read_cluster_frustum_corners.js +1 -1
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +9 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -0
- package/src/core/geom/3d/frustum/read_frustum_corner.js +14 -0
- package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk.js +430 -372
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.d.ts +8 -5
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.js +520 -544
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.d.ts +5 -4
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.js +71 -70
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.d.ts +3 -3
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -0
- package/src/{engine/physics → core/geom/3d}/gjk/mpr.js +368 -362
- package/src/{engine/physics/integration/quat_integrate.d.ts → core/geom/3d/quaternion/quat3_integrate.d.ts} +2 -2
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -0
- package/src/{engine/physics/integration/quat_integrate.js → core/geom/3d/quaternion/quat3_integrate.js} +1 -1
- package/src/{engine/physics/narrowphase/PosedShape.d.ts → core/geom/3d/shape/PosedShape3D.d.ts} +26 -8
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -0
- package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +60 -9
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +15 -11
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +1 -1
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +1 -1
- package/src/core/math/complex/complex_add.d.ts +1 -1
- package/src/core/math/complex/complex_add.d.ts.map +1 -1
- package/src/core/math/complex/complex_add.js +12 -3
- package/src/core/math/complex/complex_div.d.ts +1 -1
- package/src/core/math/complex/complex_div.d.ts.map +1 -1
- package/src/core/math/complex/complex_div.js +11 -4
- package/src/core/math/complex/complex_mul.d.ts +1 -1
- package/src/core/math/complex/complex_mul.d.ts.map +1 -1
- package/src/core/math/complex/complex_mul.js +10 -3
- package/src/core/math/complex/complex_sub.d.ts +1 -1
- package/src/core/math/complex/complex_sub.d.ts.map +1 -1
- package/src/core/math/complex/complex_sub.js +12 -3
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.d.ts → core/math/linalg/sor_optimal_omega.d.ts} +4 -3
- package/src/core/math/linalg/sor_optimal_omega.d.ts.map +1 -0
- package/src/{engine/physics/fluid/solver/optimal_sor_omega.js → core/math/linalg/sor_optimal_omega.js} +4 -3
- package/src/core/math/lookup/ParameterLookupTable.d.ts +123 -0
- package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTable.js +495 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts +5 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.d.ts.map +1 -0
- package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -0
- package/src/core/math/physics/kinematics/computeInterceptPoint.d.ts.map +1 -0
- package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.js +79 -79
- package/src/core/math/physics/mie/ri_air.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_air.js +1 -3
- package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_ammonium_sulfate.js +1 -3
- package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_brine.js +1 -3
- package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_dust.js +1 -3
- package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_pollen.js +1 -3
- package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_smoke.js +1 -3
- package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_soot.js +1 -3
- package/src/core/math/physics/mie/ri_water.d.ts.map +1 -1
- package/src/core/math/physics/mie/ri_water.js +1 -3
- package/src/core/math/random/random_pick_weighted_index.d.ts +10 -0
- package/src/core/math/random/random_pick_weighted_index.d.ts.map +1 -0
- package/src/core/math/random/random_pick_weighted_index.js +26 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +9 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +38 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +23 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +54 -0
- package/src/core/path/convertPathToURL.d.ts +9 -0
- package/src/core/path/convertPathToURL.d.ts.map +1 -0
- package/src/core/path/convertPathToURL.js +107 -0
- package/src/core/process/worker/WorkerBuilder.js +1 -1
- package/src/core/process/worker/extractTransferables.js +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.d.ts.map +1 -1
- package/src/engine/animation/curve/draw/build_tangent_editor.js +8 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +11 -5
- package/src/engine/asset/Asset.d.ts.map +1 -1
- package/src/engine/asset/Asset.js +16 -6
- package/src/engine/asset/AssetManager.d.ts +61 -52
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +1411 -1045
- package/src/engine/asset/AssetRequest.d.ts +1 -1
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.js +1 -1
- package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
- package/src/engine/asset/AssetRequestScope.js +7 -0
- package/src/engine/asset/PendingAsset.d.ts +32 -1
- package/src/engine/asset/PendingAsset.d.ts.map +1 -1
- package/src/engine/asset/PendingAsset.js +108 -61
- package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -2
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +19 -2
- package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/GLTFAssetLoader.js +123 -114
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/JavascriptAssetLoader.js +31 -47
- package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
- package/src/engine/asset/loaders/SVGAssetLoader.js +2 -2
- package/src/engine/asset/loaders/SoundAssetLoader.js +1 -1
- package/src/engine/asset/loaders/TextAssetLoader.js +2 -2
- package/src/{core → engine/asset/loaders}/font/FontAsset.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAsset.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAsset.js +21 -21
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.d.ts +1 -1
- package/src/engine/asset/loaders/font/FontAssetLoader.d.ts.map +1 -0
- package/src/{core → engine/asset/loaders}/font/FontAssetLoader.js +20 -20
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -20
- package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/texture/TextureAssetLoader.js +8 -2
- package/src/engine/asset/preloader/AssetPreloader.js +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +1 -1
- package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +19 -22
- package/src/engine/graphics/FrameThrottle.d.ts +1 -7
- package/src/engine/graphics/FrameThrottle.d.ts.map +1 -1
- package/src/engine/graphics/FrameThrottle.js +2 -24
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.d.ts +1 -1
- package/src/engine/graphics/debug/shape_to_visual_entity.d.ts.map +1 -0
- package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.js +159 -159
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.d.ts +1 -1
- package/src/engine/graphics/debug/visualize_tetrahedral_mesh.d.ts.map +1 -0
- package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.js +46 -46
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts.map +1 -1
- package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -32
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.js +21 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/trail2d/Trail2DFlags.js +9 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -76
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -427
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +1 -4
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -6
- package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +1 -8
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +1 -1
- package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -14
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +1 -11
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -46
- package/src/engine/graphics/sh3/prototypeSH3Probe.js +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +27 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -0
- package/src/engine/graphics/texture/isImageBitmap.d.ts +1 -6
- package/src/engine/graphics/texture/isImageBitmap.d.ts.map +1 -1
- package/src/engine/graphics/texture/isImageBitmap.js +2 -12
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.d.ts +2 -2
- package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.d.ts.map +1 -0
- package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.js +55 -55
- package/src/engine/network/NetworkSession.d.ts +12 -1
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +52 -1
- package/src/engine/network/README.md +45 -0
- package/src/engine/network/convertPathToURL.d.ts +1 -8
- package/src/engine/network/convertPathToURL.d.ts.map +1 -1
- package/src/engine/network/convertPathToURL.js +2 -107
- package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_float.js +7 -0
- package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -1
- package/src/engine/network/core/quantize/quantize_position.js +12 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +15 -1
- package/src/engine/network/replication/Replicator.d.ts +8 -0
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +48 -0
- package/src/engine/network/transport/Channel.d.ts.map +1 -1
- package/src/engine/network/transport/Channel.js +46 -12
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +16 -0
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
- package/src/engine/network/transport/ReliableCommandPipeline.js +29 -0
- package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +5 -5
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/packet_size.js +5 -5
- package/src/engine/physics/BULLET_REVIEW.md +1 -1
- package/src/engine/physics/JOLT_REVIEW.md +2 -2
- package/src/engine/physics/PLAN.md +1094 -945
- package/src/engine/physics/RAPIER_REVIEW.md +2 -2
- package/src/engine/physics/body/BodyStorage.d.ts +2 -12
- package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
- package/src/engine/physics/body/BodyStorage.js +406 -452
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +12 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +28 -3
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +60 -24
- package/src/engine/physics/broadphase/generate_pairs.d.ts +9 -5
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +52 -37
- package/src/engine/physics/ccd/linear_sweep.d.ts +15 -5
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +122 -40
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +830 -805
- package/src/engine/physics/contact/ManifoldStore.d.ts +91 -16
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +204 -60
- package/src/engine/physics/ecs/BodyKind.d.ts +7 -3
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +29 -25
- package/src/engine/physics/ecs/Collider.d.ts +7 -0
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -0
- package/src/engine/physics/ecs/ColliderSerializationAdapter.js +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +110 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +467 -45
- package/src/engine/physics/ecs/RigidBody.d.ts +20 -5
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBody.js +307 -286
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts +6 -3
- package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodyFlags.js +31 -28
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +12 -4
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +19 -5
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +28 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts.map +1 -0
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts +11 -0
- package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
- package/src/engine/physics/events/ContactEventBuffer.js +40 -0
- package/src/engine/physics/events/diff_manifolds.d.ts +30 -13
- package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -1
- package/src/engine/physics/events/diff_manifolds.js +87 -50
- package/src/engine/physics/fluid/FluidField.d.ts +98 -26
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +684 -570
- package/src/engine/physics/fluid/FluidSimulator.d.ts +157 -6
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +450 -83
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +243 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +4 -3
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +4 -3
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +72 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +97 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +117 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +348 -0
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +62 -12
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +135 -38
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +85 -38
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +27 -8
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +171 -68
- package/src/engine/physics/fluid/prototype.js +25 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +136 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts +37 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +169 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts +36 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +100 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +6 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +6 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +7 -2
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +17 -12
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +32 -22
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +43 -26
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts +31 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +30 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +92 -0
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +26 -19
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +46 -42
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +38 -10
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +158 -75
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +22 -17
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -96
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts +42 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +319 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +53 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +236 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts +46 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +217 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts +40 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_apply_vorticity_confinement.js +165 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts +44 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_clip_trace.js +95 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_divergence.js +77 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts +52 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js +131 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts +38 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.d.ts.map +1 -0
- package/src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js +104 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +30 -1
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +160 -116
- package/src/engine/physics/integration/integrate_position.js +97 -97
- package/src/engine/physics/island/IslandBuilder.d.ts +49 -8
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +93 -14
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +683 -673
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +899 -749
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +27 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +624 -459
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +58 -38
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +369 -325
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +3 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +568 -422
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +6 -3
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +66 -10
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +4 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +97 -94
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1739
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +14 -7
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -69
- package/src/engine/physics/persistence/solver_caches.d.ts +20 -0
- package/src/engine/physics/persistence/solver_caches.d.ts.map +1 -0
- package/src/engine/physics/persistence/solver_caches.js +309 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +187 -184
- package/src/engine/physics/queries/raycast.d.ts +3 -2
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +37 -11
- package/src/engine/physics/queries/shape_cast.d.ts +18 -5
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +417 -393
- package/src/engine/physics/solver/solve_contacts.d.ts +22 -6
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +1482 -1338
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +344 -339
- package/src/engine/ui/DraggableAspect.d.ts +12 -3
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +115 -83
- package/src/generation/COORDINATES.md +54 -0
- package/src/generation/GridTaskGroup.js +2 -2
- package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -0
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts +9 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -59
- package/src/generation/automata/CellularAutomata.d.ts +6 -3
- package/src/generation/automata/CellularAutomata.d.ts.map +1 -1
- package/src/generation/automata/CellularAutomata.js +22 -19
- package/src/generation/filtering/CellFilter.d.ts +17 -0
- package/src/generation/filtering/CellFilter.d.ts.map +1 -1
- package/src/generation/filtering/CellFilter.js +117 -77
- package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
- package/src/generation/filtering/CellFilterCellMatcher.js +2 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts +5 -0
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts.map +1 -1
- package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +15 -0
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -50
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -59
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts +0 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts.map +1 -1
- package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -33
- package/src/generation/filtering/numeric/CellFilterCache.d.ts +1 -0
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts +3 -2
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +9 -35
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterCurvature.js +19 -43
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +2 -6
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +9 -12
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +2 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts +0 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSobel.js +2 -6
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts +5 -4
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts.map +1 -1
- package/src/generation/filtering/numeric/math/CellFilterInverseLerp.js +5 -4
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts +17 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts.map +1 -0
- package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -0
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.d.ts.map +1 -1
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +7 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +7 -10
- package/src/generation/filtering/numeric/util/sampler_from_filter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/sampler_from_filter.js +2 -1
- package/src/generation/grid/GridData.d.ts.map +1 -1
- package/src/generation/grid/GridData.js +14 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts +10 -3
- package/src/generation/grid/actions/ContinuousGridCellAction.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellAction.js +18 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts +11 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +13 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +2 -2
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -6
- package/src/generation/grid/coords/grid_to_texel.d.ts +9 -0
- package/src/generation/grid/coords/grid_to_texel.d.ts.map +1 -0
- package/src/generation/grid/coords/grid_to_texel.js +10 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts +9 -0
- package/src/generation/grid/coords/texel_to_grid.d.ts.map +1 -0
- package/src/generation/grid/coords/texel_to_grid.js +10 -0
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +2 -2
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskApplyActionToCells.js +10 -6
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +20 -21
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts +7 -0
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +18 -10
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +16 -7
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts +5 -3
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +26 -23
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +10 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +4 -0
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +15 -8
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +89 -92
- package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
- package/src/generation/markers/GridActionRuleSet.js +10 -2
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +11 -0
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +20 -3
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +3 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +9 -2
- package/src/generation/markers/MarkerNode.d.ts +8 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +12 -5
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +2 -2
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +6 -4
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.d.ts.map +1 -1
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +1 -3
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +12 -11
- package/src/generation/markers/matcher/MarkerNodeMatcherAnd.js +2 -2
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformer.js +4 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts +5 -0
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +15 -0
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +1 -3
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +2 -4
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +1 -3
- package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
- package/src/generation/placement/GridCellPlacementRule.js +1 -3
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -10
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +6 -4
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.d.ts.map +1 -1
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +1 -3
- package/src/generation/rules/CellMatcher.d.ts +3 -1
- package/src/generation/rules/CellMatcher.d.ts.map +1 -1
- package/src/generation/rules/CellMatcher.js +3 -1
- package/src/generation/rules/CellMatcherFromFilter.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherFromFilter.js +1 -3
- package/src/generation/rules/CellMatcherLayerBitMaskTest.d.ts.map +1 -1
- package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -20
- package/src/generation/test_support/executeTaskTreeSync.d.ts +9 -0
- package/src/generation/test_support/executeTaskTreeSync.d.ts.map +1 -0
- package/src/generation/test_support/executeTaskTreeSync.js +78 -0
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +2 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.js +9 -6
- package/src/generation/theme/Theme.d.ts +1 -1
- package/src/generation/theme/Theme.d.ts.map +1 -1
- package/src/generation/theme/Theme.js +2 -2
- package/src/generation/theme/ThemeEngine.d.ts +3 -3
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.js +26 -16
- package/src/generation/theme/cell/CellProcessingRule.d.ts +3 -3
- package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRule.js +6 -10
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.js +2 -2
- package/src/view/common/ListView.js +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.d.ts.map +1 -1
- package/src/view/elements/BottomLeftResizeHandleView.js +13 -5
- package/src/core/font/FontAsset.d.ts.map +0 -1
- package/src/core/font/FontAssetLoader.d.ts.map +0 -1
- package/src/core/geom/3d/shape/util/shape_to_visual_entity.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +0 -1
- package/src/core/process/action/AsynchronousDelayAction.d.ts.map +0 -1
- package/src/engine/physics/computeInterceptPoint.d.ts.map +0 -1
- package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk.d.ts.map +0 -1
- package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +0 -1
- package/src/engine/physics/gjk/minkowski_support.d.ts.map +0 -1
- package/src/engine/physics/gjk/mpr.d.ts.map +0 -1
- package/src/engine/physics/integration/quat_integrate.d.ts.map +0 -1
- package/src/engine/physics/island/union_find.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/PosedShape.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +0 -1
- package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts +0 -21
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts.map +0 -1
- package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +0 -68
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts +0 -10
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts.map +0 -1
- package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.js +0 -17
- /package/src/{engine/physics → core/geom/3d}/gjk/NOTES.md +0 -0
- /package/src/{engine/physics → core/geom/3d}/gjk/gjk.d.ts +0 -0
- /package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.d.ts +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Vorticity confinement (Fedkiw, Stam, Jensen 2001) for a MAC velocity field.
|
|
5
|
+
*
|
|
6
|
+
* Three passes:
|
|
7
|
+
*
|
|
8
|
+
* 1. average the face velocities to cell centers (exact on the staggered
|
|
9
|
+
* layout: two faces per axis),
|
|
10
|
+
* 2. ω = ∇×v and |ω| at centers by central differences (interior cells;
|
|
11
|
+
* the boundary ring and solid cells get 0),
|
|
12
|
+
* 3. the confinement force f = ε·(N × ω), N = ∇|ω|/|∇|ω||, is computed per
|
|
13
|
+
* cell and scattered to the cell's six faces at half weight each —
|
|
14
|
+
* interior faces accumulate halves from both neighbours, recovering the
|
|
15
|
+
* face-centered average of the cell forces. Pinned faces (adjacent
|
|
16
|
+
* solid) receive nothing.
|
|
17
|
+
*
|
|
18
|
+
* See {@link v3_grid_apply_vorticity_confinement} for the scheme rationale
|
|
19
|
+
* and the energy note (confinement ADDS energy; pair with damping).
|
|
20
|
+
*
|
|
21
|
+
* @param {Float32Array} vel_u Mutated in place, (res_x+1)·res_y·res_z.
|
|
22
|
+
* @param {Float32Array} vel_v Mutated in place.
|
|
23
|
+
* @param {Float32Array} vel_w Mutated in place.
|
|
24
|
+
* @param {Uint8Array} face_solid_x Pinned-face masks.
|
|
25
|
+
* @param {Uint8Array} face_solid_y
|
|
26
|
+
* @param {Uint8Array} face_solid_z
|
|
27
|
+
* @param {Float32Array} scratch_cu Cell-count working buffers (callers may
|
|
28
|
+
* pass larger, e.g. face-sized, arrays). All mutated.
|
|
29
|
+
* @param {Float32Array} scratch_cv
|
|
30
|
+
* @param {Float32Array} scratch_cw
|
|
31
|
+
* @param {Float32Array} scratch_wx
|
|
32
|
+
* @param {Float32Array} scratch_wy
|
|
33
|
+
* @param {Float32Array} scratch_wz
|
|
34
|
+
* @param {Float32Array} scratch_wmag
|
|
35
|
+
* @param {number} res_x
|
|
36
|
+
* @param {number} res_y
|
|
37
|
+
* @param {number} res_z
|
|
38
|
+
* @param {number} epsilon_dt Confinement strength ε times the timestep.
|
|
39
|
+
* @param {Uint8Array} solid
|
|
40
|
+
*/
|
|
41
|
+
export function v3_mac_apply_vorticity_confinement(
|
|
42
|
+
vel_u, vel_v, vel_w,
|
|
43
|
+
face_solid_x, face_solid_y, face_solid_z,
|
|
44
|
+
scratch_cu, scratch_cv, scratch_cw,
|
|
45
|
+
scratch_wx, scratch_wy, scratch_wz, scratch_wmag,
|
|
46
|
+
res_x, res_y, res_z,
|
|
47
|
+
epsilon_dt,
|
|
48
|
+
solid
|
|
49
|
+
) {
|
|
50
|
+
const cell_count = res_x * res_y * res_z;
|
|
51
|
+
assert.greaterThanOrEqual(scratch_cu.length, cell_count, "scratch_cu covers grid");
|
|
52
|
+
assert.greaterThanOrEqual(scratch_wmag.length, cell_count, "scratch_wmag covers grid");
|
|
53
|
+
assert.isNumber(epsilon_dt, "epsilon_dt");
|
|
54
|
+
assert.greaterThanOrEqual(epsilon_dt, 0, "epsilon_dt");
|
|
55
|
+
|
|
56
|
+
if (epsilon_dt === 0) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const cell_slice = res_x * res_y;
|
|
61
|
+
const sx = res_x + 1;
|
|
62
|
+
const v_slice = res_x * (res_y + 1);
|
|
63
|
+
const last_x = res_x - 1;
|
|
64
|
+
const last_y = res_y - 1;
|
|
65
|
+
const last_z = res_z - 1;
|
|
66
|
+
|
|
67
|
+
// ─── pass 1: face → center averages ─────────────────────────────────────
|
|
68
|
+
for (let z = 0; z < res_z; z++) {
|
|
69
|
+
const c_z = z * cell_slice;
|
|
70
|
+
const u_z = z * sx * res_y;
|
|
71
|
+
const v_z = z * v_slice;
|
|
72
|
+
for (let y = 0; y < res_y; y++) {
|
|
73
|
+
const c_y = c_z + y * res_x;
|
|
74
|
+
const u_y = u_z + y * sx;
|
|
75
|
+
const v_lo = v_z + y * res_x;
|
|
76
|
+
const w_lo = c_z + y * res_x;
|
|
77
|
+
for (let x = 0; x < res_x; x++) {
|
|
78
|
+
const c = c_y + x;
|
|
79
|
+
if (solid[c] !== 0) {
|
|
80
|
+
scratch_cu[c] = 0;
|
|
81
|
+
scratch_cv[c] = 0;
|
|
82
|
+
scratch_cw[c] = 0;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
scratch_cu[c] = 0.5 * (vel_u[u_y + x] + vel_u[u_y + x + 1]);
|
|
86
|
+
scratch_cv[c] = 0.5 * (vel_v[v_lo + x] + vel_v[v_lo + res_x + x]);
|
|
87
|
+
scratch_cw[c] = 0.5 * (vel_w[w_lo + x] + vel_w[w_lo + cell_slice + x]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ─── pass 2: ω = ∇×v and |ω| at centers ─────────────────────────────────
|
|
93
|
+
scratch_wx.fill(0, 0, cell_count);
|
|
94
|
+
scratch_wy.fill(0, 0, cell_count);
|
|
95
|
+
scratch_wz.fill(0, 0, cell_count);
|
|
96
|
+
scratch_wmag.fill(0, 0, cell_count);
|
|
97
|
+
|
|
98
|
+
for (let z = 1; z < last_z; z++) {
|
|
99
|
+
const c_z = z * cell_slice;
|
|
100
|
+
for (let y = 1; y < last_y; y++) {
|
|
101
|
+
const c_y = c_z + y * res_x;
|
|
102
|
+
for (let x = 1; x < last_x; x++) {
|
|
103
|
+
const c = c_y + x;
|
|
104
|
+
if (solid[c] !== 0) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const wx = 0.5 * ((scratch_cw[c + res_x] - scratch_cw[c - res_x]) - (scratch_cv[c + cell_slice] - scratch_cv[c - cell_slice]));
|
|
108
|
+
const wy = 0.5 * ((scratch_cu[c + cell_slice] - scratch_cu[c - cell_slice]) - (scratch_cw[c + 1] - scratch_cw[c - 1]));
|
|
109
|
+
const wz = 0.5 * ((scratch_cv[c + 1] - scratch_cv[c - 1]) - (scratch_cu[c + res_x] - scratch_cu[c - res_x]));
|
|
110
|
+
scratch_wx[c] = wx;
|
|
111
|
+
scratch_wy[c] = wy;
|
|
112
|
+
scratch_wz[c] = wz;
|
|
113
|
+
scratch_wmag[c] = Math.sqrt(wx * wx + wy * wy + wz * wz);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ─── pass 3: f = ε·(N × ω) per cell, scattered to faces ─────────────────
|
|
119
|
+
const magnitude_floor = 1e-10;
|
|
120
|
+
|
|
121
|
+
for (let z = 1; z < last_z; z++) {
|
|
122
|
+
const c_z = z * cell_slice;
|
|
123
|
+
const u_z = z * sx * res_y;
|
|
124
|
+
const v_z = z * v_slice;
|
|
125
|
+
for (let y = 1; y < last_y; y++) {
|
|
126
|
+
const c_y = c_z + y * res_x;
|
|
127
|
+
const u_y = u_z + y * sx;
|
|
128
|
+
const v_lo = v_z + y * res_x;
|
|
129
|
+
const w_lo = c_z + y * res_x;
|
|
130
|
+
for (let x = 1; x < last_x; x++) {
|
|
131
|
+
const c = c_y + x;
|
|
132
|
+
if (solid[c] !== 0) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const gx = 0.5 * (scratch_wmag[c + 1] - scratch_wmag[c - 1]);
|
|
137
|
+
const gy = 0.5 * (scratch_wmag[c + res_x] - scratch_wmag[c - res_x]);
|
|
138
|
+
const gz = 0.5 * (scratch_wmag[c + cell_slice] - scratch_wmag[c - cell_slice]);
|
|
139
|
+
|
|
140
|
+
const g_len = Math.sqrt(gx * gx + gy * gy + gz * gz);
|
|
141
|
+
if (g_len < magnitude_floor) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const s = epsilon_dt / g_len;
|
|
145
|
+
|
|
146
|
+
const wx = scratch_wx[c];
|
|
147
|
+
const wy = scratch_wy[c];
|
|
148
|
+
const wz = scratch_wz[c];
|
|
149
|
+
const fx = 0.5 * s * (gy * wz - gz * wy);
|
|
150
|
+
const fy = 0.5 * s * (gz * wx - gx * wz);
|
|
151
|
+
const fz = 0.5 * s * (gx * wy - gy * wx);
|
|
152
|
+
|
|
153
|
+
const u_l = u_y + x;
|
|
154
|
+
if (face_solid_x[u_l] === 0) vel_u[u_l] += fx;
|
|
155
|
+
if (face_solid_x[u_l + 1] === 0) vel_u[u_l + 1] += fx;
|
|
156
|
+
const v_b = v_lo + x;
|
|
157
|
+
if (face_solid_y[v_b] === 0) vel_v[v_b] += fy;
|
|
158
|
+
if (face_solid_y[v_b + res_x] === 0) vel_v[v_b + res_x] += fy;
|
|
159
|
+
const w_n = w_lo + x;
|
|
160
|
+
if (face_solid_z[w_n] === 0) vel_w[w_n] += fz;
|
|
161
|
+
if (face_solid_z[w_n + cell_slice] === 0) vel_w[w_n + cell_slice] += fz;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clip a semi-Lagrangian trace segment against solid cells.
|
|
3
|
+
*
|
|
4
|
+
* Back-traces (and MacCormack's forward probes) are straight segments from a
|
|
5
|
+
* known-fluid start position toward an end position computed from the carrier
|
|
6
|
+
* velocity. When the end lands inside a solid cell, sampling there reads
|
|
7
|
+
* frozen in-wall values — the source of scalar bleed through walls and of
|
|
8
|
+
* velocity tunnelling into disconnected pockets. This helper walks the
|
|
9
|
+
* segment back by bisection until the end point is in fluid again.
|
|
10
|
+
*
|
|
11
|
+
* Positions are in CELL-CENTER coordinates: cell `(i, j, k)` spans
|
|
12
|
+
* `[i−0.5, i+0.5)` per axis, so the cell containing a point is `round(p)`,
|
|
13
|
+
* clamped to the grid (consistent with the samplers' clamped reads —
|
|
14
|
+
* out-of-grid points belong to the nearest edge cell).
|
|
15
|
+
*
|
|
16
|
+
* Four bisection iterations resolve the boundary to 1/16 of the segment —
|
|
17
|
+
* sub-cell precision at production CFL (segments span ≲ 1.5 cells). A
|
|
18
|
+
* re-entrant segment (exits fluid, crosses a thin wall, re-enters) clips at
|
|
19
|
+
* one of its boundaries rather than the first — acceptable at these segment
|
|
20
|
+
* lengths, and strictly better than sampling inside the wall.
|
|
21
|
+
*
|
|
22
|
+
* The result is written into `out[0..2]`. If the end point is already in
|
|
23
|
+
* fluid the end coordinates are written unchanged.
|
|
24
|
+
*
|
|
25
|
+
* PERFORMANCE CONTRACT: this function contains a loop, which keeps V8 from
|
|
26
|
+
* inlining it — a per-face call costs several times the entire surrounding
|
|
27
|
+
* advection body (measured 8.6× on the SL kernel). Hot kernels must inline
|
|
28
|
+
* the "is the end cell fluid?" test themselves (the `(p + 0.5) | 0` + clamp
|
|
29
|
+
* + one byte load below) and call this helper only on the rare wall hit.
|
|
30
|
+
*
|
|
31
|
+
* @param {Float32Array|number[]} out length-3 destination for the clipped end.
|
|
32
|
+
* @param {Uint8Array} solid Cell-centered solid flags.
|
|
33
|
+
* @param {number} res_x
|
|
34
|
+
* @param {number} res_y
|
|
35
|
+
* @param {number} res_z
|
|
36
|
+
* @param {number} start_x Known-fluid segment start (cell-center coords).
|
|
37
|
+
* @param {number} start_y
|
|
38
|
+
* @param {number} start_z
|
|
39
|
+
* @param {number} end_x Desired segment end.
|
|
40
|
+
* @param {number} end_y
|
|
41
|
+
* @param {number} end_z
|
|
42
|
+
*/
|
|
43
|
+
export function v3_mac_clip_trace(out: Float32Array | number[], solid: Uint8Array, res_x: number, res_y: number, res_z: number, start_x: number, start_y: number, start_z: number, end_x: number, end_y: number, end_z: number): void;
|
|
44
|
+
//# sourceMappingURL=v3_mac_clip_trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_mac_clip_trace.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_clip_trace.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,uCAZW,YAAY,GAAC,MAAM,EAAE,SACrB,UAAU,SACV,MAAM,SACN,MAAM,SACN,MAAM,WACN,MAAM,WACN,MAAM,WACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,QA4BhB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clip a semi-Lagrangian trace segment against solid cells.
|
|
3
|
+
*
|
|
4
|
+
* Back-traces (and MacCormack's forward probes) are straight segments from a
|
|
5
|
+
* known-fluid start position toward an end position computed from the carrier
|
|
6
|
+
* velocity. When the end lands inside a solid cell, sampling there reads
|
|
7
|
+
* frozen in-wall values — the source of scalar bleed through walls and of
|
|
8
|
+
* velocity tunnelling into disconnected pockets. This helper walks the
|
|
9
|
+
* segment back by bisection until the end point is in fluid again.
|
|
10
|
+
*
|
|
11
|
+
* Positions are in CELL-CENTER coordinates: cell `(i, j, k)` spans
|
|
12
|
+
* `[i−0.5, i+0.5)` per axis, so the cell containing a point is `round(p)`,
|
|
13
|
+
* clamped to the grid (consistent with the samplers' clamped reads —
|
|
14
|
+
* out-of-grid points belong to the nearest edge cell).
|
|
15
|
+
*
|
|
16
|
+
* Four bisection iterations resolve the boundary to 1/16 of the segment —
|
|
17
|
+
* sub-cell precision at production CFL (segments span ≲ 1.5 cells). A
|
|
18
|
+
* re-entrant segment (exits fluid, crosses a thin wall, re-enters) clips at
|
|
19
|
+
* one of its boundaries rather than the first — acceptable at these segment
|
|
20
|
+
* lengths, and strictly better than sampling inside the wall.
|
|
21
|
+
*
|
|
22
|
+
* The result is written into `out[0..2]`. If the end point is already in
|
|
23
|
+
* fluid the end coordinates are written unchanged.
|
|
24
|
+
*
|
|
25
|
+
* PERFORMANCE CONTRACT: this function contains a loop, which keeps V8 from
|
|
26
|
+
* inlining it — a per-face call costs several times the entire surrounding
|
|
27
|
+
* advection body (measured 8.6× on the SL kernel). Hot kernels must inline
|
|
28
|
+
* the "is the end cell fluid?" test themselves (the `(p + 0.5) | 0` + clamp
|
|
29
|
+
* + one byte load below) and call this helper only on the rare wall hit.
|
|
30
|
+
*
|
|
31
|
+
* @param {Float32Array|number[]} out length-3 destination for the clipped end.
|
|
32
|
+
* @param {Uint8Array} solid Cell-centered solid flags.
|
|
33
|
+
* @param {number} res_x
|
|
34
|
+
* @param {number} res_y
|
|
35
|
+
* @param {number} res_z
|
|
36
|
+
* @param {number} start_x Known-fluid segment start (cell-center coords).
|
|
37
|
+
* @param {number} start_y
|
|
38
|
+
* @param {number} start_z
|
|
39
|
+
* @param {number} end_x Desired segment end.
|
|
40
|
+
* @param {number} end_y
|
|
41
|
+
* @param {number} end_z
|
|
42
|
+
*/
|
|
43
|
+
export function v3_mac_clip_trace(out, solid, res_x, res_y, res_z, start_x, start_y, start_z, end_x, end_y, end_z) {
|
|
44
|
+
if (!point_in_solid(solid, res_x, res_y, res_z, end_x, end_y, end_z)) {
|
|
45
|
+
out[0] = end_x;
|
|
46
|
+
out[1] = end_y;
|
|
47
|
+
out[2] = end_z;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Bisect t ∈ [t_fluid, t_solid] on p(t) = start + t·(end − start).
|
|
52
|
+
let t_fluid = 0;
|
|
53
|
+
let t_solid = 1;
|
|
54
|
+
for (let i = 0; i < 4; i++) {
|
|
55
|
+
const t = 0.5 * (t_fluid + t_solid);
|
|
56
|
+
const px = start_x + t * (end_x - start_x);
|
|
57
|
+
const py = start_y + t * (end_y - start_y);
|
|
58
|
+
const pz = start_z + t * (end_z - start_z);
|
|
59
|
+
if (point_in_solid(solid, res_x, res_y, res_z, px, py, pz)) {
|
|
60
|
+
t_solid = t;
|
|
61
|
+
} else {
|
|
62
|
+
t_fluid = t;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
out[0] = start_x + t_fluid * (end_x - start_x);
|
|
67
|
+
out[1] = start_y + t_fluid * (end_y - start_y);
|
|
68
|
+
out[2] = start_z + t_fluid * (end_z - start_z);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Whether the cell containing the point (clamped to the grid) is solid.
|
|
73
|
+
*
|
|
74
|
+
* @param {Uint8Array} solid
|
|
75
|
+
* @param {number} res_x
|
|
76
|
+
* @param {number} res_y
|
|
77
|
+
* @param {number} res_z
|
|
78
|
+
* @param {number} px cell-center coordinates
|
|
79
|
+
* @param {number} py
|
|
80
|
+
* @param {number} pz
|
|
81
|
+
* @return {boolean}
|
|
82
|
+
*/
|
|
83
|
+
function point_in_solid(solid, res_x, res_y, res_z, px, py, pz) {
|
|
84
|
+
// (p + 0.5) | 0 is round-half-up for p ≥ −0.5 and truncates toward zero
|
|
85
|
+
// below that — the subsequent clamp makes both behaviours land on the
|
|
86
|
+
// same edge cell, so the result matches Math.round + clamp everywhere
|
|
87
|
+
// it matters, at a fraction of the cost.
|
|
88
|
+
let x = (px + 0.5) | 0;
|
|
89
|
+
let y = (py + 0.5) | 0;
|
|
90
|
+
let z = (pz + 0.5) | 0;
|
|
91
|
+
if (x < 0) x = 0; else if (x >= res_x) x = res_x - 1;
|
|
92
|
+
if (y < 0) y = 0; else if (y >= res_y) y = res_y - 1;
|
|
93
|
+
if (z < 0) z = 0; else if (z >= res_z) z = res_z - 1;
|
|
94
|
+
return solid[z * res_x * res_y + y * res_x + x] !== 0;
|
|
95
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Divergence of a MAC (staggered, face-centered) velocity field into a
|
|
3
|
+
* cell-centered scalar field:
|
|
4
|
+
*
|
|
5
|
+
* div(c) = (u[x+1] − u[x]) + (v[y+1] − v[y]) + (w[z+1] − w[z]) (h = 1)
|
|
6
|
+
*
|
|
7
|
+
* The defining advantage over the collocated central-difference form: this
|
|
8
|
+
* divergence is the EXACT adjoint of {@link v3_mac_subtract_pressure_gradient}
|
|
9
|
+
* composed with the 7-point Laplacian in {@link v3_grid_solve_pressure} —
|
|
10
|
+
* an exact pressure solve drives this divergence to exactly zero. No
|
|
11
|
+
* operator-mismatch floor, no projection-invisible checkerboard mode, no
|
|
12
|
+
* boundary special cases (boundary faces exist and carry real outflow).
|
|
13
|
+
*
|
|
14
|
+
* PINNED faces (either adjacent cell solid) are read at face value — their
|
|
15
|
+
* stored velocity IS the wall's normal velocity (see
|
|
16
|
+
* {@link v3_mac_compute_face_solid}): zero for static solids, the wall's
|
|
17
|
+
* speed for moving ones. A moving wall therefore appears here as divergence
|
|
18
|
+
* in the adjacent fluid cells, and the pressure solve turns that into the
|
|
19
|
+
* push/suction the wall exerts — the standard MAC moving-boundary mechanism.
|
|
20
|
+
* Stray writes into pinned faces cannot masquerade as wall motion: the face
|
|
21
|
+
* mask rebuild zeroes velocities on every unpinned→pinned transition, and
|
|
22
|
+
* all transport/effector kernels skip pinned faces.
|
|
23
|
+
*
|
|
24
|
+
* Solid cells get divergence 0 — they are not degrees of freedom.
|
|
25
|
+
*
|
|
26
|
+
* Face grid layout: see {@link v3_mac_compute_face_solid}.
|
|
27
|
+
*
|
|
28
|
+
* @param {Float32Array} divergence Destination, cell-centered. Mutated.
|
|
29
|
+
* @param {Float32Array} vel_u x-face velocities, (res_x+1)·res_y·res_z.
|
|
30
|
+
* @param {Float32Array} vel_v y-face velocities, res_x·(res_y+1)·res_z.
|
|
31
|
+
* @param {Float32Array} vel_w z-face velocities, res_x·res_y·(res_z+1).
|
|
32
|
+
* @param {number} res_x
|
|
33
|
+
* @param {number} res_y
|
|
34
|
+
* @param {number} res_z
|
|
35
|
+
* @param {Uint8Array} solid Cell-centered solid flags.
|
|
36
|
+
*/
|
|
37
|
+
export function v3_mac_compute_divergence(divergence: Float32Array, vel_u: Float32Array, vel_v: Float32Array, vel_w: Float32Array, res_x: number, res_y: number, res_z: number, solid: Uint8Array): void;
|
|
38
|
+
//# sourceMappingURL=v3_mac_compute_divergence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_mac_compute_divergence.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_compute_divergence.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,sDATW,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,SACN,UAAU,QAwCpB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Divergence of a MAC (staggered, face-centered) velocity field into a
|
|
5
|
+
* cell-centered scalar field:
|
|
6
|
+
*
|
|
7
|
+
* div(c) = (u[x+1] − u[x]) + (v[y+1] − v[y]) + (w[z+1] − w[z]) (h = 1)
|
|
8
|
+
*
|
|
9
|
+
* The defining advantage over the collocated central-difference form: this
|
|
10
|
+
* divergence is the EXACT adjoint of {@link v3_mac_subtract_pressure_gradient}
|
|
11
|
+
* composed with the 7-point Laplacian in {@link v3_grid_solve_pressure} —
|
|
12
|
+
* an exact pressure solve drives this divergence to exactly zero. No
|
|
13
|
+
* operator-mismatch floor, no projection-invisible checkerboard mode, no
|
|
14
|
+
* boundary special cases (boundary faces exist and carry real outflow).
|
|
15
|
+
*
|
|
16
|
+
* PINNED faces (either adjacent cell solid) are read at face value — their
|
|
17
|
+
* stored velocity IS the wall's normal velocity (see
|
|
18
|
+
* {@link v3_mac_compute_face_solid}): zero for static solids, the wall's
|
|
19
|
+
* speed for moving ones. A moving wall therefore appears here as divergence
|
|
20
|
+
* in the adjacent fluid cells, and the pressure solve turns that into the
|
|
21
|
+
* push/suction the wall exerts — the standard MAC moving-boundary mechanism.
|
|
22
|
+
* Stray writes into pinned faces cannot masquerade as wall motion: the face
|
|
23
|
+
* mask rebuild zeroes velocities on every unpinned→pinned transition, and
|
|
24
|
+
* all transport/effector kernels skip pinned faces.
|
|
25
|
+
*
|
|
26
|
+
* Solid cells get divergence 0 — they are not degrees of freedom.
|
|
27
|
+
*
|
|
28
|
+
* Face grid layout: see {@link v3_mac_compute_face_solid}.
|
|
29
|
+
*
|
|
30
|
+
* @param {Float32Array} divergence Destination, cell-centered. Mutated.
|
|
31
|
+
* @param {Float32Array} vel_u x-face velocities, (res_x+1)·res_y·res_z.
|
|
32
|
+
* @param {Float32Array} vel_v y-face velocities, res_x·(res_y+1)·res_z.
|
|
33
|
+
* @param {Float32Array} vel_w z-face velocities, res_x·res_y·(res_z+1).
|
|
34
|
+
* @param {number} res_x
|
|
35
|
+
* @param {number} res_y
|
|
36
|
+
* @param {number} res_z
|
|
37
|
+
* @param {Uint8Array} solid Cell-centered solid flags.
|
|
38
|
+
*/
|
|
39
|
+
export function v3_mac_compute_divergence(divergence, vel_u, vel_v, vel_w, res_x, res_y, res_z, solid) {
|
|
40
|
+
const cell_count = res_x * res_y * res_z;
|
|
41
|
+
assert.greaterThanOrEqual(divergence.length, cell_count, "divergence covers grid");
|
|
42
|
+
assert.greaterThanOrEqual(vel_u.length, (res_x + 1) * res_y * res_z, "vel_u covers grid");
|
|
43
|
+
assert.greaterThanOrEqual(vel_v.length, res_x * (res_y + 1) * res_z, "vel_v covers grid");
|
|
44
|
+
assert.greaterThanOrEqual(vel_w.length, res_x * res_y * (res_z + 1), "vel_w covers grid");
|
|
45
|
+
assert.greaterThanOrEqual(solid.length, cell_count, "solid covers grid");
|
|
46
|
+
|
|
47
|
+
const cell_slice = res_x * res_y;
|
|
48
|
+
const sx = res_x + 1;
|
|
49
|
+
|
|
50
|
+
for (let z = 0; z < res_z; z++) {
|
|
51
|
+
const c_z = z * cell_slice;
|
|
52
|
+
const u_z = z * sx * res_y;
|
|
53
|
+
const v_z = z * res_x * (res_y + 1);
|
|
54
|
+
|
|
55
|
+
for (let y = 0; y < res_y; y++) {
|
|
56
|
+
const c_y = c_z + y * res_x;
|
|
57
|
+
const u_y = u_z + y * sx;
|
|
58
|
+
const v_lo = v_z + y * res_x;
|
|
59
|
+
const v_hi = v_lo + res_x;
|
|
60
|
+
const w_lo = c_z + y * res_x; // z-face slice size == cell slice
|
|
61
|
+
const w_hi = w_lo + cell_slice;
|
|
62
|
+
|
|
63
|
+
for (let x = 0; x < res_x; x++) {
|
|
64
|
+
const c = c_y + x;
|
|
65
|
+
|
|
66
|
+
if (solid[c] !== 0) {
|
|
67
|
+
divergence[c] = 0;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
divergence[c] = (vel_u[u_y + x + 1] - vel_u[u_y + x])
|
|
72
|
+
+ (vel_v[v_hi + x] - vel_v[v_lo + x])
|
|
73
|
+
+ (vel_w[w_hi + x] - vel_w[w_lo + x]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bake the per-face "pinned" masks for a MAC (staggered) velocity layout,
|
|
3
|
+
* zeroing the velocity of faces that just BECAME pinned.
|
|
4
|
+
*
|
|
5
|
+
* A face is PINNED (`1`) when either adjacent cell is solid: its normal
|
|
6
|
+
* velocity is a BOUNDARY CONDITION, not a degree of freedom. The stored value
|
|
7
|
+
* of a pinned face is the wall's normal velocity — `0` for static solids,
|
|
8
|
+
* non-zero for moving ones ({@link FluidObstacleSystem} writes those). Every
|
|
9
|
+
* fluid kernel honours the contract: the divergence reads pinned values (a
|
|
10
|
+
* moving wall pushes fluid), the pressure-gradient subtraction and advection
|
|
11
|
+
* leave them untouched, effectors and damping skip them.
|
|
12
|
+
*
|
|
13
|
+
* Transition rules, applied per face as the masks are rebuilt:
|
|
14
|
+
*
|
|
15
|
+
* - unpinned → pinned: the face velocity is ZEROED — the static-wall
|
|
16
|
+
* default, and the guard that keeps stale fluid velocity from
|
|
17
|
+
* masquerading as wall motion. A solid author who wants a moving wall
|
|
18
|
+
* writes the face velocity AFTER this recompute (the obstacle system
|
|
19
|
+
* does exactly that).
|
|
20
|
+
* - pinned → pinned: the value is PRESERVED — boundary conditions written
|
|
21
|
+
* by the solid's owner survive subsequent recomputes.
|
|
22
|
+
* - pinned → unpinned: the value is preserved too — fluid uncovered by a
|
|
23
|
+
* retreating wall inherits the wall's velocity, which is the physically
|
|
24
|
+
* sensible seed (and free wake generation).
|
|
25
|
+
*
|
|
26
|
+
* Domain-edge faces (between a cell and the outside) are NOT pinned — the
|
|
27
|
+
* domain boundary is open (ghost pressure 0; see
|
|
28
|
+
* {@link v3_grid_compute_solid_neighbour_mask}) and flow vents through it.
|
|
29
|
+
*
|
|
30
|
+
* Face grids and their indexing:
|
|
31
|
+
*
|
|
32
|
+
* face_x : (res_x+1) × res_y × res_z, index z·(res_x+1)·res_y + y·(res_x+1) + x
|
|
33
|
+
* face (x, y, z) sits between cells (x−1, y, z) and (x, y, z)
|
|
34
|
+
* face_y : res_x × (res_y+1) × res_z, index z·res_x·(res_y+1) + y·res_x + x
|
|
35
|
+
* face_z : res_x × res_y × (res_z+1), index z·res_x·res_y + y·res_x + x
|
|
36
|
+
*
|
|
37
|
+
* O(faces) — two byte-reads per interior face plus the in-place transition
|
|
38
|
+
* comparison. Mask outputs are fully replaced.
|
|
39
|
+
*
|
|
40
|
+
* @param {Uint8Array} face_x Pin mask, length ≥ (res_x+1)·res_y·res_z. Mutated.
|
|
41
|
+
* @param {Uint8Array} face_y Pin mask, length ≥ res_x·(res_y+1)·res_z. Mutated.
|
|
42
|
+
* @param {Uint8Array} face_z Pin mask, length ≥ res_x·res_y·(res_z+1). Mutated.
|
|
43
|
+
* @param {Float32Array} vel_u x-face velocities — zeroed on 0→1 pin transition.
|
|
44
|
+
* @param {Float32Array} vel_v y-face velocities.
|
|
45
|
+
* @param {Float32Array} vel_w z-face velocities.
|
|
46
|
+
* @param {Uint8Array} solid Cell-centered solid flags. Non-zero = solid.
|
|
47
|
+
* @param {number} res_x
|
|
48
|
+
* @param {number} res_y
|
|
49
|
+
* @param {number} res_z
|
|
50
|
+
*/
|
|
51
|
+
export function v3_mac_compute_face_solid(face_x: Uint8Array, face_y: Uint8Array, face_z: Uint8Array, vel_u: Float32Array, vel_v: Float32Array, vel_w: Float32Array, solid: Uint8Array, res_x: number, res_y: number, res_z: number): void;
|
|
52
|
+
//# sourceMappingURL=v3_mac_compute_face_solid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_mac_compute_face_solid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_compute_face_solid.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,kDAXW,UAAU,UACV,UAAU,UACV,UAAU,SACV,YAAY,SACZ,YAAY,SACZ,YAAY,SACZ,UAAU,SACV,MAAM,SACN,MAAM,SACN,MAAM,QAgFhB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Bake the per-face "pinned" masks for a MAC (staggered) velocity layout,
|
|
5
|
+
* zeroing the velocity of faces that just BECAME pinned.
|
|
6
|
+
*
|
|
7
|
+
* A face is PINNED (`1`) when either adjacent cell is solid: its normal
|
|
8
|
+
* velocity is a BOUNDARY CONDITION, not a degree of freedom. The stored value
|
|
9
|
+
* of a pinned face is the wall's normal velocity — `0` for static solids,
|
|
10
|
+
* non-zero for moving ones ({@link FluidObstacleSystem} writes those). Every
|
|
11
|
+
* fluid kernel honours the contract: the divergence reads pinned values (a
|
|
12
|
+
* moving wall pushes fluid), the pressure-gradient subtraction and advection
|
|
13
|
+
* leave them untouched, effectors and damping skip them.
|
|
14
|
+
*
|
|
15
|
+
* Transition rules, applied per face as the masks are rebuilt:
|
|
16
|
+
*
|
|
17
|
+
* - unpinned → pinned: the face velocity is ZEROED — the static-wall
|
|
18
|
+
* default, and the guard that keeps stale fluid velocity from
|
|
19
|
+
* masquerading as wall motion. A solid author who wants a moving wall
|
|
20
|
+
* writes the face velocity AFTER this recompute (the obstacle system
|
|
21
|
+
* does exactly that).
|
|
22
|
+
* - pinned → pinned: the value is PRESERVED — boundary conditions written
|
|
23
|
+
* by the solid's owner survive subsequent recomputes.
|
|
24
|
+
* - pinned → unpinned: the value is preserved too — fluid uncovered by a
|
|
25
|
+
* retreating wall inherits the wall's velocity, which is the physically
|
|
26
|
+
* sensible seed (and free wake generation).
|
|
27
|
+
*
|
|
28
|
+
* Domain-edge faces (between a cell and the outside) are NOT pinned — the
|
|
29
|
+
* domain boundary is open (ghost pressure 0; see
|
|
30
|
+
* {@link v3_grid_compute_solid_neighbour_mask}) and flow vents through it.
|
|
31
|
+
*
|
|
32
|
+
* Face grids and their indexing:
|
|
33
|
+
*
|
|
34
|
+
* face_x : (res_x+1) × res_y × res_z, index z·(res_x+1)·res_y + y·(res_x+1) + x
|
|
35
|
+
* face (x, y, z) sits between cells (x−1, y, z) and (x, y, z)
|
|
36
|
+
* face_y : res_x × (res_y+1) × res_z, index z·res_x·(res_y+1) + y·res_x + x
|
|
37
|
+
* face_z : res_x × res_y × (res_z+1), index z·res_x·res_y + y·res_x + x
|
|
38
|
+
*
|
|
39
|
+
* O(faces) — two byte-reads per interior face plus the in-place transition
|
|
40
|
+
* comparison. Mask outputs are fully replaced.
|
|
41
|
+
*
|
|
42
|
+
* @param {Uint8Array} face_x Pin mask, length ≥ (res_x+1)·res_y·res_z. Mutated.
|
|
43
|
+
* @param {Uint8Array} face_y Pin mask, length ≥ res_x·(res_y+1)·res_z. Mutated.
|
|
44
|
+
* @param {Uint8Array} face_z Pin mask, length ≥ res_x·res_y·(res_z+1). Mutated.
|
|
45
|
+
* @param {Float32Array} vel_u x-face velocities — zeroed on 0→1 pin transition.
|
|
46
|
+
* @param {Float32Array} vel_v y-face velocities.
|
|
47
|
+
* @param {Float32Array} vel_w z-face velocities.
|
|
48
|
+
* @param {Uint8Array} solid Cell-centered solid flags. Non-zero = solid.
|
|
49
|
+
* @param {number} res_x
|
|
50
|
+
* @param {number} res_y
|
|
51
|
+
* @param {number} res_z
|
|
52
|
+
*/
|
|
53
|
+
export function v3_mac_compute_face_solid(face_x, face_y, face_z, vel_u, vel_v, vel_w, solid, res_x, res_y, res_z) {
|
|
54
|
+
const cells = res_x * res_y * res_z;
|
|
55
|
+
assert.greaterThanOrEqual(face_x.length, (res_x + 1) * res_y * res_z, "face_x covers grid");
|
|
56
|
+
assert.greaterThanOrEqual(face_y.length, res_x * (res_y + 1) * res_z, "face_y covers grid");
|
|
57
|
+
assert.greaterThanOrEqual(face_z.length, res_x * res_y * (res_z + 1), "face_z covers grid");
|
|
58
|
+
assert.greaterThanOrEqual(vel_u.length, (res_x + 1) * res_y * res_z, "vel_u covers grid");
|
|
59
|
+
assert.greaterThanOrEqual(vel_v.length, res_x * (res_y + 1) * res_z, "vel_v covers grid");
|
|
60
|
+
assert.greaterThanOrEqual(vel_w.length, res_x * res_y * (res_z + 1), "vel_w covers grid");
|
|
61
|
+
assert.greaterThanOrEqual(solid.length, cells, "solid covers grid");
|
|
62
|
+
|
|
63
|
+
const cell_slice = res_x * res_y;
|
|
64
|
+
|
|
65
|
+
// x-faces.
|
|
66
|
+
const sx = res_x + 1;
|
|
67
|
+
for (let z = 0; z < res_z; z++) {
|
|
68
|
+
const cz = z * cell_slice;
|
|
69
|
+
const fz = z * sx * res_y;
|
|
70
|
+
for (let y = 0; y < res_y; y++) {
|
|
71
|
+
const cy = cz + y * res_x;
|
|
72
|
+
const fy = fz + y * sx;
|
|
73
|
+
// Domain-edge faces are open, never pinned.
|
|
74
|
+
face_x[fy] = 0;
|
|
75
|
+
face_x[fy + res_x] = 0;
|
|
76
|
+
for (let x = 1; x < res_x; x++) {
|
|
77
|
+
const f = fy + x;
|
|
78
|
+
const pinned = (solid[cy + x - 1] !== 0 || solid[cy + x] !== 0) ? 1 : 0;
|
|
79
|
+
if (pinned === 1 && face_x[f] === 0) {
|
|
80
|
+
vel_u[f] = 0;
|
|
81
|
+
}
|
|
82
|
+
face_x[f] = pinned;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// y-faces.
|
|
88
|
+
for (let z = 0; z < res_z; z++) {
|
|
89
|
+
const cz = z * cell_slice;
|
|
90
|
+
const fz = z * res_x * (res_y + 1);
|
|
91
|
+
for (let x = 0; x < res_x; x++) {
|
|
92
|
+
face_y[fz + x] = 0;
|
|
93
|
+
face_y[fz + res_y * res_x + x] = 0;
|
|
94
|
+
}
|
|
95
|
+
for (let y = 1; y < res_y; y++) {
|
|
96
|
+
const cy_below = cz + (y - 1) * res_x;
|
|
97
|
+
const cy_above = cz + y * res_x;
|
|
98
|
+
const fy = fz + y * res_x;
|
|
99
|
+
for (let x = 0; x < res_x; x++) {
|
|
100
|
+
const f = fy + x;
|
|
101
|
+
const pinned = (solid[cy_below + x] !== 0 || solid[cy_above + x] !== 0) ? 1 : 0;
|
|
102
|
+
if (pinned === 1 && face_y[f] === 0) {
|
|
103
|
+
vel_v[f] = 0;
|
|
104
|
+
}
|
|
105
|
+
face_y[f] = pinned;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// z-faces (face slice size equals the cell slice size).
|
|
111
|
+
for (let y = 0; y < res_y; y++) {
|
|
112
|
+
const row = y * res_x;
|
|
113
|
+
for (let x = 0; x < res_x; x++) {
|
|
114
|
+
face_z[row + x] = 0;
|
|
115
|
+
face_z[res_z * cell_slice + row + x] = 0;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
for (let z = 1; z < res_z; z++) {
|
|
119
|
+
const c_below = (z - 1) * cell_slice;
|
|
120
|
+
const c_above = z * cell_slice;
|
|
121
|
+
const fz = z * cell_slice;
|
|
122
|
+
for (let i = 0; i < cell_slice; i++) {
|
|
123
|
+
const f = fz + i;
|
|
124
|
+
const pinned = (solid[c_below + i] !== 0 || solid[c_above + i] !== 0) ? 1 : 0;
|
|
125
|
+
if (pinned === 1 && face_z[f] === 0) {
|
|
126
|
+
vel_w[f] = 0;
|
|
127
|
+
}
|
|
128
|
+
face_z[f] = pinned;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subtract the pressure gradient from a MAC velocity field in place — the
|
|
3
|
+
* face-exact counterpart of the collocated
|
|
4
|
+
* {@link v3_grid_subtract_pressure_gradient}:
|
|
5
|
+
*
|
|
6
|
+
* u(face) −= p(right cell) − p(left cell) (h = 1)
|
|
7
|
+
*
|
|
8
|
+
* Per face:
|
|
9
|
+
* - both adjacent cells fluid: subtract the pressure difference.
|
|
10
|
+
* - PINNED face (either adjacent cell solid): SKIPPED — its stored value is
|
|
11
|
+
* the wall's normal-velocity boundary condition (0 for static solids,
|
|
12
|
+
* the wall speed for movers; see {@link v3_mac_compute_face_solid}) and
|
|
13
|
+
* must survive the projection. Stray deposits are prevented upstream:
|
|
14
|
+
* the mask rebuild zeroes faces on every unpinned→pinned transition and
|
|
15
|
+
* every transport/effector kernel skips pinned faces.
|
|
16
|
+
* - domain-edge face (open boundary): the missing cell is the Dirichlet
|
|
17
|
+
* ghost p = 0, so interior pressure vents flow out through the face.
|
|
18
|
+
*
|
|
19
|
+
* Together with {@link v3_mac_compute_divergence} and the unchanged 7-point
|
|
20
|
+
* solve this forms an exact discrete Helmholtz projection: solve error aside,
|
|
21
|
+
* post-projection divergence is zero — including immediately beside walls,
|
|
22
|
+
* which the collocated form could only approximate.
|
|
23
|
+
*
|
|
24
|
+
* Face grid layout: see {@link v3_mac_compute_face_solid}.
|
|
25
|
+
*
|
|
26
|
+
* @param {Float32Array} vel_u Mutated in place, (res_x+1)·res_y·res_z.
|
|
27
|
+
* @param {Float32Array} vel_v Mutated in place, res_x·(res_y+1)·res_z.
|
|
28
|
+
* @param {Float32Array} vel_w Mutated in place, res_x·res_y·(res_z+1).
|
|
29
|
+
* @param {Float32Array|Float16Array} pressure Cell-centered, from the solve.
|
|
30
|
+
* @param {Uint8Array} face_solid_x From {@link v3_mac_compute_face_solid}.
|
|
31
|
+
* @param {Uint8Array} face_solid_y
|
|
32
|
+
* @param {Uint8Array} face_solid_z
|
|
33
|
+
* @param {number} res_x
|
|
34
|
+
* @param {number} res_y
|
|
35
|
+
* @param {number} res_z
|
|
36
|
+
*/
|
|
37
|
+
export function v3_mac_subtract_pressure_gradient(vel_u: Float32Array, vel_v: Float32Array, vel_w: Float32Array, pressure: Float32Array | Float16Array, face_solid_x: Uint8Array, face_solid_y: Uint8Array, face_solid_z: Uint8Array, res_x: number, res_y: number, res_z: number): void;
|
|
38
|
+
//# sourceMappingURL=v3_mac_subtract_pressure_gradient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_mac_subtract_pressure_gradient.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_mac_subtract_pressure_gradient.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,yDAXW,YAAY,SACZ,YAAY,SACZ,YAAY,YACZ,YAAY,eAAa,gBACzB,UAAU,gBACV,UAAU,gBACV,UAAU,SACV,MAAM,SACN,MAAM,SACN,MAAM,QAmEhB"}
|