Stop shipping misshapen characters; keep the retarget work - #25
Merged
Conversation
/play was rendering splayed, misshapen figures. The bots go back to the
generated character, which renders correctly.
The Synty models are committed and load fine; the fault is my retargeter. It
constrained each target bone to the source bone's *absolute* world rotation,
which is only correct when both skeletons share rest poses. Synty uses Unreal's
axis convention and our clips use another, so every bone sat at its rest-pose
difference and the error compounded down each limb — measured at
1.90 x 2.00 x 2.47 m against roughly 0.6 x 0.4 x 1.8 for a standing figure.
import_synty.py now carries the corrected relation:
target.matrix = source.matrix @ (source.rest⁻¹ @ target.rest)
so what transfers is the source's motion away from its own rest rather than its
raw orientation. That maths runs, but its manually keyed actions do not survive
the glTF export the way `nla.bake`'s did — all five clips collapse into one
named after the object. Until that is resolved the Synty characters cannot ship
animated, so they are not shipped.
Swapping back is two lines in opponents.ts, noted there.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
vu1nz Security Review0 finding(s) in PR #? No security issues found. |
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.
/playwas rendering splayed, misshapen figures. Bots go back to the generated character, which renders correctly.The Synty models are committed and load fine — the fault is my retargeter. It constrained each target bone to the source bone's absolute world rotation, which is only correct when both skeletons share rest poses. Synty uses Unreal's axis convention and our clips use another, so every bone sat at its rest-pose difference and the error compounded down each limb.
Measured: 1.90 × 2.00 × 2.47 m against roughly 0.6 × 0.4 × 1.8 for a standing figure.
import_synty.pynow carries the corrected relation:so what transfers is the source's motion away from its own rest, not its raw orientation. That maths runs, but its manually keyed actions don't survive the glTF export the way
nla.bake's did — all five clips collapse into one named after the object. Until that's resolved the Synty characters can't ship animated, so they aren't shipped.Swapping back is two lines in
opponents.ts, noted there.201 tests pass.
🤖 Generated with Claude Code