ottimizzazione della scena: culling (decimazione)

22
1 Ottimizzazione della scena: culling (decimazione) Daniele Marini

Upload: angie

Post on 15-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

Ottimizzazione della scena: culling (decimazione). Daniele Marini. Tipi di decimazione. back face view frustum culling portali detail occlusion culling. Quando farlo. per un pieno controllo: nella applicazione - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ottimizzazione della scena: culling (decimazione)

1

Ottimizzazione della scena: culling (decimazione)

Daniele Marini

Page 2: Ottimizzazione della scena: culling (decimazione)

2

Tipi di decimazione

• back face

• view frustum culling

• portali

• detail

• occlusion culling

Page 3: Ottimizzazione della scena: culling (decimazione)

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)

4

La pipe line

Applic Geom Rast

Model and View

TransformLighting Projection Clipping

ScreenMapping

Page 5: Ottimizzazione della scena: culling (decimazione)

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)

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)

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)

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)

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)

10

b

f

L L

L L

front cone

back conea

n

Page 11: Ottimizzazione della scena: culling (decimazione)

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)

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)

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)

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)

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)

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)

17

eye

Page 18: Ottimizzazione della scena: culling (decimazione)

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)

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)

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)

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)

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