@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
|
@@ -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
|
-
*
|
|
12
|
-
*
|
|
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
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* solid
|
|
31
|
-
*
|
|
32
|
-
*
|
|
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
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* (
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* @param {
|
|
47
|
-
* @param {
|
|
48
|
-
* @param {
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
+
}
|