These pix were created using a program I wrote that renders 3D chaotic attractors. Unlike other methods, which use raytracing ( QJulia, for example), this method renders using a Z-Buffer and a Shadow-Buffer. Although this limits the optical effects that are possible, it does allow a wider range of objects to be rendered.

The rendering of quaternion Julia sets by
ray tracing makes use of the existence of a formula called by some a *distance estimator*,
which takes a point in space and computes an estimate of the distance to the closest
point on the Julia set. A raytracing algorithm uses this information to step along
a ray and decide if the ray intersects the set.

I have not yet seen distance estimators for the functions used in computing these pictures (although I wouldn't rule out their existence), so I could not use ray tracing.

** How to render a collection of millions of points **
(When I get around to writing this part in a readable fashion...)

For experts: Z-Buffer and Shadow-Buffer, the surface is normal derived from the Z-Buffer. For these pix coloring and compositing were done by hand in Photoshop (my program only generates Diffuse, Specular, and Ambient intensities).

The pictures named **fsh*.jpg** were computed using a slight variant of the formula given in
**Computers, Pattern, Chaos, and Beauty** by Clifford Pickover (p. 165).

This method can also render Quaternion Julia Sets by virtue of the **Inverse Iteration Method**
(see ** The Beauty of Fractals** (I think), or ** Fractals Everywhere** by Barnsley), which
computes a Julia set by iteratively calculating
the inverse of the Julia set formula
(forward: * z = z*z + c*, inverse: * z = +/- *sqrt*(z - c)*).
Note that two inverses exist. In operation, one inverse is chosen randomly each iteration.
The points in this iteration jump around on the boundary of the Julia set, forming a surface.
Unfortunately, certain points on the boundary are visited quite rarely, so will fill in very
slowly. As luck would have it, these areas are some of the more interesting features of the sets,
so Julia sets computed with this method are often incomplete.

Since IFS also generates objects by iteration, this method should be able to
render 3D IFS shapes, but I haven't yet gotten around to implementing it. I have, however, rendered some
simple chaos-game objects. The **chaos-game** is a very simple algorithm that
is presented in most descriptions of IFS as a simple case.
In the Chaos game, N points are chosen, and an initial point. At each iteration,
one of the N points is randomly chosen, and the current point is moved a certain
fraction of the distance towards the chosen point. If the control points form a
triangle and the fraction is 1/2, a Seripinski gasket is formed. This generalizes
to pyramids in 3D, and I have rendered a few pictures along this line.

Back Up