About the Attractors

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.

About the Rendering Algorithm

The objects seen in these pictures are calculated by iterating some function (next_point = fn(current_point)) many times (easily in the millions of iterations, often many more). The locus of all points hit by this iteration is the attractor of the function. The shape of the attractor is dependant on the parameters of the function, and sometimes on the initial point (although the functions I used have attractors which are not dependant on the inital point).

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).

About the Functions

The pictures named chaos*.jpg were computed using general polynomials, as described in Strange Attractors: Creating Patterns in Chaos by Julien Sprott. I recommend this book, mainly because of the large number of examples.

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
Tim Stilson, 2/21/95