Condividi tramite


Equazioni PRT (Direct3D 9)

Per comprendere appieno uno shader che implementa il token di aggiornamento primario, è utile derivare la formula usata dallo shader per calcolare la luminosità di uscita.

Per iniziare, l'equazione seguente è l'equazione generale per calcolare la raggianza di uscita risultante dall'illuminazione diretta su un oggetto diffuso con illuminazione distante arbitraria.

equazione della radiazione di uscita risultante dall'illuminazione diretta su un oggetto diffuso con illuminazione distante arbitraria

dove:

Parametro Descrizione
Rp Raggi di uscita al vertice p. Valutato in ogni vertice della mesh.
pd Albedo della superficie.
pi greco Costante, utilizzata come fattore di normalizzazione della conservazione dell'energia.
L(s) Ambiente di illuminazione (raggi di origine).
Vp₍s₎ Funzione di visibilità binaria per il punto p. È 1 se il punto può vedere la luce, 0 in caso contrario.
Hnp₍s₎ Il termine coseno dalla legge di Lambert. Uguale a max(Np· s), 0) dove Np è la normale superficie in corrispondenza del punto p.
s Variabile che si integra sulla sfera.

 

Usando funzioni di base sferica, ad esempio armonica sferica, l'equazione seguente approssima l'ambiente di illuminazione.

equazione dell'ambiente di illuminazione

dove:

Parametro Descrizione
L(s) Ambiente di illuminazione (raggi di origine).
io Intero che somma il numero di funzioni di base.
O L'ordine delle armoniche sferiche.
li Coefficiente.
Y Alcune funzioni di base sulla sfera.

 

La raccolta di questi coefficienti, L', fornisce l'approssimazione ottimale per la funzione L(s) con le funzioni di base Y(s). La sostituzione e la distribuzione producono l'equazione seguente.

equazione dellaradianza di uscita dopo la sostituzione di l/s e la distribuzione di

L'integrale di Yi(i)Vp₍s₎Hnp₍s₎ è un coefficiente di trasferimento tpi che il simulatore precomputa per ogni vertice della mesh. La sostituzione di questo risultato produce l'equazione seguente.

equazione dellaradianza di uscita dopo la sostituzione del coefficiente di trasferimento

Se si modifica questa proprietà in notazione vettoriale, viene restituita l'equazione non compressa seguente per calcolare laradianza di uscita per ogni canale.

equazione dellaradianza di uscita dopo la modifica alla notazione vettoriale

dove:

Parametro Descrizione
Rp Raggi di uscita al vertice p.
pd Albedo della superficie.
L' Il vettore di lied è la proiezione della radiazione di origine nelle funzioni armonica sferiche. Si tratta di un vettore order² di coefficienti armonici sferici.
Carta igienica Vettore di trasferimento order² per il vertice p. Il simulatore divide i coefficienti di trasferimento per p.

 

Entrambi questi vettori sono un vettore order² di coefficienti armonici sferici, quindi si noti che questo è semplicemente un prodotto punto. A seconda dell'ordine, il punto può essere costoso in modo da poter usare la compressione. Un algoritmo denominato Clustered Principal Component Analysis (CPCA) comprime in modo efficiente i dati. Ciò consente l'uso di un'approssimazione armonica di ordine superiore che comporta ombre più nitide.

CPCA fornisce l'equazione seguente per approssimare il vettore di trasferimento.

equazione del vettore di trasferimento approssimativo

dove:

Parametro Descrizione
Carta igienica Vettore di trasferimento per il vertice p.
Mk Media per cluster k.
j Intero che somma il numero di vettori PCA.
N Numero di vettori PCA.
wpj Peso jth PCA per il punto p.
B Vettore di base JTH PCA per il cluster k.

 

Un cluster è semplicemente un numero di vertici che condividono lo stesso vettore medio. Di seguito viene descritto come ottenere la media del cluster, i pesi PCA, i vettori di base PCA e gli ID cluster per i vertici.

La sostituzione di queste due equazioni produce:

equazione dellaradianza di uscita dopo la sostituzione del vettore di trasferimento

Quindi la distribuzione del prodotto punto produce l'equazione seguente.

equazione dellaradianza di uscita dopo aver distribuito il prodotto punto

Perché entrambi (Mk· L') e (Bkj· L') sono costanti per vertice, il campione calcola questi valori con la CPU e li passa come costanti nel vertex shader; poiché wpj modifiche per ogni vertice, l'esempio archivia questi dati per vertice nel buffer dei vertici.

di trasferimento della radianza pre-calcolata