Udostępnij za pośrednictwem


Wstępnie skompilowany transfer promieniowy (Direct3D 9)

Korzystanie z wstępnie skompilowanej transmisji promieniowej

Istnieje kilka form złożoności obecnych w interesujących scenach, w tym sposób modelowania środowiska oświetleniowego (czyli modeli oświetlenia obszarów w porównaniu z modelami punktowymi/kierunkowymi) oraz rodzaj globalnych efektów (na przykład cienie, interreflections, rozpraszanie podpowierzchniowe). Tradycyjne techniki renderowania interakcyjnego modeluje ograniczoną ilość tej złożoności. PrT umożliwia wykonanie tych efektów z pewnymi istotnymi ograniczeniami:

  • Zakłada się, że obiekty są sztywne (czyli bez deformacji).
  • Jest to podejście skoncentrowane na obiektach (chyba że obiekty są przenoszone razem, te efekty globalne nie są utrzymywane między nimi).
  • Modelowane jest tylko oświetlenie o niskiej częstotliwości (co powoduje miękkie cienie). W przypadku świateł o wysokiej częstotliwości (ostrych cieni) należy stosować tradycyjne techniki.

Żądanie ściągnięcia wymaga jednego z następujących elementów, ale nie obu:

  • bardzo tessellatowane modele i vs_1_1
  • ps_2_0

Standardowe oświetlenie rozproszone a PRT

Poniższa ilustracja jest renderowana przy użyciu tradycyjnego modelu oświetlenia (n · l). Ostre cienie można włączyć przy użyciu innego przebiegu i jakiejś formy techniki cieniowania (mapy głębokości cienia lub woluminy cienia). Dodanie wielu świateł wymagałoby wielu przebiegów (jeśli mają być używane cienie) lub bardziej złożonych cieniowania przy użyciu tradycyjnych technik.

zrzut ekranu przedstawiający ilustrację renderowaną przy użyciu tradycyjnego modelu oświetlenia

Następna ilustracja jest renderowana z prT przy użyciu najlepszego przybliżenia pojedynczego światła kierunkowego, które może rozwiązać. Skutkuje to miękkimi cieniami, które byłyby trudne do produkcji przy użyciu tradycyjnych technik. Ponieważ prT zawsze modeluje kompletne środowiska oświetlenia dodając wiele świateł lub używając mapy środowiska, należy zmienić tylko wartości (ale nie liczbę) stałych używanych przez cieniowanie.

zrzut ekranu przedstawiający ilustrację renderowaną przy użyciu prt

PrT z interreflections

Bezpośrednie oświetlenie dociera do powierzchni bezpośrednio z światła. Interreflections są światło docierające do powierzchni po odbijaniu się od innej powierzchni kilka razy. PrT może modelować to zachowanie bez zmieniania wydajności w czasie wykonywania, uruchamiając symulator z różnymi parametrami.

Poniższa ilustracja jest tworzona przy użyciu tylko bezpośredniego prT (0 odbija się bez interreflections).

zrzut ekranu przedstawiający ilustrację renderowaną przy użyciu tylko bezpośredniego żądania ściągnięcia

Poniższa ilustracja jest tworzona przy użyciu prT z interreflections (2 odbija się od interreflections).

zrzut ekranu przedstawiający ilustrację renderowaną przy użyciu prt z

PrT z rozpraszaniem podpowierzchniowym

Punktowanie podpowierzchniowe to technika, która modeluje sposób, w jaki światło przechodzi przez niektóre materiały. Na przykład naciśnij oświetloną latarki na dłoni. Światło z latarki przechodzi przez rękę, odbija się wokół (zmiana koloru w procesie) i wychodzi z drugiej strony ręki. Można to również modelować za pomocą prostych zmian w symulatorze i bez zmian w środowisku uruchomieniowym.

Na poniższej ilustracji przedstawiono prT z wykresem punktowym podpowierzchniowym.

zrzut ekranu przedstawiający ilustrację renderowaną przy użyciu prt z punktowym podpowierzchniowym

Jak działa żądanie ściągnięcia

Poniższe terminy są przydatne do zrozumienia sposobu działania prT, jak pokazano na poniższym diagramie.

Promienie źródła: promienie źródłowe reprezentują środowisko oświetlenia jako całość. W prT dowolne środowisko jest przybliżone przy użyciu symetrycznej podstawy harmonicznej - zakłada się, że oświetlenie jest odległe względem obiektu (to samo założenie, które zostało wykonane z mapami środowiskowymi).

Promieniowanie wyjścia: Promienie wyjścia to światło opuszczające od punktu na powierzchni z dowolnego możliwego źródła (promienie odbite, rozpraszanie podpowierzchniowe, emisja).

Wektory transferowe: wektory transferowe mapują promienie źródła na promienie wyjścia i są wstępnie skompilowane w trybie offline przy użyciu złożonej symulacji transportu światła.

diagram działania prt

PrT wpływa na proces renderowania na dwa etapy, jak pokazano na poniższym diagramie:

  1. Kosztowna symulacja transportu lekkiego wstępnie skompiluje współczynniki transferu, które mogą być używane w czasie wykonywania.
  2. Stosunkowo lekki etap czasu wykonywania najpierw przybliża środowisko oświetlenia przy użyciu szyfrowania harmonicznej podstawy, a następnie używa tych współczynników oświetlenia i wstępnie skompilowanych współczynników transferu (od etapu 1) z prostą cieniowaniem, co powoduje promieniowanie wyjścia (światło opuszczające obiekt).

diagram przepływu danych prt

Jak używać interfejsu API PRT

  1. Oblicz wektory transferu przy użyciu jednego z obliczeń... metody ID3DXPRTEngine.

    Bezpośrednie radzenie sobie z tymi wektorami transferu wymaga znacznej ilości pamięci i obliczeń cieniowania. Kompresja znacznie zmniejsza wymaganą ilość pamięci i obliczeń cieniowania.

    Końcowe wartości oświetlenia są obliczane w cieniowaniu wierzchołka, który implementuje następujące skompresowane równanie renderowania.

    równanie renderowania prt

    Gdzie:

    Parametr Opis
    Rp Pojedynczy kanał promieniowania wyjścia na wierzchołku p i jest obliczany na każdym wierzchołku siatki.
    Mk Średnia dla klastra k. Jest to wektor Order² współczynników.
    k Identyfikator klastra dla wierzchołka p.
    L Przybliżenie promienia źródła do funkcji bazowych SH. Jest to wektor Order² współczynników.
    j Liczba całkowita, która sumuje liczbę wektorów PCA.
    w pj Waga jth PCA dla punktu p. Jest to pojedynczy współczynnik.
    Bkj Wektor podstawy jth PCA dla klastra k. Jest to wektor Order² współczynników.

     

    Wyodrębnij... metody ID3DXPRTCompBuffer zapewniają dostęp do skompresowanych danych z symulacji.

  2. Oblicz promienie źródłowe.

    Istnieje kilka funkcji pomocnika w interfejsie API do obsługi różnych typowych scenariuszy oświetlenia.

    Funkcja Cel
    D3DXSHEvalDirectionalLight Przybliżone konwencjonalne światło kierunkowe.
    D3DXSHEvalSphericalLight Przybliżone lokalne źródła światła kulistego. (Należy pamiętać, że prT działa tylko ze środowiskami oświetlenia dystansowego).
    D3DXSHEvalConeLight Przybliżone odległe źródło światła obszaru. Przykładem może być słońce (bardzo mały kąt stożka).
    D3DXSHEvalHemisphereLight Ocenia światło, które jest interpolacją liniową między dwoma kolorami (jeden na każdym biegunie kuli).

     

  3. Oblicz promienie wyjścia.

    Równanie 1 musi być teraz oceniane w każdym momencie przy użyciu cieniowania wierzchołka lub piksela. Aby można było ocenić cieniowania, stałe muszą być wstępnie skompilowane i załadowane do tabeli stałej (zobacz przykładowy PRT Demo Sample, aby uzyskać szczegółowe informacje). Sam cieniator jest prostą implementacją tego równania.

    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;
    

Odwołania

Aby uzyskać więcej informacji na temat prT i harmonicznych spherical, zobacz następujące dokumenty:

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 

tematy zaawansowane

równania PRT (Direct3D 9)

reprezentujące prT z teksturami (Direct3D 9)

ID3DXPRTBuffer

ID3DXPRTCompBuffer

ID3DXPRTEngine

ID3DXTextureGutterHelper

wstępnie skompilowane funkcje transferu promieniowego

funkcje matematyczne