Make props solid: body-vs-prop contact solving - #50
Merged
Conversation
The wall-sit hinged the pelvis straight through the wall: authored poses are pure joint rotations and the root solvers only knew the floor and named anchors, so nothing pushed back when FK carried the body into a prop. Sit-to-stand and box-squat sank the torso into the chair's backrest the same way, and a step-up's trailing shin swept through the box. Props now declare solid one-sided faces (wall surface, chair backrest + seat edge, box near face) and a new contact pass (propcontact.ts) removes any body overlap after ground-lock/pins/grips: - Body-resolved faces translate the whole figure along the face normal: a wall-sit slides down the wall's SURFACE, feet walking forward as the back stays pressed to it — the physically correct resolution. - Limb-resolved faces bend the offending leg's hip clear (ROM-clamped, reusing the self-collision joint utilities), so a swing leg steps over the box edge without disturbing the root. - Limbs pinned/gripped/reached to a prop anchor are that phase's declared support and stay exempt (a foot standing ON the box is not "inside" it). Solidity is per-face, not per-volume, because contact intent differs by surface: the seat TOP stays a support surface thighs rest on; the seat EDGE blocks a standing figure's calves. Eval: the probe mirrors the pass for viewer parity and records the contact push so skate metrics treat it like authored travel; a new solid-props invariant (independent re-derivation of the face geometry, the old head-clearance abs() let a fully-through torso pass) guards every prop movement. 1007/1007 checks, 254 tests, typecheck clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HLLdtbBvZUA3YnsJQsomNL
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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 wall-sit hinged the pelvis straight through the wall: authored poses
are pure joint rotations and the root solvers only knew the floor and
named anchors, so nothing pushed back when FK carried the body into a
prop. Sit-to-stand and box-squat sank the torso into the chair's
backrest the same way, and a step-up's trailing shin swept through the
box.
Props now declare solid one-sided faces (wall surface, chair backrest +
seat edge, box near face) and a new contact pass (propcontact.ts)
removes any body overlap after ground-lock/pins/grips:
a wall-sit slides down the wall's SURFACE, feet walking forward as the
back stays pressed to it — the physically correct resolution.
reusing the self-collision joint utilities), so a swing leg steps over
the box edge without disturbing the root.
declared support and stay exempt (a foot standing ON the box is not
"inside" it).
Solidity is per-face, not per-volume, because contact intent differs by
surface: the seat TOP stays a support surface thighs rest on; the seat
EDGE blocks a standing figure's calves.
Eval: the probe mirrors the pass for viewer parity and records the
contact push so skate metrics treat it like authored travel; a new
solid-props invariant (independent re-derivation of the face geometry,
the old head-clearance abs() let a fully-through torso pass) guards
every prop movement. 1007/1007 checks, 254 tests, typecheck clean.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01HLLdtbBvZUA3YnsJQsomNL