Determinazione delle superfici visibili

Slides:



Advertisements
Presentazioni simili
Cosa sono? Come si risolvono?
Advertisements

Algoritmi e Strutture Dati
Ombre e riflessioni in tempo reale
Elementi di Matematica
Grafica Raster La grafica in 2D con coordinate intere viene detta grafica raster. In questa parte tratteremo le operazioni fondamentali per disegnare su.
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.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl Capitolo 4 Ordinamento:
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 Lezione 8 Rasterizzazione
Algoritmi e Strutture Dati (Mod. B)
Introduzione alla programmazione ll
GEOMETRIA SOLIDA o STEREOMETRIA
Culling e Sorting Giancarlo Todone
Misurazione Le osservazioni si esprimono in forma di misurazioni
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
Grafico probabile di funzione
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
Smoothing Daniele Marini.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
14 giugno 2011 Rasterizzazione Prof. Roberto Pirrone.
4 aprile 2011 Modellazione Solida Prof. Roberto Pirrone.
Elementi di Informatica di base
11 ottobre 2012 Modelli a poligoni Roberto Pirrone.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Illuminamento e Shading
21 giugno 2011 Volume Rendering Prof. Roberto Pirrone.
Curve e superfici parametriche
SOLUZIONE GRAFICA DI DISEQUAZIONI DI SECONDO GRADO
Modelli di riflessione della luce
Effetti fotorealistici
Daniele Marini, Maurizio Rossi
Le ombre proiettate Daniele Marini.
1 Scan conversione di poligoni Daniele Marini. 2 Test interno-esterno Scan conversione di un poligono = decidere se pixel interno Test di intersezione:
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Corso Di Programmazione Grafica
Programmazione grafica 1
Superfici nascoste Daniele Marini.
Intersezioni e distanze
Corso di Programmazione Grafica e Laboratorio 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.
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2006/2007.
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.
Intersezioni e distanze Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
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.
1/11/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo –
Array (ordinamento) CORDA – Informatica A. Ferrari.
4 < 12 5 > −3 a < b a > b a ≤ b a ≥ b
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Rasterizzazione Antonio Cisternino
Clipping Antonio Cisternino Parte di queste slides sono a cura del Dott. Cignoni.
1 Smoothing Daniele Marini. 2 Calcoli sui vettori Vettore normale equazione del piano: ax+by+cz+d=0; si può anche scrivere come luogo: e p è un qualunque.
Campo Elettrico Definizione operativa di campo elettrico: Il vettore campo elettrico associato ad una determinata carica sorgente Q, posta in un.
LA RETTA NEL PIANO CARTESIANO
APPUNTI DI GEOMETRIA ANALITICA DELLA RETTA
IL PIANO CARTESIANO E LA RETTA
STATISTICA ASSISTITA Esercitazione dott.ssa Clelia Cascella.
Transcript della presentazione:

Determinazione delle superfici visibili 31 maggio 2011 Determinazione delle superfici visibili Prof. Roberto Pirrone

Sommario Generalità Preprocessing Algoritmi principali 31 maggio 2011 Generalità Tipologie di algoritmi DSV Preprocessing Confronto tra volumi includenti Back-face culling Algoritmi principali Roberts Z-buffer Depth sort BSP tree Scan-line Wieler-Atherton

Generalità 31 maggio 2011 Il processo di rendering di un’immagine sintetica è molto oneroso dal punto di vista computazionale. Risultano necessarie delle tecniche per ridurre quest’onere di calcolo. Gli algoritmi che svolgono quest’analisi vanno sotto il nome di tecniche di determinazione delle superfici (o delle linee) visibili (DSV), noti anche con la denominazione di eliminazione delle superfici (o delle linee) nascoste.

Generalità (2) 31 maggio 2011 Tali algoritmi consistono nell’eliminiazione di ciò che non è effettivamente visibile dall’osservatore. Trovano applicazione anche nella generazione delle ombre poiché per determinare un’ombra bisogna valutare quali siano le superfici visibili dal punto di vista della sorgente luminosa. Essi vengono applicati dopo il clipping ed assumendo una proiezione parallela, eventualmente avendo trasformato il volume di vista canonico prospettico in quello ortografico.

Tipi di algoritmi Algoritmi di tipo Tecniche di pre-elaborazione 31 maggio 2011 Algoritmi di tipo Image space/precision Object space/precision Tecniche di pre-elaborazione Confronto tra volumi includenti Back face culling

Confronto tra volumi includenti Si confrontano i minimi parallelepipedi o le minime sfere includenti per escludere oggetti totalmente invisibili. Possibilità di falsi positivi.

Back-face culling Si calcola prodotto scalare della normale uscente dal poligono con il versore dell’asse z negativo (0,0,-1): . Se questo prodotto è positivo, cioè se la normale Np ha componente z<0, allora il poligono non guarda verso l’osservatore e può essere scartato. l’algoritmo DSV si applicherà solo sui rimanenti.

Algoritmi DSV Algoritmi per la visibilità di linee (object space) 31 maggio 2011 Algoritmi per la visibilità di linee (object space) Algoritmo di Roberts Algoritmi per la visibilità di singoli pixel (image space) Z-buffer e suoi derivati Algoritmi basati sull’ordinamento di liste di poligoni (di tipo ibrido object/image space) Depth sort BSP tree Algoritmi di tipo scan line, di tipo image space che combinano la DSV con la scansione raster. Algoritmi a suddivisione di aree (object space o image space) si suddivide il piano di proiezione in aree sempre più piccole fino a quando si può determinare con esattezza la visibilità in ciascuna. Algoritmo di Wieler-Atherton.

Algoritmo di Roberts calcolo della cosiddetta “invisibilità quantitativa” dei lati di un poligono che è 0 per le linee visibili, cresce per ogni intersezione entrante con una linea di contorno che sia davanti al lato su cui ci si sta muovendo e decresce per ogni intersezione uscente. l’algoritmo utilizza il calcolo dell’intersezione tra il triangolo formato dagli estremi del segmento in considerazione e dal punto di vista con una qualunque linea di contorno per vedere se questa passa davanti o dietro al lato stesso.

Z-buffer 31 maggio 2011 L’algoritmo Z-buffer è, forse, l’approccio più usato per la DSV. E’ semplice, si può integrarlo con il processo di rendering, di calcolo delle ombre e di estenderlo con caratteristiche di anti-aliasing. Inoltre è possibile realizzarne una versione di tipo scan-line per ridurre la memoria utilizzata. lo Z-buffer consente di effettuare il rendering di nuovi oggetti nella scena senza dover ri-calcolare tutto dall’inizio.

Z-Buffer 31 maggio 2011 Si usano due buffer di dimensione pari all’immagine da visualizzare: il frame buffer F(x,y) che contiene il colore dei singoli pixel e lo Z-buffer o depth buffer Z(x,y) che contiene i valori di profondità di ogni punto proiettato sull’immagine. Se la z del punto appartenente al poligono in esame, che si proietta in (x’,y’), è maggiore (più vicina) di quella presente in Z(x’,y’) allora viene sostituita al valore di Z(x’,y’) ed il colore di quel punto viene scritto nel frame buffer in F(x’,y’).

Traccia dello Z-Buffer 31 maggio 2011 Ripeti per x che va da 1 a larghezza_immagine Ripeti per y che va da 1 a altezza_immagine F(x,y)=BACKGROUND Z(x,y)=-1 // profondità del back-plane del // volume di vista normalizzato Fine ripeti Ripeti per ogni poligono Ripeti per ogni punto p(x,y,z) proiettato in (x,y) Se z>Z(x,y) Z(x,y)=z F(x,y)=p

Calcolo di z(x,y) all’interno di un poligono 31 maggio 2011 Forma incrementale Interpolazione bilineare (usata anche nello shading)

Esempio di Z-Buffer 31 maggio 2011

Algoritmo Depth-Sort 31 maggio 2011 Ordina i poligoni per valori decrescenti di z // dal più vicino al più lontano Ripeti per ogni poligono p dall’ultimo al primo Ripeti per tutti i poligoni q precedenti Se l’estensione in x dei poligoni non si sovrappone Vai al prossimo poligono nella lista Altrimenti se l’estensione in y dei poligoni non si sovrappone Altrimenti se p si trova totalmente sul lato back-facing di q Altrimenti se q si trova totalmente sul lato front-facing di p Altrimenti se le proiezioni in (x,y) dei due poligoni non si sovrappongono Altrimenti // probabile occlusione Se q si trova totalmente sul lato back-facing di p OR p si trova totalmente sul lato front-facing di q scambia q e p Altrimenti Dividi q e p intersecandoli Ordina i nuovi poligoni nella lista Reinizializza la scansione della lista Fine ripeti

Algoritmo Depth-Sort 31 maggio 2011

Algoritmo BSP tree 31 maggio 2011 l’algoritmo BSP (Binary Space Partition) tree, crea un albero di partizioni dello spazio in coppie di semispazi front-facing e back-facing, rispetto alla normale ogni poligono della lista. A partire da un poligono radice, in ogni partizione sono raccolti i poligoni che si trovano interamente nei due semispazi, mentre quelli che sono intersecati dal piano cui appartiene il poligono radice vengono divisi in due. Il processo si ripete, scegliendo un nuovo poligono radice per ogni semispazio.

Esempio di BSP tree 31 maggio 2011

Algoritmo di visita del BSP tree 31 maggio 2011 Se il punto di vista è di fronte al poligono_radice Visita il sottoalbero back Mostra poligono_radice Visita il sottoalbero front Altrimenti

Algoritmo scan line 31 maggio 2011 l’algoritmo scan-line per la DSV possiede molte caratteristiche in comune con l’equivalente algoritmo per la scansione raster dei poligoni nel caso bidimensionale: la principale differenza è che viene gestita una lista di poligoni e non un singolo poligono. L’algoritmo impiega diverse strutture di dati: Tabella degli edge (ET) Tabella dei poligoni (PT) Tabela degli edge attivi (AET)

Algoritmo scan line 31 maggio 2011 La ET è un array di liste di lati di tutti i poligoni, indicizzata con la ymin (ordinata dell’estremo inferiore) di ognuno di essi. Ogni lato contiene: ID del poligono di appartenenza L’ascissa dell’estremo inferiore x(ymin) L’ordinata dell’estremo superiore ymax L’incremento ∆x=1/m per il tracciamento del lato in maniera incrementale: x(y + 1) = x (y) + 1/m La PT è una lista i cui elementi contengono: ID del poligono I coefficienti dellequazione del piano I parametri di shading del poligono o il suo colore unico Un flag booleano in, inizialmente posto a false, per indicare se la linea di scansione è interna al poligono

Edge table 31 maggio 2011

Tracciamento raster incrementale di una retta (DDA) 31 maggio 2011 Una retta sul raster può essere tracciata attraverso la sua equazione y=mx+q Le coordinte raster sono intere quindi: ynew=m(x+1) + q=mx + q + m=y + m Vale solo per |m|<=1 per cui ad ogni passo x si incrementa certamente di 1 Nel caso di |m|>1 è certo che y ad ogni passo si incrementa di 1 quindi: xnew=(y+1)/m - q/m=(y - q)/m + 1/m = x + 1/m

Algoritmo scan line 31 maggio 2011 Per ogni linea di scansione di quota yc, la AET è costruita dalla ET aggiungendo i lati tali che ymin<=yc e rimuovendo quelli per cui ymax<yc. Gli elementi della AET sono ordinati secondo x crescente L’algoritmo non tiene conto di poligoni che si intersecano: i poligoni vengono suddivisi lungo le loro intersezioni in modo da ottenere sempre poligoni tutti avanti o dietro gli altri ed utilizzare la coerenza della linea di scansione per ogni tratto che va da un lato allaltro di AET. Per il tracciamento da un lato all’altro di AET si usa il “colore” (colore solido, tessitura, shading, altra tecnica di rendering) del poligono a z massima tra tutti quelli che si proiettano nel pixel considerato

Traccia dell’algoritmo scan-line 31 maggio 2011 y=y0 //minima linea di scansione Ripeti finché AET==null e ET==null Inserisci gli elementi di ET(y) ordinatamente in AET Rimuovi ET(y) Ripeti per ogni elemento i di AET Se AET(i).ymax<y Rimuovi AET(i) Altrimenti Aggiorna AET(i).x= AET(i).x+ AET(i).∆x Fine ripeti PT(AET(i).ID).in=not(PT(AET(i).ID).in) Se PT(AET(i).ID).in==true AND z(PT(AET(i).ID),x,y) è la massima z di tutti i poligoni “in” Traccia la linea di scansione fino a AET(i+1).x-1 con il colore di PT(ID) Altrimenti Traccia la linea di scansione fino a AET(i+1).x-1 con il colore di PT(IDzmax) Y=y+1

Algoritmo scan line (3) 31 maggio 2011

Algoritmo di Wieler-Atherton 31 maggio 2011 L’algoritmo di Wieler-Atherton è un approccio basato sull’idea che si possa procedere per successive suddivisioni del piano di proiezione della scena, cercando di individuare delle regioni in cui si possa decidere, senza alcun dubbio, sulla visibilità o meno. Al contrario di altri approcci di tipo image space, come l’algoritmo di Warnock che suddivide il piano in quadranti sempre più piccoli, al più coincidenti con il singolo pixel, questa tecnica “ritaglia” le porzioni sovrapposte dei vari poligoni della scena.

Algoritmo di Wieler-Atherton 31 maggio 2011 Ogni poligono della lista, ordinata in senso crescente per massima z di ogni poligono, è utilizzato per effettuare il clipping di tutti gli altri. Tutte le porzioni ritagliate, cioè quelle la cui proiezione ricade all’interno della proiezione del poligono corrente, che si trovano dietro al poligono, sono certamente invisibili e vanno scartate.

Algoritmo di Wieler-Atherton 31 maggio 2011 Se ci sono porzioni ritagliate che stanno davanti, allora si effettua un’operazione in cui il poligono contenente la porzione ritagliata viene usato per fare il clipping del poligono corrente al fine di determinare la porzione visibile di quest’ultimo, cioè la sua porzione esterna rispetto al poligono di taglio. Questa operazione è, in genere, ricorsiva perché potrebbero esserci più porzioni ritagliate che stanno davanti al poligono corrente.

Algoritmo di Wieler-Atherton 31 maggio 2011 Alla fine sono disponibili tutte le porzioni visibili che ricadono nell’area del poligono corrente le quali vengono mostrate e si passa al successivo poligono della lista. Per effettuare il clipping si considerano sempre i poligoni originali e non le porzioni visibili.