Ottimizzazione della scena: culling (decimazione)
description
Transcript of Ottimizzazione della scena: culling (decimazione)
![Page 1: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/1.jpg)
1
Ottimizzazione della scena: culling (decimazione)
Daniele Marini
![Page 2: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/2.jpg)
2
Tipi di decimazione
• back face
• view frustum culling
• portali
• detail
• occlusion culling
![Page 3: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/3.jpg)
3
Quando farlo
• per un pieno controllo: nella applicazione• si può anche sfruttare info contenute nel fram 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
![Page 4: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/4.jpg)
4
La pipe line
Applic Geom Rast
Model and View
TransformLighting Projection Clipping
ScreenMapping
![Page 5: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/5.jpg)
5
Riassunto coordinate Model and
ViewTransform
Lighting Projection ClippingScreen
Mapping
World Coord.3D
World Coord.4D (Omogenee)
Normalized DeviceCoord.
4D (Omogenee)
Window Coord.2D
(x’,y’) coordinate schermo+ coordinata z di profondità
mantenuta a parte
![Page 6: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/6.jpg)
6
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
![Page 7: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/7.jpg)
7
Back face culling
• si può eseguire prima nello stadio geometrico, lavorando nello spazio “vista”
• non cambia nienete dal punto di vista geometrico
• è meglio eseguirlo nello spazio schermo: errori di arrotondamento possono modificare lievemente l’orientamento di un poligono
![Page 8: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/8.jpg)
8
Back face culling OGL
• disponibile la funzione glCullFace• da chiamare dopo aver abilitato il culling con: glEnable
• OGL permette di riorientare le facce di un poliedro con glFrontFace(GL_CCW|GL_CW)
• considera orientato verso l’osservatore un poligono con i vertici in senso antirorario o orario rispettivamente
![Page 9: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/9.jpg)
9
Clustered Back face culling
• scarta un gruppo di poligoni dello stesso tipo (mseh, triangoli)
• si genera un normal cone racchiudendo tutte le normali ai vertici entro un cono troncato (per contenere tutti i vertici) di apertura (semiangolo del cono) vertice del cono orientato come l’osservatore in f (vertice del cono contro-orientato in b) osservatore in e
• il test è: n.((e-f)/||e-f||)≥cos()=sin()• si può fare il test con il cono contro-orientato
![Page 10: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/10.jpg)
10
b
f
L L
L L
front cone
back conea
n
![Page 11: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/11.jpg)
11
View frustum culling• valutare il BV rispetto al frustum di visione• se il BV è gerarchico anche il culling è gerarchico• le primitive interne a un BV devono essere
clippate• se esegue nella fase di applicazione (CPU) è
quindi molto efficiente• si può applicare anche a BSP tree per scenari
statici
![Page 12: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/12.jpg)
12
View frustum culling
• si sfrutta anche la coerenza tra frame: se un bV è esterno lo è probabilmente anche nel frame successivo– si memorizza un indice, al frame successivo si testano
per primi i BV con indice
• se i movimento 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
![Page 13: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/13.jpg)
13
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 frsutum viene aggiornato
![Page 14: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/14.jpg)
14
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
![Page 15: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/15.jpg)
15
Portali1. localizza la cella V dove si trova l’osservatore2. inzializza un BB P rettangolare pari alla finestra di
vista3. renderizza la geometria della cella V con view frustum
culling, definito da P e con vertice nell’osservatore4. 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
![Page 16: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/16.jpg)
16
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
![Page 17: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/17.jpg)
17
eye
![Page 18: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/18.jpg)
18
Dettagli (detail 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
![Page 19: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/19.jpg)
19
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
![Page 20: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/20.jpg)
20
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
![Page 21: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/21.jpg)
21
Occlusion cullingOR=emptyP=emptyfor each object g in G
if (isOccluded(g,OR)skip(g)elserender(g)add(g,P)if(largeEnough(P))
update(OR,P)P=emptyendend
end
![Page 22: Ottimizzazione della scena: culling (decimazione)](https://reader036.fdocuments.net/reader036/viewer/2022062309/568149e8550346895db711bc/html5/thumbnails/22.jpg)
22
Occlusion culling
• è costoso
• una buona strategia consiste nel creare una rappresentazione degli occlusori iniziale e aggiornarla frame per frame
• si può accelerare ordinando gli oggetti ssecondo la distanza