Fractal flames are a member of the
iterated function system
In mathematics, iterated function systems (IFSs) are a method of constructing fractals; the resulting fractals are often self-similar. IFS fractals are more related to set theory than fractal geometry. They were introduced in 1981.
IFS fractals, ...
class of
fractal
In mathematics, a fractal is a geometric shape containing detailed structure at arbitrarily small scales, usually having a fractal dimension strictly exceeding the topological dimension. Many fractals appear similar at various scales, as illu ...
s created by
Scott Draves in 1992.
Draves' open-source code was later ported into
Adobe After Effects graphics software
[Chris Gehman and Steve Reinke (2005). ''The Sharpest Point: Animation at the End of Cinema''. YYZ Books. pp 269.] and translated into the
Apophysis fractal flame editor.
Fractal flames differ from ordinary iterated function systems in three ways:
*
Nonlinear functions are
iterated
Iteration is the repetition of a process in order to generate a (possibly unbounded) sequence of outcomes. Each repetition of the process is a single iteration, and the outcome of each iteration is then the starting point of the next iteration. ...
in addition to
affine transforms.
* Log-density display instead of linear or binary (a form of
tone mapping)
* Color by structure (i.e. by the recursive path taken) instead of monochrome or by density.
The tone mapping and coloring are designed to display as much of the detail of the fractal as possible, which generally results in a more aesthetically pleasing image.
Algorithm
The algorithm consists of two steps: creating a
histogram
A histogram is an approximate representation of the distribution of numerical data. The term was first introduced by Karl Pearson. To construct a histogram, the first step is to " bin" (or "bucket") the range of values—that is, divide the ent ...
and then rendering the histogram.
Creating the histogram
First, one iterates a set of functions, starting from a randomly chosen point ''P = (P.x,P.y,P.c)'', where the third coordinate indicates the current color of the point.
:Set of flame functions:
In each iteration, choose one of the functions above where the probability that ''F
j'' is chosen is ''p
j''. Then one computes the next iteration of ''P'' by applying ''F
j'' on ''(P.x,P.y)''.
Each individual function has the following form:
:
where the parameter ''w
k'' is called the weight of the ''variation'' ''V
k''. Draves suggests
[ ] that all
:s are non-negative and sum to one, but implementations such as Apophysis do not impose that restriction.
The functions ''V
k'' are a set of predefined functions.
A few examples
are
* V
0(''x'',''y'') = (''x'',''y'') (Linear)
* V
1(''x'',''y'') = (sin ''x'',sin ''y'') (Sinusoidal)
* V
2(''x'',''y'') = (''x'',''y'')/(''x''
2+''y''
2) (Spherical)
The color ''P.c'' of the point is blended with the color associated with the latest applied function ''F
j'':
: P.c := (P.c + (F
j)
color) / 2
After each iteration, one updates the histogram at the point corresponding to ''(P.x,P.y)''. This is done as follows:
histogram y] REQUENCY:= histogram y] REQUENCY1
histogram y]OLOR
An olor is a piece of cowhide or plastic tied onto a male goat like a skirt. It is used by Kenyan goatherders to prevent bucks from impregnating the female goats during times of drought.
References
External links
Society of Kenya
Contra ...
:= (histogram y]OLOR
An olor is a piece of cowhide or plastic tied onto a male goat like a skirt. It is used by Kenyan goatherders to prevent bucks from impregnating the female goats during times of drought.
References
External links
Society of Kenya
Contra ...
+ P.c)/2
The colors in the image will therefore reflect what functions were used to get to that part of the image.
Rendering an image
To increase the quality of the image, one can use
supersampling to decrease the noise. This involves creating a histogram larger than the image so each pixel has multiple data points to pull from. For example, create a histogram with 300×300 cells in order to draw a 100×100 px image; each pixel would use a 3×3 group of histogram buckets to calculate its value.
For each pixel ''(x,y)'' in the final image, do the following computations:
frequency_avg y] := average_of_histogram_cells_frequency(x,y);
color_avg y] := average_of_histogram_cells_color(x,y);
alpha y] := log(frequency_avg y]) / log(frequency_max);
//frequency_max is the maximal number of iterations that hit a cell in the histogram.
final_pixel_color y] := color_avg y] * alpha y]^(1/gamma); //gamma is a value greater than 1.
The algorithm above uses
gamma correction to make the colors appear brighter. This is implemented in for example the Apophysis software.
To increase the quality even more, one can use gamma correction on each individual color channel, but this is a very heavy computation, since the ''log'' function is slow.
A simplified algorithm would be to let the brightness be linearly dependent on the frequency:
final_pixel_color y] := color_avg y] * frequency_avg y]/frequency_max;
but this would make some parts of the fractal lose detail, which is undesirable.
Density Estimation
The flame algorithm is like a
Monte Carlo simulation
Monte Carlo methods, or Monte Carlo experiments, are a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results. The underlying concept is to use randomness to solve problems that might be determini ...
, with the flame quality directly proportional to the number of iterations of the simulation. The noise that results from this stochastic sampling can be reduced by
blurring the image, to get a smoother result in less time. One does not however want to lose resolution in the parts of the image that receive many samples and so have little noise.
This problem can be solved with adaptive
density estimation to increase image quality while keeping render times to a minimum. FLAM3 uses a simplification of the methods presented in *Adaptive Filtering for Progressive Monte Carlo Image Rendering*, a paper presented at
WSCG 2000 by Frank Suykens and Yves D. Willems. The idea is to vary the width of the filter
inversely proportional to the number of samples available.
As a result, areas with few samples and high noise become blurred and smoothed, but areas with many samples and low noise are left unaffected. See https://github.com/scottdraves/flam3/wiki/Density-Estimation.
Not all Flame implementations use density estimation.
See also
*
Apophysis, an open source fractal flame editor for Microsoft Windows and Macintosh.
*
Chaotica, a commercial fractal editor which supports flam3, Apophysis and further generalizations.
*
Electric Sheep, a screen saver created by the inventor of fractal flames which renders and displays them with
Distributed computing.
*
GIMP
GIMP ( ; GNU Image Manipulation Program) is a free and open-source raster graphics editor used for image manipulation (retouching) and image editing, free-form drawing, transcoding between different image file formats, and more specialized task ...
, a
free software, multi OS
image manipulation program that can generate fractal flames.
References
{{DEFAULTSORT:Fractal Flame
Iterated function system fractals