From 8b7c9da067d116a29ea51ff9f48bed171a5cbf11 Mon Sep 17 00:00:00 2001 From: "Claude (auto-RE)" Date: Tue, 11 Aug 2026 21:41:20 +0000 Subject: [PATCH] re: clear mirror handling and the exhaust cones -- the viewer bug's static avenue is exhausted Mirror handling: the concern was that apply() bakes R*(S*v)+T while the viewer decides winding from det(m) alone and rotates normals by m alone, so a mirror encoded as negative SCALE would reflect geometry without flipping winding. It never happens -- across 1485 assembled parts in all 22 containers there are 22 mirrored parts, every one with det(m) < 0, and ZERO negative or non-uniform scales. apply_twin_mirrors writes the reflection into m, so the flip always fires and ignoring s for normals is harmless. Exhaust cones: the only geometry the viewer invents, drawn at GN_Jet/GN_SJet frames because the real engine geometry is recessed. Across 335 assembled ships, 192 with exhaust frames, not one cone sits outside its hull bounding box (10% of span tolerance). Caveat kept in the doc: inside-the-box does not prove a cone is correctly oriented or sized -- it rules out the reported symptom, no more. Every mechanism the diagnosis proposed is now eliminated (include_external, duplicate names, mirrors, cone placement). The visual comparison is no longer the next step but the only remaining one, and if it agrees the original report needs re-grounding against a specific ship and expectation. Co-Authored-By: Claude Opus 5 (1M context) --- docs/re/BACKLOG.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/docs/re/BACKLOG.md b/docs/re/BACKLOG.md index 080e2f3..b81f0bf 100644 --- a/docs/re/BACKLOG.md +++ b/docs/re/BACKLOG.md @@ -113,3 +113,40 @@ resolves to the one model it names. **So two of the three candidates are gone** (this one and `include_external`), leaving **mirror handling** and **the exhaust cones** — and the still-untried visual comparison, which remains the right next step. + +--- + +## Viewer: mirror handling and the exhaust cones are cleared too — the static avenue is exhausted + +**Checked 2026-08-11.** Both remaining candidates were tested across every ship +on the disc, and neither shows the reported signature. + +**Mirror handling.** The concern was that `ScenePart::apply` bakes `R·(S·v)+T` +while the viewer takes its winding-flip decision from `det(m)` alone and rotates +normals by `m` alone — both ignoring `s`. A mirror encoded as a *negative scale* +would then reflect geometry without flipping winding, drawing the part +inside-out. It never happens: across **1 485 assembled parts** in all 22 +containers there are **22 mirrored parts, every one with `det(m) < 0`**, and +**zero** parts with a negative scale or a non-uniform one. `apply_twin_mirrors` +writes the reflection into `m` (negating its X column), so the viewer's flip +always fires, and ignoring `s` for normals is harmless because `s` is always +uniform. + +**Exhaust cones.** These are the one piece of geometry the viewer *invents* — a +cone at each `GN_Jet`/`GN_SJet` frame, because the real engine geometry is +recessed and the game draws FX there instead. If they landed wrongly they would +read exactly as "a part in the wrong place". Across **335 assembled ships, 192 of +which have exhaust frames, not one cone sits outside its hull's bounding box** +(tolerance 10 % of the axis span). + +**Caveat, stated rather than glossed:** "inside the hull box" does not prove a +cone is *right* — orientation and size are untested, and a cone could be wrong +while still inside. What it does rule out is the reported symptom for that part. + +So every mechanism this diagnosis proposed is now eliminated: `include_external`, +duplicate resource names, mirror handling, and cones-in-the-wrong-place. The +format and assembly layers pass every static test available, and **the visual +comparison is no longer merely the next step — it is the only remaining one.** +Render `e106` in the viewer beside `ship_render`'s output of the same +`assemble_ship` result; if they agree, the bug is in neither and the original +report needs re-grounding against a specific ship and a specific expectation.