Corso di Programmazione Grafica per il Tempo Reale
Ottimizzazione della scena:
culling (decimazione)
Daniele Marini
Tipi di decimazione
• back face
• view frustum culling
• portali
• detail
• occlusion culling
PGTR aa 2010/2011
2
Quando farlo
• per un pieno controllo: nella applicazione
• si può anche sfruttare info contenute nel
frame buffer e includerlo nella pipe line
• il metodo ideale spedisce alla pipe line solo
EVS exact visibility set, primitive parzialmente
o totalmente visibili
– complessità alta O(n2)
• alternativa PVS potentially visible set, e deve
comprendere EVS (conservativo), pena
errori nelle immagini (approssimato)
– sfrutta z-buffer per la visibilità finale
PGTR aa 2010/2011
3
La pipe line
Applic
Model and
View
Transform
Lighting
Geom
Projection
PGTR aa 2010/2011
Rast
Clipping
Screen
Mapping
4
Riassunto coordinate
Model and
View
Transform
Lighting
World Coord.
4D (Omogenee)
Projection
Clipping
Screen
Mapping
Normalized Device
Coord.
4D (Omogenee)
World Coord.
3D
PGTR aa 2010/2011
Window Coord.
2D
(x’,y’) coordinate schermo
+ coordinata z di profondità
5
mantenuta a parte
Back face culling
• sono le facce autonascoste, orientate in
senso opposto all’osservatore
• si calcola la normale al poligono proiettato
sul piano immagine: n=(v1-v0)x(v2-v0), vi
vertici poligono; la normale ha la forma
(0,0,a) o (0,0,-a) con a>0; se asse z punta
verso lo schermo (0,0,a) indica un poligono
orientato verso l’osservatore
• il risparmio consiste nell’evitare la scan
conversione dei poligoni esclusi
• accresce la complessità nella fase di
geometria
PGTR aa 2010/2011
6
Back face culling
• si può eseguire prima nello stadio
geometrico, lavorando nello spazio
“vista”
– In tal caso si testa la normale rispetto alla
direzione di vista
• è meglio eseguirlo nello spazio
schermo NDC: errori di
arrotondamento possono modificare
lievemente l’orientamento di un
poligono
PGTR aa 2010/2011
7
Back face culling OGL
• disponibile la funzione
glCullFace(GL_FRONT|GL_BACK|GL_FRONT_BACK)
• da chiamare dopo aver abilitato il culling con:
glEnable(GL_CULL_FACE)
• OGL permette di riorientare le facce di un poliedro
con glFrontFace(GL_CCW|GL_CW)
PGTR aa 2010/2011
8
Clustered Back face culling
• Lo spazio delle normali viene suddiviso in
frustum chiamati cluster
• Sono definiti 6 frusta, orientati come le
facce di un cubo, con il vertice al centro
• Ogni cluster contiene i poligoni che hanno
la normale compresa nell’intervallo del
frustum corrispondente
• Questa classificazione si esegue in fase di
preprocessing, in esecuzione si trattano solo
i poligoni che appartengono a cluster visibili
PGTR aa 2010/2011
9
View frustum culling
• valutare il BV rispetto al frustum di visione
• se il BV è gerarchico anche il culling è
gerarchico
• Se un BV è esterno al frustum non viene
spedito alla pipe-line
• Se un BV è (parzialmente) interno a un
frustum le primitive interne al BV vengono
spedite alla pipe line ed elaborate
• Se si utilizza un scene graph i BV possono
essere organizzati gerarchicamente
PGTR aa 2010/2011
10
View frustum culling
• si sfrutta anche la coerenza tra frame: se un
BV è esterno lo è probabilmente anche nel
frame successivo
• se i movimenti sono vincolati (traslazioni o
rotazioni attorno un solo asse) al frame
successivo il test può essere accelerato,
memorizzando la distanza dal piano del
frustum e aggiornandola
PGTR aa 2010/2011
11
Portali
• adatto a scenari architettonici, una
parete svolge un ruolo di occlusore
• si considera un frustum limitato da
finestre o porte
• quando si attraversa una finestra o
una porta il frustum viene aggiornato
PGTR aa 2010/2011
12
Portali
• si esegue un pre-processing
suddividendo lo scenario in celle (una
per ogni stanza o corridoio)
• porte, finestre e pareti della cella
formano la struttura dati
• le celle si organizzano in un grafo di
adiacenza per descrivere la topologia
della scena
PGTR aa 2010/2011
13
Portali
1.
2.
3.
4.
localizza la cella V dove si trova l’osservatore
inzializza un BB P rettangolare pari alla finestra
di vista, allineato agli assi
renderizza la geometria della cella V con view
frustum culling, definito da P e con vertice
nell’osservatore
ripeti ricorsivamente per le celle adiacenti
seguendo il grafo di adiacenza; per ciascun
portale della cella corrente proietta il portale
sullo schermo e trova il rettangolo AABB della
proiezione; calcola l’intersezione logica di P e
del rettangolo AABB proiettato
PGTR aa 2010/2011
14
Portali
5. per ciascuna intersezione logica: se è vuota
allora la cella adiacente non è visibile e si
scarta, se non è vuota esegui il culling
rispetto al frustum che va dall’osservatore al
rettangolo proiettato dall’intersezione
rettangolare
6. se l’intersezione logica non era vuota le
celle adiacenti successive possono essere
visibili e si ripete ricorsivamente da 3. con un
nuovo P generato dalla intersezione
precedente; ogni oggetto già esaminato va
etichettato per evitare di ripassarci
PGTR aa 2010/2011
15
eye
PGTR aa 2010/2011
16
Dettagli (detail culling)
• Chiamato anche screen size culling
• si stima l’area in pixel del BV sul piano di
proiezione
• se è sotto una soglia non si rende
• quando l’osservatore è fermo viene
disabilitato e si rende tutto
• è simile a un LOD semplificato a due soli
livelli
• Presenta difetti di pop up
PGTR aa 2010/2011
17
Occlusion culling
• evitare di rendere più volte oggetti che si
occludono lavorando sempre sugli stessi
pixel nello z-buffer (paesaggi, alberi, edifici,
...)
• occlusion culling è simile a un test di ombra
• molte soluzioni: spazio immagine, spazio
oggetti, spazio raggi
• altra classificazione: basati su un punto,
basati su una cella
PGTR aa 2010/2011
18
Occlusion culling
eye
L’obiettivo è di evitare di spedire alla pipeline
oggetti occlusi
PGTR aa 2010/2011
19
Occlusion culling
• richiede un test di visibilità, basato su
ordinamento tra oggetti
• G insieme di oggetti da rendere
• OR insieme che rappresenta le
occlusioni
• P insieme di occlusori potenziali
PGTR aa 2010/2011
20
Occlusion culling
• è costoso
• una buona strategia consiste nel
creare una rappresentazione degli
occlusori iniziali e aggiornarla frame
per frame
• si può accelerare ordinando gli
oggetti secondo la distanza
PGTR aa 2010/2011
21
Scarica

Trasformazioni 2D e 3D - Università degli Studi di Milano