About these images

This is a large-scale rendering of the Buddhabrot: 1,048,576 x 1,048,576 pixels (220 on a side, about 1.1 trillion pixels in all), browsable like a map. The switcher in the top right offers three views of the same underlying object: two colorings of the Buddhabrot, and the classic Mandelbrot set.

What is the Mandelbrot set?

The Mandelbrot set
The Mandelbrot set
Colored by escape count
Colored by escape count
Smooth coloring, the Mandelbrot view
Smoothed -- the "Mandelbrot" view

The Mandelbrot set is a fractal (the Wikipedia article goes deep), but put simply: for every point c of the plane, run the formula z = z² + c over and over, starting from zero. If the value of z ever escapes past a fixed distance from the origin, c is outside the set; if it stays bounded forever, it is inside. Painting inside points black and outside points white gives the first image.

The same data allows for richer pictures. Coloring each outside point by how many iterations it took to escape gives the banded second image. Picking colors from a smoothly cycling palette, and smoothing further by how far past the threshold the value lands, gives the third -- which is exactly the "Mandelbrot" view on the map.

What is the Buddhabrot?

Buddhabrot, orbits up to 100 iterations
Orbits escaping within 100 iterations
Buddhabrot, orbits up to 500 iterations
... within 500
Buddhabrot, orbits up to 10,000 iterations
... within 10,000

The Buddhabrot is an alternative way of viewing the same iteration. Instead of coloring c by how quickly it escapes, follow the point z on its way out and brighten every pixel it passes through. Summing those visits over trillions of random starting points produces a density image: the Buddhabrot.

One interesting property is that the image depends on how many iterations you are willing to compute before giving up on a point. The three images above allow orbits up to 100, 500, and 10,000 steps -- longer-lived orbits add fine tendrils and haze that short ones never reach.

Coloring the Buddhabrot

The three iteration caps combined as RGB
Three caps combined -- the "Traditional" view
Escape coloring
Summed c values -- the "Escape Coloring" view

The most common way to color the Buddhabrot is to split the orbits by how long they take to escape and let each group drive one color channel: here the quick orbits (escaping within 100 iterations) draw the blue channel, the middle ones (within 500) green, and the slow ones (within 10,000) red, each channel balanced with histogram equalization. Orbits that survive even longer before escaping show up only in the "Escape Coloring" view. It is the same trick used for false-color astronomy photos, where each channel is a different wavelength of light. This is the idea Melinda Green used to develop her famous view of the Buddhabrot -- you can read more on her website, and many thanks to her for help on rendering the "Traditional" view presented here.

The alternative used for the "Escape Coloring" view sums the value of c itself into every pixel an orbit touches. The complex argument of each pixel's sum then picks a hue and its magnitude the brightness, through a palette slightly muted from a traditional HSV ramp to even out perceptual brightness -- and because I think it looks better.

How it was rendered

The two Buddhabrot views are accumulated at the full 220 resolution from about 140 trillion sample points (1.38 x 1014) spread evenly over the plane as a low-discrepancy lattice, with each orbit followed for up to 500,000 iterations. The Buddhabrot is mirror-symmetric, so only half the plane is actually sampled: every visit is deposited twice, once at the pixel the orbit passes through and once at its mirror twin (with the summed value conjugated, to keep the Escape Coloring's hues consistent across the axis).

An image this size is far too large to accumulate in memory at once, so it renders as 128 horizontal bands of 8,192 rows -- and because a Buddhabrot pixel collects visits from orbits starting all over the plane, every band needs all of the samples, not just its own share. Rather than redo the whole computation 128 times, a one-time detection pass finds the 2.1 trillion orbits (about 3%) that escape slowly enough to leave a mark and caches them in a 1.6 TB index; each band then replays just those orbits and keeps the visits that land on its rows -- about 270 trillion orbit traces in all. The work ran on two identical GPU machines sharing a queue of bands, either of which produces bit-identical tiles. The Mandelbrot view is far cheaper -- each pixel there depends only on its own point c -- and was rendered directly at the same resolution.

The result is about 16.8 million 256-pixel tiles per view plus their zoom pyramid. The full-resolution tiles are packed into small block archives that the viewer unpacks itself with byte-range requests, and the map is drawn by OpenSeadragon.

The sample images on this page were generated at small scale by the same coloring code as the full render.

-- Scott Seligman

← back to the map