Freigeben über


PRT-Formeln (Direct3D 9)

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

Um zu beginnen, ist die folgende Formel die allgemeine Gleichung, um die Ausgangsstrahlung zu berechnen, die sich aus direkter Beleuchtung auf einem diffusen Objekt mit beliebiger entfernter Beleuchtung ergibt.

Gleichung der Ausgangsstrahlung, die sich aus direkter Beleuchtung auf einem diffusen Objekt mit beliebiger entfernter Beleuchtung

wo:

Parameter Beschreibung
RP Die Ausgangsstrahlung bei Vertex p. Ausgewertet bei jedem Scheitelpunkt im Gitter.
pd Der 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 Kosinusbegriff von Lamberts Gesetz. Gleich max((Np· s), 0), wobei Np die Normale der Oberfläche an Punkt p ist.
s Die Variable, die sich über die Kugel integriert.

 

Mithilfe von sphärischen Basisfunktionen wie sphärischen Harmonischen wird die folgende Gleichung der Beleuchtungsumgebung nähert.

Gleichung der Beleuchtungsumgebung

wo:

Parameter Beschreibung
L(n) Die Beleuchtungsumgebung (Quellstrahlung).
Ich Eine ganze Zahl, die über die Anzahl der Basisfunktionen addiert wird.
O Die Reihenfolge der sphärischen Harmonien.
li Ein Koeffizienten.
Yi(s) Einige Basisfunktion über der Kugel.

 

Die Sammlung dieser Koeffizienten, L', bietet die optimale Annäherung für Funktion L(n) mit den Basisfunktionen Y(n). Das Substituieren und Verteilen liefert die folgende Gleichung.

Gleichung der Ausgangsstrahlung nach dem Ersetzen von l(n) und verteilen

Das Integral von Yi(s)Vp₍s₎Hnp₍s₎ ist ein Transferkoeffizienten tpi, dass der Simulator für jeden Scheitelpunkt im Gitter vorkompiliert. Das Substituieren dieser Ergibt die folgende Gleichung.

Gleichung der Ausgangsstrahlung nach der Substituierung des Übertragungskoeffizienten

Wenn Sie dies in die Vektornotation ändern, erhalten Sie die folgende nicht komprimierte Formel, um die Ausgangsstrahlung für jeden Kanal zu berechnen.

Formel der Ausgangsstrahlung nach dem Ändern der Vektornotation

wo:

Parameter Beschreibung
RP Die Ausgangsstrahlung bei Vertex p.
pd Der Albedo der Oberfläche.
L' Der Vektor von liund ist die Projektion der Quellstrahlung in die sphärischen harmonischen Basisfunktionen. Dies ist ein Order²-Vektor von sphärischen harmonischen Koeffizienten.
Klopapier Ein Order²-Übertragungsvektor für Vertex p. Der Simulator dividiert die Übertragungskoeffizienten durch p.

 

Beide Vektoren sind ein Order²-Vektor von sphärischen harmonischen Koeffizienten, also beachten Sie, dass dies einfach ein Punktprodukt ist. Je nach Reihenfolge kann der Punkt teuer sein, sodass komprimierung verwendet werden kann. Ein Algorithmus namens Clustered Principal Component Analysis (CPCA) komprimiert die Daten effizient. Dies ermöglicht die Verwendung einer sphärischen harmonischen Annäherung in höherer Reihenfolge, was zu schärferen Schatten führt.

CPCA stellt die folgende Formel bereit, um den Übertragungsvektor anzunähern.

Formel des ungefähren Übertragungsvektors

wo:

Parameter Beschreibung
Klopapier Der Übertragungsvektor für Vertex p.
Mk Der Mittelwert für Cluster k.
j Eine ganze Zahl, die über die Anzahl der PCA-Vektoren addiert wird.
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 eine Anzahl von Scheitelpunkten, die den gleichen Mittelvektor aufweisen. Informationen zum Abrufen des Clustermittelwerts, der PCA-Gewichtungen, der PCA-Basisvektoren und der Cluster-IDs für die Scheitelpunkte finden Sie unten.

Das Substituieren dieser beiden Gleichungen führt zu folgenden Zeichenfolgen:

Formel der Ausgangsstrahlung nach dem Substituieren des Übertragungsvektors

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

Formel der Ausgangsstrahlung nach der Verteilung des Punktprodukts

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

Precomputed Radiance Transfer