Culling e Sorting Giancarlo Todone

Slides:



Advertisements
Presentazioni simili
Politecnico di Torino Tesi di Laurea
Advertisements

Ombre e riflessioni in tempo reale
Gestione della memoria centrale
Hard disk.
STRUMENTI DI PRESENTAZIONE
RB-alberi (Red-Black trees)
Alberi binari di ricerca
Prima Lezione: Costruire una mappa I tipi di informazione geografica disponibili Navigazione nella mappa Coordinate e scala Vista panoramica.
Terza Lezione: Capire l'informazione geografica I dati associati Selezionare elementi a partire dalla loro posizione e dal valore dei dati associati Personalizzare.
Seconda Lezione: Lavorare su una mappa Misurazioni Dati associati Salvare e riaprire un progetto Elementi decorativi.
Iterazione enumerativa (for)
Elementi di Matematica
La valutazione delle espressioni
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 05/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
Esame di Elementi di Grafica Digitale Prof. Matjaz Hmeljak Marco Bacer 12 gennaio 2009.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Lezione 7: rasterizzazione la fabbrica dei frammenti Università dellInsubria Facoltà di Scienze MFN - Varese Corso di Laurea.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 30 MMeditor e collision detection
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Analisi delle corrispondenze
Relatori: Emanuele e Denis Tornei Informatici. Introduzione In queste prime lezioni abbiamo affrontato linformatica procedendo a soluzioni di problemi,
DBMS ( Database Management System)
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
3DCarto.
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
corso DI GEOMETRIA DESCRITTIVA
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
14 giugno 2011 Rasterizzazione Prof. Roberto Pirrone.
Informatica Avanzata Trattamento di Foto e Immagini Digitali UNI3 - NICHELINO Lez. N Dicembre 2008 di Pautasso Luciano Lez.
Il Cerca – costellazioni
Determinazione delle superfici visibili
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Daniele Marini, Maurizio Rossi
Le ombre proiettate Daniele Marini.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Superfici nascoste Daniele Marini.
Costruire una tabella pivot che riepiloghi il totale del fatturato di ogni agente per categorie di vendita, mese per mese. Per inserire una tabella pivot.
1 Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini.
1 Ottimizzazione della scena Daniele Marini. 2 Esigenze del RT rendering maggiori frame /sec risoluzione più alta oggetti più accurati e realistici.
Ottimizzazione della scena Daniele Marini. Esigenze del RT rendering maggiori frame /sec risoluzione più alta oggetti più accurati e realistici 2 Programmazione.
1 Ottimizzazione della scena Daniele Marini. 2 Esigenze del RT rendering maggiori frame /sec risoluzione più alta oggetti più accurati e realistici.
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Ottimizzazione della scena Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
ALGORITMI a.
IO E LA MATEMATICA PROCEDURALE
Alberi CORDA – Informatica A. Ferrari Testi da
La ricorsione.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Clipping Antonio Cisternino Parte di queste slides sono a cura del Dott. Cignoni.
Costruzione di interfacce Paolo Cignoni
Analisi matematica Introduzione ai limiti
Autoresizing e autolayout. Posizionare gli elementi All’interno dello storyboard, gli elementi possono essere posizionati trascinandoli nella posizione.
1 SISTEMI INFORMATIVI TERRITORIALI LABORATORIO APPLICAZIONE di AUTODESK MAP 01 FOGLIO DI LAVORO – VETTORIALIZZAZIONE DI RASTER UNIVERSITA’ DEGLI STUDI.
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
Transcript della presentazione:

Culling e Sorting Giancarlo Todone Corso “Elementi di Grafica Digitale”

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

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

Introduzione

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.

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

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/…

Entità grafiche } Mondo Aree Oggetti gerarchia Poligoni Punti

L’algoritmo del pittore

L’algoritmo del pittore Disegnare poligoni dal più lontano al più vicino in modo che i più vicini coprano i più lontani

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

Z buffer

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

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

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

Z buffer Display buffer Z buffer

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

BSP Tree

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

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

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

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

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

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

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

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

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

Culling

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

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)

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

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

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

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)

PVS (Potentially Visible Sets)

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

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

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

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

Portal Rendering

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

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

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

Portal Rendering - Clipping

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

BubbleTree

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)

BubbleTree

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)

Bibliografia Tutte le informazioni sono disponibili in rete (per apprenderle ci si mette un po’ e si girano moooolti siti) Sito utilissimo per cominciare è www.delphi3d.net (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) è www.flipcode.com Tutte le immagini ( tranne e ) e i testi a cura di Giancarlo Todone