Skip to content

Make props solid: body-vs-prop contact solving - #50

Merged
a-baran-orhan merged 1 commit into
mainfrom
claude/wall-sit-clipping-fix-tsdjl2
Jul 13, 2026
Merged

Make props solid: body-vs-prop contact solving#50
a-baran-orhan merged 1 commit into
mainfrom
claude/wall-sit-clipping-fix-tsdjl2

Conversation

@a-baran-orhan

Copy link
Copy Markdown
Member

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 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
@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
posecode Ready Ready Preview, Comment Jul 13, 2026 1:34pm

@a-baran-orhan
a-baran-orhan merged commit f1e8795 into main Jul 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants