Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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.
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.
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.
Wenn Sie dies in die Vektornotation ändern, erhalten Sie die folgende nicht komprimierte Formel, um die Ausgangsstrahlung für jeden Kanal zu berechnen.
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.
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:
Anschließend wird durch die Verteilung des Punktprodukts die folgende Gleichung erzielt.
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.
Verwandte Themen