From 4c3c128594565626b1ef53f4f12b082a202718e5 Mon Sep 17 00:00:00 2001 From: grom Date: Tue, 27 Oct 2026 17:03:04 -0600 Subject: [PATCH] Screen the capture scenarios for determinism, and correct what rested on one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Routine work on the sharpening lane needed a byte-identity control, so I checked the baseline against itself first. Three of seven scenarios do not reproduce run to run with ONE binary: overlook-noon, water-lake, water-ocean, fence-shadowline-night identical stormwind-canal-near bimodal: 7 of 15 pairs identical, rest 0.01% / max 96 inn-noon, volfog-inn usually the bottom bit; one pair 37.8% / max 199 `stormwind-canal-near` is the one that matters, because the water-mirror write-up used it as a byte-identity control and it cannot be one. The identity measured there was a coin flip that landed well. The finding it supported still stands, but on its EXTENT and not on the amplitude it was also quoted at. "0.75% of pixels by up to 96/255" reads as one observation; it is two, and only the first is evidence. 96 is what the canal's own flicker reaches with nothing changed at all — the amplitude says nothing. 0.75% against the scene's own 0.01% is 75x, which is the part that was real, and the run condition is still the right fix. docs/GRAPHICS.md's harness section now carries the table, so the next person reaching for a control picks from the first row. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn --- docs/GRAPHICS.md | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/docs/GRAPHICS.md b/docs/GRAPHICS.md index fa2c7ee6..2bf6e3aa 100644 --- a/docs/GRAPHICS.md +++ b/docs/GRAPHICS.md @@ -50,6 +50,21 @@ A/B cannot tell them apart; `WOW_CVAR_LATE` can. Anisotropy's live path is verif proves the harness is actually reaching the thing being measured. Five such pairs once matched byte for byte before anyone checked whether the view read the table at all. +**And check the baseline against ITSELF before using it as one.** Not every scenario reproduces, +and the ones that do not are not obvious from the outside. Screened by rendering each twice with +the same binary and once more over six runs: + +| scenario | byte-identical run to run? | +|---|---| +| `overlook-noon`, `water-lake`, `water-ocean`, `fence-shadowline-night` | **yes** | +| `stormwind-canal-near` | **no** — bimodal: 7 of 15 pairs identical, the rest differ on **0.01%** of pixels by up to **96**/255 | +| `inn-noon`, `volfog-inn` | **no** — usually the bottom bit, but one pair came back **37.8%** of pixels at up to **199** | + +So a byte-identity claim can only rest on the first row. The second row is the dangerous one: the +canal's own flicker reaches a channel delta of **96**, which is exactly the amplitude a real +finding there was once read at — amplitude alone says nothing, only extent does, and the canal's +own noise is 0.01% of the frame. + ## Already shipped and worth spending These need no code. They are the cheapest picture available today. @@ -229,8 +244,14 @@ Three defects, in the order they were found: canal inside the noise; CPU +0.2 to +1.1 ms. It is the first lane here that spends **main thread**, which is why it is a rung of its own above High rather than part of it, and why the default stays 2. -**Two things it could not be allowed to cost.** With the lane off, both scenarios are -**byte-identical** to the build before it — and getting there took two findings: +**Two things it could not be allowed to cost.** With the lane off, the build is **byte-identical** +to the one before it on `water-lake` — and getting there took two findings. (This was written up +as holding for `stormwind-canal-near` too. It does not, and cannot: the canal is **bimodal between +runs of one binary**, 7 of 15 pairs identical and the rest differing on 0.01% of pixels by up to +96/255 — see the harness section. The identity measured there was a coin flip that landed well. +The finding below still stands on its extent, not on its amplitude: 0.75% of the frame is 75x the +scene's own 0.01%, and the amplitude the two share — 96 — turns out to be the canal's own flicker +and to mean nothing at all.) - The system could not live in `Update` at all. `&mut Transform` on a camera is shared with everything that moves anything; declaring it put 59 undeclared orders into `Update` and tripped @@ -240,8 +261,10 @@ which is why it is a rung of its own above High rather than part of it, and why the asset handle changed the count by zero.) - **A system that runs and returns on its first line is still not free.** Holding `&mut Camera` and `&mut GlobalTransform` for a frame is enough to change which undeclared orders the executor - picks: the canal moved 0.75% of its pixels by up to 96/255 with the lane switched off. So the - whole system sits behind a run condition, not an early return. The same effect killed a + picks: the canal moved 0.75% of its pixels with the lane switched off, 75x the extent of its own + run-to-run noise. So the whole system sits behind a run condition, not an early return. (Read + the EXTENT: the 96/255 this was also quoted at is the canal's own flicker amplitude, which it + reaches with nothing changed at all.) The same effect killed a `.before(UpdateDirectionalLightCascades)` order that was correct in itself — declaring it moved the canal's lamp light with the feature off, and what it bought was a half-res rippled reflection whose shadow cascades fit this frame's pose rather than last frame's.