diff --git a/docs/re/structures/title-residual-tone-vs-geometry.md b/docs/re/structures/title-residual-tone-vs-geometry.md new file mode 100644 index 00000000..f7374512 --- /dev/null +++ b/docs/re/structures/title-residual-tone-vs-geometry.md @@ -0,0 +1,83 @@ +# ✅ At least two thirds of the title's disagreement is GEOMETRY, not tone + +**Classification: measured**, on committed captures. Answers a question the +pending rotation decision needs: *how much would drawing the rotation actually +buy?* + +Two separate effects are known to make our renders differ from the console: + +* the **tone curve** — the console renders midtones brighter than we do + ([`ui-render-tone-curve.md`](ui-render-tone-curve.md)), and its single-exponent + model is refuted above render ≈ 40; +* the **missing rotation** — our blit draws axis-aligned rectangles, so the + title's two tilted light sweeps land as upright bars + ([`ui-keyframe-rotation.md`](ui-keyframe-rotation.md)). + +They are confounded in any whole-frame number. This separates them. + +## Method, and why the split is an upper bound on tone + +A **per-level lookup table** fitted on a screen is the most general tone model +there is: it maps every render level to whatever capture level minimises the +error, with no functional form assumed. **Whatever such a LUT cannot close is, +by construction, not a per-pixel-level effect** — it is spatial. + +So fitting a LUT *on the screen itself* and measuring what remains gives an +**upper bound on the tone share** and a **lower bound on the geometry share**. + +## The positive control + +The method must be able to close a residual that really is tone. On the **main +menu** — where the port measures only 0.06 % of pixels differing, so geometry is +essentially right — it does: + +| | mean abs difference | closed | +|---|---|---| +| main menu, uncorrected | 9.26 | — | +| **main menu + LUT fitted on the main menu** | **2.75** | **70.3 %** | + +✅ The instrument works: a tone-dominated residual collapses by 70 %. + +## The result + +| | mean abs difference | closed | +|---|---|---| +| title, uncorrected | 10.92 | — | +| **title + LUT fitted on the title** | **7.42** | **32.0 %** | + +🔴 **At most 32 % of the title's disagreement is a tone effect, so at least 68 % +is spatial** — content in the wrong place. That is where the rotation lives, and +it makes the rotation the dominant term by roughly two to one. + +⚠️ The same-screen LUT is *fitted*, so 32 % is generous to tone. The true tone +share is smaller and the geometry share larger. + +## 🔴 And a claim this refutes: there is no single transferable tone curve + +Fitting on one screen and applying to the other: + +| | closed | +|---|---| +| main menu + LUT fitted on the **title** | **+29.7 %** | +| title + LUT fitted on the **main menu** | **−24.0 %** ✗ | + +**The menu's curve makes the title worse.** A curve fitted on a dark, flat screen +is unconstrained at the bright end — the menu's populated range is levels 5–204 +with few bright pixels — and extrapolating it onto the title's planet and +wordmark actively harms. + +⚠️ So *"the tone curve"* is not one thing that can be measured once and applied. +This extends [`ui-render-tone-curve.md`](ui-render-tone-curve.md)'s refutation of +the single **exponent**: even a full per-level LUT fails to transfer between +screens. **A consumer must not carry a global tone correction.** + +## Reach + +* Two screens, one capture each; the title capture is the plate-free frame and + our render is at rest, so they are **the same screen but not the same + instant** — a looser pairing than the port's posed comparison, which is why + the absolute numbers here (10.92) are larger than its 1.81 % of pixels. + ⚠️ The *ratio* is what this page claims, not the absolute level. +* Our render draws the sweeps' **parent** record only — the pre-leaf-fix state — + so the geometry share measured here includes both the missing rotation and the + missing leaf placement. Both are closed by the same decision.