For the theories on which this program is based, see FLT and MDNT.
You can find some technical documentation in the "Fluogen\Fluogen\Documentation" folder, in the source code archive.
To generate your first fluon, start Fluogen and press "O" to enter the configuration window, and change the following options:
Press the "L" key to open a window that lets you select a fluon configuration. Pick any of the listed "flc" files and then press the "G" key to generate a medium-sized image. If you don't see any, navigate to the folder where Fluogen is, and go into the folder "DeployedScripts\FluonConfiguration"
If you want to generate an animation, change the type of the generation (from the "Generate" combo-box) to "Medium animation". Note that only some fluon configurations have an animation set, like "Julia -- Opportunities - Chocolate Eclipse.flc"
Press the "E" key to edit the fluon configuration. If you make any changes to the fluon configuration, you can press the "S" key to save them.
Press "F1" for a small help.
When generating an image or animation in Fluogen, it's possible to switch to the NFT mode, from the "Generate" combo-box, before pressing the "Generate" button. For this mode to work, Fluogen's configuration has to be set up for NFTs (see the Configuration section).
The concept of NFT, as used in Fluogen, means that after generating an image or animation, called master, several derived images and animations are created from the master.
For example, for images, Fluogen creates several mosaics, with several combinations of columns and rows (like 9 * 6, 12 * 8, 24 * 18). For an animation, several of the generated frames are separately copied as highlight frames.
These images and animations are saved with multiple resolutions and types (PNG and JPG). For example, an NFT master has by default a resolution of 16K. From this, several lower resolution images are also created (like 8K, 4K, 2K, 1K). Similar for animations, and each animation is created with a separate video encoding (FFMPEG is used for this).
In the end, all the created files are packed in a zip file. Then, a separate console application processes this zip and computes, for example, its hash.
All the resulted files are copied in the "GenartAutoSaveFolder" folder, from where they can be used to create an NFT. So, Fluogen itself doesn't create an NFT, it creates the files that can be attached to an NFT, plus the description and relevant metadata. The zip file is also encrypted if it's desired to make the content readable only by the NFT owner.
However, the zip file can simply be given to anyone, without involving NFTs. For example, maybe someone needs animations with various resolutions, for various devices.
Internal MDN domain composition:
Domain projector = Projects the MDN domain to another MDN (to simulate a different kind of domain space).
Fluon generator = Generates an MDN codomain (usually inside a loop):
MDN reducer = Reduces the MDN codomain to a scalar (or two) called reduced MDN:
Reduced MDN transfer functions = Basic operations that can be applied on the reduced MDN: scale, offset, transfer function. Order: "Inner", "Middle", "Outer".
Scalar reducer = Converts the reduced MDN scalar to a reduced scalar. Reducer of any real number to a smaller number, usually to a unitary number like [0...1] or [-1...1]. This should be treated as a compressor or repeater function, although this isn't a requirement and it's not enforced.
Color reducers (low range, high range, infinite range) = Converts the reduced scalar to a reduced color scalar (within [0...1]). These should be treated as a compressor or repeater function, although this isn't a requirement and it's not enforced. The infinite range color reducer must support supraunitary input values. The output value must be unitary (within [0...1]).
Color extractor = Converts the reduced color scalar to an RGB color, either using the configured palette or by computing it on the spot.
Palette = Creates and caches RGB colors (usually from a cylindrical colorspace like HSL).
The projectors, generators, escapers, reducers, extractors and palettes are C# scripts that anyone can write and load (by file name) in a fluon configuration file.
To minimize discontinuities:
If a different orientation is desired, use a "ReverseAll" kaleidoscope.
General legend for script descriptions
The following terms can be seen in the source code, but also in the descriptions from the fluon configuration window.
Fluon context: fc
Fluon configuration: fp
Pixel context: pc
Stratum coordinate for the horizontal axis: sx
Stratum coordinate for the vertical axis: sy
Iteration index (from 0) in a loop: i
Available scalars (specific to the involved script): s1, s2
Available MDNs (specific to the involved script): m1, m2
Codomain (carried through the iterated loop): y
Initial codomain (in the iterated loop): y0
Domain radius (always positive): x.r
Domain cartesian: x[ i ]
Domain angle: x.u[ i ]
Codomain radius (always positive): y.r
Codomain cartesian: y[ i ]
Codomain angle: x.u[ i ]
Previous-iteration codomain (in the iterated loop): yp
Escape threshold: et
Whether the codomain has escaped relative to the escape threshold: escaped
Escape value (from the iterated loop): ev
Previous-iteration escape value, so it's not actually escaped (from the iterated loop): evp
Reduced MDN (carried through an MDN reducer, initialized at 0, or through an MDN perturbator, or through a scalar reducer): a
Accumulate the reduced MDN (= the reduced MDN replaces "a" at every iteration); prefixes fluon configuration descriptions: Accumulate
Maximum iterations: mi
Realized iterations (until escape): ri
Reduced scalar: rs
Reduced color: rc
Constant PI: pi
Fractals usually use the "RadiusAbs" escaper with an "EscapeThreshold" higher than 0, which means that when the radius of the codomain exceeds "EscapeThreshold", the loop ends. Usually, the higher this is, the less color banding is visible.
If you get out of memory exceptions, and your computer has a low amount of RAM (like 8 GB), reduce the size of the image / animation frame to generate. The used resolution might be fine if the aspect ratio is 16:9 instead of 1:1.
In the file names of the fluon configurations, you can use "--", twice, to indicate that the text between the two occurrences must be used as a genart name.
You can compare fluon configuration files, as text files (the content is JSON data), to see what parameters are different, so as to see why the images they create are different.
You can see where interesting coordinates are for a fluon by creating an animation with the "TranslateXXX" or "ScanXXX" animation drivers:
Calculations are much slower than in other fractal generation programs because Fluogen:
Trigonometric functions are used because the multidimensional numbers library requires them in order to be able to work flexibly with any number of dimensions and equations.
Certain optimizations are implemented for Julia and Mandelbrot in 2 dimensions, which makes the performance better 2.5 times.
Multidimensional multiplication, specifically squaring, has a smoothing effect the more dimensions are used.
Due to this effect, smoothing can be applied on fractals that use multidimensional squaring, with little performance penalty (only that required to perform calculations in one more dimension). This effect allows ample adjustment for the level of smoothing.
The effect is applied only on visually jarring artifacts, but the general sharpness of the image is maintained; the disadvantage is made by slight distortions in some areas. With antialiasing, where multiple points have to be computed for every pixel, the entire image loses sharpness.
To apply this effect, for example on 2D Julia fractals, simply set the third dimension cartesian to a very small value (and adjust it for the desired level of smoothing). For maximum performance, the implementation of the squaring has to be optimized by using 3D vectors instead of MDN numbers (whose implementation in Fluogen uses an array for the cartesian coordinates).
The source code files for the MDN library is the "Mdn.cs" file from the C# source code archive. The C# library is naturally implemented, that is, you can write for example "y = (1 + x / n) ^ n" to represent the natural exponentiation (at limit). All operations are implemented so as to require the minimum number of conversions between cartesian and polar coordinates.
After a new font is installed in the operating system, the application must be restarted if you want to use the font in it.