User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
Configure parameters and press Render
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

About

The Buddhabrot is a rendering technique for the Mandelbrot set discovered by Melinda Green in 1993. Unlike standard escape-time coloring, it constructs a probability density map by tracing the full orbital paths of escaping points c under iteration zn+1 = zn2 + c. Each pixel accumulates visit counts across millions of random samples. The resulting histogram reveals intricate structures invisible to conventional Mandelbrot plots. Low iteration limits expose broad diffuse forms; high limits resolve fine filamentary detail near the set boundary. Misconfiguring the sample count or exposure produces either noise or a washed-out image. This tool performs the full stochastic computation in a background thread and applies logarithmic tone mapping for correct dynamic range compression.

The Nebulabrot variant assigns separate maximum iteration depths to the red, green, and blue channels, producing false-color composites that encode structural information across multiple scales simultaneously. Typical channel assignments use ratios near 500 / 5000 / 50000 iterations. The tool approximates results assuming uniform random sampling over the bounding rectangle [βˆ’2, 1] Γ— [βˆ’1.5, 1.5]. Sampling efficiency drops for very high iteration thresholds because fewer orbits escape. Pro tip: increase sample count proportionally when raising iteration limits beyond 10000.

buddhabrot fractal mandelbrot nebulabrot complex plane generative art fractal generator

Formulas

The Buddhabrot histogram is constructed by sampling random points c = cre + i cim from the complex plane and iterating the Mandelbrot recurrence:

zn+1 = zn2 + c, z0 = 0

If the orbit escapes (|zn| > 2) before reaching the maximum iteration count N, every point zk in the orbit is mapped to pixel coordinates and the histogram bin H[x, y] is incremented:

H[x, y] = nβˆ‘k=0 Ξ΄(x, y, map(zk))

Pixel coordinates are computed from the complex value via linear mapping:

px = (Re(z) βˆ’ xmin)(xmax βˆ’ xmin) Γ— W

The final image brightness is derived via logarithmic tone mapping with an exposure parameter E:

brightness = clamp(log(1 + H[x,y] Γ— E)log(1 + Hmax Γ— E))

Where Hmax is the maximum bin count across the entire histogram, W is canvas width in pixels, N is max iteration count, E is the exposure multiplier, and Ξ΄ is the Kronecker delta selecting the target bin. For the Nebulabrot, three independent histograms HR, HG, HB are computed using distinct max iteration values NR < NG < NB and composited into an RGB image.

Reference Data

ParameterLow DetailMedium DetailHigh DetailUltra DetailEffect
Max Iterations1001000500050000Higher reveals finer filaments near set boundary
Samples (millions)1M10M50M200MMore samples reduce noise and fill gaps
Escape Radius2.0 (standard)Values > 2 capture longer orbit tails
Resolution400Γ—400800Γ—8001200Γ—12002000Γ—2000Larger canvas resolves more spatial detail
Exposure (log)0.51.01.52.0Controls brightness mapping of histogram
Nebulabrot Red10050010005000Broad diffuse structures
Nebulabrot Green50050001000050000Intermediate filament detail
Nebulabrot Blue200050000100000500000Fine boundary detail
Anti-BuddhabrotUses non-escaping orbitsRenders interior density (complement of Buddhabrot)
Sampling Region Re[βˆ’2.0, 1.0]Real axis bounds of random c
Sampling Region Im[βˆ’1.5, 1.5]Imaginary axis bounds of random c
Escape Rate (approx.)80%30%12%3%Fraction of samples contributing to histogram
Tone MappingLogarithmic: log(1 + h)Compresses high dynamic range of histogram
PRNGxorshift128Fast deterministic pseudorandom number generator
SymmetryVertical (imaginary axis)Buddhabrot is symmetric about Im = 0

Frequently Asked Questions

The Buddhabrot is a stochastic density estimation. Each random sample c contributes at most N orbit points to the histogram. With 1 million samples and a 800Γ—800 grid (640,000 bins), the expected hits per bin remain low, producing shot noise. Statistical convergence follows √(samples) - quadrupling the sample count halves the noise standard deviation. For iteration limits above 5000, target at least 50 million samples.
Low iteration limits (100-500) capture orbits that escape quickly - these tend to be far from the Mandelbrot set boundary, producing broad, diffuse nebula-like structures. High limits (5000-50000) select orbits that linger near the boundary before escaping, tracing fine filamentary detail. Extremely high limits (>100000) resolve structures at the Misiurewicz points but require proportionally more samples because the escape rate drops below 3%.
The standard Buddhabrot traces orbits of points c that escape (|z| > 2). The Anti-Buddhabrot instead traces orbits of points that never escape - those inside the Mandelbrot set. Since these orbits converge to attracting cycles, the Anti-Buddhabrot reveals the interior structure of the set, producing disc-like shapes corresponding to hyperbolic components. The two are complementary density maps of the same iteration dynamics.
The raw histogram has extreme dynamic range. Central bins near the main cardioid accumulate millions of hits while peripheral bins may have single-digit counts. Linear mapping would render 99% of the image as black. Logarithmic mapping compresses this range: log(1 + H Γ— E) grows slowly for large H, preserving detail in both bright and dim regions. The exposure parameter E shifts the mapping curve - higher values brighten faint structures at the cost of saturating bright ones.
Three independent Buddhabrot histograms are computed with different max iteration values N_R < N_G < N_B. Each histogram is tone-mapped independently, then assigned to the red, green, and blue channels of the output image. Typical ratios are 1:10:100 (e.g., 500/5000/50000). This encodes scale information as color: broad structures appear red, intermediate detail appears green, and fine filaments appear blue. The composite reveals multi-scale structure invisible in monochrome renders.
Mathematically, any escape radius R β‰₯ 2 guarantees divergence. However, using R > 2 allows orbits to be tracked slightly beyond the bailout circle, adding a few extra histogram points per orbit in the peripheral region. In practice, R = 2.0 is optimal for most renders. Larger values marginally increase computation time without significant visual improvement because the additional orbit points map to canvas pixels near the edges that are typically cropped.