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.