How to Render a Mandelbulb


This short tutorial covers how to render a Mandelbulb via an .ass file. We are generating a "Mandelbulb" 3D version of the Mandelbrot and Julia sets. For more information about how to generate the Mandelbulb, see the Large Datasets from Procedurals tutorial.

A Julia set is the set of points on the complex plane that when squared and added iteratively to a constant (C), the 'prisoner' points fail to leave a circle of radius 2. There is a full Julia set for all possible values of C; C is a 2-dimensional value on the complex plane.

Julia sets come in 2 different types:

1. Completely connected.
2. A disconnected Cantor dust of points (for more on Cantor dust -

If the centerpoint (0,0) of a Julia set is a prisoner point, then the Julia set is completely connected; if it is not a prisoner point the Julia set is a Cantor dust.

The Mandelbrot set is the set if all fully connected Julia sets. It is generated by sampling the centerpoint of all possible Julia sets. That means, for every point on a mandelbrot set, you can generate a Julia set. Although both sets are continuous functions in the complex plane, they are usually rendered by sampling an even grid (pixels) and if the point is a prisoner point, it is rendered black.

The mandelbulb extends this math into 3 dimensions. This generator works by sampling all points in a regular grid, and if the point is a prisoner point, it adds it to an AiPoints geometry node for rendering.

Closeup of the Mandelbulb. You can clearly see that it is formed of thousands of tiny spheres


You will need the following files to create and render the Mandelbulb:

  • Compiled mandelbulb procedural Windows | Mac | Linux (the Mandelbulb. ass references this file).
  • mandelbulb.ass (this .ass file must be loaded into a Stand-in (Arnold Procedural)). If you get an error about the bounding box, disable 'Defer Standin Load' in the Stand-in.

Ensure that you are using an up to date version of Arnold before following this tutorial, otherwise you may encounter problems when rendering the mandelbulb.

  • Below is the content of the .ass file used in the StandIn (Arnold Procedural). You must either edit the .ass file and enter the full path to the dso, or you must set the Procedural Search Path.
  • Note that you can leave the dso filename with a ".so" extension. Arnold automatically loads the right file for the current operating system (for example, .dll on Windows, .so on Linux).


Remember to save the .ass file after you have made any changes to it before rendering.

  • Assign a shader to the Mandelbulb Arnold Procedural (standin). Create a light and render the scene. It will take a moment before rendering to generate the Mandelbulb.

Gridsize is the number of cells in the grid, i.e. 800 x 800 x 800.

To increase the resolution of the mandelbulb you will need to increase the grid size. Higher numbers will create more spheres. Be careful when increasing this number as memory use and render times will increase. 

Maximum number of iterations to try. If after this number of iterations, the point is still inside a sphere of radius 2, then it is assumed to be a prisoner point.

In two dimensions, Julia sets and Mandelbrot sets are computed by iterating Z raised to a power of 2 added to C. In three dimensions, raising to a power of 8 gives more interesting results, but there is a control to try changing this if desired.

This is a multiplier for the radii of the spheres in each cell; larger spheres will blend better, but will make it 'puffy', smaller spheres will show the grid more.

If a point doesn't iterate out farther than this distance, it is assumed to be well inside the mandelbulb and will not be added for rendering; this clears out a large hollow area in the center of the mandelbulb, making the geometry a bit lighter.

This is the number of chunks to break the mandelbulb into, so you are not building the entire set in ram at once. Higher numbers should use less ram, with a saturation point at around 30.The number of threads to spawn when sampling values on the grid.

A switch to render as a mandelbulb, or a julia set

 A value for C used to generate a julia set; ignored if julia == off.



That concludes this tutorial. Have a go at increasing the grid size in the .ass file and adding some more interesting lighting effects such as in the example images below.

An .ass file is available here.



  • No labels