How the hero works
Three scenes on this site are simulated in the browser, in WebGL: two black holes merging behind the name, two galaxies colliding in the footer, and a star torn apart by a black hole on the 404 page. Each one is part physics, part approximation, and part deliberate exaggeration so that it reads on a screen in a few seconds.
This page separates the three. Its source of truth is the comment block at the top of each scene's code, which sorts every modelling choice into exact, approximated and exaggerated, and the notes from verifying the merger.
Merger


A supermassive black-hole binary in a gas-rich galactic nucleus spirals in and merges. Each hole carries a small disk of its own (a minidisk), inside the cavity of a wider circumbinary disk. The gravitational wave from the merger deforms the rendered sky and the page's own text, so the page is the detector, and scrolling falls into the remnant.
Exact
- The inspiral is the circular, leading-order quadrupole solution of Peters (1964): the separation over time, the orbital phase in closed form, and both polarizations h+ and h× at the seeded inclination.
- The ringdown is the fundamental l = m = 2 quasi-normal mode, from the fits of Berti, Cardoso & Will (2006), continuous in phase with the plunge.
- Light around a single hole follows null geodesics in their Newtonian form, checked against the photon sphere at 3M, the shadow at 3√3 M and the deflection 4M/b.
- Disk inner edges sit at the prograde Kerr innermost stable orbit (Bardeen, Press & Teukolsky 1972).
- Colour is a Planck spectrum integrated against the CIE colour-matching functions. The observed colour and intensity are the blackbody at T g scaled by g4, where g combines the gas's Keplerian motion about its own hole, that hole's orbital velocity, its gravitational redshift and the observer's motion.
- Disk temperature follows the Shakura–Sunyaev profile with T* scaling as m−1/4, so the smaller hole's minidisk runs hotter and bluer. Each minidisk is cut at its Roche lobe (Eggleton 1983).
Approximated
- Lensing by two holes superposes the two single-hole fields: no analytic metric for a binary exists.
- The plunge between inspiral and ringdown is a phenomenological stitch over 20 M with a continuous first derivative.
- The remnant's spin comes from the aligned equal-spin fit of Rezzolla et al. (2008) with progenitor spins of 0.8. The radiated energy uses the non-spinning fit with an approximate spin correction.
- The ringing remnant is lensed as a Schwarzschild hole with a decaying, rotating quadrupole in the near field. The Kerr shadow's offset is not drawn.
- The redshift factor g is a composite of a static-frame Doppler shift and the gravitational shift, not the exact geodesic redshift.
- Rays are marched at half resolution, with the shadow's rim re-marched per pixel and the sky resolved at full resolution.
- The scroll dive uses special-relativistic aberration in the local static frame, with the infall speed capped at 0.55 c.
Exaggerated
- Strain
- Peak |h+| = 0.04. A real wave arriving at Earth is about 10−21.
- Time
- One monotone remap: about 130 M of simulated time per second through the chirp, slowed so the wave on screen never exceeds 3.6 Hz; about 40 M/s through the ringdown; about 8 M/s after it.
- Disk temperature
- About 10× cooler than real disks, which peak in the ultraviolet, so the visible band shows the profile.
- Inner edges
- A minidisk luminance gain and a non-zero-torque inner edge (k = 0.55, Krolik 1999), so the inner edge blazes instead of going dark.
- Cavity
- Its rim sits at twice the starting separation (decoupling would put it farther out), and it refills in about 3 s instead of a viscous time, about 100,000× longer, with a 3× accretion surge as the gas arrives.
- Merger flash
- The swallowed minidisk gas flashes and cools from 36,000 K to 5,000 K, far brighter and quicker than a real counterpart would be.
- Grading
- Blender’s “Punchy” AgX look, applied in post.
The page is the detector
The scene writes one CSS transform onto the layer that holds the hero's text: matrix(1 + h+/2, h×/2, h×/2, 1 − h+/2), about the binary's position on screen. That transform is checked against the analytic strain matrix: it agrees to 5×10−6, and for seeds 7, 1 and 42 to the six significant digits CSS keeps. After the ringdown it is exactly none, and with reduced motion it is none from the start.
Cost
At 1440×900 and one render pixel per CSS pixel, over 240 frames of the first 14 s (the lowest of nine runs), the high tier takes 7.69 ms per frame on average, 8.6 ms at the 95th percentile and 9.5 ms at worst; the medium tier 5.71, 6.4 and 6.9 ms. The budget is 14 ms at the 95th percentile.
The shadow's rim once read as a dotted line: edge pixels alternated between an exact re-march and bilinear interpolation because the 3× emission-contrast test that picks them sat at its threshold, and four samples per pixel aliased. The rim is now classified over a 4×4 neighbourhood, the re-march is weighted by contrast between 3× and 6×, and edges get rotated-grid supersampling (4 + 4 adaptive samples on high, 4 on medium). That added 17% ray-march work on high and about 55% on phones, which the adaptive density absorbs. The strain check did not change.
Known soft spots
A faint dark band crosses the rim near the last letters of the name between 6.4 and 6.6 s on desktop. The medium tier costs about 58% of the high tier, not the intended 50%.
Antennae


Two disk galaxies collide, throw out tidal tails, and light a burst of star formation where their gas is compressed; scrolling then enters the dust-enshrouded nucleus. The scene holds at its first frame until the footer scrolls into view, then plays once.
Exact
- Every star is a massless test particle, integrated on the GPU with leapfrog (kick-drift-kick) at a fixed substep in the summed potential of both galaxies: a Plummer bulge, a Miyamoto–Nagai disk and a Hernquist halo.
- The two cores follow a double-precision RK4 orbit with Chandrasekhar dynamical friction against the partner's total density (the dispersion is Hernquist 1990, eq. 10).
- The encounter geometry is that of Karl et al. (2010, ApJ 715, L88): equal masses, prograde, inclinations of 60° and 60°, pericentre arguments of 30° and 60°. The closest approach comes out at 11.3 kpc, against Karl's 10.4 kpc. Barnes (1988) and Toomre & Toomre (1972) use the same tilt.
- Stars are blackbodies through the same CIE integration; ionised (HII) regions shine in Hα, Hβ (Case B), [NII] and [SII] through the same colour-matching functions. Dust reddens in the ratio AB : AV : AR = 1.32 : 1 : 0.82.
Approximated
- Each galaxy's potential is rigid and moves with its core: no self-gravity, no bar, no self-gravity in the tails. The mutual force is the spherical average of the partner's potential acting on the core.
- Friction uses ln Λ = 0.3 with the whole galaxy as the satellite, tuned so the second passage is a radial plunge that coalesces at τ ≈ 19 after a 5-unit apocentre. A self-consistent model would shed halo mass instead.
- The starting point-mass eccentricity is 0.9 (Barnes 1988: 0.5; Karl et al. 2010: about 1), to make up for the dissipation of extended mass that is not modelled.
- Star formation follows a Schmidt law with n = 2 on an 803gas grid, switched on where gas is compressed beyond 4.5× its initial density; cluster masses follow dN/dM ∝ M−2 from 1 to 300.
- Dust extinction is marched from each star toward the camera through the same grid (5 samples on high, 3 on medium). The nucleus the scroll enters uses a Plummer proxy for its gas, scaled to the bulge, so the frame reddens and goes black on entry.
- Stars are drawn as energy-conserving Gaussian splats, with an adaptive ρ−1/3 kernel in sparse regions: about 490,000 particles on high. The two-armed spirals are kinematic, not a density wave, and wind up under differential rotation in the 2 s before contact.
Exaggerated
- Time
- One unit is about 40 Myr. The scene runs at 2.7 units per second, about 110 Myr per second, until the cores coalesce at 7.2 s, then eases over 1.5 s to 0.45 units per second.
- Young stars
- Their continuum fades over 100 Myr and their line emission over 25 Myr. Real O stars live 3 to 10 Myr, so the burst lingers about 3× longer. Each young complex is about 70× as luminous per unit mass as an old-population particle, with line to continuum 1.7.
- Gas
- 30% of disk particles by number (Karl et al. 2010: 20% of disk mass).
- Exposure
- 3.4, so the tails read on screen; real tails are 3 to 4 magnitudes fainter than the disks.
Spaghettification


A tidal disruption: a Sun-like star (radius 0.47, 5800 K, in units where G = c = M = 1) passes a black hole with its periapsis at 8, deep inside the tidal radius of 47 (β ≈ 5.9). It is torn into a stream that falls back, precesses, crosses its own orbit and circularises. The encounter is that deep so the precession is large and the self-intersection lands on screen. It runs on the 404 page, where scrolling dives into the shadow and the text is stretched tidally.
Exact
- Sky lensing traces the null geodesics of a Schwarzschild hole for an observer at a finite distance, with the shadow at bc= 3√3 and the photon ring; no point-lens approximation.
- Debris orbits use a = −(r/r3)(1 + 3L2/r2) in proper time, which reproduces u″ + u = 1/L2 + 3u2. Precession, capture and the shape of every ellipse are exact; integration is leapfrog with adaptive substeps, and L is conserved exactly.
- Every particle is drawn twice, as primary and secondary image, each found by solving the two-point null-geodesic problem with the same integrals as the sky, so the images are exact in Schwarzschild, not thin-lens. Magnification is the solid-angle Jacobian against the flat-space view. Colour is the same Planck × CIE blackbody.
Approximated
- The debris is ballistic from the first frame: the star starts already inside the tidal radius.
- Circularisation is a phenomenological shock. A 1282grid in the orbital plane holds the local mean velocity and dispersion; where streams cross, particles are dragged toward the mean at a rate that scales with density times dispersion, which is inelastic, conserves momentum and never adds energy. The lost kinetic energy heats the gas toward a thin-disk profile, about 22,000 K × (6/r)3/4, and radiates away with an e-fold of 160 GM/c3. The flare is the sum of those T4 terms, so it follows the measured return rate.
- The Doppler and gravitational shift is g = √(1 − 2/r) / (γ(1 − β·n)) with the static-frame velocity, and the photon's direction taken as a straight line to the camera.
- Once disrupted, the stream cools exponentially toward a 5000 K recombination floor. The star starts prolate (transverse extent 0.33 of its radius), standing in for the self-gravity that keeps real streams thin.
- The gas is an optically thick emitting slab: each particle radiates σT4over its share of the local surface, and pixels resolve to the coverage-weighted radiance with opacity 1 − e−coverage. Stacked layers never exceed the surface brightness, lensing changes coverage rather than brightness, and the stream in front of the shadow hides it. 65,000 particles are drawn as elliptical Gaussians along their velocity, sized to the local particle spacing.
- Images that loop the hole twice or more are not drawn. The sky renders at half resolution; the debris at full resolution.
Exaggerated
- Energy spread
- The spread of specific energy across the star, dE = R*/rt2 (2×10−4 c2 for a Sun-like star and a 106 solar-mass hole), is amplified 72× by rescaling each particle's initial speed. That one knob compresses weeks of fallback into seconds; the half-bound, half-unbound split, the order of return times and the precession all follow from it.
- Time
- 60 GM/c3 per second through periapsis, ramping to 420 by 4.2 s.
Frame rate
All three scenes run through one runtime that trades resolution for frame rate. Render density, in render pixels per CSS pixel, moves on a fixed ladder from 2 down to 0.5, and never below 0.75 on desktop or 0.66 on phones. The floors come from captures of the merger's rim: at 0.66 its edge turns into uneven 1 to 2 pixel stairs, at 0.5 into regular 2 pixel stairs.
The controller sees only requestAnimationFrame intervals, which the display quantises: on a 60 Hz panel a 4 ms frame and a 16 ms frame both report 16.7 ms. So each window of at least 1 s and 10 frames answers two questions. Did most frames miss the refresh (median interval above 1.35× the target)? Step down. Were nearly all on time (75th percentile within 1.1×)? There may be headroom, so probe up. Headroom itself is never observed, only tested.
It ignores the first 2 s after a scene goes live (shader compiles, the sky upload), treats any interval over 100 ms as a hitch rather than load, and never trades resolution for more than 60 fps. A step down within 20 s of a step up is a failed probe: the backoff doubles from 4 s to at most 32 s, and above the starting density that level becomes a ceiling.
With reduced motion nothing animates: each scene renders its rest state, the controller does not run, and the hero's strain transform is none.
Sources
- Peters 1964: the circular quadrupole inspiral.
- Bardeen, Press & Teukolsky 1972: the prograde Kerr innermost stable orbit.
- Toomre & Toomre 1972: the tilt of the galaxy encounter.
- Eggleton 1983: the Roche-lobe radius.
- Barnes 1988: the encounter tilt and the eccentricity it is compared against.
- Hernquist 1990, eq. 10: the velocity dispersion behind the dynamical friction.
- Krolik 1999; Agol & Krolik 2000: the stressed inner edge of an accretion disk.
- Berti, Cardoso & Will 2006: the quasi-normal-mode fits for the ringdown.
- Rezzolla et al. 2008: the final spin of the remnant.
- Karl et al. 2010, ApJ 715, L88: the Antennae encounter geometry.
Sky: Milky Way from NASA/Goddard Space Flight Center Scientific Visualization Studio; stars from Gaia DR2, ESA/Gaia/DPAC.