| # Fractal GUI Help Page |

### Version

First of all: This is free software - see License.
Second: This is a beta version! Please do not expect it to be free of bugs...
Help me to improve the software by reporting bugs, possible improvements, etc. to: <rammelt@cs.tu-berlin.de>.

| Rendering / Saving Images |

This part describes what are the minimum steps to create an image:

| Start rendering. A progress bar will appear on the image display. When calculation finished succesfully the progress bar will disappear and the rendered image will be shown instead.
| Automatically restart calculation if a parameter has been changed (only restarts the relevant parts of the calculation while the start button always restarts the whole calculation).
| Abort rendering (only active while rendering) - hopefully you do not need this too often... :-)
| Save the image. Supported formats are: PNG (supports transparency), JPEG (doesn't support transparancy)

| Just a Brief Introduction |

Normally the following series is evaluated (theoretically for an infinite number of steps):
Z = Z * Z + C
in Mandelbrot fractals C is the point which should be evaluated. For 2D fractals we would use complex numbers and set Creal = x and Cimag = y, for 3D fractals we are using Quaternions and set Cx = x, Cy = y, Cz = z, and Ct = t where I denote the 4 components of a Quaternion C by Cx, Cy, Cz, and Ct and t is a fixed value - we just don't have a 4th component in 3D space. Z is set to the origin point (0, 0, 0, 0).
in Julia fractals Z is used to represent the coordinate which should be evaluated (Zx = x, Zy = y, Zz = z, and Zt = t) and C is set to a value C0 which could be choosen differently but is fixed for one fractal. If C0 is taken from the Mandelbrot set then we will get an non-empty Julia set (I will explain how to decide for a given coordinate to be in the set of the fractal next). Especially interesting fractals emerging for values of C0 coming from the border areas of the corresponding Mandelbrot fractal (an especially boring fractal could be created by choosing C0 = (0,0,0,0) which just creates a sphere).
The series Z = Z * Z + C shows two different outcomes for different numbers (which is used to decide wether the corresponding coordinate belongs to the fractal or not):

1. The distance of Z to the origin (0,0,0,0) could grow infinitely. If this is the case the coordinate (represented by the C in Mandelbrot fractals, by the initial Z in Julia fractals) do not belong to the Mandelbrot / Julia set (looesely speaking: it does not belong to the fractal)
2. Z converges or it oscillates. Then the coordinate belongs to the fractal set.

Of course it is infeasible to evaluate the series Z = Z * Z + C for an infinite number of steps. Instead we evaluate it for a given max. number of steps called max-iter. If after max-iter steps the distance Z to the origin point (0,0,0,0) has not grown over the value given by another parameter called bail-out, then the associated coordinate is assumed to be part of the fractal, otherwise we break the iteration as soon as the distance has grown over max-iter. The "correct" value for the bail-out parameter is 2 because one could show that whenever the distance grows over 2 it will grow further up to infinity, i.e. such a value could not belong to the fractal. Nevertheless a bail-out < 2 could make sense to speed up the calculation. Furthermore if we manipulate the calculation (we will see next how to do that) the "correct" bail-out value could be different (in general it is unkown).
Since version V3.0 I am using distance estimation (DE) for all types of fractals. For every point, which does not belong to the fractal, a distance to the next "solid" point could be estimated. Although we do not know in which direction that point is located, we know that we could move at least this distance (in any direction) before we have to check again. This technic is called "ray marching". DE also makes it possible to smooth the surface by counting points whithin a given distance around the fractal also as solid points. Doing so, the bail-out parameter is not used anymore because the Z-value for a point within a given distance could well move out of the range defined by bail-out.
In order to get some iteresting results it is possible to do some changes to the normal calculation scheme:

1. Change the series, e.g. evaluate the series C(Z*Z) instead of Z = Z * Z + C
2. Use wrong operators e.g. for taking the sum and/or the product of two Quaternions, e.g. instead of the correct multiplication formula for Quaternions A and B:
   A * B = (Ax*Bx - Ay*By - Az*Bz - At*Bt,
   Ax*By + Ay*Bx + Az*Bt - At*Bz,
   Ax*Bz + Az*Bx + At*By - Ay*Bt,
   Ax*Bt + At*Bx + Ay*Bz - Az*By)
   we could use something like this:
   A * B = ((Ax*Bx - Ay*By)4 - Az*Bz - At*Bt,
   Ax*By + (Ay*Bx + Az*Bt)4 - At*Bz,
   Ax*Bz + Az*Bx + (At*By - Ay*Bt)4,
   (Ax*Bt - Az*By)4 + At*Bx + Ay*Bz)

The fractal generator supports all these types of manipulations (where the operators and series formulas could be taken from perdefined lists only)

| Fractal Parameters |

This section does not explain the parameters in more detail. For more information about 3D-Fractals please have a look the chacpter "Just a Brief Introduction" or at <http://user.cs.tu-berlin.de/~rammelt/fractal/> (in german).
Fractal-Type
Here you can choose

- between Julia and Mandelbrot fractals
- for the iterator type
- for the x-operator and (all non-default settings are "incorrect" operators, which nevertheless give interesting results...)
- for the +-operator (all non-default settings are "incorrect" operators, which nevertheless give interesting results...)
- for the algorithm to determine the color of each point
- for normal (fractal solid) or inverse (fractal as empty space) type

C0
This is the initial value of C for Julia fractals (for Mandelbrot fractals only the t-part of C0 is used, because x, y and z are used for the coordinates of each point)

| first component of the quaternion C0 (used as the x-coordinate)
| second component of the quaternion C0 (used as the y-coordinate)
| third component of the quaternion C0 (used as the z-coordinate)
| fourth component of the quaternion C0

Z0
This is the initial value of Z for Mandelbrot fractals - normally this is (0,0,0,0), but could be choosen differently in this application (for Julia fractals only the t-part of Z0 is used, because x, y and z are used for the coordinates of each point)

| first component of the quaternion C0 (used as the x-coordinate)
| second component of the quaternion C0 (used as the y-coordinate)
| third component of the quaternion C0 (used as the z-coordinate)
| fourth component of the quaternion C0

Iterations

| Max. number of iterations. The higher this value is the more structurized the fractal will be.
max-iter = 8 | max-iter = 16
| Bail-out parameter. Shown below is the same Julia fractal as before with a bail-out value of 1.1 instead of 2.0:
| Smoothing distance. All points within this distance to the real Mandelbrot/Julia set assumed to belong to the fractal too. In the picture below, only the bright red areas really belonging to the julia-set.

Color
Color of the fractal (only if "uniform color" or "glowing" is choosen) and sourrounding walls.

| Red channel
| Green channel
| Blue channel
| Alpha channel (0 means background is fully transparent, 255 means color is fully opaque)

Rotation
Define a view point used to rotate the whole object (applied before scanning).

| x-coordinate
| y-coordinate
| z-coordinate

Translation
Define the translation of the whole object (applied before scanning).

| x-coordinate
| y-coordinate
| z-coordinate

| Scan Parameters |

Search Space
Define the location and size of a virtual box which is the space to search for the fractal...

| left side of the search space
| top side of the search space
| front side of the search space
| width of the search space
| height of the search space
| depth of the search space

Resolution

| number of horizontal pixels (columns)
| number of vertical pixels (rows)
| (virtual) number of pixels along the z-axis, which has an influence on the color resultion (generally speaking this should be higher than the previous two values)

Scan Method
Normally (distance <= 0) the viewer is assumed to be infinetly far away, i.e. a parallel-perspective is used. Using a distance > 0 creates an diminishing point perspective.

Direct rendering | The object is not scanned into memory.
Low resolution scan | A low resolution scan is made used to speed up ray-marching
Full scan | A full-resolution scan is done (this one is used internaly by the previous method)
Naive | Also a full-resolution scan which doesn't use distance estimation nor normal estimation

Max Nesting Levels
For naive scan only.

| Defines how many surface levels could be scanned in each direction (x, y and z).

Normal Precision
For naive scan only.

| Number of sub-divsions done to estimate normals (the higher this value the more precise the normals will be).

| Rendering Parameters |

View-Point
Define the view point here. A little box on the right side of the image display shows the direction.

| x-coordinate
| y-coordinate
| z-coordinate

Distance
Normally (distance <= 0) the viewer is assumed to be infinetly far away, i.e. a parallel-perspective is used. Using a distance > 0 creates an diminishing point perspective.

| x-coordinate

Light-Point
Define the coordinates of the (single) source of light here. A little box on the bottom side of the image display shows the direction. The light is assumed to be infinetly far away, i.e. rays of light are all in parallel.

| x-coordinate
| y-coordinate
| z-coordinate

Ambient Light

| Amount of ambient light (always coming from the direction of the viewer).

Light Color
Color of lights (directed and ambient light).

| Red channel
| Green channel
| Blue channel
| Alpha channel (0 means background is fully transparent, 255 means color is fully opaque)

Environment Images
Images on the six side of a box that virtually sourrounds the scene

Front | Image on the front side
Left | Image on the left side
Upper | Image on the top side
Back | Image on the back side
Right | Image on the right side
Lower | Image on the bottom side

| Filter Parameters |

Background Image

Background | Image replacing transparent areas of the image.

Background
Background color.

| Red channel
| Green channel
| Blue channel
| Alpha channel (0 means background is fully transparent, 255 means color is fully opaque)

HSB-Filter
Color filter

| Hue offset
| Saturation factor
| Brightness factor

Focus-Depth-Filter
Parameters for a filter, which blurs all points depending on their distance to a z-coordinate of highest sharpness.

| Max. blur radius
| Relative z-position (0 = front, 1 = back) of the highest sharpness

Color-Shift-Filter
Parameters for a filter, which "shifts" colors of all points depeneding on their distance (given by their z-coordinates). This filter could be used to create the illusion of very big objects.

| Color-shift coefficient (0 = no color shift, 1 = max. color shift)
| Brightness-shift coefficient (0 = no brightness shift, 1 = max. brightness shift)

| View Parameters |

Zoom

| Zoom factor. This doesn't affect the actual size of the image (e.g. if it is saved on disk). It just effects the size of the displayed image!

| License |

Copyright (c) 2009, Patrick Rammelt
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.