GeeXLab
Current version: 0.17.x
»GeeXLab homepage

FurMark
Current version: 1.19.1
»FurMark homepage
»FurMark 1.9.x Submissions

GPU Caps Viewer
Current version: 1.37.0.0
»GPU Caps Viewer homepage
»GPU DB Submissions

GPU Shark
Current version: 0.10.0.4
»GPU Shark homepage


Blogs
»JeGX's HackLab

Geeks3D's Articles
»GPU Memory Speed Demystified

»Multi-Threading Programming Resources

»GeForce and Radeon OpenCL Overview

»How to Get your Multi-core CPU Busy at 100%

»How To Make a VGA Dummy Plug

»Night Vision Post Processing Filter


PhysX FluidMark
Current version: 1.5.2
»FluidMark homepage
»FluidMark 1.4.x Submissions

TessMark
Current version: 0.3.0
»TessMark homepage

ShaderToyMark
Current version: 0.3.0
»ShaderToyMark homepage
»ShaderToyMark Scores

Demoniak3D
Current Version: 1.23.0
»Demoniak3D
»Download
»Libraries and Plugins
»Demos
»Online Help - Reference Guide
»Codes Samples

3D Graphics Search Engine:

The Geeks Of 3D

 
The Mandelbrot Set: Colors of Infinity

By Nathan Reed - www.reedbeta.com
and
Jérôme Guinot - www.oZone3D.Net

Initial draft: January 25, 2006




[ Index ]

Page 1 | Page 2 | Page 3 | Page 4 | Page 5 | Page 6



6 - Further Possibilities


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 zn:

z'0 = 1
z'n+1 = 2z'nzn

This is simply a second sequence that can be calculated alongside the sequence zn.  Once we have this, the distance estimator is:

d(zn) = |zn| ln |zn2| / |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(zn) 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 zn 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!



7 - Further Resources



8 - Downloads



Download the demos source codes
Update: January 25, 2006
GPGPU Mandelbrot Demo





9 - About the Authors


Author:Nathan 'Reedbeta' Reed
Country:California
Contact:reedbeta [at] yahoo [dot] com
Homepage:www.reedbeta.com

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.



Author:Jerome 'JeGX' Guinot
Country:Switzerland
Contact:jegx [at] ozone3d [dot] net
Homepage:www.ozone3d.net

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



[ Index ]

Page 1 | Page 2 | Page 3 | Page 4 | Page 5 | Page 6





GeeXLab demos


GLSL - Mesh exploder


PhysX 3 cloth demo


Normal visualizer with GS


Compute Shaders test on Radeon


Raymarching in GLSL



Geeks3D latest news


Geeks3D forum news


Misc
»Texture DataPack #1
»Asus Silent Knight CPU Cooler
Page generated in 0.0068190097808838 seconds.