Ridge scene: physical sky over Vienna, real horizon, live weather (Nibu) #110

Merged
void merged 6 commits from void/ridge-scene into dev 2026-11-12 02:48:05 +00:00

2026-11-12

Nibu
Ridge: credits in the Sky menu, Eureka's reader rule, refresher script dropped
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m11s
- The Sky menu names the data under the Ridges background: GeoSphere's own credit line, the TAWES 10-minute dataset with its CC BY 4.0 (dataset named), and the Copernicus DEM credit.
- weather.json is stale 30 min after fetched_at or 40 min after observed_at, a future fetch time, or another station (docs/weather-feed.md in gamecult-ops); fetched with no-store.
- scripts/refresh-weather.mjs and its test removed: Eureka's refresher is the only writer. The parse test reads the shape she writes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 02:23:11 +00:00
Nibu
Ridge: real horizon layer, weather from weather.json (GLOW vs Haurwitz, sunshine cross-check, humidity at night), cloud deck, mist, rain, soft sun, hold-the-budget paint
- The farthest layer is viennaHorizon.json as the silhouette (smoothed 1.5 degrees; azimuth across the viewport; no drift).
- weatherFeed reads a static weather.json (fetched_at, observed_at, station, precip_mm_10min, humidity_pct, glow_wm2, sunshine_s_10min, attribution); stale >30 min, missing or malformed is clear sky. The browser calls no weather service. scripts/refresh-weather.mjs is the reference refresher. Credit line is GeoSphere's own; no licence is claimed.
- clouds.ts (deck in the dome), mist multiplier on the layers' own, rain.ts (two tiled textures slid by the compositor), the sun disc drawn on the upscaled canvas.
- paintSky holds the state's luminance budget on its own grid (toneMap.holdBudget); physicalSky.test.ts measures every tonemapped texel over weather x season x viewport.
- Day floor stays 0.4744 so the dark link keeps 4.5:1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 02:23:11 +00:00
Nibu
Ridge: viewpoint is the server location, horizon baked from Copernicus GLO-30, TAWES weather feed, day floor restored for 4.5:1 link
- VIENNA = 48.1929826 N, 16.3534237 E, 183 m (Meta, 2026-11-11); sun follows.
- scripts/bake-horizon.py bakes viennaHorizon.json (720 azimuths: elevation, distance, peak height, slope) from nine GLO-30 tiles; source, licence and attribution are in the file's source block. horizon.ts reads it. Not yet drawn by the scene.
- weatherFeed.ts: GeoSphere TAWES station 11035 (CC BY 4.0) to a weather number. Not yet wired to skyForState.
- Day floor 0.4744 again (the dark link needs ~0.4554; the WIP floor 0.317 left it at 3.3:1). The three red tests of the WIP are green.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 02:23:11 +00:00
Nibu
WIP ridge: physical sky over Vienna (Hillaire LUTs, Earth coefficients, real-clock sun), ACES display fitted per state, RIDGE_NIGHT_BAND removed
Not landed: 3 tests red (skyState 'night below day and dusk', two skyTheme ink checks that read the old bands), no clouds/rain/mist yet,
no stills, no Aqua-method measurement of the new sky, no Soul pass. Local branch only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 02:23:11 +00:00
Nibu
Ridge night: draw the sky and layers under a lower ceiling (0.04) so the navigator's foldout headers clear 4.5:1
The headers wear a dimmer ink than room rows (L 0.37 against 0.59 on screen), so they need a backdrop of at most ~0.047 and the baked
midnight gradient (0.058 to 0.077) left them at 3.9 to 4.2 (Aqua, rat-crest-a7c95ce-20261111). The ridge scene takes its own night band
(RIDGE_NIGHT_BAND); the terrain keeps SKY_BAND.night. skyBackdrop night.darkest follows the ridge.

Measured at 360 px with Aqua's rat-measure, one frame each: night min 3.88 -> 4.77 over all 13 rows; day and dusk rows unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-12 02:23:11 +00:00