diff --git a/TODO.md b/TODO.md index 25820fe..337ddc7 100644 --- a/TODO.md +++ b/TODO.md @@ -733,3 +733,61 @@ the fine region and p99 29.1 m / **max 459.3 m** in the coarse one — 27.2 px a the default whole-board pose, out in the bay. The board is cheap because the pack declares 90% of it unimportant. That is a defensible trade and it is not the same thing as being right. + +## One California is descendable now, and vertical exaggeration is what stops it + +Recorded 2026-08-24, at `e5b9339`, with the photographs that found it. That +commit removed the three things keeping the camera off the merged board — the +orbit floor, the missing metro rungs and the board-switching doors — and what +is left is one cause with two faces. + +**`verticalExaggeration` is a per-board constant and this board is not one +scale.** `reconciledExaggeration` derives it so the tallest blended peak fills +`RELIEF_IN_FRAME` of the board span: 15.00 for California against a 5,132 m +blended peak, 5.78 for the Bay Area, 3.41 for the Southland. All three are +correct *for framing that board whole*, and 15 is what makes the Sierra readable +at 1,551 km. The merged board is the first one a visitor can traverse from +1,551 km down to 7.7 km, and the constant that frames the state buries the city: + +- **At FiDi (7.7 km) the camera is inside the terrain.** San Francisco's relief + is drawn 2.6x taller here than on its own board — Twin Peaks' 280 m becomes + 4.2 km of drawn height, which is 2.2 units on a board where the whole descent + is about 2. The photograph is `/tmp/tera-look/one-fidi.png`: a grey wall, a + Bay Bridge overhead, and buildings as needles because `world.metres` runs + building heights through the same exaggeration. +- **At the Bay rung (45 km) the ground is visibly faceted.** 300 m cells + (`UNIFIED_FINE_METRES`) at 15x turn every hill into angular shards. The cell + size is the known gap; the exaggeration is what makes it *visible*, because + vertical error scales with it and horizontal error does not. + +So exaggeration has to fall toward 1 as the camera descends, which is what an +orthophoto globe does and why none of them exaggerate at all. **It is not a +constant this file can simply lower**: 15 is load-bearing at the state pose, and +the Sierra at 5.78 is a bruise on a plate. + +The blocker is the one `TODO.md` already names for the terrain quadtree, and it +is the same blocker: **everything is placed once at scene build against +`groundAt`.** Buildings, landmarks, bridges, airports, ports, markers and road +ribbons all read a ground height at build time, so an exaggeration that changes +with altitude moves the ground out from under every one of them. Whatever +carries the exaggeration ramp has to carry re-placement with it, and that is the +same machinery a streaming terrain needs. They should be built together or the +second one rewrites the first. + +Two smaller things the same photographs turned up, neither of them blocking: + +- **Building heights ride the board's exaggeration.** `world.metres(heightM)` is + `(m / metresPerUnit) * verticalExaggeration`, so a 60 m building on the merged + board is drawn at 15x while the same building on the Bay board is at 5.78x. + On a 160 m lot that is a needle. Relief and structures arguably want different + treatment, and nothing has ever had to decide because no board carried both at + two scales. +- **The metro lots are still 160 m** (`DETAIL_LOT_METRES`), chosen against the + Southland's own lot size and explicitly not San Francisco's 40 m because the + board has to fit one budget. At 45 km that reads as scattered cubes rather + than as a city. A second, nearer detail tier at 40 m — bounded to the + districts actually inside a much tighter reach than `DETAIL_REACH_M` — is the + shape of the fix, and it must be measured rather than assumed: the Bay board's + 83,137 lots are ~1M triangles against this board's whole 400,000 cap, so the + tier is affordable only because the reach is small. Do not start it before the + exaggeration ramp, or it will be tuned against relief that is about to change.