Deferred shading





Il deferred shading è una tecnica che permette la gestione "economica" dei calcoli effettuati sulla GPU. L'output finale su schermo è il risultato dell'applicazione di più tecniche, ciascuna delle quali dà il suo contributo per aumentare il realismo della scena. Spesso più tecniche condividono parzialmente le informazioni di cui hanno bisogno in input per poter calcolare il proprio effetto. Il deferred shading permette di calcolare una volta soltanto le informazioni base "condivise" di cui le varie tecniche hanno bisogno, permettendo un notevole risparmio in termini di quantità di calcoli effettuati. Nel video viene mostrata una prima prova di implementazione, in cui vengono posizionate 23 sorgenti di luce con relative ombre, ottenendo acora più di 20 FPS.
Senza deferred shading, con un calcolo di 23 shadow maps sarebbe improponibile ottenere prestazioni del genere.
Il prossimo passo sarà aggiungere anche lo screen space ambient occlusion in deferred shading, in modo da poter aggiungere realismo all'intera scena.

Con questa nuova tecnica la modalità di simulazione delle luci/ombre acquista molto più senso: ora possiamo gestire più di 3/4 luci contemporaneamente senza timore di sovraccaricare la GPU, ampliando di molto gli studi sull'illuminazione artificiale della chiesa.

Virtual Ambient 2.5



Il video mostra le tre modalità dell'ambiente virtuale.
La modalità indoor permette di analizzare l'illuminazione interna della chiesa a seconda della posizione del sole. E' presente un filtro bloom per aggiungere realismo al bagliore delle finestre e della luce che penetra all'interno della chiesa. Viene presentato anche l'effetto dell'occlusione ambientale calcolata con distanze diverse per aggiungere realismo alla scena.
La modalità outdoor presenta una stilizzazione di piazza navona per analizzare anche le ombre proiettate dall'obelisco.
In queste due modalità si usano texture shadows con tecnica PSSM (3 texture da 1024).
La modalità arcone permette di focalizzare l'attenzione sull'arcone restaurato. L'illusione del rilievo viene data utilizzando bump mapping con normal map, specular map, occlusion map.

SSAO - 2nda parte

Lo Screen Space Ambient Occlusion permette di aumentare notevolmente il realismo della scena.
Questa è il 'comune' effetto che si avrebbe in assenza di SSAO:


Utilizzando differenti interpretazioni della geometria della scena, possiamo avere informazioni diverse sul'occlusione ambientale, per simulare zone di ombra nei contorni degli oggetti, ad esempio insenature nelle pareti, spigoli, etc. (figura a sinistra) e per differenziare aree illuminate da quelle maggiormente in ombra a causa della geometria della chiesa: ad esempio, le cappelle sono zone in cui la luce penetra più difficilmente; con il calcolo delle ombre semplici, questa informazione verrebbe persa, mentre con il SSAO possiamo stimare le aree più in ombra (figura a destra):

Unendo i due calcoli di SSAO precedenti alla scena, otteniamo un risultato del genere:


Che è decisamente più realistico.
Purtroppo però le prestazioni calano drasticamente: si passa da 70 FPS senza SSAO a 40 FPS con un passaggio di SSAO, fino a 16 FPS con due passaggi di SSAO (ultima foto)

Studio tecniche di bump mapping

Per rendere l'illusione della profondità possono essere utilizzate svariate tecniche di bump mapping di complessità maggiore rispetto al semplice utilizzo della normal map descritto in un post precedente.
Partendo da questa semplice foto:

Riusciamo ad estrarre informazioni su..
..come deve riflettere la luce [normal map]:

..sui punti in cui la componente speculare della luce deve essere più o meno forte, e il suo colore [specular map]:

..sui punti in cui simulare le ombre nella componente ambientale della luce [occlusion map]:

..sulla profondità dei singoli punti della superficie [height map]:

Combinando queste informazioni, otteniamo risultati del genere:

Tecniche più avanzate permettono di sfruttare appieno le informazioni sulla stima della profondità dell'immagine, ad esempio utilizzando il cone step mapping e aggiungendo le ombre possiamo aumentare notevolmente la percezione di profondità della superficie:





Ricordiamo che il modello 3D di riferimento su cui abbiamo applicato la nostra texture iniziale è rimasto un piano quadrato (1 quadrato = 2 triangoli adiacenti = 4 vertici in totale). La complessità del modello 3D quindi non è cambiata, rendendo la rappresentazione adatta per il real time.