La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Culling e Sorting Corso Elementi di Grafica Digitale Giancarlo Todone.

Presentazioni simili


Presentazione sul tema: "Culling e Sorting Corso Elementi di Grafica Digitale Giancarlo Todone."— Transcript della presentazione:

1 Culling e Sorting Corso Elementi di Grafica Digitale Giancarlo Todone

2 Tabella dei contenuti Sorting Sorting –Painters –Z-Buffer –BSPTree Culling Culling –Backface –Frustum –Occlusion –PVS Color coding Color coding Tecniche miste Tecniche miste –Portal Rendering –BubbleTree Legenda: Verde: metodo naive Rosso: tecnica avanzata AB: B utilizza A AB: B può utilizzare A AB: tecniche integrate [nel disegnare]

3 Introduzione Una moderna pipeline grafica agisce nel seguente modo: Una moderna pipeline grafica agisce nel seguente modo: La cosiddetta zuppa di poligoni viene preparata dal software e fornita al processore vertici Le geometrie trasformate vengono rasterizzate passando quindi da una rappresentazione interna vettoriale 3D ad una rappresentazione casellare 2D Il processore frammenti ha lultima parola su come le caselle verranno scritte nel framebuffer

4 Introduzione

5 Introduzione Quasi tutti gli algoritmi che vedremo operano sul polygon soup, prima che la geometria venga data in pasto alla pipeline, e quindi non dipendono dallhardware grafico. Quasi tutti gli algoritmi che vedremo operano sul polygon soup, prima che la geometria venga data in pasto alla pipeline, e quindi non dipendono dallhardware grafico.

6 Sorting: una definizione Il sorting è loperazione di ordinamento o categorizzazione su un set di dati Il sorting è loperazione di ordinamento o categorizzazione su un set di dati Nel campo della grafica per sorting si intende la sola operazione di ordinamento su un set di entità grafiche al fine della loro corretta visualizzazione Nel campo della grafica per sorting si intende la sola operazione di ordinamento su un set di entità grafiche al fine della loro corretta visualizzazione Il culling è categorizzazione delle entità tra quelle da considerare e quelle da ignorare Il culling è categorizzazione delle entità tra quelle da considerare e quelle da ignorare

7 Sorting e Culling Il sorting è necessario per rappresentare correttamente su uno schermo bidimensionale una scena 3D Il sorting è necessario per rappresentare correttamente su uno schermo bidimensionale una scena 3D Il culling aiuta semplicemente a snellire il lavoro eliminando a priori entità grafiche che sarà inutile ordinare/trasformare/rasterizzare/… Il culling aiuta semplicemente a snellire il lavoro eliminando a priori entità grafiche che sarà inutile ordinare/trasformare/rasterizzare/…

8 Entità grafiche Mondo Mondo Aree Aree Oggetti Oggetti Poligoni Poligoni Punti Punti } gerarchia

9 Lalgoritmo del pittore

10 Disegnare poligoni dal più lontano al più vicino in modo che i più vicini coprano i più lontani Disegnare poligoni dal più lontano al più vicino in modo che i più vicini coprano i più lontani

11 Lalgoritmo del pittore Dispendioso: costringe a trasformare e rasterizzare comunque tutta la geometria della scena Dispendioso: costringe a trasformare e rasterizzare comunque tutta la geometria della scena In molti casi (quasi sempre) non funziona correttamente poiché opera su poligoni interi ordinandoli secondo la distanza di uno soltanto dei loro punti dal punto di vista In molti casi (quasi sempre) non funziona correttamente poiché opera su poligoni interi ordinandoli secondo la distanza di uno soltanto dei loro punti dal punto di vista Se non fallisce per il punto precedente, riesce a disegnare correttamente superfici trasparenti Se non fallisce per il punto precedente, riesce a disegnare correttamente superfici trasparenti

12 Z buffer

13 Z Buffer Non opera ordinamento sulla geometria Non opera ordinamento sulla geometria –Per ogni punto di ogni poligono esaminato, in fase di rasterizzazione viene fatto il depht-test (considero la coordinata Z del punto che devo scrivere in [X,Y]) –Se la coordinata Z del punto è minore del valore alle coordinate [X,Y] nello Z-buffer scrivo il colore del punto nel display buffer e il valore Z nello Z-buffer, in entrambi i casi alle coordinate [X,Y] –Altrimenti scarto il punto

14 Z buffer Z=1 Z=2 Z=4 Z=3

15 Se provo a disegnare un punto più lontano sopra uno più vicino, il depht-test fallisce e la scena rimane invariata Se provo a disegnare un punto più lontano sopra uno più vicino, il depht-test fallisce e la scena rimane invariata

16 Z buffer Display buffer Z buffer

17 Permette di fondere in tempo reale immagini già renderizzate Permette di fondere in tempo reale immagini già renderizzate Costringe a trasformare e rasterizzare tutta la scena prima di scartare dei punti poiché opera su raster Costringe a trasformare e rasterizzare tutta la scena prima di scartare dei punti poiché opera su raster Non permette di disegnare correttamente superfici trasparenti Non permette di disegnare correttamente superfici trasparenti

18 BSP Tree

19 BSP: Binary Space Partition Tree Opera in due tempi: Opera in due tempi: –Il preprocessore trasforma una zuppa di poligoni non ordinabile in un set di poligoni ordinabile e strutturato, non coincidente ma geometricamente equivalente a quello originario –A run-time il motore attraversa la struttura di dati in modo da esaminarla in opportuno ordine a seconda del punto di vista

20 BSP – algoritmo di preprocessamento Ripetere: Scegliere un poligono candidato nel gruppo in esame (inizialmente lintero set di poligoni) Scegliere un poligono candidato nel gruppo in esame (inizialmente lintero set di poligoni) Dividere il gruppo dei poligoni rimanenti in poligoni che stannosopra e sotto al piano di appartenenza del candidato Dividere il gruppo dei poligoni rimanenti in poligoni che stannosopra e sotto al piano di appartenenza del candidato I poligoni che vengono tagliati dal piano vengono suddivisi in più poligoni in modo che ognuno possa essere inserito in uno dei due insiemi sopraccitati I poligoni che vengono tagliati dal piano vengono suddivisi in più poligoni in modo che ognuno possa essere inserito in uno dei due insiemi sopraccitati Per ognuno dei due insiemi si ripete loperazione di selezione del candidato ecc… Per ognuno dei due insiemi si ripete loperazione di selezione del candidato ecc… Finché ogni insieme contiene uno o nessun poligono

21 BSP – algoritmo di preprocessamento Scelgo un candidato Suddivido nei due gruppi A (root) Taglio i poligoni di posizione ambigua (e assegno i brandelli ai rispettivi gruppi) sopra sotto soprasotto Itero il procedimento sul gruppo sotto senza considerare il sottogruppo sopra B A B Scelgo nuovamente un candidato per il sottogruppo e lo segno a sinistra come root del sottogruppo sotto sopra sotto C D CD Suddivido nuovamente in sopra e sotto il sottogruppo (e segno nellalbero perché non posso iterare nuovamente) Idem per i restanti sottogruppi (in questo caso solo sopra) E F G E FG

22 BSP – Attraversamento a run-time Considero per primo il poligono root: Considero per primo il poligono root: Il punto di vista è sopra o sotto al poligono in esame? Il punto di vista è sopra o sotto al poligono in esame? Se sopra, allora considero il figlio sotto, poi disegno il poligono in esame, poi considero il figlio sopra Se sopra, allora considero il figlio sotto, poi disegno il poligono in esame, poi considero il figlio sopra Altrimenti, al contrario, considero davanti - disegno poligono in esame – considero dietro Altrimenti, al contrario, considero davanti - disegno poligono in esame – considero dietro

23 A (root) B CD E FG Test: il POV sta sopra o sotto A? SOTTO A Considero prima il sopra: B C D E F G La sequenza è: sopra – A - sotto Il punto di vista è SOPRA E La sottosequenza è: sotto – E - sopra F – E - G F – E – G – A - sotto Analogamente per il sotto: C - B - D F – E – G – A – C – B – D

24 A (root) B CD E FG F – E – G – A – C – B – D Ricapitolando 1 A B C D E F G

25 BSP: Binary Space Partition Tree Opera in precalcolo facendo a compile-time le operazioni più pesanti Opera in precalcolo facendo a compile-time le operazioni più pesanti Opera sulla geometria: non occorre trasformarla/rasterizzarla/… per considerarne unentità Opera sulla geometria: non occorre trasformarla/rasterizzarla/… per considerarne unentità Produce un albero binario: alla geometria strutturata si può applicare la matematica degli alberi binari Produce un albero binario: alla geometria strutturata si può applicare la matematica degli alberi binari Può venire usato per risolvere molti altri problemi (culling, collision detection/response, ray casting, ray tracing …) Può venire usato per risolvere molti altri problemi (culling, collision detection/response, ray casting, ray tracing …) Permette di disegnare correttamente le superfici trasparenti (sotto certe restrizioni) Permette di disegnare correttamente le superfici trasparenti (sotto certe restrizioni) La sua efficacia dipende del tutto dal meccanismo di selezione dei candidati in fase di costruzione dellalbero La sua efficacia dipende del tutto dal meccanismo di selezione dei candidati in fase di costruzione dellalbero

26 BSP – Casi degeneri e bilanciamento A B C D A B C D x x x x x

27 BSP – usi non grafici Esempio: collision detection con una sfera Normalmente: dovremmo effettuare il test di collisione tra un oggetto e ogni altro poligono del mondo Col BSP: effettuare il test [sfera – poligono root del mondo] effettuare il test [sfera – poligono root del mondo] Se la sfera sta tutta sopra al root, ignoro il sotto e viceversa, altrimenti continuo su entrambi i rami Se la sfera sta tutta sopra al root, ignoro il sotto e viceversa, altrimenti continuo su entrambi i rami Continuo analogamente coi parent dei sottogruppi non ignorati Continuo analogamente coi parent dei sottogruppi non ignorati

28 Culling

29 Culling – metodi naive Frustum Culling: se tutti i punti di un poligono stanno fuori dal FOV, possiamo ignorare il poligono perché invisibile Frustum Culling: se tutti i punti di un poligono stanno fuori dal FOV, possiamo ignorare il poligono perché invisibile

30 Culling Non incide sulla qualità del rendering Non incide sulla qualità del rendering Aiuta ad effettuare il rendering più velocemente evitando di considerare (trasformare, texturizzare, …) poligoni non visibili Aiuta ad effettuare il rendering più velocemente evitando di considerare (trasformare, texturizzare, …) poligoni non visibili Necessario per la grafica realtime in scene complesse Necessario per la grafica realtime in scene complesse Si divide fondamentalmente in: Algoritmi per ridurre il disegno di poligoni fuori dal FOV (Field Of View, campo visivo) Algoritmi per ridurre il disegno di poligoni fuori dal FOV (Field Of View, campo visivo) Algoritmi per ridurre loverdraw (leffetto pittore, il disegnare poligoni che verranno sovrascritti completamente) Algoritmi per ridurre loverdraw (leffetto pittore, il disegnare poligoni che verranno sovrascritti completamente)

31 Culling – metodi naive Backface Culling: se il volume degli tridimensionali è completamente contenuto in una superficie chiusa, è impossibile vedere la superficie da dentro -> se il prodotto vettoriale della normale di un poligono con il vettore di puntamento della telecamera è negativo possiamo ignorare il poligono perché invisibile Backface Culling: se il volume degli tridimensionali è completamente contenuto in una superficie chiusa, è impossibile vedere la superficie da dentro -> se il prodotto vettoriale della normale di un poligono con il vettore di puntamento della telecamera è negativo possiamo ignorare il poligono perché invisibile

32 Occlusion Culling Meccanismo di selezione dei poligoni che con tutta probabilità occuperanno la maggiore area dello schermo una volta renderizzata la scena Meccanismo di selezione dei poligoni che con tutta probabilità occuperanno la maggiore area dello schermo una volta renderizzata la scena Una volta scelti gli oggetti/poligoni che fungono da occluders, la loro estrusione allinfinito crea un volume dombra Una volta scelti gli oggetti/poligoni che fungono da occluders, la loro estrusione allinfinito crea un volume dombra Se un oggetto/poligono risiede allinterno di un volume, esso non viene considerato nella fase di rendering Se un oggetto/poligono risiede allinterno di un volume, esso non viene considerato nella fase di rendering

33 Occlusion Culling – generazione dei volumi dombra Tenere un in-memory database che associa segmenti a poligoni Tenere un in-memory database che associa segmenti a poligoni Marcare tutti quei segmenti che potrebbero essere spigoli (se langolo tra i versori dei poligoni che lo condividono è maggiore di 0) Marcare tutti quei segmenti che potrebbero essere spigoli (se langolo tra i versori dei poligoni che lo condividono è maggiore di 0) A runtime marcare tutti i segmenti potenzialmente di silouette quando si disegna il poligono come front-facing A runtime marcare tutti i segmenti potenzialmente di silouette quando si disegna il poligono come front-facing A runtime marcare tutti i segmenti potenzialmente di silouette quando si disegna il poligono come back-facing A runtime marcare tutti i segmenti potenzialmente di silouette quando si disegna il poligono come back-facing Tutti i segmenti che sono marcati in entrambi i modi, sono poligoni di silouette e basta estrudere la curva chiusa che essi descrivono per ottenere un volume dombra Tutti i segmenti che sono marcati in entrambi i modi, sono poligoni di silouette e basta estrudere la curva chiusa che essi descrivono per ottenere un volume dombra [stessa tecnica che per le stencil shadows…] [stessa tecnica che per le stencil shadows…] front back

34 Occlusion Culling Algoritmo runtime (niente precalcolo qui) Algoritmo runtime (niente precalcolo qui) Moooooolto time-consuming Moooooolto time-consuming Conviene solo se la scena è davvero molto pesante e complessa (è da considerarsi il fatto che non è semplice scegliere dei buoni occlusori) Conviene solo se la scena è davvero molto pesante e complessa (è da considerarsi il fatto che non è semplice scegliere dei buoni occlusori) Può essere aiutato con alcune estensioni hardware openGL (scarsamente usate nella pratica) Può essere aiutato con alcune estensioni hardware openGL (scarsamente usate nella pratica)

35 PVS (Potentially Visible Sets)

36 Culling - PVS PVS: Potentially Visible Sets Suddividere il mondo in aree Suddividere il mondo in aree Stabilire legame di appartenenza tra le aree e i poligoni contenuti in esse Stabilire legame di appartenenza tra le aree e i poligoni contenuti in esse Per ogni area segnare quali altre aree sono visibili in delle lookup tables Per ogni area segnare quali altre aree sono visibili in delle lookup tables Rendering offline per creare le LUT Rendering offline per creare le LUT

37 Color Coding Spegnere il lighting Spegnere il lighting Renderizzare la scena assegnando ad ogni poligono un colore (piatto) diverso Renderizzare la scena assegnando ad ogni poligono un colore (piatto) diverso Per vedere se è presente un certo poligono controllo nella schermata se trovo un certo colore Per vedere se è presente un certo poligono controllo nella schermata se trovo un certo colore

38 Color Coding Performances davvero notevoli grazie allutilizzo dellhardware grafico Performances davvero notevoli grazie allutilizzo dellhardware grafico > > Tom Nuydens

39 Color Coding -Idea: Renderizzare più volte la stessa scena Renderizzare più volte la stessa scena In un fotogramma si renderizza la parte bassa (in bit) del codice-colore e nelle altre via via i bit in eccedenza dal passaggio precedente In un fotogramma si renderizza la parte bassa (in bit) del codice-colore e nelle altre via via i bit in eccedenza dal passaggio precedente -In ogni caso il problema non dovrebbe più sussistere in seguito allintroduzione dellestensione FBO (FrameBuffer Object) per il rendering offscreen

40 Portal Rendering

41 Portal rendering Dividere il mondo da renderizzare in settori Dividere il mondo da renderizzare in settori Connettere i settori con dei portali Connettere i settori con dei portali

42 Portal Rendering Ogni volta che devo renderizzare una scena, parto dal settore in cui si trova il POV Ogni volta che devo renderizzare una scena, parto dal settore in cui si trova il POV Se nel mio FOV trovo un portale, alla fine del rendering corrente dovrò processare il settore cui esso conduce Se nel mio FOV trovo un portale, alla fine del rendering corrente dovrò processare il settore cui esso conduce POV FOV portale settore

43 Portal Rendering Quando devo considerare un settore che non è il mio, devo fare il clipping intorno a TUTTO il portale Quando devo considerare un settore che non è il mio, devo fare il clipping intorno a TUTTO il portale Materialmente, prima di disegnare il settore più lontano, disegno il portale che vi conduce nello stencil-buffer Materialmente, prima di disegnare il settore più lontano, disegno il portale che vi conduce nello stencil-buffer Causa comunque molto overdraw Causa comunque molto overdraw

44 Portal Rendering - Clipping

45 Portal rendering - PVS Ad ogni settore associamo la lista dei settori potenzialmente visibili (la reale visibilità dipende dalla posizione del POV nel settore) Ad ogni settore associamo la lista dei settori potenzialmente visibili (la reale visibilità dipende dalla posizione del POV nel settore) Lintero processo avviene in precalcolo Lintero processo avviene in precalcolo A runtime consultiamo le tabelle di precalcolo per scartare a priori i settori MAI visibili dal settore in cui si trova il POV A runtime consultiamo le tabelle di precalcolo per scartare a priori i settori MAI visibili dal settore in cui si trova il POV Rimane presente un po di overdraw Rimane presente un po di overdraw

46 BubbleTree

47 BubbleTree Estensione dellalgoritmo BSP: Per ogni poligono dellalbero, specifico anche il baricentro e il raggio della minima sfera che contiene Per ogni poligono dellalbero, specifico anche il baricentro e il raggio della minima sfera che contiene –il poligono stesso –tutto il sotto-mondo sopra (fino alle foglie) –tutto il sotto-mondo sotto (fino alle foglie)

48 BubbleTree

49 BubbleTree In fase di attraversamento dellalbero a scopo di rendering, se una sfera sta completamente al di fuori del frustum posso scartarla interamente (early-stop) In fase di attraversamento dellalbero a scopo di rendering, se una sfera sta completamente al di fuori del frustum posso scartarla interamente (early-stop) Riduce di molto il tempo di rendering di una scena Riduce di molto il tempo di rendering di una scena Si può estendere in molti modi interessanti (posso occludere una intera sfera e il suo sottomondo, posso fare la collision detection prima sulle sfere e poi in caso di collisione tra di esse approfondire lanalisi della collisione sui poligoni, …) Si può estendere in molti modi interessanti (posso occludere una intera sfera e il suo sottomondo, posso fare la collision detection prima sulle sfere e poi in caso di collisione tra di esse approfondire lanalisi della collisione sui poligoni, …) Lalbero deve essere costruito in un certo modo (cioè -> ogni poligono candidato deve essere scelto in maniera da favorire la localizzazione spaziale dei suoi sottomondi) Lalbero deve essere costruito in un certo modo (cioè -> ogni poligono candidato deve essere scelto in maniera da favorire la localizzazione spaziale dei suoi sottomondi)

50 Bibliografia Tutte le informazioni sono disponibili in rete (per apprenderle ci si mette un po e si girano moooolti siti) Sito utilissimo per cominciare è (nonostante il nome, la parte algoritmica non viene spiegata in alcun linguaggio specifico) Sito utile che purtroppo ha chiuso (ma se ne trovano copie-cache in giro per la rete) è Tutte le immagini ( tranne e ) e i testi a cura di Giancarlo Todone


Scaricare ppt "Culling e Sorting Corso Elementi di Grafica Digitale Giancarlo Todone."

Presentazioni simili


Annunci Google