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.