docs/re: open a backlog, first item = capital ships assemble wrong in the viewer
The runtime-capture write-up declares static ship assembly exact, but its test covers exactly one ship (e106). Records what is suspect (engine-cluster rig, the X-reflect twin heuristic, cross-id turrets), and that the F10 capture is already the oracle to settle it on a second class.
This commit is contained in:
46
docs/re/BACKLOG.md
Normal file
46
docs/re/BACKLOG.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# RE backlog
|
||||||
|
|
||||||
|
Open items that are *not* being worked right now. Each entry says what is wrong or
|
||||||
|
unknown, what evidence exists, and what the first step would be. Move an item into
|
||||||
|
`INDEX.md` (with a `structures/…md` or a parser + test) once it is actually settled.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Capital ships assemble wrong in the viewer
|
||||||
|
|
||||||
|
**Reported:** 2026-07-30, by the user. **Status:** ❔ open, not investigated.
|
||||||
|
|
||||||
|
The reborn viewer builds capital ships from the split XBG7 parts via
|
||||||
|
`sylpheed-formats::ship::assemble_ship`, and they come out **wrong** — parts in the
|
||||||
|
wrong place / wrong orientation.
|
||||||
|
|
||||||
|
**Why this is a real finding and not a known limitation:** the RE write-up
|
||||||
|
[`ship-placement-runtime-capture.md`](ship-placement-runtime-capture.md) declares
|
||||||
|
static assembly ✅ **exact** as of 2026-07-26 — 9-channel joint tables
|
||||||
|
`[TX TY TZ RY RX RZ SX SY SZ]`, Euler `Ry·Rx·Rz`, with
|
||||||
|
`ship::tests::static_assembly_matches_runtime_capture` asserting static == runtime
|
||||||
|
capture (T < 1.0, R < 0.02). So either the viewer is not using that path, or the
|
||||||
|
claim generalises worse than the test suggests.
|
||||||
|
|
||||||
|
**The likely gap:** that test is **one ship** — the `e106` destroyer, 8 parts plus
|
||||||
|
two nacelles, two turrets and the hull mirror. Nothing pins the other classes.
|
||||||
|
Rules that were derived from `e106` and could easily be `e106`-specific:
|
||||||
|
|
||||||
|
- the engine cluster rig mounted at `GN_Engine_01` (two mirrored nacelles + centre);
|
||||||
|
- "X-reflect the shared-geometry twin whose lateral offset opposes the geometry's
|
||||||
|
dominant side" — a heuristic, not a decoded flag;
|
||||||
|
- cross-id turret instancing (×2).
|
||||||
|
|
||||||
|
**First step (the oracle already exists):** re-run the runtime capture on a *different*
|
||||||
|
capital ship and diff static vs captured, exactly as `e106` was done — F10 in the
|
||||||
|
`capture-ship-placement` build of `xenia-canary-native` dumps the ship shader's
|
||||||
|
`c0..c2` WorldViewProjection rows per part; `WV_ref⁻¹ · WV_p` is the ship-space rigid
|
||||||
|
transform, which is ground truth. Pick a class whose rig differs from `e106`
|
||||||
|
(different engine count, a ship with no `sld`, a carrier). Then extend
|
||||||
|
`static_assembly_matches_runtime_capture` into a per-ship table so a regression in one
|
||||||
|
class cannot hide behind `e106` passing.
|
||||||
|
|
||||||
|
**Also worth ruling out first, cheaply:** that the viewer's own transform stack (scale,
|
||||||
|
handedness, node-instance recursion) is not re-breaking a correct assembly — compare
|
||||||
|
the viewer's placement against `assemble_ship`'s output directly before blaming the
|
||||||
|
format layer.
|
||||||
Reference in New Issue
Block a user