Records the settle-time decode, and corrects two claims it overturns.
docs/re/structures/ui-settle-time.md is the finding: a settled screen is one
instant every element is posed at, the disc names it (the midpoint of the
longest keyframe-free interval), and the title's arc closes from 33.22 to
11.79 with the clipped-pixel count landing on the console's 1459 within 0.5%.
Includes the disc-wide reach -- only 30% of bundles have a window wide enough
to trust -- and a three-way figure.
Withdrawn in ui-rotation-implemented.md:
* "Flat. No minimum." was not a property of rotation. `at` posed LEAVES ONLY,
so the scan moved the light sweeps and never touched the top-level flashes.
* "our renderer does not draw ptlogo1/ptlogo2 at all" is wrong. Both are
drawn; the four elements the diagnostic named are kind-0x4 ghosts sharing
their template's name. Hiding the real ones makes the error WORSE by
+5.20 and +7.47.
* Its 10.92 baseline is not reproducible -- 14.07 at its own pre-change tag
and 14.07 today -- so the "1.7% better" verdict rests on an unrecorded
recipe. Flagged in title-residual-tone-vs-geometry.md too.
METHOD.md gains two traps: a shared CARGO_TARGET_DIR makes a `git worktree`
build silently replace the binary you run next (it cost three renders here,
caught only because a missing flag was a hard error rather than a wrong
number); and an aggregate computed per-element is not a state of the system.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd
92 lines
4.2 KiB
Markdown
92 lines
4.2 KiB
Markdown
# ✅ At least two thirds of the title's disagreement is GEOMETRY, not tone
|
||
|
||
> ⚠️ **The 10.92 title baseline here could not be reproduced on 2026-08-29** —
|
||
> `screen render --build 4 --black` against the same capture gives 14.07 both at
|
||
> `formats-pin-2026-08-29c` and today. The *ratio* this document argues for may
|
||
> well survive; the absolute is in doubt. Separately, part of the title's residual
|
||
> is now known to be neither tone nor rotation but `rest()` posing five transient
|
||
> flashes at their peaks — [`ui-settle-time.md`](ui-settle-time.md) closes the
|
||
> light-arc band from 33.22 to 11.79.
|
||
|
||
**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.
|