From 9b65a93587cf9ecd1527b5aefcf7fafa662d1a29 Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Fri, 6 Nov 2026 10:13:32 +0100 Subject: [PATCH] Narrow the Godot skinning blocker to the importer's rotated bind_pose --- TODO.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 7489ede..e2cae11 100644 --- a/TODO.md +++ b/TODO.md @@ -780,11 +780,13 @@ blocked rig can no longer block the whole release. (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. +- [ ] Godot skinning import: the arm-down GLB is provably correct (raw vertices x ±0.175, rest + tail down, inverse bind matrices arm-down; Blender renders arm-down), and the Godot-imported + mesh AABB is also arm-down (x ±0.221), but the render is a T-pose. Root cause narrowed to the + Godot glTF importer's `Skin.bind_pose` (inverse bind matrices): its bone direction is rotated + (Root `basis.y = −Z` instead of +Y), so the skin deforms the arm-down bind to T-pose. Same + result with `export_yup` True and False. Next: compare the old working `npc_casual.glb` + bind_pose, isolate with a minimal 2-bone glTF, and check the Godot 4.7.2 issue tracker. - [ ] 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