mover: the character mover's plane solver, and the dynamics plan - #12
Merged
Merged
Conversation
aephysics.mover, Box3D's mover.c in Aether: the plane solver (twenty Gauss-Seidel sweeps, the pushes accumulated and clamped to each plane's limit, the linear slop keeping the mover just off the surface, done when a sweep's total push falls under the slop) and the velocity clip against the planes that pushed. test_mover.ae: the reference's solver cases (two parallel planes, a game's pair with a deep target) and every mover collision that needs no world -- the sphere, capsule and hull separated, touching and in deep overlap, the mesh's back side and mirrored scale, the height field's back side, report and clockwise winding -- plus a corner, a soft plane and the clip. 56 checks. bench/mover.ae against bench/mover_box3d.c: equal sums, one iteration's difference in 1.7 million, 0.9x the reference's time. design.md lays out the dynamics: the reference's world is one mutually recursive body of C, so it becomes mesh_contact, broad_phase (with the pair filter and emission as visitors), dynamics (the world's state and bookkeeping without a step), contact_solver, joint_solver, solver and physics_world, in that order, each with the tests it can carry.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The twelfth layer, and the plan for the rest.
aephysics.mover:solve_planes(twenty Gauss-Seidel sweeps, pushes accumulated and clamped to each plane's limit, the slop keeping the mover just off the surface) andclip_vector.test_mover.ae: the reference's solver cases plus every mover collision that needs no world (sphere, capsule, hull, mesh, height field), a corner, a soft plane and the clip. 56 checks. The world-bound cases (materials through a world, filters, the time of impact) come with the world.bench/mover.aevsbench/mover_box3d.c: equal sums, one iteration's difference in 1.7 million, 0.9x.design.mditem 13: the dynamics cut. The reference's world files call into each other freely; in Aether that becomesmesh_contact,broad_phase(pair filter and emission as visitors),dynamics(the world's state and bookkeeping, no stepping, with its own tests plus the step-free parts of test_body/test_world),contact_solver,joint_solver,solver,physics_world(the step, queries, events; test_body/joint/world/body_query/determinism/large_world and bench pairs on the reference's benchmark scenes).