2d mandelbrot sets have been around for a while, and there have been various tricks to turn those into 3d views (typically by turning the iteration count into a height). However at the end of 2009 a number of articles appeared about true 3d fractals similar to the Mandelbrot set called 'mandelbulbs'.
While I don't pretend to understand the original maths of the Mandelbrot and the Mandelbulb actually writing programs to render a Mandelbrot is pretty simple; for every point you just repeatedly apply the same equation over again to a value and count the number of iterations until it exceeds an escape value. At some point you give up and determine that the point won't ever hit the escape value. For a 2d mandelbrot you then just draw a picture with a different colour at each point using the iteration count to determine the colour.
Fortunately a nice website on the mandelbulb has an explanation and the equation to use. I put together a *really* simple program to use that equation and produced a 512x512x512 voxel array that looked something like the examples shown on the page that explained the Mandelbulb.
Viewing a rendering of the mandelbrot is easy - it's just an image; things just aren't as simple in 3d. One approach is to build the iteration algorithm into a ray-tracer and directly produce a 3d image. I opted to work with the voxel array I'd produced. Voxels are the 3d equivalent of pixels - think of an NxNxN stack of sugar cubes. You can view a 2d slice easily enough by just extracting it as an image, but to view the whole 3d model something a bit smarter is needed.
I used the free Amide software (originally designed for medical imaging) to view my voxel file and it has a rendering feature that produced the following image:
With the buzz of 3d printers that had been around for the last couple of years I'd hoped to produce a physical copy of the mandelbulb, and in April 2010 Fab lab manchester opened just outside the centre of Manchester.
Fablab have a Dimension 1200es 3d printer. There are a few different 3d printers out there that use various different technologies; the Dimension appears to extrude one of two different plastics along a path on each layer, then moving along to the next layer. One of the plastics is a hard ABS plastic, the other is a soluble support material. The software that drives the printer takes as input an STL file which is a collection of triangles. It then automatically drives the printer, inserting the support material where needed to keep the model up while it is printed.
Using the description of the STL file from Wikipedia I wrote a Simple voxel to STL converter. This is pretty simple and just inserts a cube everywhere the voxel is set, removing faces of the cube that are also included in another cube. These files are not small! The simple STL file for a 512x512x512 mandelbulb came out as 1.4G, while the 256x256x256 that I eventually used was 220MB. I used the free meshlab software to make sure I'd produced a valid STL file and view the result:
The Dimension printer has a resolution of about 0.25mm, and I opted to produce a small model about 4cm across, given that's only about 160 times the resolution I used the smaller 256x256x256 STL file. I'd been rather worried that the printer might object to the rather complex STL file, but it took it without any problem. The only complication was that the STL file is dimensionless, and thus the file I produced represented something either 1mm or 1inch across depending on how I asked Dimension's software to interepret it; the software lets you scale it up to whatever size you want.
After a while of plotting and then dissolving of the support we have the following:
I do like the fractal shadow on that image. Some other thoughts:
Many thanks to all at Fab lab Manchester, Daniel White for his Mandelbulb page, and the authors of Amide and Meshlab. All my rendering was produced on a system running Ubuntu Linux.
(c)Dave Gilbert 2010 - feel free to use the code examples and quote this page as long as you acknowledge me.