Skip to content

t2m: transport stabilized twist in the direction retarget #857

Description

@fernandotonon

Part of epic #837. The bind-referenced direction retarget (PR #843) deliberately drops twist (roll about the bone axis): each bone is aimed with a shortest-arc rotation from its bind direction, inheriting the bind's roll. Gesture-heavy clips (dance, wave) lose forearm/spine roll and read flat; self-parity carries a ~0.6° penalty vs the R0 variant.

Plan

  • Decompose the source bone's frame rotation into swing (direction, already transported) + twist about the bone axis: twist_s(f) = swing⁻¹ · Δs(f) projected on the source bone axis.
  • Map the twist angle onto the target's bone axis and compose after the aim: Wt(f) = arc(dt_bind → ds(f)) · twist(θ_s(f), dt-axis) · Wt_bind.
  • Stabilize: unwrap θ across frames (no ±180° pops near the shortest-arc degeneracy), optional low-pass, and a per-role cap (collars/spine need little, forearms benefit most).
  • Guard with the existing eval harness: Mixamo Walk self-parity must improve (target ≤1.6° matching the R0 baseline) with NO cross-rig regressions on the fox (bbox + silhouette IoU + pinned-clip renders for the samurai/knight/swim rigs).

Acceptance

  • Self-parity ≤1.6° mean joint delta; fox renders unchanged-or-better on walk/dance/jump/idle.
  • A twist-heavy clip (wave/dance) shows forearm roll matching the source side-by-side.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions