@woosh/meep-engine 2.156.0 → 2.157.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} +9 -8
- package/src/{engine/physics/narrowphase/PosedShape.d.ts.map → core/geom/3d/shape/PosedShape3D.d.ts.map} +1 -1
- package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +10 -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/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 +45 -17
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +53 -23
- package/src/engine/physics/fluid/FluidSimulator.d.ts +141 -5
- package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidSimulator.js +336 -43
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +114 -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/FluidSystem.d.ts +3 -3
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts +41 -0
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.js +124 -0
- 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 +67 -18
- 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_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/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/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,169 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { clamp } from "../../../../core/math/clamp.js";
|
|
3
|
+
import { scs3d_sample_linear3 } from "../../../graphics/texture/3d/scs3d_sample_linear3.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Unconditionally stable MacCormack advection of a 3-component velocity field
|
|
7
|
+
* along a separate carrier field — the velocity counterpart of
|
|
8
|
+
* {@link v3_grid_advect_maccormack_scalar}, sharing one back-trace and one
|
|
9
|
+
* fused 3-channel sample per cell per pass.
|
|
10
|
+
*
|
|
11
|
+
* Scheme per component (Selle et al. 2008):
|
|
12
|
+
*
|
|
13
|
+
* 1. forward: û = SL(src, back-trace by carrier·dt)
|
|
14
|
+
* 2. backward: ū = SL(û, trace by +carrier·dt)
|
|
15
|
+
* 3. correct: u* = û + ½·(src − ū)
|
|
16
|
+
* 4. limit: clamp to min/max of the 8 src cells around the back-traced
|
|
17
|
+
* position (per component) — Selle's monotone limiter.
|
|
18
|
+
*
|
|
19
|
+
* The carrier is read only at each cell's own index (the trace origin), so
|
|
20
|
+
* `outputs` MAY alias the carrier arrays — the advection-reflection step
|
|
21
|
+
* advects the reflected field along the projected field that lives in the
|
|
22
|
+
* output buffers. `sources` and `forward_scratch` must be distinct from
|
|
23
|
+
* outputs and from each other.
|
|
24
|
+
*
|
|
25
|
+
* Solid destination cells pass their source value through unchanged.
|
|
26
|
+
*
|
|
27
|
+
* @param {Float32Array[]} outputs `[out_x, out_y, out_z]`, mutated.
|
|
28
|
+
* @param {Float32Array[]} sources `[src_x, src_y, src_z]`. NOT mutated.
|
|
29
|
+
* @param {Float32Array} carrier_x Velocity driving the traces.
|
|
30
|
+
* @param {Float32Array} carrier_y
|
|
31
|
+
* @param {Float32Array} carrier_z
|
|
32
|
+
* @param {Float32Array[]} forward_scratch `[fwd_x, fwd_y, fwd_z]` working
|
|
33
|
+
* buffers for û. Mutated.
|
|
34
|
+
* @param {number} res_x
|
|
35
|
+
* @param {number} res_y
|
|
36
|
+
* @param {number} res_z
|
|
37
|
+
* @param {number} time_delta
|
|
38
|
+
* @param {Uint8Array} solid Required cell flags.
|
|
39
|
+
*/
|
|
40
|
+
export function v3_grid_advect_maccormack_velocity(outputs, sources, carrier_x, carrier_y, carrier_z, forward_scratch, res_x, res_y, res_z, time_delta, solid) {
|
|
41
|
+
assert.equal(outputs.length, 3, "outputs is a 3-component array");
|
|
42
|
+
assert.equal(sources.length, 3, "sources is a 3-component array");
|
|
43
|
+
assert.equal(forward_scratch.length, 3, "forward_scratch is a 3-component array");
|
|
44
|
+
|
|
45
|
+
const out_x = outputs[0];
|
|
46
|
+
const out_y = outputs[1];
|
|
47
|
+
const out_z = outputs[2];
|
|
48
|
+
const src_x = sources[0];
|
|
49
|
+
const src_y = sources[1];
|
|
50
|
+
const src_z = sources[2];
|
|
51
|
+
const fwd_x = forward_scratch[0];
|
|
52
|
+
const fwd_y = forward_scratch[1];
|
|
53
|
+
const fwd_z = forward_scratch[2];
|
|
54
|
+
|
|
55
|
+
const cell_count = res_x * res_y * res_z;
|
|
56
|
+
|
|
57
|
+
assert.greaterThanOrEqual(out_x.length, cell_count, "out_x covers grid");
|
|
58
|
+
assert.greaterThanOrEqual(src_x.length, cell_count, "src_x covers grid");
|
|
59
|
+
assert.greaterThanOrEqual(fwd_x.length, cell_count, "fwd_x covers grid");
|
|
60
|
+
assert.greaterThanOrEqual(carrier_x.length, cell_count, "carrier_x covers grid");
|
|
61
|
+
|
|
62
|
+
assert.notEqual(out_x, src_x, "out_x must not alias src_x");
|
|
63
|
+
assert.notEqual(out_x, fwd_x, "out_x must not alias fwd_x");
|
|
64
|
+
assert.notEqual(src_x, fwd_x, "src_x must not alias fwd_x");
|
|
65
|
+
|
|
66
|
+
const slice_size = res_x * res_y;
|
|
67
|
+
const last_x = res_x - 1;
|
|
68
|
+
const last_y = res_y - 1;
|
|
69
|
+
const last_z = res_z - 1;
|
|
70
|
+
const sample = scratch_sample;
|
|
71
|
+
|
|
72
|
+
// ─── pass 1: forward SL step into the scratch trio ──────────────────────
|
|
73
|
+
for (let z = 0; z < res_z; z++) {
|
|
74
|
+
const z_off = z * slice_size;
|
|
75
|
+
for (let y = 0; y < res_y; y++) {
|
|
76
|
+
const y_off = y * res_x;
|
|
77
|
+
for (let x = 0; x < res_x; x++) {
|
|
78
|
+
const c = z_off + y_off + x;
|
|
79
|
+
if (solid[c] !== 0) {
|
|
80
|
+
fwd_x[c] = src_x[c];
|
|
81
|
+
fwd_y[c] = src_y[c];
|
|
82
|
+
fwd_z[c] = src_z[c];
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const s_x = x - carrier_x[c] * time_delta;
|
|
86
|
+
const s_y = y - carrier_y[c] * time_delta;
|
|
87
|
+
const s_z = z - carrier_z[c] * time_delta;
|
|
88
|
+
scs3d_sample_linear3(sample, src_x, src_y, src_z, res_x, res_y, res_z, s_x, s_y, s_z);
|
|
89
|
+
fwd_x[c] = sample[0];
|
|
90
|
+
fwd_y[c] = sample[1];
|
|
91
|
+
fwd_z[c] = sample[2];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ─── pass 2: backward step, correction, monotone limit ──────────────────
|
|
97
|
+
for (let z = 0; z < res_z; z++) {
|
|
98
|
+
const z_off = z * slice_size;
|
|
99
|
+
for (let y = 0; y < res_y; y++) {
|
|
100
|
+
const y_off = y * res_x;
|
|
101
|
+
for (let x = 0; x < res_x; x++) {
|
|
102
|
+
const c = z_off + y_off + x;
|
|
103
|
+
if (solid[c] !== 0) {
|
|
104
|
+
out_x[c] = src_x[c];
|
|
105
|
+
out_y[c] = src_y[c];
|
|
106
|
+
out_z[c] = src_z[c];
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const vx = carrier_x[c] * time_delta;
|
|
111
|
+
const vy = carrier_y[c] * time_delta;
|
|
112
|
+
const vz = carrier_z[c] * time_delta;
|
|
113
|
+
|
|
114
|
+
scs3d_sample_linear3(sample, fwd_x, fwd_y, fwd_z, res_x, res_y, res_z, x + vx, y + vy, z + vz);
|
|
115
|
+
const corr_x = fwd_x[c] + 0.5 * (src_x[c] - sample[0]);
|
|
116
|
+
const corr_y = fwd_y[c] + 0.5 * (src_y[c] - sample[1]);
|
|
117
|
+
const corr_z = fwd_z[c] + 0.5 * (src_z[c] - sample[2]);
|
|
118
|
+
|
|
119
|
+
// Shared corner set for the per-component limiter.
|
|
120
|
+
const bx = clamp(x - vx, 0, last_x);
|
|
121
|
+
const by = clamp(y - vy, 0, last_y);
|
|
122
|
+
const bz = clamp(z - vz, 0, last_z);
|
|
123
|
+
const x0 = bx | 0;
|
|
124
|
+
const y0 = by | 0;
|
|
125
|
+
const z0 = bz | 0;
|
|
126
|
+
const x1 = bx === x0 ? x0 : x0 + 1;
|
|
127
|
+
const y1 = by === y0 ? y0 : y0 + 1;
|
|
128
|
+
const z1 = bz === z0 ? z0 : z0 + 1;
|
|
129
|
+
|
|
130
|
+
const z0_off = z0 * slice_size;
|
|
131
|
+
const z1_off = z1 * slice_size;
|
|
132
|
+
const y0_off = y0 * res_x;
|
|
133
|
+
const y1_off = y1 * res_x;
|
|
134
|
+
|
|
135
|
+
const c000 = z0_off + y0_off + x0;
|
|
136
|
+
const c100 = z0_off + y0_off + x1;
|
|
137
|
+
const c010 = z0_off + y1_off + x0;
|
|
138
|
+
const c110 = z0_off + y1_off + x1;
|
|
139
|
+
const c001 = z1_off + y0_off + x0;
|
|
140
|
+
const c101 = z1_off + y0_off + x1;
|
|
141
|
+
const c011 = z1_off + y1_off + x0;
|
|
142
|
+
const c111 = z1_off + y1_off + x1;
|
|
143
|
+
|
|
144
|
+
out_x[c] = limit8(corr_x, src_x, c000, c100, c010, c110, c001, c101, c011, c111);
|
|
145
|
+
out_y[c] = limit8(corr_y, src_y, c000, c100, c010, c110, c001, c101, c011, c111);
|
|
146
|
+
out_z[c] = limit8(corr_z, src_z, c000, c100, c010, c110, c001, c101, c011, c111);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Clamp `value` to the min/max of eight cells of `data`.
|
|
154
|
+
*/
|
|
155
|
+
function limit8(value, data, c0, c1, c2, c3, c4, c5, c6, c7) {
|
|
156
|
+
let mn = data[c0];
|
|
157
|
+
let mx = mn;
|
|
158
|
+
let v = data[c1]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
159
|
+
v = data[c2]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
160
|
+
v = data[c3]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
161
|
+
v = data[c4]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
162
|
+
v = data[c5]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
163
|
+
v = data[c6]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
164
|
+
v = data[c7]; if (v < mn) mn = v; else if (v > mx) mx = v;
|
|
165
|
+
return value < mn ? mn : (value > mx ? mx : value);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Module-static sample destination — avoids per-cell allocation. */
|
|
169
|
+
const scratch_sample = new Float32Array(3);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semi-Lagrangian advection of a 3-component velocity field along a separate
|
|
3
|
+
* carrier velocity field.
|
|
4
|
+
*
|
|
5
|
+
* For each cell, traces backward along the CARRIER for one timestep, then
|
|
6
|
+
* trilinearly samples each SOURCE component at the back-traced position (one
|
|
7
|
+
* fused 3-channel sample — indices and weights computed once per cell).
|
|
8
|
+
* Unconditionally stable for any `time_delta`.
|
|
9
|
+
*
|
|
10
|
+
* Generalizes {@link v3_grid_apply_advection_forward}, which hardwires
|
|
11
|
+
* carrier === sources (plain self-advection). The split matters for the
|
|
12
|
+
* advection-reflection scheme (Zehnder et al. 2018), where the REFLECTED
|
|
13
|
+
* field is transported along the PROJECTED field, and for the MacCormack
|
|
14
|
+
* corrector, which re-advects an intermediate result along the original
|
|
15
|
+
* carrier.
|
|
16
|
+
*
|
|
17
|
+
* Aliasing: `outputs[i]` MUST NOT alias `sources[i]` (the sampled data), but
|
|
18
|
+
* MAY alias `carrier_*` — the carrier is only point-read at each cell's own
|
|
19
|
+
* index before that cell's output is written, never sampled spatially.
|
|
20
|
+
*
|
|
21
|
+
* @param {Float32Array[]} outputs `[out_x, out_y, out_z]`, mutated.
|
|
22
|
+
* @param {Float32Array[]} sources `[src_x, src_y, src_z]`, read at back-traced
|
|
23
|
+
* positions. Must not alias outputs.
|
|
24
|
+
* @param {Float32Array} carrier_x Velocity field that drives the back-trace.
|
|
25
|
+
* @param {Float32Array} carrier_y
|
|
26
|
+
* @param {Float32Array} carrier_z
|
|
27
|
+
* @param {number} res_x
|
|
28
|
+
* @param {number} res_y
|
|
29
|
+
* @param {number} res_z
|
|
30
|
+
* @param {number} time_delta Same units as velocity (grid cells / second).
|
|
31
|
+
* @param {Uint8Array} solid Required cell flags (zero-filled for a
|
|
32
|
+
* wall-free domain); solid cells get their
|
|
33
|
+
* source value passed through unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export function v3_grid_advect_sl_velocity(outputs: Float32Array[], sources: Float32Array[], carrier_x: Float32Array, carrier_y: Float32Array, carrier_z: Float32Array, res_x: number, res_y: number, res_z: number, time_delta: number, solid: Uint8Array): void;
|
|
36
|
+
//# sourceMappingURL=v3_grid_advect_sl_velocity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_grid_advect_sl_velocity.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,oDAdW,YAAY,EAAE,WACd,YAAY,EAAE,aAEd,YAAY,aACZ,YAAY,aACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SACN,UAAU,QA+DpB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { scs3d_sample_linear3 } from "../../../graphics/texture/3d/scs3d_sample_linear3.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Semi-Lagrangian advection of a 3-component velocity field along a separate
|
|
6
|
+
* carrier velocity field.
|
|
7
|
+
*
|
|
8
|
+
* For each cell, traces backward along the CARRIER for one timestep, then
|
|
9
|
+
* trilinearly samples each SOURCE component at the back-traced position (one
|
|
10
|
+
* fused 3-channel sample — indices and weights computed once per cell).
|
|
11
|
+
* Unconditionally stable for any `time_delta`.
|
|
12
|
+
*
|
|
13
|
+
* Generalizes {@link v3_grid_apply_advection_forward}, which hardwires
|
|
14
|
+
* carrier === sources (plain self-advection). The split matters for the
|
|
15
|
+
* advection-reflection scheme (Zehnder et al. 2018), where the REFLECTED
|
|
16
|
+
* field is transported along the PROJECTED field, and for the MacCormack
|
|
17
|
+
* corrector, which re-advects an intermediate result along the original
|
|
18
|
+
* carrier.
|
|
19
|
+
*
|
|
20
|
+
* Aliasing: `outputs[i]` MUST NOT alias `sources[i]` (the sampled data), but
|
|
21
|
+
* MAY alias `carrier_*` — the carrier is only point-read at each cell's own
|
|
22
|
+
* index before that cell's output is written, never sampled spatially.
|
|
23
|
+
*
|
|
24
|
+
* @param {Float32Array[]} outputs `[out_x, out_y, out_z]`, mutated.
|
|
25
|
+
* @param {Float32Array[]} sources `[src_x, src_y, src_z]`, read at back-traced
|
|
26
|
+
* positions. Must not alias outputs.
|
|
27
|
+
* @param {Float32Array} carrier_x Velocity field that drives the back-trace.
|
|
28
|
+
* @param {Float32Array} carrier_y
|
|
29
|
+
* @param {Float32Array} carrier_z
|
|
30
|
+
* @param {number} res_x
|
|
31
|
+
* @param {number} res_y
|
|
32
|
+
* @param {number} res_z
|
|
33
|
+
* @param {number} time_delta Same units as velocity (grid cells / second).
|
|
34
|
+
* @param {Uint8Array} solid Required cell flags (zero-filled for a
|
|
35
|
+
* wall-free domain); solid cells get their
|
|
36
|
+
* source value passed through unchanged.
|
|
37
|
+
*/
|
|
38
|
+
export function v3_grid_advect_sl_velocity(outputs, sources, carrier_x, carrier_y, carrier_z, res_x, res_y, res_z, time_delta, solid) {
|
|
39
|
+
assert.equal(outputs.length, 3, "outputs is a 3-component array");
|
|
40
|
+
assert.equal(sources.length, 3, "sources is a 3-component array");
|
|
41
|
+
|
|
42
|
+
const out_x = outputs[0];
|
|
43
|
+
const out_y = outputs[1];
|
|
44
|
+
const out_z = outputs[2];
|
|
45
|
+
|
|
46
|
+
const src_x = sources[0];
|
|
47
|
+
const src_y = sources[1];
|
|
48
|
+
const src_z = sources[2];
|
|
49
|
+
|
|
50
|
+
const cell_count = res_x * res_y * res_z;
|
|
51
|
+
|
|
52
|
+
assert.greaterThanOrEqual(out_x.length, cell_count, "out_x covers grid");
|
|
53
|
+
assert.greaterThanOrEqual(out_y.length, cell_count, "out_y covers grid");
|
|
54
|
+
assert.greaterThanOrEqual(out_z.length, cell_count, "out_z covers grid");
|
|
55
|
+
assert.greaterThanOrEqual(src_x.length, cell_count, "src_x covers grid");
|
|
56
|
+
assert.greaterThanOrEqual(src_y.length, cell_count, "src_y covers grid");
|
|
57
|
+
assert.greaterThanOrEqual(src_z.length, cell_count, "src_z covers grid");
|
|
58
|
+
assert.greaterThanOrEqual(carrier_x.length, cell_count, "carrier_x covers grid");
|
|
59
|
+
assert.greaterThanOrEqual(carrier_y.length, cell_count, "carrier_y covers grid");
|
|
60
|
+
assert.greaterThanOrEqual(carrier_z.length, cell_count, "carrier_z covers grid");
|
|
61
|
+
|
|
62
|
+
assert.notEqual(out_x, src_x, "out_x must not alias src_x");
|
|
63
|
+
assert.notEqual(out_y, src_y, "out_y must not alias src_y");
|
|
64
|
+
assert.notEqual(out_z, src_z, "out_z must not alias src_z");
|
|
65
|
+
|
|
66
|
+
const slice_size = res_x * res_y;
|
|
67
|
+
const sample = scratch_sample;
|
|
68
|
+
|
|
69
|
+
for (let z = 0; z < res_z; z++) {
|
|
70
|
+
const z_off = z * slice_size;
|
|
71
|
+
|
|
72
|
+
for (let y = 0; y < res_y; y++) {
|
|
73
|
+
const y_off = y * res_x;
|
|
74
|
+
|
|
75
|
+
for (let x = 0; x < res_x; x++) {
|
|
76
|
+
const c = z_off + y_off + x;
|
|
77
|
+
|
|
78
|
+
if (solid[c] !== 0) {
|
|
79
|
+
out_x[c] = src_x[c];
|
|
80
|
+
out_y[c] = src_y[c];
|
|
81
|
+
out_z[c] = src_z[c];
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Trace back along the carrier to where this parcel came from.
|
|
86
|
+
const s_x = x - carrier_x[c] * time_delta;
|
|
87
|
+
const s_y = y - carrier_y[c] * time_delta;
|
|
88
|
+
const s_z = z - carrier_z[c] * time_delta;
|
|
89
|
+
|
|
90
|
+
scs3d_sample_linear3(sample, src_x, src_y, src_z, res_x, res_y, res_z, s_x, s_y, s_z);
|
|
91
|
+
out_x[c] = sample[0];
|
|
92
|
+
out_y[c] = sample[1];
|
|
93
|
+
out_z[c] = sample[2];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Module-static sample destination — avoids per-cell allocation. */
|
|
100
|
+
const scratch_sample = new Float32Array(3);
|
|
@@ -6,6 +6,12 @@
|
|
|
6
6
|
* Stable for arbitrarily large `time_delta` (the trade-off is numerical diffusion;
|
|
7
7
|
* the field gets blurrier each step).
|
|
8
8
|
*
|
|
9
|
+
* The simulator itself now transports velocity via the generalized kernels —
|
|
10
|
+
* {@link v3_grid_advect_sl_velocity} (separate carrier, fused 3-channel
|
|
11
|
+
* sampling) and {@link v3_grid_advect_maccormack_velocity} (second-order).
|
|
12
|
+
* This kernel remains as the simple self-advection primitive: it is exactly
|
|
13
|
+
* `v3_grid_advect_sl_velocity(outputs, inputs, inputs...)`.
|
|
14
|
+
*
|
|
9
15
|
* Inputs and outputs must be disjoint Float32Arrays of length `res_x * res_y * res_z`.
|
|
10
16
|
* Cells flagged solid (non-zero in `solid`) keep their input value unchanged.
|
|
11
17
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_grid_apply_advection_forward.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"v3_grid_apply_advection_forward.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,yDAXW,YAAY,EAAE,UACd,YAAY,EAAE,SAEd,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SAEN,UAAU,QA6DpB"}
|
|
@@ -9,6 +9,12 @@ import { scs3d_sample_linear } from "../../../graphics/texture/3d/scs3d_sample_l
|
|
|
9
9
|
* Stable for arbitrarily large `time_delta` (the trade-off is numerical diffusion;
|
|
10
10
|
* the field gets blurrier each step).
|
|
11
11
|
*
|
|
12
|
+
* The simulator itself now transports velocity via the generalized kernels —
|
|
13
|
+
* {@link v3_grid_advect_sl_velocity} (separate carrier, fused 3-channel
|
|
14
|
+
* sampling) and {@link v3_grid_advect_maccormack_velocity} (second-order).
|
|
15
|
+
* This kernel remains as the simple self-advection primitive: it is exactly
|
|
16
|
+
* `v3_grid_advect_sl_velocity(outputs, inputs, inputs...)`.
|
|
17
|
+
*
|
|
12
18
|
* Inputs and outputs must be disjoint Float32Arrays of length `res_x * res_y * res_z`.
|
|
13
19
|
* Cells flagged solid (non-zero in `solid`) keep their input value unchanged.
|
|
14
20
|
*
|
|
@@ -11,8 +11,13 @@
|
|
|
11
11
|
* conditions — missing neighbours are treated as equal to the cell itself, which
|
|
12
12
|
* reduces the effective denominator.
|
|
13
13
|
*
|
|
14
|
-
* Solid cells
|
|
15
|
-
*
|
|
14
|
+
* Solid cells get the same no-flux treatment on both sides of the wall:
|
|
15
|
+
* - a solid cell is never updated — its value in `output` stays at `x0`;
|
|
16
|
+
* - a fluid cell never gathers FROM a solid neighbour — the wall face is
|
|
17
|
+
* reflective, exactly like a domain boundary face.
|
|
18
|
+
* Without the second half, a wall would act as an infinite source/sink for
|
|
19
|
+
* whatever value was frozen inside it, silently creating or destroying the
|
|
20
|
+
* diffused quantity.
|
|
16
21
|
*
|
|
17
22
|
* @param {Float32Array} output Destination (size = res_x * res_y * res_z). Mutated.
|
|
18
23
|
* @param {Float32Array} x0 Source values to diffuse. NOT mutated.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v3_grid_apply_diffusion.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"v3_grid_apply_diffusion.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,gDAXW,YAAY,MACZ,YAAY,WACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,KACN,MAAM,cACN,MAAM,SACN,UAAU,QA2EpB"}
|
|
@@ -13,8 +13,13 @@ import { assert } from "../../../../core/assert.js";
|
|
|
13
13
|
* conditions — missing neighbours are treated as equal to the cell itself, which
|
|
14
14
|
* reduces the effective denominator.
|
|
15
15
|
*
|
|
16
|
-
* Solid cells
|
|
17
|
-
*
|
|
16
|
+
* Solid cells get the same no-flux treatment on both sides of the wall:
|
|
17
|
+
* - a solid cell is never updated — its value in `output` stays at `x0`;
|
|
18
|
+
* - a fluid cell never gathers FROM a solid neighbour — the wall face is
|
|
19
|
+
* reflective, exactly like a domain boundary face.
|
|
20
|
+
* Without the second half, a wall would act as an infinite source/sink for
|
|
21
|
+
* whatever value was frozen inside it, silently creating or destroying the
|
|
22
|
+
* diffused quantity.
|
|
18
23
|
*
|
|
19
24
|
* @param {Float32Array} output Destination (size = res_x * res_y * res_z). Mutated.
|
|
20
25
|
* @param {Float32Array} x0 Source values to diffuse. NOT mutated.
|
|
@@ -75,17 +80,17 @@ export function v3_grid_apply_diffusion(output, x0, scratch, res_x, res_y, res_z
|
|
|
75
80
|
let sum = 0;
|
|
76
81
|
let count = 0;
|
|
77
82
|
|
|
78
|
-
if (x > 0)
|
|
79
|
-
if (x < last_x)
|
|
80
|
-
if (has_ym) { sum += prev[c - res_x]; count++; }
|
|
81
|
-
if (has_yp) { sum += prev[c + res_x]; count++; }
|
|
82
|
-
if (has_zm)
|
|
83
|
-
if (has_zp)
|
|
83
|
+
if (x > 0 && solid[c - 1] === 0) { sum += prev[c - 1]; count++; }
|
|
84
|
+
if (x < last_x && solid[c + 1] === 0) { sum += prev[c + 1]; count++; }
|
|
85
|
+
if (has_ym && solid[c - res_x] === 0) { sum += prev[c - res_x]; count++; }
|
|
86
|
+
if (has_yp && solid[c + res_x] === 0) { sum += prev[c + res_x]; count++; }
|
|
87
|
+
if (has_zm && solid[c - slice_size] === 0) { sum += prev[c - slice_size]; count++; }
|
|
88
|
+
if (has_zp && solid[c + slice_size] === 0) { sum += prev[c + slice_size]; count++; }
|
|
84
89
|
|
|
85
|
-
// Implicit Jacobi update with Neumann
|
|
86
|
-
//
|
|
87
|
-
// equivalent to dropping them from both the
|
|
88
|
-
// denominator factor on `a`.
|
|
90
|
+
// Implicit Jacobi update with Neumann correction: missing
|
|
91
|
+
// neighbours (out-of-bounds OR solid) contribute as if equal to
|
|
92
|
+
// the cell, which is equivalent to dropping them from both the
|
|
93
|
+
// numerator and the denominator factor on `a`.
|
|
89
94
|
next[c] = (x0[c] + a * sum) / (1 + a * count);
|
|
90
95
|
}
|
|
91
96
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vorticity confinement (Fedkiw, Stam, Jensen 2001 — "Visual Simulation of
|
|
3
|
+
* Smoke"): re-inject the small-scale rotational motion that coarse grids and
|
|
4
|
+
* dissipative transport smear away.
|
|
5
|
+
*
|
|
6
|
+
* Two passes:
|
|
7
|
+
*
|
|
8
|
+
* 1. ω = ∇×v by central differences (interior cells; boundary ring and
|
|
9
|
+
* solid cells get ω = 0), |ω| alongside.
|
|
10
|
+
* 2. N = ∇|ω| / |∇|ω|| — unit vector pointing toward stronger vorticity —
|
|
11
|
+
* and the confinement force f = ε·(N × ω) is deposited as
|
|
12
|
+
* `v += f · dt`, pulling flow around existing vortex cores and thereby
|
|
13
|
+
* sharpening them.
|
|
14
|
+
*
|
|
15
|
+
* The force vanishes where vorticity is spatially uniform (|∇|ω|| ≈ 0), so
|
|
16
|
+
* calm regions stay calm; the `magnitude_floor` guard skips the normalize
|
|
17
|
+
* when the gradient is numerically zero.
|
|
18
|
+
*
|
|
19
|
+
* Energy note: confinement ADDS energy by design. Pair it with
|
|
20
|
+
* {@link FluidSimulator#velocity_damping} (or rely on transport dissipation)
|
|
21
|
+
* — `epsilon_dt` values around `0.1–0.5 · dt` are typical for visual smoke.
|
|
22
|
+
*
|
|
23
|
+
* Cells in the boundary ring (x/y/z at 0 or max) receive no force — the
|
|
24
|
+
* one-sided curl there is unreliable and the open boundary makes amplified
|
|
25
|
+
* edge swirls visually wrong anyway.
|
|
26
|
+
*
|
|
27
|
+
* @param {Float32Array} vel_x Mutated in place.
|
|
28
|
+
* @param {Float32Array} vel_y Mutated in place.
|
|
29
|
+
* @param {Float32Array} vel_z Mutated in place.
|
|
30
|
+
* @param {Float32Array} scratch_wx ω_x working buffer. Length ≥ N. Mutated.
|
|
31
|
+
* @param {Float32Array} scratch_wy ω_y working buffer. Mutated.
|
|
32
|
+
* @param {Float32Array} scratch_wz ω_z working buffer. Mutated.
|
|
33
|
+
* @param {Float32Array} scratch_wmag |ω| working buffer. Mutated.
|
|
34
|
+
* @param {number} res_x
|
|
35
|
+
* @param {number} res_y
|
|
36
|
+
* @param {number} res_z
|
|
37
|
+
* @param {number} epsilon_dt Confinement strength ε multiplied by the
|
|
38
|
+
* timestep — the caller folds dt so the kernel stays a pure grid pass.
|
|
39
|
+
* @param {Uint8Array} solid Non-zero cells receive no curl and no force.
|
|
40
|
+
*/
|
|
41
|
+
export function v3_grid_apply_vorticity_confinement(vel_x: Float32Array, vel_y: Float32Array, vel_z: Float32Array, scratch_wx: Float32Array, scratch_wy: Float32Array, scratch_wz: Float32Array, scratch_wmag: Float32Array, res_x: number, res_y: number, res_z: number, epsilon_dt: number, solid: Uint8Array): void;
|
|
42
|
+
//# sourceMappingURL=v3_grid_apply_vorticity_confinement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_grid_apply_vorticity_confinement.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,2DAdW,YAAY,SACZ,YAAY,SACZ,YAAY,cACZ,YAAY,cACZ,YAAY,cACZ,YAAY,gBACZ,YAAY,SACZ,MAAM,SACN,MAAM,SACN,MAAM,cACN,MAAM,SAEN,UAAU,QA0FpB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Vorticity confinement (Fedkiw, Stam, Jensen 2001 — "Visual Simulation of
|
|
5
|
+
* Smoke"): re-inject the small-scale rotational motion that coarse grids and
|
|
6
|
+
* dissipative transport smear away.
|
|
7
|
+
*
|
|
8
|
+
* Two passes:
|
|
9
|
+
*
|
|
10
|
+
* 1. ω = ∇×v by central differences (interior cells; boundary ring and
|
|
11
|
+
* solid cells get ω = 0), |ω| alongside.
|
|
12
|
+
* 2. N = ∇|ω| / |∇|ω|| — unit vector pointing toward stronger vorticity —
|
|
13
|
+
* and the confinement force f = ε·(N × ω) is deposited as
|
|
14
|
+
* `v += f · dt`, pulling flow around existing vortex cores and thereby
|
|
15
|
+
* sharpening them.
|
|
16
|
+
*
|
|
17
|
+
* The force vanishes where vorticity is spatially uniform (|∇|ω|| ≈ 0), so
|
|
18
|
+
* calm regions stay calm; the `magnitude_floor` guard skips the normalize
|
|
19
|
+
* when the gradient is numerically zero.
|
|
20
|
+
*
|
|
21
|
+
* Energy note: confinement ADDS energy by design. Pair it with
|
|
22
|
+
* {@link FluidSimulator#velocity_damping} (or rely on transport dissipation)
|
|
23
|
+
* — `epsilon_dt` values around `0.1–0.5 · dt` are typical for visual smoke.
|
|
24
|
+
*
|
|
25
|
+
* Cells in the boundary ring (x/y/z at 0 or max) receive no force — the
|
|
26
|
+
* one-sided curl there is unreliable and the open boundary makes amplified
|
|
27
|
+
* edge swirls visually wrong anyway.
|
|
28
|
+
*
|
|
29
|
+
* @param {Float32Array} vel_x Mutated in place.
|
|
30
|
+
* @param {Float32Array} vel_y Mutated in place.
|
|
31
|
+
* @param {Float32Array} vel_z Mutated in place.
|
|
32
|
+
* @param {Float32Array} scratch_wx ω_x working buffer. Length ≥ N. Mutated.
|
|
33
|
+
* @param {Float32Array} scratch_wy ω_y working buffer. Mutated.
|
|
34
|
+
* @param {Float32Array} scratch_wz ω_z working buffer. Mutated.
|
|
35
|
+
* @param {Float32Array} scratch_wmag |ω| working buffer. Mutated.
|
|
36
|
+
* @param {number} res_x
|
|
37
|
+
* @param {number} res_y
|
|
38
|
+
* @param {number} res_z
|
|
39
|
+
* @param {number} epsilon_dt Confinement strength ε multiplied by the
|
|
40
|
+
* timestep — the caller folds dt so the kernel stays a pure grid pass.
|
|
41
|
+
* @param {Uint8Array} solid Non-zero cells receive no curl and no force.
|
|
42
|
+
*/
|
|
43
|
+
export function v3_grid_apply_vorticity_confinement(
|
|
44
|
+
vel_x, vel_y, vel_z,
|
|
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(vel_x.length, cell_count, "vel_x covers grid");
|
|
52
|
+
assert.greaterThanOrEqual(vel_y.length, cell_count, "vel_y covers grid");
|
|
53
|
+
assert.greaterThanOrEqual(vel_z.length, cell_count, "vel_z covers grid");
|
|
54
|
+
assert.greaterThanOrEqual(scratch_wx.length, cell_count, "scratch_wx covers grid");
|
|
55
|
+
assert.greaterThanOrEqual(scratch_wy.length, cell_count, "scratch_wy covers grid");
|
|
56
|
+
assert.greaterThanOrEqual(scratch_wz.length, cell_count, "scratch_wz covers grid");
|
|
57
|
+
assert.greaterThanOrEqual(scratch_wmag.length, cell_count, "scratch_wmag covers grid");
|
|
58
|
+
assert.isNumber(epsilon_dt, "epsilon_dt");
|
|
59
|
+
assert.greaterThanOrEqual(epsilon_dt, 0, "epsilon_dt");
|
|
60
|
+
|
|
61
|
+
if (epsilon_dt === 0) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const slice = res_x * res_y;
|
|
66
|
+
const last_x = res_x - 1;
|
|
67
|
+
const last_y = res_y - 1;
|
|
68
|
+
const last_z = res_z - 1;
|
|
69
|
+
|
|
70
|
+
// ─── pass 1: ω = ∇×v and |ω| ────────────────────────────────────────────
|
|
71
|
+
// Boundary ring and solids get 0 — also serves as the ghost value for
|
|
72
|
+
// pass 2's gradient at interior cells adjacent to the ring.
|
|
73
|
+
scratch_wx.fill(0, 0, cell_count);
|
|
74
|
+
scratch_wy.fill(0, 0, cell_count);
|
|
75
|
+
scratch_wz.fill(0, 0, cell_count);
|
|
76
|
+
scratch_wmag.fill(0, 0, cell_count);
|
|
77
|
+
|
|
78
|
+
for (let z = 1; z < last_z; z++) {
|
|
79
|
+
const z_off = z * slice;
|
|
80
|
+
for (let y = 1; y < last_y; y++) {
|
|
81
|
+
const y_off = y * res_x;
|
|
82
|
+
for (let x = 1; x < last_x; x++) {
|
|
83
|
+
const c = z_off + y_off + x;
|
|
84
|
+
if (solid[c] !== 0) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const wx = 0.5 * ((vel_z[c + res_x] - vel_z[c - res_x]) - (vel_y[c + slice] - vel_y[c - slice]));
|
|
88
|
+
const wy = 0.5 * ((vel_x[c + slice] - vel_x[c - slice]) - (vel_z[c + 1] - vel_z[c - 1]));
|
|
89
|
+
const wz = 0.5 * ((vel_y[c + 1] - vel_y[c - 1]) - (vel_x[c + res_x] - vel_x[c - res_x]));
|
|
90
|
+
scratch_wx[c] = wx;
|
|
91
|
+
scratch_wy[c] = wy;
|
|
92
|
+
scratch_wz[c] = wz;
|
|
93
|
+
scratch_wmag[c] = Math.sqrt(wx * wx + wy * wy + wz * wz);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ─── pass 2: f = ε·(N × ω), N = ∇|ω|/|∇|ω|| ────────────────────────────
|
|
99
|
+
const magnitude_floor = 1e-10;
|
|
100
|
+
|
|
101
|
+
for (let z = 1; z < last_z; z++) {
|
|
102
|
+
const z_off = z * slice;
|
|
103
|
+
for (let y = 1; y < last_y; y++) {
|
|
104
|
+
const y_off = y * res_x;
|
|
105
|
+
for (let x = 1; x < last_x; x++) {
|
|
106
|
+
const c = z_off + y_off + x;
|
|
107
|
+
if (solid[c] !== 0) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const gx = 0.5 * (scratch_wmag[c + 1] - scratch_wmag[c - 1]);
|
|
112
|
+
const gy = 0.5 * (scratch_wmag[c + res_x] - scratch_wmag[c - res_x]);
|
|
113
|
+
const gz = 0.5 * (scratch_wmag[c + slice] - scratch_wmag[c - slice]);
|
|
114
|
+
|
|
115
|
+
const g_len = Math.sqrt(gx * gx + gy * gy + gz * gz);
|
|
116
|
+
if (g_len < magnitude_floor) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const s = epsilon_dt / g_len;
|
|
120
|
+
|
|
121
|
+
// f = ε · (N × ω); deposit directly as Δv (dt already folded).
|
|
122
|
+
const wx = scratch_wx[c];
|
|
123
|
+
const wy = scratch_wy[c];
|
|
124
|
+
const wz = scratch_wz[c];
|
|
125
|
+
vel_x[c] += s * (gy * wz - gz * wy);
|
|
126
|
+
vel_y[c] += s * (gz * wx - gx * wz);
|
|
127
|
+
vel_z[c] += s * (gx * wy - gy * wx);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|