Skip to content

t2m: --dump-canonical extracts inverted bone axes on some rigs (arm points skyward, neck points down) #905

Description

@fernandotonon

Found while curating the v6 motion library (epic #837 quality follow-up, PR #904).

Two families of corpus rigs extract with a per-bone axis inversion in --dump-canonical:

  • Quaternius shared-armature characters (Alien, Animated Men/Women, Knight): the right upper arm's extracted direction has mean signed up-component +0.38..+0.67 during walk/run (arm points diagonally up) while the left hangs at −0.9. Retargeted, one arm renders skyward.
  • Animated Astronaut (Sketchfab): the neck chain extracts pointing straight down (mean up-dot −1.00 across walk/idle/wave) — the retargeted head renders thrown back / buried in the torso.

The v6 library curation gates (signed per-arm hang check, neck-up check in build-motion-library-v5.py) DROP these takes, so the shipped library is clean — but the extraction itself is losing usable takes (~15% of locomotion takes dropped). Likely cause: the bind-geometry-derived direction (child-offset) picks a mis-parented or zero-length child on these armatures, or the calm-frame reference lands on a frame where the restWorld/restDir triple is inconsistent for that bone.

Fix idea: derive restDir per bone with a sanity pass — compare against the canonical T-pose expectation in the canonical frame and flip/re-derive when the sign disagrees at the reference frame (the same trick the canonicalizer uses for D_c), or fall back to the role's canonical direction when the child offset is degenerate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions