Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Culling e Sorting Giancarlo Todone
Corso “Elementi di Grafica Digitale”
2
Tabella dei contenuti Sorting Culling Tecniche miste Legenda:
Painter’s Z-Buffer BSPTree Culling Backface Frustum Occlusion PVS Color coding Tecniche miste Portal Rendering BubbleTree [nel disegnare] Legenda: Verde: metodo naive Rosso: tecnica avanzata A B: B utilizza A A B: B può utilizzare A A B: tecniche integrate
3
Introduzione 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 l’ultima 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 dall’hardware grafico.
6
Sorting: una definizione
Il sorting è l’operazione 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 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 culling aiuta semplicemente a snellire il lavoro eliminando a priori entità grafiche che sarà inutile ordinare/trasformare/rasterizzare/…
8
Entità grafiche } Mondo Aree Oggetti gerarchia Poligoni Punti
9
L’algoritmo del pittore
10
L’algoritmo del pittore
Disegnare poligoni dal più lontano al più vicino in modo che i più vicini coprano i più lontani
11
L’algoritmo del pittore
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 Se non fallisce per il punto precedente, riesce a disegnare correttamente superfici trasparenti
12
Z buffer
13
Z Buffer 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=4 Z=2 Z=3
15
Z buffer 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
Z buffer 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 Non permette di disegnare correttamente superfici trasparenti
18
BSP Tree
19
BSP: Binary Space Partition Tree
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 l’intero set di poligoni) Dividere il gruppo dei poligoni rimanenti in poligoni che stanno “sopra” 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 Per ognuno dei due insiemi si ripete l’operazione di selezione del candidato ecc… Finché ogni insieme contiene uno o nessun poligono
21
BSP – algoritmo di preprocessamento
sopra A (root) sotto sopra G D E B E sopra A C D F G B F sotto C sotto Scelgo nuovamente un candidato per il sottogruppo e lo segno a sinistra come root del sottogruppo “sotto” Idem per i restanti sottogruppi (in questo caso solo “sopra”) Suddivido nuovamente in sopra e sotto il sottogruppo (e segno nell’albero perché non posso iterare nuovamente) Taglio i poligoni di posizione ambigua (e assegno i “brandelli” ai rispettivi gruppi) Scelgo un candidato Itero il procedimento sul gruppo “sotto” senza considerare il sottogruppo “sopra” Suddivido nei due gruppi
22
BSP – Attraversamento a run-time
Considero per primo il poligono root: 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” Altrimenti, al contrario, considero davanti -disegno poligono in esame – considero dietro
23
Test: il POV sta sopra o sotto A? Analogamente per il sotto:
F – E – G – A - sotto F – E – G – A – C – B – D A (root) G D E B E A C D F G B F <-sotto sopra-> C Test: il POV sta sopra o sotto A? Analogamente per il sotto: La sottosequenza è: Il punto di vista è SOPRA E Considero prima il sopra: La sequenza è: sopra – A - sotto sotto – E - sopra F – E - G C - B - D SOTTO
24
Ricapitolando F – E – G – A – C – B – D A (root) G 3 D 7 E 2 B E A 4 C
6 F 1 C 5 Ricapitolando
25
BSP: Binary Space Partition Tree
Opera in “precalcolo” facendo a compile-time le operazioni più pesanti Opera sulla geometria: non occorre trasformarla/rasterizzarla/… per considerarne un’entità 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 …) 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 dell’albero
26
BSP – Casi degeneri e bilanciamento
x B D B x C C x D 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] 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
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
30
Culling Non incide sulla qualità del rendering
Aiuta ad effettuare il rendering più velocemente evitando di considerare (trasformare, texturizzare, …) poligoni non visibili 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 l’overdraw (l’effetto 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
32
Occlusion Culling 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 all’infinito crea un volume d’ombra Se un oggetto/poligono risiede all’interno di un volume, esso non viene considerato nella fase di rendering
33
Occlusion Culling – generazione dei volumi d’ombra
Tenere un in-memory database che associa segmenti a poligoni Marcare tutti quei segmenti che potrebbero essere spigoli (se l’angolo 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 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 d’ombra [stessa tecnica che per le stencil shadows…] front back
34
Occlusion Culling Algoritmo runtime (niente precalcolo qui)
Moooooolto time-consuming 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)
35
PVS (Potentially Visible Sets)
36
Culling - PVS PVS: Potentially Visible Sets
Suddividere il mondo in aree 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 Rendering offline per creare le LUT
37
Color Coding Spegnere il lighting
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
38
Color Coding Performances davvero notevoli grazie all’utilizzo dell’hardware grafico <<The color buffer isn't always 32 bit. 16 bit displays can seriously mess things up, because you can't guarantee that the color you specify will actually make it to the screen. This can be overcome with a few clever tricks though... (Exercise: find these clever tricks!) >> Tom Nuydens
39
Color Coding -Idea: 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 ogni caso il problema non dovrebbe più sussistere in seguito all’introduzione dell’estensione FBO (FrameBuffer Object) per il rendering offscreen
40
Portal Rendering
41
Portal rendering Dividere il mondo da renderizzare in settori
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 POV Se nel mio FOV trovo un portale, alla fine del rendering corrente dovrò processare il settore cui esso conduce FOV portale settore
43
Portal Rendering 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 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) L’intero 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 Rimane presente un po’ di overdraw
46
BubbleTree
47
BubbleTree Estensione dell’algoritmo BSP:
Per ogni poligono dell’albero, 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 dell’albero 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 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 l’analisi della collisione sui poligoni, …) L’albero 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.