320 likes | 438 Views
Corso di Programmazione Grafica per il Tempo Reale. Ottimizzazione della scena. Daniele Marini. Esigenze del RT rendering. maggiori frame /sec risoluzione più alta oggetti più accurati e realistici. Limiti?. Dimensioni e risoluzioni di frame buffer e display crescono
E N D
Corso di Programmazione Grafica per il Tempo Reale Ottimizzazione della scena Daniele Marini
Esigenze del RT rendering • maggiori frame /sec • risoluzione più alta • oggetti più accurati e realistici PGTR aa 2010/2011
Limiti? • Dimensioni e risoluzioni di frame buffer e display crescono • complessità della scena cresce, ci sono modelli con 500 Mtriangoli o più • qualità del rendering cresce • quindi: occorre accelerare gli algoritmi PGTR aa 2010/2011
Escogitare strutture dati adeguate • il problema della accelerazione è determinato dalla complessità computazionale di un problema di ricerca: • trova gli elementi della scena che devono certamente venire visualizzati (oppure che non devono certamente venire visualizzati) • lo scopo è di ridurre il numero di elementi da esaminare e trasformare • organizzare la geometria in qualche spazio per accelerare il problema di ricerca, es: da O(n) a O(logn) PGTR aa 2010/2011
Soluzioni: strutture dati spaziali • tre tipi principali di strutture dati spaziali: • gerarchia di volumi di contenimento - bounding volume hierarchy BVH • alberi a partizione binaria dello spazio binary space partition trees BSP trees • alberi a otto rami octrees PGTR aa 2010/2011
Bounding Volumes • possono essere: • Sfere • Scatole (box) • AABB • OOBB • k-DOP • E’ la soluzione più comune PGTR aa 2010/2011
Bounding Volumes • La gerarchia di BV è organizzata ad albero, le foglie contengono l’effettiva geometria, nodi interni contengono puntatori a nodi figli o a nodi foglia • ogni nodo, incluse le foglie, comprende il BV della geometria contenuta • la radice ha un BV che contiene l’intera geometria della scena PGTR aa 2010/2011
click! • Vogliamo trovare l’oggetto cliccato • Test primala radice • Scendi ’albeero ricorsivamente • Termina quando possibile In generale: O(log n) invece di O(n) PGTR aa 2010/2011
Alberi di BV • in generale alberi a k figli, k-ary trees • è definito il concetto di livello: la radice ha livello 0, una foglia discendente dalla radice ha livello 1 etc. • un albero è bilanciato se tutti i nodi foglia sono al livello h • in un albero bilanciato il livello massimo è floor(logkn) con n numero totale nodi (interni e foglie) PGTR aa 2010/2011
Alberi di BV • un albero è pieno (full) se tutti i nodi foglia sono alla stessa altezza h (k è l’ordine dell’albero) • il numero totale di nodi di un albero pieno è: n=k0+k1+..+kh=(kh+1-1)/(k-1) • il numero delle foglie è: l=kh il numero dei nodi interni è: i=n-l • se l’albero è binario k=2 e n=2l-1=2*2h-1 • più elevato è k minore è l’altezza dell’albero, più rapido l’attraversamento • l’albero binario è il più semplice da trattare • si è verificato che l’efficienza maggiore si ottiene con alberi di ordine k=2 o k=4 o k=8 PGTR aa 2010/2011
Alberi BV • La costruzione di un albero con k=8 si fa semplicemente dividendo lo spazio lungo i tre assi principali • con alberi BV la ricerca di intersezioni è ricorsiva dalla radice; se un raggio non interseca un BV non interseca neppure la geometria contenuta, e la ricerca nel sottoalbero può terminare • Nel caso di scene dinamiche la gerarchia BV deve venire aggiornata: se il volume è spostato si controlla se appartiene ancora allo stesso BV, altrimenti si rimuove il volume e si ricomputa il padre, risalendo se necessario la gerarchia fino alla radice • Per computare un BV occorre trovare una scatola che racchiude in modo efficiente i volumi della scena. PGTR aa 2010/2011
BSP trees • due varianti principali: • allineati agli assi axis aligned (aa) • allineati ai poligoni polygon aligned (pa) • si crea un BSP tree bisecando ricorsivamente lo spazio con piani • un vantaggio è che se l’albero è percorso in modo opportuno, il contenuto geometrico dell’albero può venire ordinato secondo qualunque punto di vista (approssimato con AA esatto con PA ) • questo non è possibile con alberi BV PGTR aa 2010/2011
AA BSP trees • l’intera scena viene racchiusa in un AABB • la scatola viene suddivisa ricorsivamente con piani allineati alle facce del AABB • i piani possono essere scelti in modo: • dividere il volume esattamente a metà • mettere nei sottovolumi circa la metà della geometria • la ricorsione termina quando si giunge a una soglia • può essere l’altezza massima dell’albero • oppure il numero di primitive contenuto in un sottospazio è inferiore a una soglia PGTR aa 2010/2011
Trova box minima Trova box minima x + lungo Taglia lungo asse + lungo Suddividere sull’asse più lungo PGTR aa 2010/2011
AA BSP trees • la strategia nella ricorsione può essere: • ciclare a turno con piani orientati con gli assi: k-d trees • si incomincia dividendo lungo x, poi i figli vengono suddivisi lungo y e i nipoti lungo z, e si ripete il ciclo • trovare il lato massimo del volume e suddividerlo • in tal caso per avere un albero bilanciato bisogna dividere in modo che i due semispazi abbiano circa lo stesso numero di primitive, ma questo ha un costo PGTR aa 2010/2011
AA BSP trees • come è ordinata approssimatamente la geometria secondo il punto di vista? • sia N il nodo in esame • N diviene la radice da cui continua l’esplorazione dell’albero • l’attraversamento dell’albero prosegue nel semispazio in cui si trova il punto di vista • l’attraversamento di questo semispazio termina quando qualche BV è dietro l’osservatore (il piano near) • Si affronta poi l’attraversamento dell’altro semispazio • L’attraversamento produce un ordinamento vicino-lontano degli oggetti PGTR aa 2010/2011
PA BSP trees • si sceglie un poligono come luogo di divisione dello spazio (il piano del poligono è il piano di divisione) • ogni poligono intersecato dal piano di divisione viene suddiviso un due sotto poligoni • ricorsivamente in ciascun semispazio si sceglie un nuovo poligono che definisce il nuovo piano di divisione PGTR aa 2010/2011
PA BSP trees • il processo termina quando tutti i poligoni sono stati esaminati • è costoso, in genere si usa per scenari statici e viene pre-computato • si cerca di creare alberi bilanciati, scegliendo poligoni che dividono circa a metà il sottospazio PGTR aa 2010/2011
PA BSP trees • strategia di scelta bilanciata: • si sceglie a caso un numero di candidati • oppure si sceglie quello il cui piano suddivide meno poligoni • è stato dimostrato che in una scena con 1000 poligoni, 5 poligoni scelti a caso bastano per creare un albero bilanciato PGTR aa 2010/2011
PA BSP trees • ordinamento secondo il punto di vista • dato il punto di vista l’albero può essere attraversato in ordine secondo la direzione di vista, dal più lontano al più vicino • si determina da che parte si trova il punto di vista rispetto al nodo corrente (radice corrente) • i poligoni nell’altro semispazio sono dietro l’osservatore • si cerca ricorsivamente nel semispazio visibile un nuovo piano che è più vicino al punto di vista • si crea un ordinamento di poligoni dal più vicino al più lontano adatti a un algoritmo del pittore (non si usa lo z-buffer) PGTR aa 2010/2011
F A C B C G A B D E F G D E Ordinamento di occlusione (non di distanza): G C F A E B D PGTR aa 2010/2011
Octrees • simile a un AA BSP tree • suddivisione uniforme dello spazio: il punto di divisione in tre piani ortogonali è sempre al centro del sottospazio • gli oggetti sono sempre nei nodi foglia (criterio di terminazione) • si tratta come AA BSP tree PGTR aa 2010/2011
Scene graph • Anche i grafi di scena possono essere usati per organizzare lo spazio • oltre alla geometria possono registrare informazioni per il rendering e trasformazioni • può essere organizzato ad albero • i nodi possono avere associato anche un BV • i nodi possono avere associato un intero albero di qualunque tipo (organizzazione gerarchica di scene complesse con oggetti in movimento anche gerarchici: le trasformazioni sono nei nodi!) PGTR aa 2010/2011
Livelli di dettaglio LOD • usare versioni semplificate di un modello in funzione della distanza di osservazione • spesso con LOD si usa effetto fog per mascherare i minori dettagli • tre parti: • generazione dei LOD • scelta del LOD • switching tra LOD PGTR aa 2010/2011
Livelli di dettaglio LOD • la generazione dei modelli LOD avviene in fase di modellazione o in modo manuale o automatico con algoritmi di semplificazione • la selezione del LOD avviene stimando l’area di schermo utilizzata, fissando soglie • si sfruttano anche criteri di percezione visiva PGTR aa 2010/2011
Livelli di dettaglio LOD • lo switching può provocare effetti di popping • diverse tecniche: • a geometria discreta, • blending, • alpha • CLOD e geomorphing PGTR aa 2010/2011
Livelli di dettaglio LOD • geometria discreta • si usano modelli a dettaglio differente e distinti • quando necessario avviene lo switching • manifesta effetti di popping PGTR aa 2010/2011
Livelli di dettaglio LOD • blending • si può interpolare geometricamente tra i due modelli ottenendo un blending • è costoso, si fa il rendering di due oggetti invece che di uno solo • avviene solo per alcuni oggetti quindi il costo può essere accettabile • ci sono problemi per l’ordine con cui gli oggetti vengono trattati nello z-buffer (artefatti) • un modo per passare da LOD1 a LOD2 riducendo l’effetto popping è di usare alpha buffer facendo crescere la visibilità di LOD2 e decrescere quella di LOD1 PGTR aa 2010/2011
Livelli di dettaglio LOD • alpha • gli oggetti sono tutti allo stesso LOD • in funzione dell’area schermo utilizzata si controlla la trasparenza dell’oggetto: al crescere della distanza e al ridursi del numero di pixel coinvolti, la trasparenza dell’oggetto cresce (operando su alpha buffer) fino a scomparire • dà luogo a un effetto gradevole e molto continuo, senza artefatti; • accelerazione effettiva nel rendering si ha solo quando l’oggetto scompare (sotto la soglia di visibilità fissata) PGTR aa 2010/2011
Livelli di dettaglio LOD • CLOD (continuous level of detail CLOD) • la semplificazione che si usa per generare diversi LOD viene sfruttata animando il processo di semplificazione stesso • si anima il collasso di ogni edge • se i valori intermedi vengono salvati il processo si può invertire (vertex split) • richiede una precisa definizione del numero di poligoni di ciascun livello PGTR aa 2010/2011
Livelli di dettaglio LOD • geomorph • si crea l’insieme dei modelli a diversi LOD conservando la connettività tra i vertici • al cambiare del LOD si sfrutta la connettività per animare la trasformazione per interpolazione • alla fine della trasformazione si opera solo sul nuovo LOD • l’interpolazione ha un costo • gli oggetti sono in continua trasformazione (con le texture questo è fastidioso) PGTR aa 2010/2011