Every pixel traces a light ray through the zero-tidal Ellis wormhole by integrating the null-geodesic equations (RK4 in the shader). Rays that miss the throat come back to your own sky; rays that pass through show a different universe. Drag to look around; the camera slides along the axis through the throat.
Units are arbitrary (1 unit = any length; only l/b matters). Keys: W/S move along l. Wheel or pinch: field of view.
Measured values are read back from the same fragment shader that draws the picture (RK4, step 0.12 r, High settings). Predictions use closed forms or an independent Simpson quadrature in JavaScript. Pass limit: 0.5 %.
The science
Metric. The static, spherically symmetric Ellis–Bronnikov wormhole (a Morris–Thorne wormhole with zero tidal force and shape function chosen so that gtt = −1):
ds² = −dt² + dl² + (b² + l²)(dθ² + sin²θ dφ²)
l is proper radial distance and runs over (−∞, +∞): two asymptotically flat universes joined at the throat l = 0, where the circumference is 2πb. There is no horizon, and since gtt = −1 a static observer has dilation dτ/dt = 1 everywhere.
Embedding diagram. The equatorial plane embeds in 3D Euclid space as a surface of revolution with r = √(b²+l²) and height
z = b asinh(l/b) = ± b ln( r/b + √(r²/b² − 1) )
which gives the two sheets joined by the throat that you see in the inset. The yellow curve is the central ray of your view, drawn on that surface.
Null geodesics. Spherical symmetry gives a conserved energy E and angular momentum L; the impact parameter is B = L/E. For a photon in its own plane (l, φ):
(dl/dλ)² = 1 − B²/(b²+l²) dφ/dλ = B/(b²+l²)
d²l/dλ² = B² l /(b²+l²)²
The shader integrates the second-order form (smooth through turning points) together with φ by RK4 with step 0.12 r, until |l| is 60 times the larger of b and |lobs|, then adds the analytic tail (B/b)(π/2 − atan(L/b)). Each pixel's observer-frame direction gives B = √(b²+lobs²) sinψ, where ψ is the angle to the radial axis. The final direction at infinity is cosφ N + sinφ T, which is looked up in the sky of the side where the ray ended (l > 0: Milky Way, l < 0: alien sunset).
Which rays pass? The effective potential B²/(b²+l²) peaks at the throat, so a ray crosses iff B < b. Hence the other universe fills a cone of half-angle
sin αc = b / √(b² + l²) fraction of the full sphere = (1 − cos αc)/2
It is a small disc far away, covers half the sphere on the throat, and at B = b the ray orbits the throat circle unstably (the analogue of a photon sphere). Rays with B > b turn at l = √(B²−b²) and return, with a deflection that the page compares with an exact quadrature.
What is simplified. The observer is static at every frame (the flythrough is a sequence of static views, no Doppler or aberration from motion); both skies are textures at infinity (no matter, dust or lensed disk inside the geometry); one point of the sky is traced per pixel without supersampling, with texture filtering derived from the ray-direction derivatives; the second sky is drawn mirror-consistently so that the flythrough is continuous across l = 0. The sky seen through the throat uses the same angular coordinates as the first one, which is the standard convention for this visualisation.
Is it real? Holding a throat open requires matter that violates the null energy condition (negative energy density). No such matter is known; wormholes are a theoretical solution of general relativity, not an observed object. Nothing on this page claims one exists.
References. H. Ellis, J. Math. Phys. 14, 104 (1973); K. Bronnikov, Acta Phys. Polon. B 4, 251 (1973); M. Morris and K. Thorne, Am. J. Phys. 56, 395 (1988); T. Müller, Am. J. Phys. 72, 1045 (2004); O. James, E. von Tunzelmann, P. Franklin, K. Thorne, Am. J. Phys. 83, 486 (2015); M. Visser, Lorentzian Wormholes (1995). Skies are procedural Blender 5.2 (Cycles) renders made for this page.