EinfĂŒhrung
fBM steht fĂŒr Fractional Brownian Motion (fraktionierte Brownsche Bewegung). Bevor wir jedoch ĂŒber Natur, Fraktale und prozedurale Reliefs sprechen, wollen wir uns kurz mit der Theorie befassen.
Brownsche Bewegung (BM) ist einfach ohne "Fragmentierung" eine Bewegung, bei der sich die Position eines Objekts im Laufe der Zeit in zufÀlligen Schritten Àndert (stellen Sie sich die Sequenzposition
position+=white_noise();
). Aus formaler Sicht ist BM ein Integral des weiĂen Rauschens. Diese Bewegungen definieren Pfade, die zufĂ€llig, aber (statistisch) selbstĂ€hnlich sind, d.h. Ein ungefĂ€hres Bild des Pfades Ă€hnelt dem gesamten Pfad. Fractional Brownian Motion ist ein Ă€hnlicher Prozess, bei dem Inkremente nicht vollstĂ€ndig unabhĂ€ngig voneinander sind und in diesem Prozess eine Art Speicher vorhanden ist. Wenn der Speicher eine positive Korrelation aufweist, tendieren Ănderungen in einer bestimmten Richtung zu zukĂŒnftigen Ănderungen in derselben Richtung, und der Pfad ist glatter als bei gewöhnlichem BM. Wenn der Speicher eine negative Korrelation aufweist, folgt auf eine Ănderung der positiven Richtung mit hoher Wahrscheinlichkeit eine Ănderung der negativen Richtung, und der Pfad ist viel zufĂ€lliger. Der Parameter, der das Verhalten des GedĂ€chtnisses oder der Integration und damit die SelbstĂ€hnlichkeit, seine fraktale Dimension und sein Leistungsspektrum steuert, wird als Hurst-Exponent bezeichnet und normalerweise auf H reduziert. Aus mathematischer Sicht erlaubt H, weiĂes Rauschen nur teilweise zu integrieren (z. B. nur 1/3 der Integration) , daher die "Fragmentierung" im Namen), um fBM fĂŒr alle gewĂŒnschten Speichereigenschaften und Erscheinungsbilder zu erstellen. H nimmt Werte im Bereich von 0 bis 1 an, die jeweils ein grobes und glattes fBM beschreiben, und der ĂŒbliche BM wird bei H = 1/2 erhalten.

Hier wird die Funktion fBM () verwendet, um Topographie, Wolken, Verteilung von BÀumen, deren Farbvariationen und Kronendetails zu erzeugen. "Rainforest", 2016: https://www.shadertoy.com/view/4ttSWfAll dies ist sehr theoretisch und in der Computergrafik wird fBM auf eine völlig andere Weise generiert, aber ich wollte die Theorie erklÀren, da es wichtig ist, sich daran zu erinnern, auch wenn Sie die Grafiken erstellen. Mal sehen, wie das in der Praxis gemacht wird:
Wie wir wissen, sind selbstĂ€hnliche Strukturen, die gleichzeitig zufĂ€llig sind, sehr nĂŒtzlich fĂŒr die prozedurale Modellierung verschiedener NaturphĂ€nomene, von
Wolken bis zu
Bergen und
Texturen der Baumrinde . Es ist intuitiv klar, dass Figuren in der Natur in mehrere groĂe Figuren zerlegt werden können, die die Form als Ganzes beschreiben, eine gröĂere Anzahl mittelgroĂer Figuren, die den Hauptumriss oder die OberflĂ€che der ursprĂŒnglichen Figur verzerren, und eine noch gröĂere Anzahl kleiner Figuren, die den Umriss und die Form der beiden vorhergehenden Details ergĂ€nzen. Eine solche inkrementelle Methode zum HinzufĂŒgen von Details zu einem Objekt, die uns eine einfache Möglichkeit bietet, die Grenzen der Frequenzbereiche fĂŒr das Ăndern der LOD (Detailebene, Detailebenen) und das Filtern / GlĂ€tten von Formen zu begrenzen, erleichtert das Schreiben von Code und das Erstellen visuell schöner Ergebnisse. Daher ist es in Filmen und Spielen weit verbreitet. Ich glaube jedoch nicht, dass fBM vom gesamten Mechanismus gut verstanden wird. In diesem Artikel werde ich beschreiben, wie es funktioniert und wie seine verschiedenen spektralen und visuellen Eigenschaften fĂŒr verschiedene Werte seines Hauptparameters H verwendet werden, und ich werde dies alles durch Experimente und Messungen ergĂ€nzen.
Grundidee
Normalerweise (es gibt viele Möglichkeiten) werden fBMs konstruiert, indem deterministische und glÀttende ZufÀlligkeit unter Verwendung der vom Entwickler ausgewÀhlten Rauschfunktion aufgerufen wird (
Wert ,
Gradient ,
Zellular ,
Voronoi , Trigonometrie,
Simplex , ... usw., die gewĂ€hlte Option ist hier nicht sehr wichtig). gefolgt von der Konstruktion der SelbstĂ€hnlichkeit. fBMs werden beginnend mit dem Basisrauschensignal implementiert und fĂŒgen allmĂ€hlich kleinere und kleinere detaillierte Rauschaufrufe hinzu. So etwas wie das:
float fbm( in vecN x, in float H ) { float t = 0.0; for( int i=0; i<numOctaves; i++ ) { float f = pow( 2.0, float(i) ); float a = pow( f, -H ); t += a*noise(f*x); } return t; }
Dies ist fBM in seiner reinsten Form. Jedes Signalrauschen (oder "Wellenrauschen"), fĂŒr das wir "numOctaves" haben, wird additiv mit einer Zwischensumme kombiniert, aber horizontal um die HĂ€lfte komprimiert, wodurch sich seine WellenlĂ€nge im Wesentlichen halbiert und seine Amplitude abnimmt exponentiell. Eine solche Ansammlung von Wellen mit einer koordinierten Abnahme der WellenlĂ€nge und Amplitude erzeugt die SelbstĂ€hnlichkeit, die wir in der Natur beobachten. Letztendlich gibt es in jedem Raum Platz fĂŒr nur wenige groĂe Ănderungen, aber es gibt viel Platz fĂŒr immer kleinere Ănderungen. Klingt ganz vernĂŒnftig. TatsĂ€chlich finden sich solche Manifestationen des Machtgesetzes ĂŒberall in der Natur.
Das erste, was Sie feststellen können, ist, dass der oben gezeigte Code den meisten fBM-Implementierungen, die Sie in Shadertoy und anderen Codebeispielen sehen konnten, nicht ganz Àhnlich ist. Der folgende Code Àhnelt dem oben gezeigten, ist jedoch viel beliebter, da er auf die kostspieligen Funktionen von pow () verzichtet:
float fbm( in vecN x, in float H ) { float G = exp2(-H); float f = 1.0; float a = 1.0; float t = 0.0; for( int i=0; i<numOctaves; i++ ) { t += a*noise(f*x); f *= 2.0; a *= G; } return t; }
Beginnen wir also mit numOctaves. Da die WellenlĂ€nge jedes Rauschens zweimal kleiner ist als die vorherige (und die Frequenz zweimal höher ist), wird die Bezeichnung "numFrequences" als Referenz fĂŒr ein musikalisches Konzept durch "numOctaves" ersetzt: Die Aufteilung einer Oktave zwischen zwei Noten entspricht Verdoppelung der Frequenz der Basisnote. ZusĂ€tzlich kann fBM erzeugt werden, indem die Frequenz jedes Rauschens um einen von den beiden unterschiedlichen Betrag erhöht wird. In diesem Fall ist der Begriff âOktaveâ technisch nicht mehr korrekt, wird aber weiterhin verwendet. In einigen FĂ€llen kann es sogar erforderlich sein, Wellen / Rauschen mit Frequenzen zu erzeugen, die mit einem konstanten linearen Koeffizienten zunehmen, und nicht geometrisch, beispielsweise FFT (schnelle Fourier-Transformation; es kann tatsĂ€chlich verwendet werden, um periodische fBMs () zu erzeugen, die beim Erstellen von Texturen nĂŒtzlich sind Ozean). Wie wir spĂ€ter sehen werden, können die meisten Grundfunktionen von Rauschen () die Frequenzen um ein Vielfaches von zwei erhöhen, dh wir benötigen nur sehr wenige Iterationen, und fBM wird immer noch schön sein. Wenn wir fBM jeweils eine Oktave synthetisieren, können wir sehr effektiv sein. Beispielsweise können Sie in nur 24 Oktaven / Iteration fBM erstellen, das den gesamten Planeten Erde mit einem Detail von 2 Metern abdeckt. Wenn Sie dies mit linear ansteigenden Frequenzen tun, dauert es mehrere GröĂenordnungen mehr Iterationen.
Die letzte Anmerkung zur Frequenzfolge: Wenn wir von f
i = 2
i zu f
i = 2â
f
i-1 wechseln, erhalten wir eine gewisse FlexibilitĂ€t hinsichtlich der Verdoppelung der Frequenzen (oder der Reduzierung um die HĂ€lfte der WellenlĂ€ngen) - wir können den Zyklus leicht erweitern und Ăndern Sie beispielsweise jede Oktave, indem Sie 2.0 durch 2.01, 1.99 und andere Ă€hnliche Werte ersetzen, damit sich die akkumulierten Nullen und Spitzen verschiedener Rauschwellen nicht genau ĂŒberlappen, was manchmal zu unrealistischen Mustern fĂŒhrt. Bei 2D-fBM können Sie den Definitionsbereich auch leicht drehen.
In der neuen Software-Implementierung von fBM () haben wir also nicht nur die Frequenzerzeugung aus einer Potenzgesetzformulierung durch einen iterativen Prozess ersetzt, sondern auch die Exponentialamplitude (Potenzgesetz) durch geometrische Reihen geĂ€ndert, die vom Indikator âVerstĂ€rkungâ G gesteuert werden. Es ist erforderlich, eine Transformation von durchzufĂŒhren H bis G, Berechnung von G = 2
-H , was leicht aus der ersten Version des Codes abgeleitet werden kann. Grafikprogrammierer ignorieren jedoch hĂ€ufiger den Hurst-Exponenten H oder wissen nicht einmal davon und arbeiten direkt mit den Werten von G. Da wir wissen, dass H im Bereich von 0 bis 1 variiert, variiert G von 1 bis 0,5. TatsĂ€chlich setzen die meisten Programmierer in ihren fBM-Implementierungen einen konstanten Wert von G = 0,5. Dieser Code wird nicht so flexibel sein wie die Verwendung der Variablen G, aber es gibt gute GrĂŒnde dafĂŒr, und wir werden bald davon erfahren.
SelbstÀhnlichkeit
Wie oben erwĂ€hnt, bestimmt der Parameter H die SelbstĂ€hnlichkeit der Kurve. Dies ist natĂŒrlich statistische SelbstĂ€hnlichkeit. Das heiĂt, wenn wir im Fall des eindimensionalen fBM () die Kamera durch U horizontal nĂ€her an den Graphen bringen, wie viel mĂŒssen wir dann durch V vertikal nĂ€her an den Graphen heranrĂŒcken, um eine Kurve zu erhalten, die gleich aussehen wĂŒrde? Nun, da a = f
-H , dann ist aâ
V = (fâ
U)
-H = f
-H â
U
-H = aâ
U
-H , dh V = U
-H . Wenn wir also die Kamera durch einen horizontalen Indikator von 2 nĂ€her an fBM heranrĂŒcken, mĂŒssen wir vertikal die Skalierung auf 2
-H Àndern. Aber 2
-H ist G! Und dies ist kein Zufall: Wenn wir G verwenden, um Rauschamplituden zu skalieren, bauen wir per Definition SelbstÀhnlichkeit fBM mit einem Skalierungsfaktor G = 2
-H auf .
Die Brownsche Bewegung (H = 1/2) und der anisotrope Zoom werden links angezeigt. Rechts ist fBM (H = 1) und isotroper Zoom.
Code: https://www.shadertoy.com/view/WsV3zzWas ist mit prozeduralen Bergen? Die Standard-Brownsche Bewegung hat einen Wert von H = 1/2, was G = 0,707107 ergibt. Bei diesen Werten wird eine Kurve erzeugt, die bei VergröĂerung genau gleich aussieht, wenn sie entlang X und Y anisotrop skaliert wird (wenn es sich um eine eindimensionale Kurve handelt). Und tatsĂ€chlich: FĂŒr jeden horizontalen Zoomfaktor U mĂŒssen wir die Kurve vertikal um V = sqrt (U) skalieren, was nicht sehr natĂŒrlich ist. Börsencharts kommen jedoch sehr oft H = 1/2 nahe, da theoretisch jede Erhöhung oder Verringerung des Wertes von Aktien nicht von vorherigen Ănderungen abhĂ€ngt (vergessen Sie nicht, dass BM ein Prozess ohne Speicher ist). In der Praxis sind natĂŒrlich bestimmte AbhĂ€ngigkeiten vorhanden, und diese Kurven liegen nĂ€her bei H = 0,6.
Aber der natĂŒrliche Prozess enthĂ€lt mehr âGedĂ€chtnisâ an sich, und die SelbstĂ€hnlichkeit ist viel isotroper. Zum Beispiel ist ein höherer Berg an seiner Basis um den gleichen Betrag breiter, d.h. Berge dehnen sich normalerweise nicht aus und werden nicht dĂŒnner. Dies macht uns verstĂ€ndlich, dass fĂŒr die Berge G 1/2 sein sollte - der gleiche horizontale und vertikale Zoom. Dies entspricht H = 1, dh die Bergprofile sollten glatter sein als die Börsenkurve. TatsĂ€chlich ist es so, und wenig spĂ€ter werden wir reale Profile messen, um dies zu bestĂ€tigen. Aus Erfahrung wissen wir jedoch, dass G = 0,5 wunderschöne fraktale Reliefs und Wolken erzeugt, sodass G = 0,5 in der Tat der beliebteste G-Wert fĂŒr alle fbm-Implementierungen ist.
Aber jetzt haben wir ein tieferes VerstĂ€ndnis von H, G und fBM im Allgemeinen. Wir wissen, dass fBM noch verrĂŒckter ist als reines BM, wenn der Wert von G nĂ€her bei 1 liegt. Und tatsĂ€chlich: FĂŒr G = 1, was H = 0 entspricht, erhalten wir das lauteste fBM von allen.
Alle diese parametrisierten fBM-Funktionen werden beispielsweise als "rosa Rauschen" bei H = 0, G = 1 oder "braunes Rauschen" bei H = 1/2, G = sqrt (2) bezeichnet, die aus dem Bereich der digitalen Signalverarbeitung (Digital) geerbt werden Signalverarbeitung) und sind Menschen mit Schlafproblemen bekannt. Lassen Sie uns tiefer in den DSP eintauchen und die spektralen Eigenschaften berechnen, um ein tieferes VerstÀndnis von fBM zu erhalten.
Signalverarbeitungsperspektive
Wenn Sie an eine Fourier-Analyse oder eine additive Klangsynthese denken, Ă€hnelt die oben gezeigte Implementierung von fBM () der inversen Fourier-Transformation, die diskret wie die diskrete Fourier-Transformation (DFT) ist, jedoch sehr spĂ€rlich und eine andere Basis verwendet Funktion (wesentlich anders als IFT, aber lassen Sie mich erklĂ€ren). TatsĂ€chlich können wir mit IFFT fBM (), Computergrafiken und sogar MeeresoberflĂ€chen erzeugen, aber dies wird schnell zu einem sehr teuren Projekt. Der Grund ist, dass die IFFT nicht additiv Rauschwellen kombiniert, sondern Sinuskurven, aber Sinuskurven fĂŒllen das Energieleistungsspektrum nicht sehr effizient aus, da jede Sinuskurve eine Frequenz beeinflusst. Die Rauschfunktionen haben jedoch breite Spektren, die lange Frequenzintervalle mit einer einzelnen Welle abdecken. Sowohl
Gradientenrauschen als auch
Wertrauschen weisen so reiche und dichte Graphen der spektralen Dichte auf. Schauen Sie sich die Grafiken an:
SinuswelleWert RauschenGradientenrauschenBeachten Sie, dass im Spektrum sowohl des Wertrauschens als auch des Gradientenrauschens der GroĂteil der Energie auf die niedrigeren Frequenzen konzentriert ist, jedoch breiter ist - eine ideale Wahl, um das gesamte Spektrum schnell mit mehreren versetzten und skalierten Kopien zu fĂŒllen. Ein weiteres Sinuswellen-fBM-Problem ist dieses. dass es natĂŒrlich wiederholte Pattene erzeugt, die meistens unerwĂŒnscht sind, obwohl sie nĂŒtzlich sein können, um nahtlose Texturen zu erzeugen. Der Vorteil von fBM () basierend auf sin () ist, dass es ĂŒberproduktiv ist, da trigonometrische Funktionen in Eisen viel schneller ausgefĂŒhrt werden als GebĂ€uderauschen mit Polynomen und Hashes /
Lut. Daher lohnt es sich manchmal immer noch
, fBM basierend auf Sinuswellen von zu verwenden LeistungsĂŒberlegungen, auch wenn schlechte Landschaften entstehen.
Schauen wir uns nun die Diagramme der Spektrendichte fĂŒr fBM mit unterschiedlichen Werten von H an. Achten Sie besonders auf die Markierungen auf der vertikalen Achse, da alle drei Diagramme normalisiert sind und nicht die gleichen Steigungen beschreiben, obwohl sie auf den ersten Blick fast gleich aussehen. Wenn wir die negative Steigung dieser Spektraldiagramme als "B" bezeichnen, folgt das Spektrum einem Potenzgesetz der Form f-B, da diese Diagramme eine logarithmische Skala haben. In diesem Test verwende ich 10 Oktaven normales Gradientenrauschen, um das unten gezeigte fBM zu erstellen.
G = 1,0 (H = 0)G = 0,707 (H = 1/2)G = 0,5 (H = 1)Wie wir sehen können, wird die Energie fBM mit H = 0 (G = 1) mit 3 dB pro Oktave oder tatsĂ€chlich mit einem Wert zurĂŒck auf die Frequenz gedĂ€mpft. Dies ist ein Potenzgesetz f
-1 (B = 1), das als ârosa Rauschenâ bezeichnet wird und wie Regen klingt.
fBM () mit H = 1/2 (G = 0,707) erzeugt ein Spektrum, das mit 6 dB pro Oktave schneller gedÀmpft wird, dh weniger hohe Frequenzen aufweist. Es klingt tatsÀchlich tiefer, als ob Sie Regen hören, aber diesmal aus Ihrem Zimmer mit geschlossenen Fenstern. Die DÀmpfung von 6 dB / Oktave bedeutet, dass die Energie proportional zu f
-2 ist (B = 2), und dies ist tatsÀchlich eine Eigenschaft der Brownschen Bewegung im DSP.
SchlieĂlich erzeugt unser Lieblings-fBM aus Computergrafiken mit H = 1 (G = 0,5) einen Spektraldichtegraphen mit einem Abfall von 9 dB / Oktave, dh die Energie ist umgekehrt proportional zum FrequenzwĂŒrfel (f
-3 , B = 3). Dies ist ein Signal mit einer konstant niedrigen Frequenz, das einem Prozess mit positivem Korrelationsspeicher entspricht, ĂŒber den wir zu Beginn gesprochen haben. Diese Art von Signal hat keinen eigenen Namen, daher habe ich die Versuchung, es als âgelbes Rauschenâ zu bezeichnen (einfach, weil dieser Name fĂŒr nichts mehr verwendet wird). Wie wir wissen, ist es isotrop, was bedeutet, dass es viele sich selbst wiederholende natĂŒrliche Formen modelliert.
TatsĂ€chlich werde ich meine Worte ĂŒber die Ăhnlichkeit mit der Natur bestĂ€tigen, indem ich die im nĂ€chsten Abschnitt des Artikels angegebenen Messungen vornehme.
Titel | H. | G = 2 -H | B = 2H + 1 | dB / Okt. | Ton |
Blau | - - | - - | +1 | +3 | Wasser sprĂŒhen. Link |
Weià | - - | - - | 0 | 0 | Wind in den BlÀttern. Link |
Pink | 0 | 1 | -1 | -3 | Der Regen. Link |
Braun | 1/2 | sqrt (2) | -2 | -6 | Regen von zu Hause gehört. Link |
Gelb | 1 | 1/2 | -3 | -9 | Motor hinter der TĂŒr |
Messungen
Zuerst muss ich Sie warnen, dass es ein sehr unwissenschaftliches Experiment sein wird, aber ich möchte es trotzdem teilen. Ich habe Bergketten parallel zur Bildebene fotografiert, um perspektivische Verzerrungen zu vermeiden. Dann habe ich die Bilder in SchwarzweiĂ unterteilt und dann die KontaktflĂ€che von Himmel und Bergen in ein 1D-Signal umgewandelt. Dann interpretierte ich es als WAV-Sounddatei und berechnete seinen Frequenzgraphen, wie es bei den oben analysierten synthetischen fBM () -Signalen der Fall ist. Ich habe Bilder mit einer ausreichend hohen Auflösung ausgewĂ€hlt, damit der FFT-Algorithmus signifikante Daten fĂŒr die Arbeit enthĂ€lt.
Quelle: Griechischer ReporterQuelle: WikipediaEs scheint, dass die Ergebnisse wirklich darauf hinweisen, dass die Bergprofile einer HĂ€ufigkeitsverteilung von -9 dB / Oktave folgen, was B = -3 oder H = 1 oder G = 0,5 oder mit anderen Worten gelbem Rauschen entspricht.
NatĂŒrlich war das Experiment nicht streng, aber es bestĂ€tigt unser intuitives VerstĂ€ndnis und das, was wir bereits aus Erfahrung und Arbeit mit Computergrafiken wissen. Aber ich hoffe jetzt haben wir begonnen, dies besser zu verstehen!