PRT-Formeln (Direct3D 9)

Um einen Shader vollständig zu verstehen, der PRT implementiert, ist es nützlich, die Formel abzuleiten, die der Shader zum Berechnen der Ausgangsradianz verwendet.

Um zu beginnen, ist die folgende Formel die allgemeine Formel zum Berechnen der Ausgangsstrahlung, die sich aus direkter Beleuchtung auf einem diffusen Objekt mit beliebiger entfernter Beleuchtung ergibt.

equation of the exit radiance resulting from direct lighting on a diffuse object with arbitrary distant lighting

Dabei gilt Folgendes:

Parameter Beschreibung
Rp Die Ausstrahlung bei Vertex p. Ausgewertet bei jedem Scheitelpunkt im Gitter.
pd Die Albedo der Oberfläche.
pi Eine Konstante, die als Energieeinsparungsnormalisierungsfaktor verwendet wird.
L(n) Die Beleuchtungsumgebung (Quellstrahlung).
Vp₍s₎ Eine binäre Sichtbarkeitsfunktion für Punkt p. Es ist 1, wenn der Punkt das Licht sehen kann, 0 wenn nicht.
Hnp₍s₎ Der Kosinusausdruck aus dem Gesetz von Lambert. Gleich max(Np· s), 0), wobei Np die Oberfläche normal an Punkt p ist.
s Die Variable, die über die Kugel integriert wird.

 

Mithilfe von sphärischen Basisfunktionen, z. B. kugelförmigen Harmonien, wird die folgende Formel der Beleuchtungsumgebung nähert.

equation of the lighting environment

Dabei gilt Folgendes:

Parameter Beschreibung
L(n) Die Beleuchtungsumgebung (Quellstrahlung).
i Eine ganze Zahl, die die Anzahl der Basisfunktionen übergibt.
O Die Reihenfolge der kugelförmigen Harmonien.
li Ein Koeffizienten.
Yi(n) Einige Basisfunktion über die Kugel.

 

Die Sammlung dieser Koeffizienten, L', stellt die optimale Näherung für Funktion L(n) mit den Basisfunktionen Y(n) bereit. Durch Substituieren und Verteilen wird die folgende Formel erzielt.

equation of the exit radiance after substituting l(s) and distributing

Das Integral von Yi(s)Vp₍s₎Hnp₍s₎ ist ein Transferkoeffizienten tpi , den der Simulator für jeden Scheitelpunkt im Gitter vorkonfiguriert. Durch das Substituieren wird die folgende Formel erzielt.

equation of the exit radiance after substituting the transfer coefficient

Durch Das Ändern dieser Vektornotation wird die folgende unkomprimierte Formel zum Berechnen der Ausgangsradianz für jeden Kanal zurückgegeben.

equation of the exit radiance after changing to vector notation

Dabei gilt Folgendes:

Parameter Beschreibung
Rp Die Ausstrahlung bei Vertex p.
pd Die Albedo der Oberfläche.
L' Der Vektor von li und ist die Projektion der Quellstrahlung in die spherischen harmonischen Basisfunktionen. Dies ist ein Ordnungsvektor von kugelförmigen harmonischen Koeffizienten.
Tp Ein Order²-Übertragungsvektor für Vertex p. Der Simulator teilt die Übertragungskoeffizienten durch p.

 

Beide Vektoren sind ein Order²-Vektor von kugelförmigen harmonischen Koeffizienten. Beachten Sie also, dass dies einfach ein Punktprodukt ist. Je nach Reihenfolge kann der Punkt teuer sein, damit komprimierung verwendet werden kann. Ein Algorithmus namens Clustered Principal Component Analysis (CPCA) komprimiert die Daten effizient. Dies ermöglicht die Verwendung einer kugelförmigen harmonischen Höherreihenfolge, die zu scharferen Schatten führt.

CPCA stellt die folgende Formel bereit, um den Übertragungsvektor annähern zu können.

equation of the approximated transfer vector

Dabei gilt Folgendes:

Parameter Beschreibung
Tp Der Übertragungsvektor für Vertex p.
Mk Der Mittelwert für Cluster k.
j Eine ganze Zahl, die die Anzahl der PCA-Vektoren übergibt.
N Die Anzahl der PCA-Vektoren.
wpj Die jth PCA-Gewichtung für Punkt p.
Bkj Der jth PCA-Basisvektor für Cluster k.

 

Ein Cluster ist einfach einige Scheitelpunkte, die den gleichen Mittelvektor teilen. Informationen zum Abrufen des Clustermittelwerts, der PCA-Gewichtungen, der PCA-Basisvektoren und der Cluster-ID für die Scheitelpunkte werden unten erläutert.

Durch Das Substituieren dieser beiden Formeln wird Folgendes erzielt:

equation of the exit radiance after substituting the transfer vector

Anschließend wird durch die Verteilung des Punktprodukts die folgende Formel erzielt.

equation of the exit radiance after distributing the dot product

Weil beide (Mk· L') und (Bkj· L') sind Konstanten pro Scheitelpunkt, das Beispiel berechnet diese Werte mit der CPU und übergibt sie als Konstanten in den Vertex-Shader; da wpj änderungen für jeden Scheitelpunkt ändert, speichert das Beispiel diese Daten pro Vertex im Vertexpuffer.

Vorabkompiliertes Radiance Transfer