The positions are real
Each planet is placed by solving Kepler’s equation — M = E −
e sin E, which has no closed form — by
Newton–Raphson, against the Keplerian elements JPL publishes for
J2000 and their per-century rates. It is a two-body approximation with
no planetary perturbations, so it lands within a few arc-minutes for
the inner planets and under half a degree for the outer ones. Right
for drawing a picture; wrong for flying anything.
There are no textures
Not one image file. Every surface is simplex noise evaluated on the
GPU: fractal sums for terrain, ridged multifractals for mountain
chains and cloud filaments, Worley cells for crater fields, and domain
warping for anything that has to look stirred. Jupiter’s bands
are latitude pushed through a palette ramp with a shear field over the
top, and the storm is a rotation applied around a moving point.
Scale is compressed, and says so
Body radii go as r0.42 and orbital radii as
r0.62. Nothing angular is touched, so eccentricity,
inclination and true longitude survive intact. Rotation runs on a
display clock rather than the simulation clock: the direction is real,
and Venus and Uranus do turn backwards, but the periods are compressed
the same way the radii are.
The colours are the measured ones
The Sun is white with a reddened limb, not orange. Neptune is the
pale blue of the 2024 reprocessing rather than the enhanced Voyager
indigo. Every hex is treated as sRGB and converted to linear light
before it reaches a shader, which is the step whose absence makes most
WebGL scenes look faintly plastic.
Nothing is tweened at the camera
Scroll sets a target and the rig damps toward it with a frame-rate
independent filter. There is no timeline to interrupt, so scrubbing
backwards, flinging a trackpad and jumping through the navigation all
behave — and the motion is identical at 60 Hz and at 144.
It degrades on purpose
Quality is guessed from the device, then corrected from measured
frame times — but only by turning the cheap knobs: resolution first,
then bloom. Swapping geometry at runtime would mean recompiling nine
shader programs mid-scroll, and that stall costs more than the frames
it saves. With no WebGL at all, the page keeps its type and its data.
Built with Three.js r185, GSAP with ScrollTrigger, and
Lenis. Simplex noise after Ashima Arts and Stefan Gustavson. Orbital
elements from the Solar System Dynamics group at JPL. Type is Instrument
Serif and IBM Plex.
No build step. Native ES modules and an import map.
View source: it is the source.