Repository navigation
Conversation
…d bodies, queries-only bodies, SetFilter), the 2 points of the lying capsule; red: the filtering doesn't exist yet
…able, applied by the broad phase, the triggers and the continuous collision; SetFilter; the docs
…start), the depth of the stack of the bench; red: Material.SpinningResistance doesn't exist yet
…around the normal bounded by resistance * radius * normal impulse; the bench measures each phase over 3 depths of the stack; the bench scene spinning tops, the docs
…s (red: the queries don't exist yet)
…ugh the trees of the broad phase, kept up to date by the end of a step for the bodies it moved; CastRay of each shape; the bench scenes of the queries; the docs
…ocks): a locked axis kept bit for bit under the gravity, the contacts, the joints and the continuous collision, the exact inertia of a body on an axle, the friction off the axes
…rse mass along a locked axis and the exact inverse inertia around the free ones (the inverse of the free block of the inertia, where Jolt, Rapier, PhysX and Box3D keep the free block of the inverse); the bench scene locked bodies, the docs
… 0, a top keeps its 20 rad/s for 10 s without spinning resistance, the spinning resistance brakes at its formula at 0.1 %), the lever arms measured to the friction center on the surface of A, the twist bound of the solver and of a box spinning flat; the draws of the bench (the median of the 32 variants of a scene, its tolerance from the spread of the ensemble, the variants of the scenes of Solver2D); red: a single point has half its separation as a lever arm, the draws don't exist yet
…enter on the same surface (the point halfway against the center on the surface of A gave a single point half its separation as a lever arm: a ball spinning on the ground lost 0.068 rad/s² without any resistance), exactly 0 for a single point; the bench follows the 11 measures decided by the rounding by their median over 32 variants of their scene, with a tolerance from the spread of the ensemble; the reference of the bench, the docs
…wledgements say the source code was read; Bullet thanked for its dynamic AABB tree, its collision margin & its conservative advancement (read in 3.25), its margin named as such in ALGORITHMS.md
Codecov Report❌ Patch coverage is
🚀 New features to boost your workflow:
|
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.
Feather v0.4.0
Collision filtering, scene queries, axis locks and spinning friction, plus a more
reliable regression bench.
Added
bodies linked by a joint, all resolved through a single pair table used by the
broad phase, the triggers and the continuous collision.
SetFilterchanges abody's filter at runtime. A body with an empty mask takes part in queries only.
World.Raycast,RaycastAll,SweepandOverlap, runthrough the AABB trees of the broad phase, with a
QueryFilter(mask, excludedbodies, triggers). The trees are kept up to date at the end of each step;
SyncQueriesrefreshes them after moving bodies by hand. Every shapeimplements
CastRay.LinearLockandAngularLockon dynamic bodies, along andaround the world axes. A locked axis has no inverse mass, and the free axes use
the exact inverse of the free block of the inertia.
Material.SpinningResistance, a warm-startedfriction row around the contact normal, bounded by
resistance × radius × normal impulse. Off by default.Fixed
measured between the contact point and the friction center on the same
surface. A single contact point has a lever arm of exactly zero: a ball
spinning on the ground no longer slows down on its own (it used to lose
0.068 rad/s² with no resistance set).
removed body in its list of moved bodies, which could panic on the next step.
Bench
median of 32 variants of their scene, with a tolerance derived from the spread
of the ensemble, instead of a single run.
baseline.jsonregenerated (fingerprints and timings).Breaking changes
actor.ShapeInterfacegainsCastRay: a shape implemented outside Feathermust provide it.
RigidBodybuilt as a struct literal, withoutNewRigidBody, has an emptylayer and mask and collides with nothing. Set
Layer: actor.LayerDefault, Mask: actor.AllLayers.Joint.CollideConnectedis read byAddJoint; changing it afterwards has noeffect.
Material,RigidBodyandManifoldhave new fields: unkeyed struct literalsno longer compile.
Set
Material.SpinningResistanceto get a spin brake back.Documentation
README,ALGORITHMS.mdandPHYSICS_GUIDE.mdcover the new features, withtheir sources (Box2D v3, Box3D, Jolt, PhysX, Bullet, Rapier) cited by version.