Trasferimento di radianza pre-calcolata (Direct3D 9)
Uso del trasferimento di radiance pre-calcolata
Esistono diverse forme di complessità presenti in scene interessanti, tra cui il modo in cui l'ambiente di illuminazione viene modellato (ovvero, modelli di illuminazione ad area rispetto a quelli direzionali/punti) e quale tipo di effetti globali vengono modellati (ad esempio ombre, interfleszioni, dispersione sottosurface). Le tecniche di rendering interattivo tradizionali modellano una quantità limitata di questa complessità. Il token di aggiornamento primario abilita questi effetti con alcune restrizioni significative:
- Si presuppone che gli oggetti siano rigidi (ovvero, nessuna deformazione).
- Si tratta di un approccio incentrato sugli oggetti (a meno che gli oggetti non vengano spostati insieme, questi effetti globali non vengono mantenuti tra di essi).
- Viene modellata solo l'illuminazione a bassa frequenza (con ombreggiature morbide). Per le luci ad alta frequenza (ombre nitide), le tecniche tradizionali devono essere utilizzate.
Il token di aggiornamento primario richiede una delle opzioni seguenti, ma non entrambe:
- modelli a mosaico e vs_1_1
- ps_2_0
Illuminazione diffusa standard e PRT
Il rendering della figura seguente viene eseguito usando il modello di illuminazione tradizionale (n · l). Le ombreggiature nitide possono essere abilitate usando un altro passaggio e una qualche forma di tecnica di ombreggiatura (mappe di profondità ombreggiatura o volumi di ombreggiatura). L'aggiunta di più luci richiederebbe più passaggi (se le ombreggiature devono essere usate) o shader più complessi con tecniche tradizionali.
Il rendering della figura successiva viene eseguito con prt usando l'approssimazione migliore di una singola luce direzionale che può risolvere. Ciò comporta ombre morbide che sarebbero difficili da produrre con tecniche tradizionali. Poiché prt modella sempre ambienti di illuminazione completi aggiungendo più luci o usando una mappa dell'ambiente, è necessario modificare solo i valori (ma non il numero) di costanti usate dallo shader.
PRT con interreflessione
L'illuminazione diretta raggiunge la superficie direttamente dalla luce. Le interflazioni sono la luce che raggiunge la superficie dopo aver rimbalzato su un'altra superficie un certo numero di volte. Il token di aggiornamento primario può modellare questo comportamento senza modificare le prestazioni in fase di esecuzione semplicemente eseguendo il simulatore con parametri diversi.
La figura seguente viene creata usando solo prt diretto (0 rimbalzi senza interflessione).
La figura seguente viene creata usando il token di aggiornamento primario con le interfleszioni (2 rimbalzi con interreflizioni).
PRT con dispersione sottosurface
La dispersione sottosurface è una tecnica che modella il modo in cui la luce passa attraverso determinati materiali. Ad esempio, premere una torcia accesa sul palmo della mano. La luce dalla torcia passa attraverso la mano, rimbalza intorno (cambiando colore nel processo) e esce dall'altro lato della mano. Questo modello può anche essere modellato con semplici modifiche al simulatore e nessuna modifica al runtime.
Nella figura seguente viene illustrato il token di aggiornamento primario con la dispersione sottosuperforma.
Funzionamento del token di aggiornamento primario
I termini seguenti sono utili per comprendere il funzionamento del token di aggiornamento primario, come illustrato nel diagramma seguente.
Radiance di origine: la radiazione di origine rappresenta l'ambiente di illuminazione nel suo complesso. In PRT un ambiente arbitrario è approssimativo usando la base armonica sferica. Si presuppone che questa illuminazione sia distante rispetto all'oggetto (lo stesso presupposto che viene fatto con le mappe dell'ambiente).
Radiance uscita: la luce di uscita è la luce che lascia da un punto sulla superficie da qualsiasi fonte possibile (raggi riflessi, dispersione sottosuperforma, emissione).
Vettori di trasferimento: i vettori di trasferimento mappano l'origine Radiance alla radiazione di uscita e vengono pre-calcolati offline usando una simulazione di trasporto chiaro complessa.
Prt fattori il processo di rendering in due fasi, come illustrato nel diagramma seguente:
- Una simulazione di trasporto leggera costosa precomputa i coefficienti di trasferimento che possono essere usati in fase di esecuzione.
- Una fase di runtime relativamente leggera approssima l'ambiente di illuminazione usando la base armonica sferica, quindi usa questi coefficienti di illuminazione e i coefficienti di trasferimento precompilata (dalla fase 1) con un semplice shader, con conseguente raggi di uscita (la luce che lascia l'oggetto).
Come usare l'API PRT
Calcolare i vettori di trasferimento con uno dei calcoli... metodi di ID3DXPRTEngine.
La gestione diretta di questi vettori di trasferimento richiede una quantità significativa di memoria e calcolo dello shader. La compressione riduce significativamente la quantità di memoria e il calcolo dello shader necessari.
I valori di illuminazione finali vengono calcolati in un vertex shader che implementa l'equazione di rendering compressa seguente.
Dove:
Parametro Descrizione Rp Un singolo canale di raggi di uscita al vertice p e viene valutato in ogni vertice della mesh. Mk Media per il cluster k. Si tratta di un vettore Order² di coefficienti. k ID cluster per vertex p. L' L'approssimazione della radiazione di origine nelle funzioni di base SH. Si tratta di un vettore Order² di coefficienti. j Intero che somma il numero di vettori PCA. w pj Peso jth PCA per il punto p. Si tratta di un singolo coefficiente. Broute Vettore di base jth PCA per il cluster k. Si tratta di un vettore Order² di coefficienti. Estrai... i metodi di ID3DXPRTCompBuffer forniscono l'accesso ai dati compressi dalla simulazione.
Calcolare la luminosità di origine.
Nell'API sono disponibili diverse funzioni helper per gestire diversi scenari di illuminazione comuni.
Funzione Scopo D3DXSHEvalDirectionalLight Approssima una luce direzionale convenzionale. D3DXSHEvalsphericalLight Approssima le sorgenti di luce sferica locali. Si noti che il token di aggiornamento primario funziona solo con ambienti di illuminazione a distanza. D3DXSHEvalConeLight Approssima una fonte di luce di area distante. Un esempio è il sole (angolo cono molto piccolo). D3DXSHEvalHemisphereLight Valuta una luce che rappresenta un'interpolazione lineare tra due colori (uno su ogni polo di una sfera). Calcolare la luminosità di uscita.
L'equazione 1 deve ora essere valutata a ogni punto usando un vertice o un pixel shader. Prima di poter valutare lo shader, le costanti devono essere pre-calcolate e caricate nella tabella costante (vedere l'esempio demo PRT per informazioni dettagliate). Lo shader stesso è un'implementazione semplice di questa equazione.
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;
Riferimenti
Per ulteriori informazioni su PRT e armonica sferica, vedere i documenti seguenti:
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
Argomenti correlati