Flame Fractals
When you work with flame fractals in Ultra Fractal,
you can run into Out Of Memory problems. This
topic explains why that happens and what you can
do about it.
What are flame fractals?
Flame fractals are a special type of organic-looking
fractals that is calculated differently than most
fractals. In Ultra Fractal, flame fractals are
produced by the Flame Fractals coloring algorithm
in the enr.ucl file. There are also variations
of the Flame Fractals coloring algorithm in the
files apophysis.ucl and sdc.ucl, all found in
the public formula
library. New flame fractals are easily discovered
with the Apophysis
program. Examples of flame fractals are in the
Showcase gallery
by Mark Townsend, such as Inedible
and Nightmoves.
How flame fractals are calculated
Because Ultra Fractal does not support flame
fractals natively, the Flame Fractals coloring
algorithm does not work like most other fractal
formulas. Instead, it allocates a large block
of memory at startup, and it calculates the entire
flame fractal at the time Ultra Fractal is initializing
the calculations for the layer. The memory block
is needed to store the calculated flame fractal.
Then, when Ultra Fractal thinks it is actually
calculating the layer, the Flame Fractals coloring
algorithm just reads the colors for the flame
fractal from the memory block. This explains why
the progress indicator stays at 0% for a long
time: at this point, the coloring algorithm does
all the work, while Ultra Fractal assumes it is
just in the initialization stage.
Memory usage
Because the entire flame fractal needs to be
stored in memory, it is obvious that more memory
is needed when you want to render larger flame
fractals. And it gets even worse. The Flame Fractals
coloring algorithm performs anti-aliasing by default
to improve the image quality, but this multiplies
the memory requirements. The amount of anti-aliasing
is controlled by the Oversampling parameter of
the Flame Fractals coloring algorithm. (If you
don't know what anti-aliasing is, look it up in
the help index in Ultra Fractal.)
When you render a flame fractal to disk, the
amount of memory required is given by the following
formula:
Memory = Width * Height * 16 * (1 + Oversampling
* Oversampling)
In this formula, Memory is the amount
of memory in bytes, Width and Height
are the size of the fractal in pixels, and Oversampling
is the Oversampling parameter in the Flame Fractals
coloring algorithm.
For example, a flame fractal of 1600x1200 pixels
with the default Oversampling value of 3, takes
1600*1200*16*(1+3*3) = 307,200,000 bytes or about
300 MB. If you increase the size to 4000x3000
pixels, it takes about 1.9 GB. But if you lower
the Oversampling parameter to 2, it only
takes about 950 MB.
How to prevent Out Of Memory errors
To render large flame fractals successfully,
you have to stay below the amount of physical
memory in your computer. The formula above tells
you how much memory a flame fractal needs. If
that is too much, you have three options:
- Reduce the Oversampling parameter.
This is by far the best option. It does lower
the quality of the rendered image, but if you
need large images for printing, anti-aliasing
is not very important and you will probably
not see the difference once the fractal is printed.
- Reduce the size of the fractal. Obviously
this will reduce the memory requirements, but
it is often not an option.
- Install more memory. Another obvious
solution, but with a major drawback. You cannot
go higher than 2 GB, because 32-bit Windows
programs like Ultra Fractal cannot use more
than 2 GB of memory, even if you have more memory
installed. There is no way around this at the
moment. (A 64-bit version of Ultra Fractal is
not currently planned.)
What is the largest possible flame fractal?
As explained in the previous sections, the maximum
size is defined by the Oversampling parameter
and the amount of memory installed. You can have
a maximum of 2 GB of memory, of which about 1.9
GB would be available for the Flame Fractals coloring
algorithm.
With an Oversampling value of 3, you can then just
render a flame fractal of about 3500x3500 pixels.
With an Oversampling value of 2, you can go up to
5000x5000 pixels. And finally, with an Oversampling
of 1, the maximum size is about 7900x7900 pixels.
|