Freigeben über


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.

Screenshot einer Illustration, die mit dem herkömmlichen Beleuchtungsmodell gerendert wird

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.

Screenshot einer mithilfe von prt gerenderten Abbildung

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).

Screenshot einer Illustration, die nur mithilfe von direct prt gerendert wird

Die folgende Abbildung wird mithilfe von PRT mit Interreflektionen (2 Unzustellbarkeiten mit Interreflektionen) erstellt.

Screenshot einer Illustration, die mithilfe von prt mit Interreflections gerendert wird

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.

Screenshot einer Illustration, die mithilfe von prt mit Unteroberflächesstreuung gerendert wird

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.

Diagramm der Funktionsweise von prt

PRT berücksichtigt den Renderingprozess in zwei Phasen, wie im folgenden Diagramm dargestellt:

  1. Eine teure Leichttransportsimulation berechnet Transferkoeffizienten, die zur Laufzeit verwendet werden können.
  2. 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.

Diagramm des prt-Datenflusses

Verwenden der PRT-API

  1. 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.

    Formel des Prt-Renderings

    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.

  2. 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).

     

  3. 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 

Weiterführende Themen

PRT-Gleichungen (Direct3D 9)

Darstellen von PRT mit Texturen (Direct3D 9)

ID3DXPRTBuffer

ID3DXPRTCompBuffer

ID3DXPRTEngine

ID3DXTextureGutterHelper

Vorcomputed Radiance Transfer Functions

Mathematische Funktionen