General-purpose GPU processing is a new and exciting field, and in
particular there are many more possibilities for fractal rendering on the GPU
that have not yet been explored. The interested reader should feel free
to expand on the algorithms above. Here are a few ideas.

## 6.1 - The Distance Estimator

It turns out that the iterative formula used in this article is not the only
way to get information about points in the Mandelbrot set. There exists
a function called the *distance estimator* for the Mandelbrot set.
To define it, we first need the derivative of the sequence
*z*_{n}:

z'_{0} = 1

z'_{n+1} = 2z'_{n}z_{n}

This is simply a second sequence that can be calculated alongside the
sequence *z*_{n}. Once we have this, the distance estimator
is:

d(z_{n}) = |z_{n}|
ln |z_{n}^{2}|
/ |z'_{n}|

Here the vertical bars mean the distance from the origin of the complex
number. The limit, as *n* goes to infinity, of this function gives
the distance from the point *c* to the nearest point that is in the
Mandelbrot set. This can be used to increase the image quality with
fewer iterations, since the sequence can be stopped early if the distance
estimator converges (i.e. if the difference between successive values of
*d(z*_{n}) is small).

Another use of the distance estimator is in antialiasing. Since the
function varies continuously over the points in the plane, it is possible
to calculate (approximately) its average over the pixel area.

## 6.2 - Buddhabrots

The so-called **Buddhabrot** is a variation of the Mandelbrot rendering
technique. To produce a Buddhabrot, we form the sequence
*z*_{n} at each point as before, but instead of coloring that
point based on the behavior of the sequence, we increment a counter for
each of the points that the sequence lands on. Over the entire set,
some areas are more frequently hit by sequences than others; the image that
is produced, when it is turned sideways, looks a little bit like Eastern
depictions of the sitting Buddha.

For more information and ideas relating to Buddhabrots, see
this page.

## 6.3 - Julia Sets

Julia sets are a little bit like a generalization of the Mandelbrot
set. To render a Julia set, we form the sequence as usual, but instead
of using the starting point as the value of *c*, we use a *single*
value of *c* for all the points in the plane. This means there is a
unique Julia set for every possible value of *c*.

There is an intriguing relationship between the Mandelbrot set and Julia
sets. Those Julia sets produced from a value of *c* that comes from
*outside* the Mandelbrot set are "dust"—they consist of infinitely
many scattered points, without any connection between them. Value of
*c* from *inside* the Mandelbrot set produce Julia sets that are
connected, like the Mandelbrot set itself. The most "interesting" Julia
sets, those which display the greatest variation of detail and fractal
self-similiarity, are those which come from *c*-values near the boundary
of the Mandelbrot set.

## 6.4 - Higher Dimensions

Complex numbers define operations like multiplication and division in two
dimensions. However, it is also possible to define similiar operations
in four dimensions, eight, sixteen, or any power of two. To figure out
what the operations are, one can use the Cayley-Dickson
construction. It is then possible to calculate fractals in four (or even
more) dimensions. To display these on a monitor, however, one must take
a three-dimensional "slice" of the fractal. Some more information about
four-dimensional Julia sets can be found here.

Fractals are among the most intriguing mathematical objects, and part of
their wonder is that they are very easy to understand and create. The
possibilities are unlimited, and there are many more kinds of fractals and
methods of rendering them than could possibly be discussed in these few pages.
Hopefully, this article has piqued your interest, and perhaps you will
be the one to discover an entirely new type of fractal!

Nathan Reed is currently a college student pursuing his bachelor's in Computer Science. In his free time he likes to play around with
sweet graphics algorithms, and is currently working on a raytracer.

Jerome Guinot is currently focusing on Demoniak3D Demo-System development and is the webmaster of oZone3D.Net web site.