• Non ci sono risultati.

3.3 Soft Shadow Mapping

3.3.3 Variance Shadow Maps (VSM)

La tecnica di variance shadow mapping [53, 51] disegna la scena dal punto di vista della sorgente luminosa come nel caso dello shadow mapping ordinario, ma si salvano due diversi valori all'interno dell'immagine (che deve dunque avere a disposizione due canali predisposti per lo scopo): la profondità Ds e la profondità elevata al

quadrato D2 s.

Supponiamo adesso di ltrare la shadow map ottenuta prima di renderizzare la scena: il ltraggio comporta una combinazione dei valori nella shadow map in una certa area denita dal kernel del ltro secondo opportuni coecienti moltiplicativi. I valori che si trovano nella shadow map ltrata per ogni texel saranno calcolati come segue (e prendono il nome di momenti):

M1 = X [Ds· p (Ds)] M2 = X  Ds2· p (Ds) 

Dove p (Ds) rappresenta i valori della funzione usata per la convoluzione (i coef-

cienti moltiplicativi). Queste espressioni ricordano molto da vicino quelle note per il calcolo del valor medio µ e della varianza σ2 di una variabile aleatoria X con una

certa distribuzione. I momenti sono infatti approssimazioni delle seguenti quantità (imponendo Ds = X, variabile aleatoria):

M1 ≈ E (X) = Z ∞ −∞ x · p(x) dx M2 ≈ E X2 = Z ∞ −∞ x2· p(x) dx da cui: µ = E (X) ≈ M1 σ2 = E X2 − E (X) 2 ≈ M2− M12

Quindi, dopo aver ltrato la shadow map (ottenendo M1 e M2), è possibile calco-

lare una stima del valor medio e della varianza di una distribuzione probabilistica di valori di Ds per ogni texel nella shadow map. La forma della densità di probabilità

dipende dal modo in cui si è fatto il ltraggio, ma in ogni caso abbiamo che una certa quantità di valori di profondità nell'intorno di ogni texel della shadow map originale viene adesso rappresentata da una distribuzione probabilistica di cui abbiamo valor medio e varianza per ogni texel.

Dato un valore di profondità per il frammento Df noto a tempo di rende-

ring, possiamo stimare la quantità di luce che arriva sul frammento calcolando la P (Df ≤ Ds), dove Ds è una variabile aleatoria di cui abbiamo media e varianza

(note prelevando i valori di un singolo texel dalla shadow map). Questo equiva- le ad eettuare un ltraggio PCF sulla shadow map visto che la quantità ricavata rappresenta la frazione di texel nell'area esaminata che risultano più lontani dalla luce del frammento a profondità Df (questo è evidente almeno nel caso di PCF e

preltraggio della mappa dato dalla media dei valori nel kernel).

Il metodo delle VSM prevede a questo punto di usare la nota disuguaglianza di Chebyshev per dare un'approssimazione (in realtà un limite superiore) del valore di P (Df ≤ Ds) come segue: P (Df ≤ Ds) ≤ σ2 σ2+ (D f − µ)2 = Pmax(Df) (3.1)

Il valore Pmax(Df) così calcolato verrà utilizzato direttamente per il rendering

come fattore moltiplicativo (compreso tra 0 e 1) e rappresenta la quantità di luce ricevuta dal frammento. Notare che la disuguaglianza di Chebyshev è valida sola- mente se abbiamo che Df > µ ≈ M1, in tutti gli altri casi si considera il frammento

completamente illuminato.

CAPITOLO 3. PROIEZIONE DI OMBRE 89 Algoritmo 3.4 Variance shadow mapping

1. Primo passo di rendering

Si renderizza o-screen la scena dal punto di vista della sorgente luminosa, salvando i valori di profondità Ds e Ds2 in una variance shadow map.

2. Filtraggio offline

Prima di disegnare la scena dal punto di vista della telecamera, si esegue un ltraggio della shadow map con un ltro di blur o simili. L'ampiezza del kernel utilizzato è direttamente proporzionale alla quantità di penombra che si vuole ottenere (e inuenza le prestazioni dell'algoritmo).

3. Secondo passo di rendering

Si disegna la scena dal punto di vista dell'osservatore, calcolando per ogni frammento renderizzato un fattore moltiplicativo P che indica la quantità di luce ricevuta dal frammento. Si opera fatto prelevando una singola vol- ta i valori M1 e M2 dalla shadow map e calcolando le seguenti approssimazioni.

µ ≈ M1 σ2 ≈ M2− M12    Df ≤ M1 ⇒ P = 1 Df > M1 ⇒ P = Pmax(Df) = σ2 σ2 + (D f − µ) 2

Basterà inne moltiplicare il fattore P per il colore del frammento, considerato completamente illuminato (eventualmente modulando solamente le componenti non ambientali).

In questo caso, dato che la mappa deve subire un ltraggio, possiamo anche usare le funzionalità di ltraggio fornite (ad oggi) direttamente dall'hardware: si parla di ltraggio bilineare, anisotropico e mipmapping con interpolazione lineare (ltraggio trilineare). Tutti questi metodi di ltraggio delle texture dovrebbero venire utilizzati se supportati dall'hardware, in tal caso infatti si aumenta la qualità della penombra sfruttando delle funzionalità altamente ecienti.

Grazie al fatto che la disuguaglianza di Chebyshev fornisce una sovrastima della probabilità cercata, con le VSM si risolve facilmente ogni problema di self-shadowing nelle regioni che dovrebbero essere completamente illuminate. Indipendentemente dall'ampiezza del kernel per il ltraggio eseguito, per eliminare l'artefatto di shadow acne è suciente imporre un valore minimo molto piccolo alla varianza σ2 calcolata

come sopra (operazione comunque necessaria per problemi di stabilità numerica). Per ottenere un'implementazione robusta dell'algoritmo VSM, bisogna utilizzare due canali per i due momenti contenenti numeri reali a precisione singola. Inoltre

è fortemente consigliato l'utilizzo di una metrica lineare per la profondità (come un valore proporzionale alla distanza dalla sorgente luminosa). In questo modo si evitano problemi di instabilità numerica.

Una scena renderizzata sfruttando la tecnica VSM è quella in g. 3.9.

Figura 3.9: Variance shadow mapping

I risultati sono eccellenti, tuttavia le variance shadow map hanno alcuni problemi di cui è necessario discutere.

Light bleeding

Quando un caster proietta la propria ombra su un ricevitore, tale ombra risulterà avere spigoli `soft', contenenti delle zone di penombra. Supponiamo però che dietro il ricevitore vi sia un'altro ricevitore: questo dovrebbe ricevere solo l'ombra proiettata dal primo ricevitore; eppure in determinate circostanze abbiamo che lo spigolo soft dell'ombra proiettata dal caster risulterà visibile anche sul secondo ricevitore (vedi g. 3.10).

Questo eetto è dovuto al fatto che la disuguaglianza di Chebyshev rappresenta solo un limite superiore alla probabilità cercata. Proviamo infatti ad applicare la disuguaglianza nel punto indicato in g. 3.10 per il secondo ricevitore (oggetto C). Supponendo che i tre oggetti A, B e C siano a distanza rispettivamente a, b e c dalla sorgente luminosa, e che i momenti nel punto in esame siano i seguenti dopo il ltraggio: M1 = a + b 2 M2 = a2+ b2 2

CAPITOLO 3. PROIEZIONE DI OMBRE 91

Figura 3.10: Light bleeding

otteniamo: µ ≈ a + b 2 σ 2 ≈ a2+ b2 2 − a2+ b2+ 2ab 4 = (b − a)2 4 per cui: Pmax = σ2 σ2+ (c − µ)2 ≈ (b − a)2 4 (b − a)2 4 +  c − a + b 2 2 = 4x2 4 4x2 4 +  4y + 4x 2 2

Considerando allora un particolare 4x, il valore di Pmax (che dovrebbe essere

sempre 0 per l'oggetto C nel caso ideale) decresce come 1/4y2. Dunque si potranno

notare degli spigoli luminosi in zone che dovrebbero essere completamente in ombra, e il fenomeno sarà tanto più grave quanto più il rapporto 4x/4y è elevato.

Varie sono state le proposte per ridurre questo fastidioso fenomeno, dalla sem- plice rimozione delle penombre che risultano luminose sotto una certa intensità [51] (infatti il light bleeding è sempre tale che Pmax < 1) all'utilizzo di approcci stra-

ticati che generano diverse shadow map corrispondenti ad una suddivisione della scena in diversi livelli di profondità [54]. Una soluzione completa ed eciente al problema non è ancora nota, tuttavia si ha un forte miglioramento sfruttando la

tecnica di EVSM, che vediamo più avanti.

L'artefatto di light bleeding è messo in evidenza in g. 3.11.

Figura 3.11: Light bleeding nella tecnica VSM

Artefatti per ricevitori non planari

La disuguaglianza di Chebyshev ci fornisce il valore esatto per P (Df ≤ Ds)quando

abbiamo a che fare con ricevitori planari; l'approssimazione è normalmente buo- na anche nel caso di ricevitori non planari ed utilizzabile direttamente. Tuttavia, quando la geometria che riceve l'ombra presenta delle discontinuità piuttosto pro- nunciate, possono vericarsi artefatti in prossimità dei bordi degli oggetti ricevitori dovuti nuovamente al modo in cui si calcola il fattore moltiplicativo. Filtrando in prossimità del bordo, quando abbiamo un forte dislivello nella shadow map, si può spostare il valor medio della profondità Ds ad una distanza superiore a quella del

bordo e dunque questo può causare una completa illuminazione dei frammenti vicino alla discontinuità. L'artefatto è tanto peggiore quanto più è esteso il kernel del ltro utilizzato.

CAPITOLO 3. PROIEZIONE DI OMBRE 93

Figura 3.12: Artefatti di bordo con tecnica VSM

Questo problema può venire arontato in diversi modi. La tecnica EVSM riduce fortemente anche questo artefatto, come vedremo più avanti.