diff --git a/TODO.md b/TODO.md index 9897330..7489ede 100644 --- a/TODO.md +++ b/TODO.md @@ -775,11 +775,16 @@ blocked rig can no longer block the whole release. (pose-rotate → apply modifier → reset pose → edit-mode rotate arms → re-add modifier → export `export_apply=False`) now yields a correct arm-down base: Blender deformed x ±0.221 and the rest bone tail points down. Still local (`tmp/`), not shipped. -- [ ] Re-derive the pose composition for a non-180° rest. Godot's `set_bone_pose_rotation` is +- [x] Re-derive the pose composition for a non-180° rest. Godot's `set_bone_pose_rotation` is rest-relative, so `rest * Quaternion(axis, angle)` only reproduces the old rig by accident - (the old rest is 180°, so `rest² = identity`); the Quaternius ~76° rest breaks it. Derive the - correct composition (candidate: `rest.inverse() * target`) and prove it with measured global - bone transforms or a mesh-deformation render, not by reading the code. + (the old rest is 180°, so `rest² = identity`); the Quaternius ~76° rest breaks it. Fixed in + commit `8b1bf73`: `rest * Quaternion(rest.inverse() * axis, angle)` — backward-compatible + (the old 180° rest maps the axis to itself). Godot 277/277. +- [ ] Godot skinning import: the arm-down GLB is now provably correct (raw vertices x ±0.175, + rest tail down, inverse bind matrices arm-down; Blender renders arm-down), but Godot 4.7.2 + still renders the mesh in a T-pose. This is a Godot glTF importer skinning issue, not a + Blender bake or pose-formula issue. Next: isolate with a minimal 2-bone glTF, check the + Godot issue tracker, and try alternate export settings. - [ ] Add regression tests: a bone with a ~76° rest reaches a known global orientation; the Quaternius joint map resolves; the 13-core fallback poses exactly as it does today. - [ ] Verify Idle and Walk on the 62-joint rig: loop seam, foot contact, root motion and frame