Vorcomputed Radiance Transfer (Direct3D 9)
Verwenden der vorberechneten Strahlungsübertragung
Es gibt verschiedene Formen der Komplexität, die in interessanten Szenen vorhanden sind, einschließlich der Modellierung der Beleuchtungsumgebung (d. h. Flächenbeleuchtungsmodelle im Vergleich zu Punkt/Richtungsmodellen) und welche Art von globalen Effekten modelliert werden (z. B. Schatten, Interreflektionen, Subsurface-Streuung).) Herkömmliche interaktive Renderingtechniken modellieren eine begrenzte Menge dieser Komplexität. PRT ermöglicht diese Effekte mit einigen erheblichen Einschränkungen:
- Es wird davon ausgegangen, dass Objekte starr sind (d. a. keine Verformungen).
- Es handelt sich um einen objektorientierten Ansatz (sofern Objekte nicht zusammen verschoben werden, werden diese globalen Auswirkungen zwischen ihnen nicht beibehalten).
- Es wird nur niederfrequente Beleuchtung modelliert (was zu sanften Schatten führt).) Für Hochfrequenzlichter (scharfe Schatten) müssten herkömmliche Techniken eingesetzt werden.
PRT erfordert folgendes, aber nicht beides:
- Hochtesellierte Modelle und vs_1_1
- ps_2_0
Diffuse Standardbeleuchtung im Vergleich zu PRT
Die folgende Abbildung wird mit dem herkömmlichen (n · l) Beleuchtungsmodell gerendert. Scharfe Schatten können mithilfe eines anderen Durchlaufs und einer Art von Schattentechnik (Schattentiefenzuordnungen oder Schattenvolumes) aktiviert werden. Das Hinzufügen mehrerer Lichter erfordert entweder mehrere Durchläufe (wenn Schatten verwendet werden sollen) oder komplexere Shader mit herkömmlichen Techniken.
Die nächste Abbildung wird mit PRT gerendert, wobei die beste Näherung eines einzelnen gerichteten Lichts verwendet wird, das es auflösen kann. Dies führt zu weichen Schatten, die mit herkömmlichen Techniken schwer zu erzeugen wären. Da PRT immer vollständige Beleuchtungsumgebungen modelliert, die mehrere Leuchten hinzufügen oder eine Umgebungskarte verwenden, würden Sie nur die Werte (aber nicht die Anzahl) der vom Shader verwendeten Konstanten ändern.
PRT mit Interreflections
Direkte Beleuchtung erreicht die Oberfläche direkt vom Licht. Interreflections sind Licht, das die Oberfläche erreicht, nachdem einige Male von einer anderen Oberfläche abgeprallt wurde. PRT kann dieses Verhalten modellieren, ohne die Leistung zur Laufzeit zu ändern, indem der Simulator einfach mit verschiedenen Parametern ausgeführt wird.
Die folgende Abbildung wird nur mit direkter PRT erstellt (0 Unzustellbarkeiten ohne Interreflektionen).
Die folgende Abbildung wird mithilfe von PRT mit Interreflektionen (2 Unzustellbarkeiten mit Interreflektionen) erstellt.
PRT mit Subsurface Scattering
Die Untertagestreuung ist eine Technik, die den Lichtdurchlauf durch bestimmte Materialien modelliert. Drücken Sie beispielsweise eine beleuchtete Taschenlampe auf die Handfläche. Das Licht der Taschenlampe durchläuft Ihre Hand, springt herum (die Farbe ändert sich dabei) und verlässt die andere Seite Ihrer Hand. Dies kann auch mit einfachen Änderungen am Simulator und ohne Änderungen an der Laufzeit modelliert werden.
Die folgende Abbildung veranschaulicht PRT mit Unterflächenstreuung.
Funktionsweise von PRT
Die folgenden Begriffe sind nützlich, um zu verstehen, wie PRT funktioniert, wie im folgenden Diagramm dargestellt.
Quelle Strahlkraft: Die Strahlkraft der Quelle stellt die gesamte Lichtumgebung dar. In PRT wird eine beliebige Umgebung mithilfe der sphärischen harmonischen Basis angenähert. Es wird davon ausgegangen, dass diese Beleuchtung relativ zum Objekt entfernt ist (die gleiche Annahme, die bei Umgebungszuordnungen gemacht wird.)
Exit Radiance: Exit Radiance ist das Licht, das von einem Punkt auf der Oberfläche aus einer beliebigen Quelle (reflektierte Strahlkraft, Untertagestreuung, Emission) verlässt.
Übertragungsvektoren: Übertragungsvektoren ordnen die Quellstrahlung in die Ausgangsstrahlung ab und werden offline mithilfe einer komplexen Lichttransportsimulation vorberechnet.
PRT berücksichtigt den Renderingprozess in zwei Phasen, wie im folgenden Diagramm dargestellt:
- Eine teure Leichttransportsimulation berechnet Transferkoeffizienten, die zur Laufzeit verwendet werden können.
- Eine relativ leichte Laufzeitphase nähert zunächst die Lichtumgebung mithilfe der sphärischen harmonischen Basis an, verwendet dann diese Lichtkoeffizienten und die vorberechneten Transferkoeffizienten (ab Stufe 1) mit einem einfachen Shader, was zu einer Ausgangsstrahlung (das Licht, das das Objekt verlässt) führt.
Verwenden der PRT-API
Berechnen Sie die Übertragungsvektoren mit einem der... Methoden von ID3DXPRTEngine.
Der direkte Umgang mit diesen Übertragungsvektoren erfordert eine erhebliche Menge an Arbeitsspeicher und Shaderberechnung. Durch die Komprimierung wird die Erforderliche Arbeitsspeicher- und Shaderberechnung erheblich reduziert.
Die endgültigen Beleuchtungswerte werden in einem Vertex-Shader berechnet, der die folgende komprimierte Renderinggleichung implementiert.
Hierbei gilt:
Parameter Beschreibung Rp Ein einzelner Kanal der Ausgangsstrahlung am Vertex p und wird an jedem Scheitelpunkt des Gitternetzes ausgewertet. Mk Der Mittelwert für Cluster k. Dies ist ein Order²-Vektor von Koeffizienten. k Die Cluster-ID für Vertex p. L' Die Näherung der Quellstrahlung in die SH-Basisfunktionen. Dies ist ein Order²-Vektor von Koeffizienten. j Eine ganze Zahl, die über die Anzahl der PCA-Vektoren summiert wird. wpj Die jth PCA-Gewichtung für Punkt p. Dies ist ein einzelner Koeffizienten. Bkj Der jth PCA-Basisvektor für cluster k. Dies ist ein Order²-Vektor von Koeffizienten. Der Extrakt... die Methoden von ID3DXPRTCompBuffer ermöglichen den Zugriff auf komprimierte Daten aus der Simulation.
Berechnen Sie die Strahlkraft der Quelle.
Es gibt mehrere Hilfsfunktionen in der API, um eine Vielzahl gängiger Beleuchtungsszenarien zu verarbeiten.
Funktion Zweck D3DXSHEvalDirectionalLight Nähert sich einem herkömmlichen Richtungslicht an. D3DXSHEvalSphericalLight Nähert lokale sphärische Lichtquellen an. (Beachten Sie, dass PRT nur mit Fernbeleuchtungsumgebungen funktioniert.) D3DXSHEvalConeLight Nähert eine Entfernte Bereichslichtquelle an. Ein Beispiel wäre die Sonne (sehr kleiner Kegelwinkel). D3DXSHEvalHemisphereLight Wertet ein Licht aus, das eine lineare Interpolation zwischen zwei Farben ist (eine an jedem Pol einer Kugel). Berechnen Sie die Ausgangsstrahlung.
Gleichung 1 muss nun an jedem Punkt mit einem Scheitelpunkt oder einem Pixel-Shader ausgewertet werden. Bevor der Shader ausgewertet werden kann, müssen Konstanten vorberechnet und in die Konstantentabelle geladen werden (Details finden Sie im PRT-Demobeispiel ). Der Shader selbst ist eine einfache Implementierung dieser Gleichung.
struct VS_OUTPUT { float4 Position : POSITION; // vertex position float2 TextureUV : TEXCOORD0; // vertex texture coordinates float4 Diffuse : COLOR0; // vertex diffuse color }; VS_OUTPUT Output; Output.Position = mul(vPos, mWorldViewProjection); float4 vExitR = float4(0,0,0,0); float4 vExitG = float4(0,0,0,0); float4 vExitB = float4(0,0,0,0); for (int i=0; i < (NUM_PCA_VECTORS/4); i++) { vExitR += vPCAWeights[i] * vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*0]; vExitG += vPCAWeights[i] * vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*1]; vExitB += vPCAWeights[i] * vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*2]; } float4 vExitRadiance = vClusteredPCA[iClusterOffset]; vExitRadiance.r += dot(vExitR,1); vExitRadiance.g += dot(vExitG,1); vExitRadiance.b += dot(vExitB,1); Output.Diffuse = vExitRadiance;
Referenzen
Weitere Informationen zu PRT und sphärischen Oberschwingungen finden Sie in den folgenden Artikeln:
Precomputed Radiance Transfer for Real-Time Rendering in Dynamic,
Low-Frequency Lighting Environments
P.-P. Sloan, J. Kautz, J. Snyder
SIGGRAPH 2002
Clustered Principal Components for Precomputed Radiance Transfer
P.-P. Sloan, J. Hall, J. Hart, J. Snyder
SIGGRAPH 2003
Efficient Evaluation of Irradiance Environment Maps
P.-P. Sloan
ShaderX 2, W. Engel
Spherical Harmonic Lighting: The Gritty Details
R. Green
GDC 2003
An Efficient Representation for Irradiance Environment Maps
R. Ramamoorthi, P. Hanrahan
A Practical Model for Subsurface Light Transport
H. W. Jensen, S. R. Marschner, M. Levoy, and P. Hanrahan
SIGGRAPH 2001
Bi-Scale Radiance Transfer
P.-P. Sloan, X. Liu, H.-Y. Shum, J. Snyder
SIGGRAPH 2003
Fast, Arbitrary BRDF Shading for Low-Frequency Lighting Using Spherical
Harmonics
J. Kautz, P.-P. Sloan, J. Snyder
12th Eurographics Workshop on Rendering
Precomputing Interactive Dynamic Deformable Scenes
D. James, K. Fatahalian
SIGGRAPH 2003
All-Frequency Shadows Using Non-linear Wavelet Lighting Approximation
R. Ng, R. Ramamoorth, P. Hanrahan
SIGGRAPH 2003
Matrix Radiance Transfer
J. Lehtinen, J. Kautz
SIGGRAPH 2003
Math World
E. W. Weisstein, Wolfram Research, Inc.
Quantum Theory of Angular Momentum
D. A. Varshalovich, A.N. Moskalev, V.K. Khersonskii
Zugehörige Themen