Astro Twin
An empty twin whose subject is above the ground rather than on it. Extends Digital Twin, so the whole sensor chain, the legend, the section planes and the presentation tools come with it, and adds the celestial stack: bodies on real Keplerian orbits, orbit paths, the naked-eye starfield, constellation figures, deep-sky objects, procedural galaxies and black holes. The ground grid is gone, because in this plate there is no ground. Meant as a BASE — Solar System Twin, Sky Twin and Deep Space Twin each extend it to frame one subject; use this one directly only to compose across scales yourself. EVERYTHING STARTS FROM SCALE, and getting it wrong is the one mistake that makes this plate look broken rather than merely plain. A solar system spans four orders of magnitude — the Sun's radius is 0.005 AU against Neptune's 30 AU orbit — so drawn true to scale it is one lit pixel and eight invisible ones. celestial.setScale has three modes. 'log' (the default) compresses orbit radii logarithmically and is the only one that puts Mercury and Neptune on screen together: at the defaults Mercury lands near 36 scene units and Neptune near 119. 'compressed' keeps orbit radii linear and true, which crushes the four inner planets into the first two units of a 120-unit scene. 'true' is real proportions throughout and is right for exactly one thing — a single body up close. Body radii in the two compressed modes follow a POWER law against Earth's radius rather than a flat multiplier, because any multiplier large enough to show Mercury makes the Sun swallow the inner system; at the defaults the Sun draws about 6.5x Earth instead of its true 109x, and celestial.bodyInfo reports the factor per body so a compressed radius never reads as a real one. A MOON needs its own knob, and this is the trap worth knowing before you hit it: in log mode the map's local slope at 1 AU is about 19 units per AU, so the Moon's 0.0027 AU offset from Earth comes out at 0.05 units — well inside Earth's own drawn radius of 1.6, meaning the Moon renders inside the Earth and reads as simply missing. satelliteExaggeration (80 by default) is what lifts it clear of the surface. TIME is the second decision. celestial.setEpoch 'animate' (the default) advances on its own at daysPerSecond, so a fresh scene visibly moves with nothing wired up. 'clock' hands the ephemeris to the inherited timeline scrubber, which is the mode that makes this a twin rather than a screensaver: scrub the clock and the planets go where they actually were, propagated from bundled JPL elements — good to about a tenth of a degree between 1800 and 2050, which is right for a twin you scrub by hand and wrong for anything navigational. 'fixed' pins one date. WHAT MAKES IT A TWIN: the data chain is inherited whole, and it maps onto real readings. A rover's surface measurements become marker heat sources ON a planet, which is the identical primitive Terrain Twin exists for — markers.add with heatmap:{target:'id:<bodyId>'} — now on a curved surface, and the same two settings decide whether the result is readable. heatBlend: 'add' sums, so N stations read as one field rather than N unrelated dots, but additive can only brighten and so needs a dark surface beneath it; 'alpha' never clips and suits a bright one, at the cost that overlapping sources composite by priority instead of summing. heatRadius: several times the sphere's vertex spacing, or the falloff reads as a blocky diamond — but under the real gap between stations, or they merge into one wash. An axiscolormap on a body with a binding to target.property 'offset' sweeps a ramp along an axis, which on a rotating sphere IS the day/night terminator: unmodified reuse of Terrain Twin's rising-water-table primitive. Solar activity can drive the Sun's own brightness, a probe's telemetry a status LED, a transit light curve a KPI and sparkline with a threshold rule (revert:true) that latches a detection into the alarm list. A body's scene id is its state key and is stable across reloads, so a heat target, binding or ramp authored against it survives being published. TWO LIMITS, STATED RATHER THAN DISCOVERED. There is no bloom and no gravitational lensing: both need an EffectComposer, and this engine renders with a bare renderer.render that every other plate depends on. Stars, coronae and a black hole's photon ring use additive billboards instead — so a black hole has a disk, a photon ring and a shadow, but the starfield behind it is not bent. And nothing in this engine loads a texture, so bodies are procedurally shaded from an albedo colour: there is no photographic Jupiter. Sky catalogues are fetched at runtime from a CORS-open public mirror and kept out of state, so a published vizlet's anonymous viewer fetches its own sky and the track stays small. Nothing ships pre-placed: a sensor path is matched by plain string and nothing validates it, so a pre-wired widget would read a path your twin does not publish and sit at —.