clouds3d-only cleanup: drop Vanta/three.js/clouds2d, real-sky fixes, settlement lights, dynamic location anchor

This commit is contained in:
Richard Zink committed 2026-10-09 14:13:03 +02:00
1 parent e4170bee62
commit fbac24773a
17 files changed
+3217 -3411

No files matched your search

+117 -7
View File
@@ -9,21 +9,54 @@
* timeFormat - Moment.js-compatible format string for the clock.
* debug - If 1, the right-side debug panel is shown.
* units - Object with 'temperature' ('C' or 'F').
* renderer - Background renderer: 'vanta' (default, GPU 3D volumetric
* raymarched clouds via three.js), 'clouds2d' (lightweight
* WebGL fragment shader, 2D fBm scrolling), or 'clouds3d'
* (volumetric raymarcher with camera fly-through).
* location - Geographic coordinates for sun/moon calculations. Used
* by SunCalc (https://github.com/mourner/suncalc). Object
* with 'lat' (latitude, -90 to +90) and 'lon' (longitude,
* -180 to +180). Positive lat = north, positive lon = east.
* Optionally add 'label' (string) to override the
* reverse-geocoded city name.
* Note: the height grid is axis-aligned (N up); terrain
* matches the 8-mode square mosaic and straight flights
* with fetch=N. Heights: Copernicus DEM via terrarium
* tiles (z9, ~200 m), fetched once per session.
* terrain - 3D ground from real elevation data. Object:
* enabled - true (default) / false = flat plane.
* exaggeration - vertical scale factor on the DEM
* (default 8; 1 would be physically
* true and nearly invisible at this
* horizontal scale).
* weatherSim - If true, ignore open-meteo and cycle through
* ['sunny','cloudy','stormy','night'] automatically every
* weatherSimInterval ms. Useful for A/B testing every
* theme without waiting on the API.
* weatherSimInterval - Sim cycle period in ms (default 30000).
* orbit - Figure-eight flight (Bernoulli lemniscate) around
* CONFIG.location instead of a straight drift. The
* eight's self-crossing sits exactly on the configured
* coordinate. Each time the aircraft crosses that point
* a new random orientation is picked and blended in
* over one lobe (spline through the crossing). Object:
* radiusKm - lobe tip reach from the centre in km
* (~13 km per tile at z11/48deg N).
* Clamped (~190 km) so tips + fog horizon
* fit inside the 43x43 tile mosaic.
* clockwise - travel direction along the eight.
* reorient - random re-aim at every crossing
* (default true; false keeps the bearing).
* Set to null (or remove) for the straight-line flight.
* fog - Ground fog / distance haze. Object with 'distanceKm'
* (visibility range at which terrain fully blends into
* a milky haze; default 120). false/0 disables fog.
* clouds - Vertical extent of the cloud deck in world units
* (1 unit = ~13 km at zoom 11; camera flies at y=2.2).
* Object with 'top' and 'bottom'. Default keeps the
* deck a bit below flight altitude.
* tiles - All downloads (street tiles, elevation grid, last
* weather payload, geo label) live permanently in
* IndexedDB and are never re-fetched once cached; a
* warm cache = fully offline rendering. Set
* expireDays (number > 0) to re-fetch street tiles
* periodically (e.g. 90).
*
* Time format tokens (subset):
* YYYY 4-digit year (2026)
@@ -42,19 +75,96 @@ window.CONFIG = {
theme: 'ash',
language: 'en',
timeFormat: 'DD. MMMM, YYYY ‒ HH:mm:SS',
debug: 1,
debug: 0,
units: {
temperature: 'C'
},
renderer: 'clouds3d', // 'vanta', 'clouds2d', or 'clouds3d'
// Data attribution at the bottom of the info box (auto text based on
// the enabled layers). false = ausgeblendet.
credits: true,
// Internal 3D resolution scale (0.3..1, default 1). Lower values
// render the clouds/map shader at reduced resolution and upscale
// via CSS - use it if fps is low (GPU-bound) despite a quiet CPU.
renderScale: 1,
location: {
// Latitude and longitude for sun/moon calculations
// Default: Passau, Germany
// Passau (vorher: Muenchen 48.1374/11.5755, Innsbruck 47.2692/11.4041)
lat: 48.5667,
lon: 13.4319
},
weatherSim: false,
weatherSimInterval: 30000,
// Alles Downloads (Strassenkacheln, Hoehengitter, Wetter-JSON,
// Geo-Label) bleibt dauerhaft im IndexedDB — kein erneuter
// Download. expireDays (Tage, >0) reaktiviert periodisches
// Auffrischen der Strassenkacheln.
tiles: {
expireDays: null,
// true = Kachel-Raender + N/S + x/y-Koords in die Boden-Textur
// malen (Debug-Orientierung). Aus = saubere Karte.
debug: false
},
// Boden-Bildquelle: 'satellite' = ESRI World_Imagery (Luftbild, ohne
// Beschriftung), 'streets' = ESRI World_Street_Map (mit Ortsnamen).
// Beide dauerhaft gecacht (eigener Cache- Praefix pro Stil).
ground: {
style: 'satellite'
},
// Achterkurs um location (lat/lon), ueberschneidungspunkt genau auf
// der Koordinate. null/entfernen = gerade Flugbahn.
orbit: {
radiusKm: 60, // Lappenspitze: max. Abstand vom Zentrum
clockwise: true,
reorient: true, // Zufalls-Ausrichtung an jedem Kreuzungs-Durchflug
// Langsames vertikales Wogen innerhalb der Flugband 15-35 km:
// Mitte 25 km (~1.93 Welt-Einheiten), amp = halbes Band
// (10 km ~ 0.77); harte Klemme ueber/unter die Bandgrenzen.
// periodS Sekunden pro Zyklus, tilt = Reaktion der Kamera-Nase
// auf Steig-/Sinkrate. enabled: false = konstant 25 km.
altBob: { enabled: true, amp: 0.77, periodS: 90, tilt: 0.3 }
},
// Bodennebel: Distanz-Haze. distanceKm = Sichtweite bis vollständige
// Nebelsaettigung (false/0 = aus).
fog: {
distanceKm: 120
},
// 3D-Boden aus echten Hoehendaten (Copernicus DEM, terrarium-Kacheln).
// enabled: false = flache Ebene. exaggeration: vertikale Ueberhoehung
// (1 = real, unsichtbar; default 8). wireframe: true = Mesh-Kanten
// als orange Linien zusaetzlich einblenden (Debug).
// nightLights: NASA-VIIRS-Stadtlichter-Layer, der ab Sonnenuntergang
// ueber ~1 h in die Tageskarte geblendet wird (dunkler Boden,
// leuchtende Staedte). Einmaliger Fetch (~49 Kacheln), persistent
// gecacht. false = kein Lichtoverlay, nachts bleibt die normale
// Textur deutlich heller (nur sanft abgedimmt).
// carLights: fahrende Lichter auf Autobahnen (OSM/Overpass-Kurven,
// nachts additiv ueber dem Gelaende). JSON einmalig, persistent gecacht.
// cityLights: Siedlungslichter — OSM-Ortsknoten (city/town/village/
// hamlet) als leicht gelbliche Glow-Punkte, ab Daemmerung statisch;
// je groesser die Siedlung (place-Klasse + population-Tag), desto
// mehr und hellere Punkte. Eine Overpass-Abfrage, persistent gecacht.
// Daten (c) OpenStreetMap-Mitwirkende, ODbL.
terrain: {
enabled: true,
exaggeration: 10,
wireframe: false,
nightLights: false,
carLights: true,
cityLights: true
},
// Tagessimulation: true = 24h-Zyklus wird in cycleSeconds durchlaufen
// (Sonne steigt im Osten, Mittag im Sueden, Untergang im Westen).
// false = echte Sonnen-/Mondposition via SunCalc.
day: {
simulation: false,
cycleSeconds: 20
},
// Wolkendecke in Welt-Einheiten (1 unit ~ 13 km bei Zoom 11;
// Kamera fliegt auf y=2.2). Decke etwas unter Flughohe.
clouds: {
top: 0.9,
bottom: -0.3
},
};
// List of available themes. The key is the theme id (used in config.theme),