• Non ci sono risultati.

3.3 Soft Shadow Mapping

3.3.4 Exponential Shadow Maps (ESM)

Questo algoritmo ha un approccio simile a quello delle VSM ed è stato introdotto da due diversi lavori svolti in contemporanea e sostanzialmente indipendenti [55, 56].

Nel caso delle ESM partiamo supponendo di inserire all'interno della shadow map solamente i valori di profondità Ds come nel caso standard e di ltrare la mappa

combinandone le profondità in una certa area in dipendenza del ltro utilizzato. I valori che si trovano nella shadow map ltrata per ogni texel saranno calcolati come segue (momenti del primo ordine):

M = X[Ds· p (Ds)]

dove p (Ds)rappresenta i valori della funzione usata per la convoluzione (i coecienti

moltiplicativi). Come già osservato, questa espressione è simile a quella utilizzata per il calcolo del valor medio nella teoria della probabilità; infatti abbiamo che (imponendo Ds = X, variabile aleatoria):

µ = E (X) = Z ∞

−∞

x · p(x) dx ≈ M

Considerando allora i valori di Ds salvati inizialmente nella shadow map come i

valori assunti da una variabile aleatoria, quello che si trova all'interno della shadow map una volta eettuato il ltraggio sono i valori M che approssimano il valor medio

di una distribuzione probabilistica di Ds per ogni texel. Per ogni texel abbiamo

dunque una distribuzione probabilistica di valori determinata dal tipo di ltraggio eettuato, e il momento che si trova nella shadow map è una approssimazione del valor medio di tale distribuzione.

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 stimato il valor medio

(noto prelevando un singolo elemento dalla shadow map).

Per calcolare tale probabilità possiamo utilizzare la disuguaglianza di Markov (nota in teoria della probabilità) che sostanzialmente nel nostro caso si può scrivere semplicemente come segue (visto che i valori per Ds e Df sono sempre positivi):

P (Df ≤ Ds) ≤

E (Ds)

Df

(3.2)

Questo ci da un limite superiore alla probabilità cercata. Purtroppo normalmente tale valore è piuttosto lontano dalla quantità desiderata e le ombre risultano troppo luminose. Infatti, anche quando abbiamo che Df > E (Ds), la discesa verso zero è

troppo lenta.

Per migliorare il risultato possiamo applicare una funzione non lineare, monotona crescente e positiva f (x) alla variabile aleatoria Ds, ottenendo una nuova variabile

aleatoria Y = f (Ds) sempre positiva. La disuguaglianza di Markov si applica

naturalmente anche alla variabile aleatoria Y ed è infatti lecito scrivere:

P (f (Df) ≤ Y ) = P (f (Df) ≤ f (Ds)) ≤

E (f (Ds))

f (Df)

ma siccome la funzione f (x) è monotona crescente, vale anche che:

f (x) ≤ f (y) ⇐⇒ x ≤ y e dunque:

P (Df ≤ Ds) = P (f (Df) ≤ f (Ds)) ≤

E (f (Ds))

f (Df)

La funzione f (x) di warping (distorsione) deve essere tale da accelerare la discesa verso 0 quando Df > E (Ds), diverse funzioni soddisfano questo requisito.

Bisogna inoltre notare che, se si calcola l'intensità luminosa con la disuguaglianza di Markov come nella formula sopra, le ombre risulteranno più o meno intense a

CAPITOLO 3. PROIEZIONE DI OMBRE 95 seconda della profondità del frammento Df e della profondità media memorizzata

nel texel E (Ds). Questo signica che l'intensità dell'ombra dipende anche dalla

posizione della luce nella scena. Per rimuovere questa dipendenza dalla posizione della luce, bisogna che il risultato sia identico quando a Dse Df si aggiunge o sottrae

uno stesso valore t. Questo porta ovviamente alla soluzione: f (x) = Cekx

Riassumendo, l'algoritmo di ESM risulta allora il seguente: Algoritmo 3.5 Exponential 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à trasformati ekDs nella 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 prelevando una singola volta il valore ltrato dalla shadow map M = P ekDs · p (D

s) ≈ E ekDs  . P = min1, M ekDf 

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

Naturalmente, anche nel caso delle ESM è possibile sfruttare tutti i metodi di ltraggio hardware validi per le VSM. Inoltre le ESM hanno il vantaggio di sfruttare un singolo termine da calcolare e memorizzare nella shadow map e risultano dunque leggermente più ecienti delle VSM (tuttavia il costo computazionale di queste tecniche è dovuto principalmente al ltraggio oine).

Un esempio di scena renderizzata con la tecnica di exponential shadow mapping è riportato in g. 3.13.

Figura 3.13: Exponential shadow mapping

Bisogna comunque evidenziare che questo metodo ha alcuni difetti in parte simili a quelli visti per il variance shadow mapping, che descriviamo di seguito.

Light bleeding

Il tipo di bleeding esaminato nel caso di VSM è del tutto sparito, tuttavia abbiamo introdotto un nuovo tipo di light bleeding che dipende dal rapporto dettato dalla disuguaglianza di Markov. Usando la funzione di warp esponenziale il light bleeding viene a dipendere solamente dalla distanza tra caster e ricevitore.

Questo eetto dipende dal fatto che per quanto la disuguaglianza possa tendere velocemente verso lo zero, non arriverà mai a zero e il colore risultante dipenderà dal valore relativo di E ekDse ekDf. In particolare, questo tipo di light bleeding scom-

pare per k tendente all'innito e dunque è conveniente impostare questo parametro con un valore molto elevato.

A questo proposito, ricordiamo che i valori di ekDs dovranno venire memorizzati

in una texture e dunque si raccomanda di utilizzare un canale con numeri reali in virgola mobile a precisione singola (almeno) per ottenere il più elevato range possibile (e sfruttare di conseguenza valori di k molto elevati, intorno a 80 se il Ds massimo

è 1).

In g. 3.14 è messo in evidenza il tipo di light bleeding che si genera usando la tecnica ESM.

CAPITOLO 3. PROIEZIONE DI OMBRE 97

Figura 3.14: Light bleeding nella tecnica ESM

Artefatti per ricevitori non planari

Il problema che abbiamo esaminato nelle VSM per ricevitori non planari si presenta nuovamente nel caso delle ESM: la causa è identica e l'artefatto che si genera ha la stessa forma. Vedere il paragrafo 3.3.3 per maggiori informazioni.

Come nel caso delle VSM, l'eetto è tanto peggiore quanto più è esteso il kernel del ltro utilizzato. Inoltre, il problema si aggrava utilizzando le ESM perché grazie al warp esponenziale i dislivelli presenti nella shadow map standard vengono esa- sperati per ridurre il light bleeding (aumentando il parametro k) e il ltraggio può portare ad artefatti molto evidenti.