Was sind sphärische Harmonische und Lichtsonden?


13

Was sind sphärische Harmonische und Lichtsonden ? Wie nützlich sind sie in der Computergrafik? Was genau machen sie? Ich habe das Wort sphärische Harmonische & Lichtsonden überall gehört, von Siggraph-Präsentationen bis zu Blog-Posts.

Kürzlich hat Matt Pettineo eine sechsteilige Blogserie über sie gepostet , aber ich verstehe immer noch nicht, was sie sind.

Ist es eine andere Möglichkeit, die Umgebungsbeleuchtung zu verbessern?

Antworten:


11

Grundlagen der sphärischen Harmonischen

Sphärische Harmonische ist eine Möglichkeit, eine 2D-Funktion auf einer Kugeloberfläche darzustellen. Anstelle des räumlichen Bereichs (wie der Cubemap) wird SH im Frequenzbereich mit einigen interessanten Eigenschaften und Operationen definiert, die für die Beleuchtung relevant sind und effizient ausgeführt werden können. Mit zunehmender "Reihenfolge" von SH können Sie höhere Frequenzen (Details) von Funktionen darstellen, wie in der folgenden Abbildung dargestellt ( ist die SH-Reihenfolge). Durch Skalieren und Summieren der folgenden "Basisfunktionen" können Sie jede Art von 2D-Funktion auf der Kugel bis zu der durch die Funktionen definierten Frequenz darstellen. Die Basisfunktionen werden mit " zugehörigen Legendre-Polynomen " definiert, aber normalerweise müssen Sie diese nicht selbst ableiten, sondern können vorhandene Ableitungen für echte sphärische Harmonische verwenden . lBildbeschreibung hier eingeben

Eine solche Operation, die in SH effizient durchgeführt werden kann, heißt " Faltung ", was bedeutet, dass das Produkt zweier sphärischer 2D-Funktionen über eine Kugel integriert wird. Dies ist eine häufige Operation bei Beleuchtungsberechnungen, z. B. könnte eine der Funktionen Ihre Auflichtbeleuchtung und eine der Funktionen die BRDF sein. Wenn diese Operation als SH dargestellt wird, ist sie einfach das Skalarprodukt zweier SH-Koeffizientenvektoren.

Ein weiterer interessanter Vorgang ist die Fähigkeit, eine effiziente Tiefpassfilterung durchzuführen. Da SH im Frequenzbereich dargestellt wird, müssen lediglich einige der SH-Koeffizienten skaliert oder auf Null gesetzt werden. Andererseits können einige andere Operationen in SH im Vergleich zum räumlichen Bereich schwierig durchzuführen sein. Wenn Sie beispielsweise die als SH dargestellte Funktion drehen möchten, kann dies für SH höherer Ordnung recht teuer werden. Es hängt also wirklich vom Problem ab, ob es für die Ausführung in SH geeignet ist oder nicht.

SH wird im Allgemeinen verwendet, um nur niederfrequente Funktionen (dh sich sanft ändernde Funktionen) darzustellen, da höhere Frequenzen eine Erhöhung der Speichermenge (SH-Koeffizienten) und der Verarbeitung erfordern. Aus diesem Grund wird SH beispielsweise nicht verwendet, um Spiegelungen auf glänzenden Oberflächen zu ersetzen. Es gibt auch zonale sphärische Harmonische , die verwendet werden können, um die Speicherung und Berechnung für 2D-Funktionen, die rotationssymmetrisch zur z-Achse sind, zu reduzieren, indem nur diagonale Elemente der SH-Koeffizientenmatrix gespeichert werden. Auch Hemisphärische Harmonics kann verwendet werden , wenn Sie mit hemisphärischen Funktionen müssen befassen (auch gemeinsam in der Beleuchtung) mit dem Vorteil, dass sie mit weniger Koeffizienten ähnliche Frequenzen wie SH darzustellen.

Eine Operation, die Sie ebenfalls ausführen müssen, ist die "SH-Projektion", um räumliche Domänendaten in SH zu transformieren. Sie können diese Operation ausführen, indem Sie eine Faltung von räumlichen Domänendaten mit SH-Basisfunktionen durchführen. Eine interessante Eigenschaft von SH ist, dass SH im Gegensatz zu räumlichen Domänendarstellungen nicht unter einem Aliasing leidet, sodass Sie auch dann keine Aliasing-Artefakte haben, wenn Sie auf SH sehr niedriger Ordnung projizieren.

Lichtsonden

Nachdem Sie die grundlegenden Operationen und Eigenschaften von SH verstanden haben, können wir überlegen, wie Sie sie auf GI anwenden können. Eine Lichtsonde zeichnet auf, wie viel Licht aus jeder Richtung zu dem Punkt kommt, an dem sich die Sonde befindet. Dies ist eine 2D-Funktion auf einer Kugel und kann als SH (oder 3-SH-Funktion für Rot, Grün und Blau) dargestellt werden. Abhängig von der Menge der Beleuchtungsdetails, die wir in die Sonden codieren möchten, können wir die SH-Reihenfolge auswählen.

Für Lichtsonden, die nur für diffuses Lambert'sches Licht verwendet werden, ist eine SH niedriger Ordnung ausreichend, da die Faltung mit einer Kosinuskeule durchgeführt wird, die mit SH 2 (9 Koeffizienten) dargestellt werden kann. Die SH-Koeffizienten für Lichtsonden können einfach durch Rendern einer Cubemap am Punkt der Sonde und anschließendes Projizieren auf SH generiert werden.

Beim Rendern der Geometrie werden nur wenige nächstgelegene Lichtsonden genommen und deren Ergebnisse interpoliert, um die einfallende Beleuchtungsfunktion an einem Punkt im Raum zu erhalten. Dies kann zum Beispiel durch direktes Interpolieren der SH-Koeffizienten benachbarter Sonden und anschließendes Durchführen der Faltung mit einer pixelnormalen Kosinuskeule im SH-Bereich erfolgen.


Was sind die Vorteile dieser Methode gegenüber der einfacheren bildbasierten Beleuchtung?
Arjan Singh

Niedrigfrequente Beleuchtung von besserer Qualität mit ähnlichen Speicher- und Leistungsanforderungen als beispielsweise Cubemaps.
JarkkoL

15

Sphärische Harmonische

f(x)f(θ,ϕ)

Wenn Sie nicht wissen, was eine Fouriertransformation ist, müssen Sie das erst wissen, bevor Sie die sphärischen Harmonischen verstehen können. Mit der Fourier-Transformation können Sie ein Signal als eine Reihe von Sinus- und Cosinuswellen mit jeweils der doppelten Frequenz der letzten darstellen. Das heißt, Sie können das Signal als Durchschnitt plus eine Sinuswelle, deren Wellenlänge der Länge des Signals entspricht, plus eine Sinuswelle, die doppelt so lang ist wie diese Wellenlänge usw. darstellen. Da Sie durch die Fourier-Transformation auf diese bestimmten Wellenlängen festgelegt werden, müssen Sie nur die Amplitude der einzelnen Wellenlängen aufzeichnen.

Wir verwenden häufig Fourier-Transformationen, um Bilder darzustellen, bei denen es sich nur um digitale 2D-Signale handelt. Dies ist nützlich, weil Sie einige der Sinuswellen wegwerfen (oder die Genauigkeit verringern können, mit der Sie ihre Amplitude speichern), ohne das Bild für das menschliche Auge wesentlich zu verändern. OTOH, das Wegwerfen von Pixeln verändert das Aussehen des Bildes erheblich.

Wenn Sie in einem abgetasteten Signal wie einem Bild die gleiche Anzahl von Sinuswellen verwenden, wie es Samples (Pixel) im Originalbild gab, können Sie das Bild exakt rekonstruieren. Wenn Sie also anfangen, Frequenzen wegzuwerfen, erstellen Sie das Bild weniger Speicherplatz in Anspruch nehmen.

Sphärische Harmonische sind wie Fourier-Transformationen, verwenden jedoch anstelle von Sinuswellen eine sphärische Funktion, sodass sie anstelle von linearen Funktionen (z. B. Bilder) Funktionen darstellen können, die auf der Kugel definiert sind (z. B. Umgebungskarten).

Lichtsonden

So wie ein Standardbild das gesamte Licht aufzeichnet, das einen bestimmten Punkt in der Bildebene erreicht, zeichnet eine Lichtsonde das gesamte Licht auf, das aus allen Richtungen einen bestimmten Punkt erreicht. Sie kamen zuerst aus Filmeffekten heraus. Wenn Sie einer realen Szene ein computergeneriertes Objekt hinzufügen möchten, müssen Sie in der Lage sein, das synthetische Objekt mit der realen Beleuchtung zu beleuchten. Dazu müssen Sie wissen, welches Licht den Punkt in der Szene erreicht, an dem sich das synthetische Objekt befindet. (Hinweis: Obwohl ich "Beleuchtung" sage, zeichnen Sie ein Bild des gesamten Lichts auf, sodass es auch für Reflexionen verwendet werden kann.)

Da Sie keine Kamera mit einer sphärischen Linse haben können, die das gesamte Licht aufzeichnet, das aus allen Richtungen einen einzelnen Punkt erreicht, nehmen Sie dies auf, indem Sie normale Fotos von einem sphärischen Spiegel machen und die Bilder dann auf eine Kugel projizieren.

Außerhalb von Filmeffekten ist es üblicher, Lichtsonden zu verwenden, die aus einer künstlichen Szene generiert wurden. Stellen Sie sich vor, Sie haben einen teuren Algorithmus zum Berechnen der globalen Beleuchtung (GI) in einer Szene und Sie haben auch einige kleinere Objekte, die sich in dieser Szene bewegen (z. B. ein Spiellevel mit Spielern darin). Sie können den gesamten GI-Algorithmus nicht jedes Mal ausführen, wenn sich ein Objekt bewegt. Sie führen ihn also einmal mit der statischen Szene aus und speichern Lichtsonden, die an verschiedenen Punkten in der Ebene aufgenommen wurden. Dann können Sie eine gute Annäherung an den GI erhalten, indem Sie den Player mit der Lichtsonde beleuchten, die ihm am nächsten liegt.

Gemeinsam nutzen

Im Allgemeinen möchten Sie ohnehin scharfe Kanten in Ihrer globalen Beleuchtung herausfiltern, damit Sie diese so darstellen können, dass sie kompakt sind und Sie problemlos hohe Frequenzen wegwerfen können. Darin sind sphärische Harmonische wirklich gut! Deshalb werden Sie diese beiden Begriffe oft zusammen hören.

Sie berechnen Lichtsonden mit Ihrem teuren GI-Algorithmus - normalerweise im Level-Design-Tool oder vielleicht einmal pro Sekunde (statt einmal pro Frame), wenn Sie Ihre dynamischen Objekte einbeziehen möchten. Sie speichern diese kostengünstig mit sphärischen Harmonischen - 16 Floats reichen für eine ziemlich hochwertige Beleuchtung, aber keine Reflexionen. Dann wählen Sie für jedes dynamische Objekt, das Sie beleuchten möchten, die nächste Lichtsonde aus (oder interpolieren mehrere linear) und verwenden sie als einheitliche oder konstante Eingabe für Ihren Shader. Es ist auch üblich, sphärische Harmonische zur Darstellung von Umgebungsokklusionsdaten zu verwenden, und es ist sehr billig, diese mit der Lichtsonde zu falten, obwohl die rotierenden sphärischen harmonischen Funktionen etwas komplexer sind.


Tolle Antwort das hat wirklich alles geklärt! Im Grunde genommen sind Lichtsonden eine einfache Methode, um die Beleuchtung von sich bewegenden Zeichen zu berechnen, sodass wir den GI nicht für die gesamte Szene neu berechnen können. Sphärische Harmonische werden dagegen verwendet, um die hohen Frequenzen herauszufiltern. (Korrigieren Sie mich, wenn ich falsch liege. Ich versuche nur zu sehen, ob ich das richtige Verständnis habe.)
Arjan Singh

"Wenn Sie die gleiche Anzahl von Sinuswellen verwenden, wie es Samples (Pixel) im Originalbild gab, können Sie das Bild exakt rekonstruieren", was eigentlich nicht zutrifft. Zum Beispiel benötigt die Rechteckwelle unendlich viele Frequenzen für die exakte Darstellung
JarkkoL

@ JarkkoL Sicher, eine echte Rechteckwelle. Wenn Sie es jedoch durch Abtasten diskretisiert haben, benötigen Sie nur die gleiche Anzahl von Frequenzen, um den Fehler kleiner als den Abtastfehler zu machen. Es ist ein praktisches Ergebnis des Nyquist-Theorems (dass die höchste im abgetasteten Signal vorhandene Frequenz die Hälfte der Abtastrate beträgt).
Dan Hulme

Ah ja, das stimmt natürlich. Ich nehme an, Sie benötigen die Hälfte der Frequenz, aber komplexe (im Vergleich zu echten) Frequenzbereichsergebnisse. Oder verwenden Sie DCT & Real Domain mit der doppelten Häufigkeit von DFT.
JarkkoL

5

Sphärische Harmonische

Angenommen, Sie haben einige Daten in einem Array, möchten diese Daten jedoch mit einer geringeren Anzahl von Bytes darstellen.

Eine Möglichkeit, dies zu tun, könnte darin bestehen, die Daten als Funktion anstelle der Rohwerte auszudrücken.

y=einx+b

einb

Das Problem ist, dass eine lineare Gleichung wahrscheinlich eine schlechte Annäherung an Ihre Daten darstellt.

y=einx2+bx+c

einbeinbc

Wir haben die Speicherkapazität und die rechnerische Komplexität beim Speichern und Abrufen Ihrer Daten im Vergleich zur linearen Gleichung erhöht, aber es ist eine bessere Annäherung an Ihr Datenarray. Wir könnten es auch auf eine kubische Funktion oder höher bringen. Das Erhöhen der Reihenfolge erhöht die Speicherung, Berechnung und Genauigkeit.

f(x)

Genau wie in den obigen Beispielen können Sie eine Funktion für sphärische Harmonische niedrigerer Ordnung verwenden, um etwas mit geringerem Speicherbedarf und geringerer Berechnung der Daten, aber auch mit geringerer Genauigkeit zu erstellen.

Auf der anderen Seite können Sie die Reihenfolge erhöhen und eine bessere Annäherung an Ihre ursprünglichen Daten erzielen, allerdings auf Kosten von mehr Speicherplatz und mehr Rechenaufwand für die Berechnung eines Datenpunkts.

Im Extremfall können Sie so viele sphärische harmonische Terme verwenden, wie Sie Samples in Ihrem Array hatten, und dann können Sie Ihr ursprüngliches Array genau rekonstruieren, aber Sie müssen viel Rechenaufwand aufbringen, um dies zu tun, und Sie verwenden genauso viel Speicherplatz wie du angefangen hast mit.

Aus diesem Grund bieten Funktionen für sphärische Harmonische in der Praxis keinen großen Vorteil, wenn Sie feine Details darstellen müssen - wie eine scharfe Reflexion auf einer Kugel -, aber sie können für Daten, die keine feinen Details aufweisen, günstig sein (Daten, die keine feinen Details aufweisen) haben nicht viel hochfrequenten Inhalt). Sie sind auch nützlich für Frequenzbereichsberechnungen wie Spektralanalyse oder Faltung.

Eine der Daten, die sie gut speichern können, ist die "Bestrahlungsstärke", dh die Lichtmenge, die aus anderen Richtungen auf einen Punkt auftrifft. Es sieht in der Regel etwas verschwommen aus, was bedeutet, dass es nur einen niedrigen Frequenzgehalt hat und ein guter Kandidat für die Speicherung in einer Funktion für sphärische Harmonische ist.

Ich überlasse die Erklärung der Lichtsonden einer anderen Person: p


Warum abstimmen? : P
Alan Wolfe

Es ist nicht wahr, dass sphärische Harmonische feine Details nicht gut darstellen können. Wie die Fourier-Transformation können sie das ursprüngliche Signal exakt rekonstruieren, wenn Sie alle Frequenzen beibehalten. Es ist nur so, dass sie es einfach machen, Platz zu sparen, indem sie hohe Frequenzen wegwerfen, wenn Sie sie nicht benötigen.
Dan Hulme

Und entschuldigung, ich dachte nach der Stimmabgabe, es sei hart, eine einzige zweifelhafte Behauptung in einer ansonsten hilfreichen Antwort abzulehnen, aber meine Stimme war gesperrt, als ich überlegte.
Dan Hulme

Ah. Ja, es ist möglich, auf die gleiche Weise, wie es möglich ist, jeden Datensatz mit einem Polynom darzustellen, aber in der Praxis ist beides eine schlechte Wahl, um enge Passungen für viele Datenpunkte zu benötigen. Bei einem Polynom benötigen Sie zum Beispiel N Terme einer N-Ordnungsfunktion, um genau N Datenpunkte anzupassen. Dies macht es zu einer schlechteren Wahl als nur ein Array, da es sich um eine Berechnung und nicht um eine Suche handelt, um einen Datenpunkt zu ermitteln. In der Praxis sind sphärische Harmonische eine schlechte Wahl für sphärische Daten mit hochfrequenten Inhalten, die Sie beibehalten möchten. In solchen Situationen ist es keine gute Wahl.
Alan Wolfe

Das ist richtig, wenn Sie in der Lage sein möchten, einzelne Proben zu rekonstruieren, aber nicht alle Verwendungen von Fourier erfordern dies - ebenso nicht alle Verwendungen von SH. Wenn Sie eine Faltung durchführen möchten, ist es viel billiger, dies im Frequenzbereich zu tun, bevor Sie es wieder in Samples umwandeln. Würde es Ihnen etwas ausmachen, wenn ich eine Änderung vorschlage, um dies in Ihrer Antwort zu verdeutlichen, nachdem ich meine eigene Antwort abgeschlossen habe?
Dan Hulme
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.