Slide
Transcript
Slide
Cenni al rendering di ombre Davide Gadia Corso di Programmazione Grafica per il Tempo Reale Laurea Magistrale in Informatica per la Comunicazione a.a. 2012/2013 Ombre • Componenti fondamentali per aumentare il realismo del rendering • Forniscono indizi visuali sul posizionamento degli oggetti, sulla profondità ecc. Ombre • Modelli di shading per il tempo reale sono locali • Ombre calcolate da modelli di illuminazione globali Ray tracing, radiosity ecc • Ombre sono introdotte in tempo reale tramite tecniche apposite: Tecniche basate su proiezione Shadow map Shadow volume Ombre: terminologia • Occlusori bloccano la luce dalla sorgente alla superficie ricevitore Ombre: terminologia • Luci puntiformi creano hard shadows • Area light creano soft shadows Ombre basate su proiezione • Ombre sono oggetti separati Poligono ombra creato calcolando proiezioni dei vertici della primitiva sulla superficie ricevente Point light + superfici piane Hard shadows Si possono usare tecniche per “sfumare” le ombre Shadow map • Primo passo di rendering dal punto di vista della luce Mantengo informazioni su oggetti + vicini nella shadow map Quelli visibili dalla luce = illuminati • Secondo passo di rendering da camera Nel rendering di un punto, controllo se è in shadow map Se presente = punto è illuminato Altrimenti = punto è in ombra Shadow map Shadow map • Vantaggi: costo computazionale creazione mappa + lineare rispetto numero primitive Tempo di accesso alla mappa è costante • Svantaggi Qualità ombra dipende da risoluzione in pixel della shadow map Aliasing in punti contatto superfici Erronea introduzione di self-shadows Sono state proposte numerose tecniche per ovviare ad artefatti e per migliorare la risoluzione delle ombre Percentage Closer Filtering • Approccio: campiono + volte la shadow map e applico blending da: http://www.gamedev.net/page/resources/_/technical/graphics-programming-and-theory/softedged-shadows-r2193 Shadow volume • Vertice è sorgente di luce • Triangolo è occlusore • Tronco di piramide è il volume d'ombra Shadow volume • Considero un raggio dalla camera al punto che devo renderizzare • Mantengo un contatore: Incremento ogni volta in cui il raggio incontra una front-face del volume d'ombra Decremento quando incontra una back-face • Se alla fine il contatore è > di 0 → pixel è in ombra da: http://en.wikipedia.org/wiki/Shadow_volume Shadow volume Stencil buffer • La gestione del contatore è ottimizzata usando lo stencil buffer un altro buffer a disposizione della pipeline Di solito i valori vengono scritti tramite operazioni di addizione,sottrazione ecc in modo da creare una “maschera” Durante il rendering finale, la “maschera” viene utilizzata per mascherare regioni del framebuffer, renderizzando solo nei pixel selezionati Shadow map e Stencil buffer • Passo 1: Renderizzo con solo luce ambiente Disabilito Z-buffer Abilito scrittura solo in Stencil buffer • Passo 2: Renderizzo front face del volume d'ombra nello stencil buffer Incremento contatore • Passo 3: Renderizzo back face del volume d'ombra nello stencil buffer Decremento contatore • Passo 4: Riattivo scrittura nel frame buffer Renderizzo componenti diffusive e speculari in pixel dove valore nello stencil è 0 Global illumination in tempo reale? • Tecniche di global illumination non sono ancora praticabili in tempo reale È possibile in configurazioni molto semplificate e controllate • Esempi di tecniche di ray tracing in WebGl: http://people.mozilla.com/~sicking/webgl/ray.html http://madebyevan.com/webgl-path-tracing/ References • “Real time rendering – 3rd edition” : Cap 9 • Slide e immagini da www.realtimerendering.com • Slide CS 563 “Advanced Topics in Computer Graphics” (Worcester Polytechnic Institute) http://web.cs.wpi.edu/~emmanuel/courses/cs563/S12/