# Amiga Juggler — realtime ray tracing

> Canonical page: https://www.mahieu.nl/amiga-juggler/en/

A realtime WebGL2 tribute to Eric Graham's 1986 Amiga Juggler. The scene is
analytically ray-traced again every frame by your browser's GPU: no video, no
pre-rendered frames, no 3D meshes.

Languages: [Nederlands](https://www.mahieu.nl/amiga-juggler/) ·
[English](https://www.mahieu.nl/amiga-juggler/en/).

## What you see

- Eric Graham's Juggler (November 1986): 24 ray-traced HAM frames of 320×200,
  0.8 seconds per loop, one "ding" per catch. Here the same scene is computed
  live: 70 spheres, an infinite checkerboard floor, hard shadows and mirror
  reflections.
- **1986 mode** (default): 320×200 with chunky pixels in a 4:3 frame, 4 bits
  per colour channel like HAM, and the 24 discrete frames of the original.
- **Modern**: smoothly interpolated at full resolution, with FXAA.
- Scene, camera, light, timing and sound were calibrated against the original
  frames and Graham's recovered source code; the lost motion data has been
  re-measured from all 24 frames.

## Controls

- Start demo or Start fullscreen; Close or Esc takes you back.
- Drag to orbit, pinch or scroll to zoom, Shift/right/middle drag to pan; arrow
  keys, `+`/`-` and `0` as keyboard alternatives.
- Pause and Play (or space); `,` and `.` step one frame back or forward with a
  frame counter.
- Speed from 0.01× to 2×; the sound follows like a tape.
- Drone shot circles the camera around the Juggler; Reset camera restores the
  original framing.
- Requires WebGL2; without Web Audio the demo plays silently.

## Sources

- [Eric Graham's Raytracer 1.0 source](https://github.com/AlphaPixel/Eric-Graham-1987-Juggler-Raytracer-1.0)
- [Ernie Wright's technical analysis and recordings](http://www.etwright.org/cghist/juggler.html)
- [Meatfighter's mathematical reconstruction](https://meatfighter.com/juggler/)
- [Ben Hanke's realtime WebGL version](http://13h.org/juggler/)
- [Technical notes on this reconstruction (Dutch)](https://www.mahieu.nl/amiga-juggler/README.md)

Made by Michel Mahieu as a personal project, part of
[Mahieu](https://www.mahieu.nl/).
