From a2f8ddccf1a42104113250c2d198203434d492fe Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Tue, 10 Nov 2026 19:06:11 +0100 Subject: [PATCH] docs(vehicle): record the FBX bakes a -90 deg armature roll The export rotates the armature -90 deg about X (wheel axle on Z) while leaving the mesh unrotated. Head/tail, axis_forward:X, and armature pre-roll all failed to change the imported bones. Next: post-import skeleton fix or bake_space_transform. --- MEMORY.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/MEMORY.md b/MEMORY.md index cfaabc5..bda8850 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -1074,3 +1074,21 @@ Historical task context from 2026-11-09/10; later vehicle findings above may sup space transform so mesh and armature share one frame. Verify with the reference-pose probe (`get_ref_bone_pose` → the wheel axle should read ±Y, not ±Z) before re-running the drive test. + +## 2026-11-10 — Vehicle reverse: FBX armature bakes a −90° roll the build can't undo + +- Inspecting `vehicle_skeletal.fbx` (imported back into Blender) shows the export bakes a + **−90° rotation about X** into the armature: `root` tail (0,1.64,0), wheel tails at + (x, 0.33, ±0.83) — the wheel **axle lands on Z**, not Y. The mesh vertices are exported + unrotated (bounds 476×228×144), so mesh and armature come back in different frames. +- Three Blender-side fixes were tried and **none changed the imported wheel bones**: + 1. axle tail along −Z (head/tail) — reference pose unchanged; + 2. `axis_forward: "X"` on the `_CHARACTER` preset — unchanged; + 3. armature object pre-roll −90° about X — unrolled the `root` (roll 90→0) but left the + wheel bones at roll ±90 / Z ±0.81. +- Conclusion: the export bakes the armature conversion regardless of head/tail or the + object transform. Remaining options (untried): `bake_space_transform: true` (also rolls + the mesh — would need the mesh un-rolled again in Unreal), or a **post-import skeleton + fix** — rotate each wheel bone's reference pose −90° about X in `ue_vehicle_import.py` + (or a commandlet) so the axle lands on Y. Verify with the `get_ref_bone_pose` probe + (axle should read ±Y) before re-running `-drivetest`.