Sphärisch schöne Fraktale erzeugen Sie mit dem Algorithmus Flam3. Die GUI Fr0st hilft, die komplexe Software zu meistern.
In den frühen 1990er Jahren entwickelte der Computerkünstler Scott Draves [1] einen fraktalen Algorithmus, den er Flame taufte. Die aktuelle Version ist unter dem Namen Flam3 bekannt. Auf das Aussehen der damit produzierten Grafiken nehmen Sie über Hunderten von Parametern Einfluss – selbst für mathematisch interessierte Laien ist das kaum zu durchschauen [2].
Die grafische Oberfläche Fractal Fr0st [3] versteckt die Komplexität von Flam3 etwas, zaubert aber trotzdem faszinierende Ergebnisse. Bei dem kurz Fr0st genannten Tool handelt es sich um eine Kombination aus Python-Skript und binären Programmen (siehe Kasten “Installation”).
Installation
Da die Software nicht in den Repositories der gängigen Distributionen liegt, gilt es sie von Hand einzurichten. Unter Ubuntu 12.04 und 12.10 klappt das Setup besonders einfach. Laden Sie dazu zunächst die Quelltext-Archive aus dem Netz [4] oder von der Heft-DVD und entpacken Sie sie mit dem Befehl tar xf fr0st-1.4-src.tgz in ein beliebiges Verzeichnis. Dabei entsteht der Ordner fr0st-1.4-src/, in den Sie anschließend wechseln.
Hier führen Sie mit Root-Rechten das Skript install-dependencies.sh aus, das im Idealfall beim Ablaufen nur Informationen beziehungsweise einfache Warnungen des Compilers ausgibt. Es entstehen unter anderem die vier Programmdateien flam3-animate, flam3-genode, flam3-render und flam3-convert, die Sie bei Bedarf direkt aufrufen. Beispiele dazu liefert die Textdatei flam3-2.8-src/README.txt. Die Installation der Dateien im System erfordert die Eingabe des Passworts.
Bei anderen Distributionen können Sie nicht auf das Skript zurückzugreifen, sondern müssen die Installation komplett selbst erledigen. Sofern Sie die Entwicklungspakete für Libz, Libpng, Libjpeg und Libxml2 installiert haben, genügt dazu der typische Dreisatz (Listing 1, Zeile 5). Treten dabei Probleme auf, erzeugen die Konfigurationsdateien neu (Zeile 1 bis 4). Anschließend wiederholen Sie den Dreisatz.
Nun testen Sie die Installation kurz mithilfe eines Aufrufs von flam3-render (Zeile 6). Klappt alles, starten Sie Fr0st als normaler Anwender im Terminal mit dem Befehl aus Zeile 7.
Listing 1
$ libtoolize $ aclocal $ automake $ autoconf $ ./configure && make && sudo make install $ flam3-render < test.flam3 $ python /usr/local/src/fr0st-1.4-src/fr0st.py
Fractal Fr0st
Die Oberfläche erlaubt zum einen den einfachen Zugriff auf alle Funktionen von Flam3 und bietet zum anderen eine Vorschau sowie viele Möglichkeiten, das Ergebnis zu optimieren.
Als Dreh- und Angelpunkt für die Arbeit fungiert das Fractal Fr0st benannte Fenster (Abbildung 3). Es fasst im Wesentlichen neben der Vorschau (oben rechts) vier Dialoge zusammen: den Transform Editor für grobe Voreinstellungen, den Gradient Editor für Farbeinstellungen, den Adjust-Editor für feine Anpassungen und Voreinstellungen und Anim zum Erstellen von Animationen.

Transform Editor bezeichneten Dialog für die wesentlichen Einstellungen. Die interaktive Vorschau erlaubt das Verschieben des fraktalen Gebildes mit der Maus.” width=”300″ height=”181″ />
Abbildung 1: Das Steuerfenster von Fr0st mit dem alsTransform Editor bezeichneten Dialog für die wesentlichen Einstellungen. Die interaktive Vorschau erlaubt das Verschieben des fraktalen Gebildes mit der Maus.Zum Erstellen von Flammen stellen Sie zunächst ganz links unter samples.flames den gewünschten Typ der Flammen ein. Über linear erzeugen Sie die klassischen Flammen, mit Julia die von Mandelbrot-Generatoren bekannten auf Julia-Mengen basierenden Varianten. Mit heard steht noch eine spezielle Spielart bereit, die sich durch weit geschwungene, oft herzförmig verschlungene Formen auszeichnet.
Von dem in der Vorschau angezeigten Bild aus beginnen Sie mit dem Entwurf Ihres Werks. Verschieben Sie dazu die im Transform Editor angezeigten Dreiecke und beobachten Sie dabei die Vorschau. Sie können dabei auch nur einzelne Ecken oder Kanten eines Dreiecks bewegen. Jede diese Aktionen hat normalerweise deutlich sichtbare Auswirkungen auf das Ergebnis. Lassen Sie sich überraschen, was schon ganz geringe Veränderungen alles bewirken.
Das Ganze funktioniert folgendermaßen: Fr0st fasst mehrere Flame-Parameter zu Dreiecken zusammen, die wiederum eine Ebene repräsentieren. Die kleinen, in der Farbe des Dreiecks angedeuteten Punkte im Hauptfenster symbolisieren diese Ebene. Eine Ecke des Dreiecks fungiert dabei als Ursprung (“0”), eine als X-Koordinate und die dritte als Y-Koordinate.
Am Ursprung verschieben Sie das gesamte Dreieck, an den anderen Punkten nur jeweils eine Komponente. Das fraktale Gebilde entsteht durch virtuelle Schnitte zwischen Ebenen, andere Faktoren spielen aber eine ebenso wichtige Rolle. So hat die Lage des Ursprungs der Dreiecke einen ebenso großen Einfluss auf das Ergebnis, wie die Seitenlängen der Dreiecke.
Punktwolken
Normalerweise zeigt Fr0st drei Dreiecke, die das Gebilde definieren. Die Form der Dreiecke spielt genauso eine Rolle wie ihre absolute und relative Lage (zueinander). Große Dreiecke erzeugen weite, offene Formen; kleine Dreiecke führen zu eher kompakten Ergebnissen. Eng benachbarte sowie sich überlagernde oder einander einschließende Dreiecke generieren dichte Punktwolken. Weit voneinander entfernte Elemente beeinflussen einander nur wenig. Da die Lage der Dreiecke für die Lage einer Ebene steht, wirken flache Dreiecke wie schräg angeschnittene Ebenen, was zum Strecken der Strukturen führt.
Weniger offensichtlich sind weitere Möglichkeiten: Mit einem Klick auf die XY-Kante der Dreiecke ändern Sie deren Größe, ohne die Lage zu beeinflussen. Sofern Sie nicht den Nullpunkt anklicken möchten, verschieben die Form über einen Klick ins Dreieck. Indem Sie auf die kleinen, L-förmigen Anfasser der Ebenen (außerhalb des Dreiecks) oder die X- beziehungsweise Y0-Kante klicken, drehen Sie das Gebilde.
Für einfache Spielereien genügt diese Methode vollkommen. Anders sieht die Sache aus, wenn Sie mithilfe gezielter Manipulationen ein bestimmtes Bild generieren möchten. Die Algorithmen – egal, ob linear, julia oder heard – lassen sich intuitiv nur schwer erfassen. Daher erfordert es viel Übung, präzise und vorhersagbare Ergebnisse zu produzieren.
Flame 149
Normalerweise empfiehlt es sich, die Veränderungen schrittweise und systematisch vorzunehmen. Dabei sollten Sie mithilfe der beiden Schaltflächen Save beziehungsweise Save As in der Werkzeugleiste Zwischenergebnisse speichern. Auf diese Weise nähern Sie sich vielleicht an das bekannte “Flame 149” [5] an. Die Namen gespeicherter Parametersätze finden Sie nach dem Speichern links im Fensters.
Ist das Gebilde nur zu groß geraten oder in der Vorschau falsch platziert, fällt die Abhilfe leicht: Verschieben Sie in der Vorschau den Ausschnitt mit der Maus. Fr0st übernimmt dies in die Feineinstellungen. Weiteres – wie etwa ein Anpassen der Größe – stellen Sie unter Adjust ein. Dort rotieren Sie bei Bedarf das fraktale Gebilde auch und steuern mit den Reglern für Brightness, Gamma, Gamma Threshold, Vibrancy sowie Highlight Power die Form und Sichtbarkeit der berechneten Linien.
Dabei stellen Sie bei Bedarf ein, welche Bereiche hell erscheinen und welche in der Dunkelheit fast verschwinden. Um Details besser zu erkennen, nutzen Sie das externe Vorschaufenster Flame Preview. Sobald die Form des Gebildes stimmt, beginnen Sie mit der Farbgebung. Dafür steht der Gradient Editor (Abbildung 2) bereit.

Gradient Editor erlaubt das Einstellen von Farbverläufen, mit denen Sie das fraktale Gebilde kolorieren.” width=”300″ height=”211″ />
Abbildung 2: DerGradient Editor erlaubt das Einstellen von Farbverläufen, mit denen Sie das fraktale Gebilde kolorieren.Dabei setzen Sie entweder vordefinierte Verläufe ein (ganz unten im Gradient-Browser) oder wenden selbst definierte Gradienten an. Besonders einfache erzeugen Sie einen neuen Verlauf durch einen Doppelklick auf den Verlaufsbalken. Fr0st berechnet dann den neuen Gradienten auf Basis des gerade angezeigten und wendet ihn auch gleich auf das aktuelle Bild an. Der Schieberegler unterhalb erlaubt es, die Abfolge der Farben zu verschieben und damit die Zuordnung im Bild zu ändern.
Das dritte Fenster mit dem Titel Rendering Flame … steuert nun, wie die Software das Bild genau generiert (Abbildung 3). Dabei behalten Sie am besten zunächst die meisten der Voreinstellungen bei. Die voreingestellte Größe (Size) passen Sie an die Möglichkeiten der Hardware an.

Rendering Flame … bestimmen Sie die Qualität des berechneten Bildes und starten den Prozess.” width=”300″ height=”193″ />
Abbildung 3: Im FensterRendering Flame ... bestimmen Sie die Qualität des berechneten Bildes und starten den Prozess.Die maximale auf einem System berechenbare Bildgröße hängt vom Hauptspeicher ab. Sie finden die beiden relevanten Angaben unter Resource Usage: Während Required Memory den bei der angegebenen Fraktalgröße benötigten Speicher angibt, zeigt Free Memory, wie viel RAM tatsächlich bereit steht. Fr0st speichert die Bilder in dem unter Output Destination eingestellten Verzeichnis.
Zwei weitere Einstellungen beeinflussen den Speicherbedarf der Bilder maßgeblich: der beim Berechnen verwendete Datentyp, den Sie unter Buffer depth einstellen, sowie das Spatial Oversampling. In der Regel genügen 32-Bit-Gleitkommazahlen sowie ein Oversampling-Wert von 2.
Neuer Hintergrund
Voreingestellt generiert Fr0st Bilder mit einem schwarzen Hintergrund, was die filigranen Strukturen der fraktalen Gebilde sehr gut betont. Mit Gimp ändern Sie dies bei Bedarf – die globale Farbauswahl (mit sehr niedriger Schwelle) macht es möglich. Haben Sie der Ebene zuvor einen Alpha-Kanal spendiert (im Menü Ebenen durch Alphakanal hinzufügen), lassen sich die ausgewählten Bereiche vollständig entfernen, sodass Transparenz entsteht.
Es geht aber auch einfacher: Im Fr0st-Fenster Rendering Flame … erlaubt die Schaltfläche PNG Transparency, direkt Bilder mit einem transparenten Hintergrund zu erzeugen (Abbildung 3). Diesen gestalten Sie dann mit Gimp durch das Anlegen einer neuen Ebene (eventuell mit einem Farbverlauf) ganz individuell.
Fraktaler Wahnsinn
Neben den bisher vorgestellten Grundfunktionen bietet Fr0st noch wesentlich weitergehende Features. Schon bei den drei einfachsten Fraktalen linear, julia und heard variieren Sie bei Bedarf über ein einfaches Python-Skript grundlegende Parameter und zeigen das Ergebnis im Vorschaufenster anzuzeigen.
In der Werkzeugleiste finden Sie dazu etwas rechts der Mitte die mit Run Script bezeichnete Schaltfläche. Über diese starten Sie ein Skript, das systematische Veränderungen wichtiger Parameter vornimmt und gleichzeitig die Vorschau aktualisiert. Bei Bedarf werfen Sie mit den rechten der drei Schaltflächen einen Blick in das Skript oder editieren es.
Bei der Installation aus den Quellen packt Fr0st bereits eine Reihe von Skripten mit auf die Platte, die noch viel weitergehende Funktionen bieten. Sie laden ein Skript aus dem Verzeichnis ~/.fr0st/scripts/batches/ mit der Schaltfläche Open Script und starten es wiederum via Run Script. Das führt dazu, dass Fr0st ganz neue Parametersätze erzeugt und anbietet. Jedes dieser Sets dient wieder aus Basis für eigene fraktale Objekte. Alternativ passen Sie das Skript selbst nach Ihren Vorstellungen an.
Im Test erzeugten die Skripte gnarl.py, lolpolpolpo.py, edisc_julian.py und modified_flipped_disc.py recht außergewöhnliche Ergebnisse. Planen Sie aber viel Zeit ein, wenn Sie sich mit den Fr0st-Skripten beschäftigen wollen.
Fazit
Flam3 und Fr0st verführen zum Spielen, die Ergebnisse beeindrucken durch ihre Komplexität und Vielfalt. Für den maximalen Spaß – sprich: eine gute Auflösung – sollte der Rechner aber über viel RAM verfügen und mindestens einen Dual-Core-Prozessor mitbringen. Wollen Sie die Bilder weiter bearbeiten, aktivieren Sie die PNG-Transparenz. Weitere Tipps finden Sie im Fr0st-Wiki [6].
Infos
[1] Scott Draves: http://scottdraves.com/about.html
[2] Flam3-Algorithmus: http://flam3.com/flame.pdf
[3] Blog, Code: http://fr0st.wordpress.com/
[4] Fr0st auf Launchpad: https://launchpad.net/fr0st
[5] Flame 149: http://draves.org/art-resume/149.html
[6] Wiki zu Flam3: http://code.google.com/p/flam3/wiki/Introduction





