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.
Verwenden von vorkompilierten Strahlenübertragungen
Es gibt verschiedene Formen der Komplexität in interessanten Szenen, einschließlich der Modellierung der Beleuchtungsumgebung (d. h. Flächenbeleuchtungsmodelle im Vergleich zu Punkt/Richtungseffekten) und welche Art von globalen Effekten modelliert werden (z. B. Schatten, Interreflections, Subsurface Scattering).) Herkömmliche interaktive Renderingtechniken modelliert eine begrenzte Menge dieser Komplexität. PRT ermöglicht diese Effekte mit einigen erheblichen Einschränkungen:
- Objekte werden als starr angenommen (d. s. keine Verformungen).
- Es handelt sich um einen objektorientierten Ansatz (es sei denn, Objekte werden miteinander verschoben, diese globalen Effekte werden nicht zwischen ihnen beibehalten).
- Nur niederfrequente Beleuchtung wird modelliert (was zu weichen Schatten führt.) Bei Hochfrequenzlichtern (scharfe Schatten) müssten herkömmliche Techniken eingesetzt werden.
PRT erfordert eine der folgenden, aber nicht beide:
- Hochtessellierte Modelle und vs_1_1
- ps_2_0
Diffuse Standardbeleuchtung im Vergleich zu PRT
Die folgende Abbildung wird mit dem traditionellen Beleuchtungsmodell (n · l) gerendert. Scharfe Schatten können mithilfe eines anderen Durchlaufs und einer Form von Schattentechnik (Schattentiefekarten oder Schattenvolumen) 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 Annäherung an ein einzelnes direktionales Licht verwendet wird, das gelöst werden kann. Dies führt zu weichen Schatten, die mit herkömmlichen Techniken schwer zu produzieren wären. Da PRT immer vollständige Beleuchtungsumgebungen modelliert, die mehrere Lichter hinzufügen oder eine Umgebungskarte verwenden, würden Sie nur die Werte (aber nicht die Anzahl) von Konstanten ändern, die vom Shader verwendet werden.
gerendert wird
PRT mit Interreflections
Direkte Beleuchtung erreicht die Oberfläche direkt vom Licht. Interreflektionen erreichen die Oberfläche, nachdem sie einige Male auf eine andere Oberfläche geworfen wurde. PRT kann dieses Verhalten modellieren, ohne die Leistung zur Laufzeit zu ändern, indem einfach der Simulator mit verschiedenen Parametern ausgeführt wird.
Die folgende Abbildung wird nur mit direct PRT erstellt (0 unzustellbarkeiten ohne Interreflections).
gerendert wird
Die folgende Abbildung wird mithilfe von PRT mit Interreflections erstellt (2 Springen mit Interreflections).
PRT mit Untersurface Punktierung
Subsurface Scattering ist eine Technik, die modelliert, wie Licht durch bestimmte Materialien durchläuft. Als Beispiel drücken Sie eine beleuchtete Taschenlampe gegen die Handfläche. Das Licht aus der Taschenlampe durchläuft Ihre Hand, springt um (veränderliche Farbe im Prozess) und verlässt von der anderen Seite Ihrer Hand. Dies kann auch mit einfachen Änderungen am Simulator und ohne Änderungen an der Laufzeit modelliert werden.
Die folgende Abbildung zeigt PRT mit Streuung der Unteroberfläche.
Funktionsweise von PRT
Die folgenden Begriffe sind nützlich, um zu verstehen, wie PRT funktioniert, wie im folgenden Diagramm dargestellt.
Quellradianz: Die Quellstrahlung stellt die gesamte Beleuchtungsumgebung dar. In PRT wird eine beliebige Umgebung mithilfe der sphärischen harmonischen Basis angenähert - diese Beleuchtung wird angenommen, relativ zum Objekt entfernt zu sein (die gleiche Annahme, die mit Umgebungskarten gemacht wird.)
Ausgangsradianz: Ausgangsstrahlung ist das Licht, das von einem Punkt auf der Oberfläche aus einer beliebigen Quelle ablässt (reflektierte Strahlung, Subsurface-Streuung, Emission).
Transfervektoren: Transfervektoren ordnen Quellradianz in Ausgangsstrahlung ab und werden mit einer komplexen Lichttransportsimulation vorab kompiliert.
PRT faktoren den Renderingprozess in zwei Phasen, wie im folgenden Diagramm dargestellt:
- Eine teure Lichttransportsimulation kompetiert Transferkoeffizienten, die zur Laufzeit verwendet werden können.
- Eine relativ leichte Laufzeitstufe nähert zunächst die Beleuchtungsumgebung mit der sphärischen harmonischen Basis an und verwendet dann diese Lichtkoeffizienten und die vorkompilierten Übertragungskoeffizienten (von Stufe 1) mit einem einfachen Shader, was zu einer Ausgangsstrahlung (dem Licht, das das Objekt verlässt).
So verwenden Sie die PRT-API
Berechnen Sie die Übertragungsvektoren mit einem der Compute... Methoden von ID3DXPRTEngine.
Der direkte Umgang mit diesen Übertragungsvektoren erfordert eine erhebliche Menge an Arbeitsspeicher und Shaderberechnung. Die Komprimierung reduziert die erforderliche Arbeitsspeicher- und Shaderberechnung erheblich.
Die endgültigen Beleuchtungswerte werden in einem Vertex-Shader berechnet, der die folgende komprimierte Renderinggleichung implementiert.
Wo:
Parameter Beschreibung RP Ein einzelner Kanal der Ausgangsstrahlung bei Vertex p und wird bei jedem Scheitelpunkt im Gitter 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 Annä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 addiert 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... Methoden von ID3DXPRTCompBuffer den Zugriff auf komprimierte Daten aus der Simulation ermöglichen.
Berechnen sie die Quellstrahlung.
Es gibt mehrere Hilfsfunktionen in der API, um eine Vielzahl gängiger Beleuchtungsszenarien zu verarbeiten.
Funktion Zweck D3DXSHEvalDirectionalLight Nähert sich einem herkömmlichen richtungsgerichteten Licht an. D3DXSHEvalSphericalLight Nähert lokale sphärische Lichtquellen an. (Beachten Sie, dass PRT nur mit Fernbeleuchtungsumgebungen funktioniert.) D3DXSHEvalConeLight Nähert sich einer entfernten Bereichslichtquelle an. Ein Beispiel wäre die Sonne (sehr kleiner Kegelwinkel). D3DXSHEvalHemisphereLight Wertet ein Licht aus, bei dem es sich um eine lineare Interpolation zwischen zwei Farben handelt (eine auf jedem Pol einer Kugel). Berechnen sie die Ausgangsstrahlung.
Formel 1 muss jetzt an jedem Punkt mit einem Vertex- oder Pixel-Shader ausgewertet werden. Bevor der Shader ausgewertet werden kann, müssen Konstanten vorkompiliert und in die Konstantentabelle geladen werden (einzelheiten hierzu finden Sie im PRT Demo Sample). Der Shader selbst ist eine einfache Implementierung dieser Formel.
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 Harmonien 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
Verwandte Themen