Fraktale Flamme
Fraktale Flammen sind ein Mitglied der Iteriertes Funktionssystem Klasse[1] von Fraktale erstellt von Scott Draves 1992.[2] Der Open-Source-Code von Draves wurde später in die Portierung Adobe After Effects Grafiksoftware[3] und übersetzt in die Apophyse Fractal Flame Editor.[2]
Fraktale Flammen unterscheiden sich auf drei Arten von gewöhnlichen iterierten Funktionssystemen:
- Nichtlinear Funktionen sind iteriert zusätzlich zu Effine verwandelt sich.
- Protokolldichteanzeige statt linear oder binär (eine Form von Tonzuordnung)
- Farbe nach Struktur (d. H. Durch den rekursiven Pfad) anstelle von Monochrom oder durch Dichte.
Die Tonzuordnung und Färbung ist so konzipiert, dass sie so viel Detail des Fraktals wie möglich anzeigen, was im Allgemeinen zu einem ästhetischeren Bild führt.
Algorithmus
Der Algorithmus besteht aus zwei Schritten: Erstellen a Histogramm und dann das Histogramm rendern.
Erstellen des Histogramms
Zunächst iteriert man eine Reihe von Funktionen, die von einem zufällig ausgewählten Punkt angezeigt werden P = (P.X, P.Y, P.C), wobei die dritte Koordinate die aktuelle Farbe des Punktes angibt.
- Flammenfunktionen:
Wählen Sie in jeder Iteration eine der Funktionen darüber, wo die Wahrscheinlichkeit das ist Fj wird ausgewählt ist pj. Dann berechnet man die nächste Iteration von P durch Auftragen Fj an (P.X, P.Y).
Jede individuelle Funktion hat die folgende Form:
wo der Parameter wk wird das Gewicht der genannt Variation Vk. Draves schlägt vor[4] das alles : S sind nicht negativ und summen zu einem, aber Implementierungen wie die Apophyse verhängen diese Einschränkung nicht.
Die Funktionen Vk sind eine Reihe von vordefinierten Funktionen. Ein paar Beispiele[4] sind
- V0(x,y) = ((x,y) (Linear)
- V1(x,y) = (Sünde x,Sünde y) (Sinusförmig)
- V2(x,y) = ((x,y)/((x2+y2) (Sphärisch)
Die Farbe P.C. des Punktes wird mit der Farbe gemischt, die der neuesten angewandten Funktion zugeordnet ist Fj:
- P.c: = (p.c + (f)j)Farbe) / 2
Nach jeder Iteration aktualisiert man das Histogramm an dem Punkt, der entspricht (P.X, P.Y). Dies geschieht wie folgt:
Histogramm[x][y][FREQUENZ] : = Histogramm[x][y][FREQUENZ]+1 Histogramm[x][y][FARBE] : = (Histogramm[x][y][FARBE] + P.c)/2
Die Farben im Bild werden daher widerspiegeln, welche Funktionen verwendet wurden, um zu diesem Teil des Bildes zu gelangen.
Ein Bild machen
Um die Qualität des Bildes zu erhöhen, kann man verwenden SuperAmpling das Rauschen verringern. Dies beinhaltet das Erstellen eines Histogramms, das größer als das Bild ist, sodass jedes Pixel mehrere Datenpunkte enthält. Erstellen Sie beispielsweise ein Histogramm mit 300 × 300 -Zellen, um ein 100 × 100 px -Bild zu zeichnen. Jedes Pixel würde eine 3 × 3 -Gruppe von Histogramm -Eimer verwenden, um seinen Wert zu berechnen.
Für jedes Pixel (x, y) Führen Sie im endgültigen Bild die folgenden Berechnungen durch:
Frequenz_avg[x][y] : = durchschnitt_of_histogram_cells_frequency(x,y); color_avg[x][y] : = durchschnitt_of_histogram_cells_color(x,y); Alpha[x][y] : = Protokoll(Frequenz_avg[x][y])) / Protokoll(Frequenz_Max); // Frequency_max ist die maximale Anzahl von Iterationen, die eine Zelle im Histogramm treffen. final_pixel_color[x][y] : = color_avg[x][y] * Alpha[x][y]^(1/Gamma); // Gamma ist ein Wert von mehr als 1.
Der oben genannte Algorithmus verwendet Gamma-Korrektur Um die Farben heller erscheinen zu lassen. Dies wird beispielsweise in der Apophysis -Software implementiert.
Um die Qualität noch mehr zu erhöhen, kann man die Gamma -Korrektur auf jedem einzelnen Farbkanal verwenden, aber dies ist eine sehr starke Berechnung, da der Protokoll Funktion ist langsam.
Ein vereinfachter Algorithmus wäre, die Helligkeit linear von der Frequenz abhängig zu lassen:
final_pixel_color[x][y] : = color_avg[x][y] * Frequenz_avg[x][y]/Frequenz_Max;
Dies würde jedoch einige Teile des fraktalen Details verlieren, was unerwünscht ist.[4]
Dichteschätzung
Der Flammenalgorithmus ist wie a Monte-Carlo-Simulation, mit der Flammenqualität direkt proportional zur Anzahl der Iterationen der Simulation. Das Rauschen, das aus dieser stochastischen Probenahme resultiert verwischen Das Bild, um ein glatteres Ergebnis in weniger Zeit zu erzielen. Man möchte jedoch nicht die Auflösung in den Teilen des Bildes verlieren, die viele Proben erhalten und daher wenig Rauschen haben.
Dieses Problem kann adaptiv gelöst werden Dichteschätzung Die Bildqualität zu erhöhen und gleichzeitig die Zeiten auf ein Minimum zu halten. FLAM3 verwendet eine Vereinfachung der in *adaptiven Filterung vorgestellten Methoden für progressives Monte -Carlo -Bild -Rendering *, ein Papier, das bei WSCG 2000 von Frank Suykens und Yves D. Willems vorgestellt wurde. Die Idee ist, die Breite des Filters zu variieren invers proportional zur Anzahl der verfügbaren Proben.
Infolgedessen werden Bereiche mit wenigen Proben und hohem Rauschen verschwommen und geglättet, aber Bereiche mit vielen Proben und niedrigem Rauschen bleiben unberührt. Sehen https://github.com/scottdraves/flam3/wiki/density-estimation.
Nicht alle Flammenimplementierungen verwenden die Dichteschätzung.
Siehe auch
- Apophyse, ein Open Source Fractal Flame Editor für Microsoft Windows und Macintosh.
- Chaotica, ein kommerzieller fraktaler Herausgeber, der FLAM3, Apophyse und weitere Verallgemeinerungen unterstützt.
- Jwildfire, ein in Java geschriebener Multi-Plattform-Open-Source-Fraktalflame-Editor.
- Elektrische Schafe, ein Bildschirmschoner, der vom Erfinder von fraktalen Flammen erstellt wurde, die sie mit sich rendern und anzeigen Verteiltes Computer.
- Gimp, a gratis Software, Multi OS Bildbearbeitung Programm, das fraktale Flammen erzeugen kann.
- Fraxflame, Teil von KPT (Kais Elektrowerkzeuge) 5 und eine von drei fraktalen Apps in der KPT 5 -Sammlung. KPT 5 ist ein Plugin für Photoshop-, Photo-Paint-, PhotoImpact- und andere Rasterbasis-Grafikredakteure.
- FLAM3 für Houdini, eine HDA für Houdini (Houdini (Software)) und basierend auf dem ursprünglichen „fraktalen Flammenalgorithmus“: flam3.Es wird eine Live -Point -Wolke der fraktalen Flamme in der 3D -Welt von Houdini erzeugen, mit der Sie sie mit dem Houdini -Verfahrensparadigma, Animations- und Rendering -Toolsets weiter manipulieren können.
Verweise
- ^ Mitchell Whitelaw (2004). Metakreation: Kunst und künstliches Leben. MIT Press. S. 155.
- ^ a b "Informationen zur Apophysis -Software". Archiviert von das Original am 2008-09-13. Abgerufen 2008-03-11.
- ^ Chris Gehman und Steve Reinke (2005). Der schärfste Punkt: Animation am Ende des Kinos.Yyz Bücher.S. 269.
- ^ a b c "Der fraktale Flammenalgorithmus" (PDF). (22,5 MB)