A lot of sites have reported that a new, interesting 3D version of the Mandelbrot set has been discovered. The Mandelbulb has aesthetic qualities similar to Quaternion-Julia sets, but seems more diverse and suited for exploration.
Skytopia has a great overview complete with many stunning images.
A good way to view the basic structure is this 56 Megapixel render from Skytopia (using the Seadragon viewer – requires Silverlight):
As of now, I do not know of any released software capable of generating Mandelbulbs, but it probably won’t be long:
Recent posts by Iñigo Quílez (who produced the Kindernoiser Quaternion-Julia set GPU renderer) indicate that he is very to close to completing a fast GPU implementation. These posts also include the basic source-code, which I believe should make it possible to port to other targets, for instance Pixel Bender. Apparently Quílez has cooked up a distance estimator, and a fake ambient occlusion scheme (based on orbit traps) for these Mandelbulbs, which sounds very promising.
Quaternions are extensions of the complex numbers with four independent components. Quaternion Julia sets still explore the convergence of the system z ← z2 + c, but this time z and c are allowed to be quaternion-valued numbers. Since quaternions are essentially four-dimensional objects, only a slice (the intersection of the set with a plane) of the quaternion Julia sets is shown.
Quaternion Julia sets would be very time consuming to render if it wasn’t for a very elegant (and surprising) formula, the distance estimator, which for any given point gives you the distance to the closest point on the Julia Set. The distance estimator method was first described in: Ray tracing deterministic 3-D fractals (1989).
My first encounter with Quaternion Julia sets was Inigo Quilez’ amazing Kindernoiser demo which packed a complete renderer with ambient occlusion into a 4K executable. It also used the distance estimator method and GPU based acceleration. If you haven’t visited Quilez’ site be sure to do so. It is filled with impressive demos, and well-written tech articles.
In the 1989 Quaternion Julia set paper, the authors produced their images on an AT&T Pixel Machine, with 64 CPU’s each running at 10 megaFLOPS. I suspect that this was an insanely expensive machine at the time. For comparison, the relatively modest NVIDIA GeForce 8400M GS in my laptop has a theoretical maximum processing rate of 38 gigaFLOPS, or approximately 60 times that of the Pixel Machine. A one megapixel image took the authors of the 1989 paper 1 hour to generate, whereas Subblues GPU implementation uses ca. 1 second on my laptop (making it much more efficient than what would have been expected from the FLOPS ratio).
GPU Acceleration and the future.
These days there is a lot of talk about using GPUs for general purpose programming. The first attempts to use GPUs to speed up general calculations relied on tricks such as using pixel shaders to perform calculations on data stored in texture memory, but since then several API’s have been introduced to make it easier to program the GPUs.
NVIDIAs CUDA is currently by far the most popular and documented API, but it is for NVIDIA only. Their gallery of applications demonstrates the diversity of how GPU calculations can be used. AMD/ATIs has their competing Stream API (formerly called Close To Metal) but don’t bet on this one – I’m pretty sure it is almost abandoned already. Update: as pointed out in the comments, the new ATI Stream 2.0 SDK will include ATIs OpenCL implemention, which for all I can tell is here to stay. What I meant to say was, that I don’t think ATIs earlier attempts at creating a GPU programming interface (including the Brook+ language) are likely to catch on.
Far more important is the emerging OpenCL standard (which is being promoted in Apples Snow Leopard, and is likely to become a de facto standard). Just as OpenGL, it is managed by the Khronos group. OpenCL was originally developed by Apple, and they still own the trademark, which is probably why Microsoft has chosen to promote their own API, DirectCompute. My guess is that CUDA and Brook+ will slowly fade away, as both OpenCL and DirectCompute will come to co-exist just the same way as OpenGL and Direct3D do.
For cross-platform development OpenCL is therefore the most interesting choice, and I’m hoping to see NVIDIA and AMD/ATI release public drivers for Windows as soon as possible (as of now they are in closed beta versions).
GPU acceleration could be very interesting from a generative art perspective, since it suddenly becomes possible to perform advanced visualization, such as ray-tracing, in real-time.
A final comment: a few days ago I found this quaternion Julia set GPU implementation for the iPhone 3GS using OpenGL ES 2.0 programmable shaders. I think this demonstrates the sophistication of the iPhone hardware and software platform – both that a hand-held device even has a programmable GPU, but also that the SDK is flexible enough to make it possible to access it.
GroBoto is a commercial 3D modeling tool built around the concept of bots. Bots are small iterated systems, with a few selected variables that can be customized. Bots are selected from a list of presets – more than 100 are available. Some of the Bots are very similar to what can be accomplished in Structure Synth.
GroBoto is a very polished product. The GUI is slick, and there are loads of advanced visualization customizations: textures, lightning and animation. When moving and rotating objects an OpenGL view is used, but the scene is always automatically rendered using an internal raytracer, which is really amazingly fast (typically less than a second).
My only complaint is that you are somewhat limited by the presets offered by GroBoto. It would be amazing to be able to completely script the objects. Yet again, that would make GroBoto a tough competitor to Structure Synth
GroBoto is available for $59 (using the coupon offer) for Windows and Mac OS X.
Be sure to a look at their gallery for more images or try the demo.
The structures were created in Structure Synth, and raytraced in SunFlow in high resolution (the largest picture was 6000×6000 pixels).
I was about to leave for Japan, when I was asked to make the cover image, so I had a very tight deadline. Despite this, the actual work process went fine, thanks to clear artistic guidance from the graphical editor (Alicia Kubista from Andrij Borys Associates).
By the way, even though the cover notes state that I’m a computer scientist, and even though I’ve worked professionally with software development for the last eight years or so, I am a physicist. Really.
First a few words about Adobe Pixel Blender which was new to me. It is a toolkit that allows you to write filters in a C-like language, that are compiled and executed on either the GPU or CPU. They can be used in Photoshop, After Effects and even Flash 10 – making it possible to create very powerful Flash content. It is interesting to see that general-purpose computing on graphics processing units now are becoming mainstream, and no longer just an academic exercise.
Prentententoonstelling by M.C. Escher (1956) together with its grid transformation.
The story behind Escher’s Droste effect is very interesting. It refers to the particular transformation Escher used in his ‘Prentententoonstelling’ lithograph (pictured above). The mathematics behind the picture was unraveled by a team of Dutch mathematicians in 2003 (it is ‘…drawn on a certain elliptic curve over the field of complex numbers…’) and is excellently described on their website. Several other software implementations exists, including one for GIMP and a plugin for Paint.net.
To be honest, I never liked Escher’s original painting much. I’ve always found it to be too mathematical and fabricated and not very interesting. But the math behind it is interesting and the Flickr group really contain many great pictures.
Be sure to check out Subblue’s many excellent examples of his filter (note the video at the bottom!).
Syntopia
Digital art, music, and culture.
Also maps the evolution of my generative art program: Structure Synth.
This blog is written by Mikael Hvidtfeldt Christensen and is part of hvidtfeldts.net.