Extending the Mandelbrot set into three dimensions
The classic Mandelbrot set is built from one rule applied to complex numbers: repeatedly square a point z and add the starting point c, and watch whether the sequence stays bounded or escapes to infinity. That rule lives naturally in two dimensions because complex numbers are a two-dimensional number system. There is no three-dimensional number system with the same clean algebraic properties, so a direct 3D analogue does not exist by simple extension — which is exactly why a workable 3D version, the Mandelbulb, was not found until 2009, discovered by Daniel White and Paul Nylander after years of the fractal community searching for one.
Triplex numbers and the generalized power
Their solution treats a 3D point as a triplex number in spherical form and defines a generalized power operation on it that reduces to ordinary complex squaring when restricted to a 2D slice. For a point at spherical radius r, polar angle θ and azimuthal angle φ, raising it to the n-th power scales the radius to r^n and multiplies both angles by n, then converts back to Cartesian coordinates:
triplex power (spherical form): r' = r^n θ' = n × θ φ' = n × φ then: z_next = (triplex power of z) + c, iterated exactly like the 2D Mandelbrot's z → z² + c
With n = 2 this operation is not identical to quaternion or other historically attempted 3D extensions — it was specifically constructed to produce a visually rich, bulbous, self-similar structure, and the standard, most recognisable Mandelbulb uses n = 8, which produces the bulging, organic lobes most images of it show.
Rendering it: distance estimation, not polygons
There is no way to mesh a Mandelbulb's boundary directly — it is an infinitely detailed fractal surface with no simple polygonal approximation — so it is rendered by raymarching a distance-estimated signed distance function instead of drawing triangles. For each pixel, a ray is cast from the camera and repeatedly advanced by the estimated distance to the nearest surface, which is safe to do because the estimate is a lower bound: taking a step of that size can never overshoot through the surface. For the Mandelbulb, that per-pixel distance estimate is derived analytically from the escape-time iteration:
de = 0.5 × log(r) × r / dr r = current escaped radius |z| after the iteration loop dr = running derivative of |z| accumulated alongside each iteration step the ray forward by de; repeat until de is smaller than a threshold (hit) or the ray escapes
This is the same class of technique, sphere tracing, used to render every other analytic fractal and implicit surface on this site — it turns a surface defined by an equation into an image without ever needing to know the surface's shape in advance.
What the power slider actually changes
Because n directly scales how fast the radius and both angles grow each iteration, changing n changes both the number of lobes around the shape and how deep the surface detail recurses before escaping to infinity dominates. Low values of n near 2 produce smoother, rounder, less self-similar shapes closer in spirit to a sphere; the canonical n = 8 produces the familiar many-lobed bulb; pushing n higher packs in more, thinner lobes and finer, more repetitive surface detail, at the cost of needing more raymarching steps and a tighter distance threshold to resolve it cleanly, since the surface becomes locally sharper relative to the same iteration count.
Frequently asked questions
Why wasn't a 3D Mandelbrot set found until 2009, decades after the 2D version?
Complex numbers give the 2D Mandelbrot set a natural algebraic structure — squaring and adding are well-defined operations that preserve angles and scale sensibly. No equivalent 3D number system exists with the same properties, so a literal 3D analogue does not fall out of the math the way the 2D version does; the Mandelbulb is a deliberately constructed generalized power operation designed to produce a comparably rich fractal, not a direct algebraic extension.
Why is the Mandelbulb rendered by raymarching instead of building a 3D mesh?
Its boundary is an infinitely detailed fractal surface with no closed-form polygonal approximation, so there is nothing to mesh directly. Raymarching instead advances each pixel's ray by a distance estimate derived from the escape-time iteration, safely approaching the surface step by step without ever needing an explicit list of vertices.
What does changing the power n do to the shape?
It changes how fast the radius and angles grow each iteration, which changes both the number of lobes and how much fine self-similar detail appears before the sequence escapes. The canonical Mandelbulb uses n = 8; lower values look rounder and smoother, higher values pack in more, thinner lobes and finer surface detail.
Try it live
Everything above runs in your browser — open Mandelbulb and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.
▶ Open Mandelbulb simulation