1 / 22

Ottimizzazione della scena: culling (decimazione)

Ottimizzazione della scena: culling (decimazione). Daniele Marini. Tipi di decimazione. back face view frustum culling portali detail occlusion culling. Quando farlo. per un pieno controllo: nella applicazione

angie
Download Presentation

Ottimizzazione della scena: culling (decimazione)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ottimizzazione della scena: culling (decimazione) Daniele Marini

  2. Tipi di decimazione • back face • view frustum culling • portali • detail • occlusion culling

  3. Quando farlo • per un pieno controllo: nella applicazione • si può anche sfruttare info contenute nel fram buffer e includerlo nella pipe line • il metodo ideale spedisce alla pipe line solo EVS exact visibility set, primitive parzialmente o totalmente visibili • complessità alta O(n2) • alternativa PVS potentially visible set, e deve comprendere EVS (conservativo), pena errori nelle immagini (approssimato) • sfrutta z-buffer per la visibilità finale

  4. La pipe line Applic Geom Rast Model and View Transform Lighting Projection Clipping Screen Mapping

  5. Riassunto coordinate Model and View Transform Lighting Projection Clipping Screen Mapping Normalized Device Coord. 4D (Omogenee) World Coord. 4D (Omogenee) Window Coord. 2D (x’,y’) coordinate schermo + coordinata z di profondità mantenuta a parte World Coord. 3D

  6. Back face culling • sono le facce autonascoste, orientate in senso opposto all’osservatore • si calcola la normale al poligono proiettato sul piano immagine: n=(v1-v0)x(v2-v0), vi vertici poligono; la normale ha la forma (0,0,a) o (0,0,-a) con a>0; se asse z punta verso lo schermo (0,0,a) indica un poligono orientato verso l’osservatore • il risparmio consiste nell’evitare la scan conversione dei poligoni esclusi • accresce la complessità nella fase di geometria

  7. Back face culling • si può eseguire prima nello stadio geometrico, lavorando nello spazio “vista” • non cambia nienete dal punto di vista geometrico • è meglio eseguirlo nello spazio schermo: errori di arrotondamento possono modificare lievemente l’orientamento di un poligono

  8. Back face culling OGL • disponibile la funzione glCullFace • da chiamare dopo aver abilitato il culling con: glEnable • OGL permette di riorientare le facce di un poliedro con glFrontFace(GL_CCW|GL_CW) • considera orientato verso l’osservatore un poligono con i vertici in senso antirorario o orario rispettivamente

  9. Clustered Back face culling • scarta un gruppo di poligoni dello stesso tipo (mseh, triangoli) • si genera un normal cone racchiudendo tutte le normali ai vertici entro un cono troncato (per contenere tutti i vertici) di apertura a (semiangolo del cono) vertice del cono orientato come l’osservatore in f (vertice del cono contro-orientato in b) osservatore in e • il test è: n.((e-f)/||e-f||)≥cos(p/2 -a)=sin(a) • si può fare il test con il cono contro-orientato

  10. n front cone p/2-a f L L b a L L a back cone

  11. View frustum culling • valutare il BV rispetto al frustum di visione • se il BV è gerarchico anche il culling è gerarchico • le primitive interne a un BV devono essere clippate • se esegue nella fase di applicazione (CPU) è quindi molto efficiente • si può applicare anche a BSP tree per scenari statici

  12. View frustum culling • si sfrutta anche la coerenza tra frame: se un bV è esterno lo è probabilmente anche nel frame successivo • si memorizza un indice, al frame successivo si testano per primi i BV con indice • se i movimento sono vincolati (traslazioni o rotazioni attorno un solo asse) al frame successivo il test può essere accelerato, memorizzando la distanza dal piano del frustum e aggiornandola

  13. Portali • adatto a scenari architettonici, una parete svolge un ruolo di occlusore • si considera un frustum limitato da finestre o porte • quando si attraversa una finestra o una porta il frsutum viene aggiornato

  14. Portali • si esegue un pre-processing suddividendo lo scenario in celle (una per ogni stanza o corridoio) • porte, finestre e pareti della cella formano la struttura dati • le celle si organizzano in un grafo di adiacenza per descrivere la topologia della scena

  15. Portali • localizza la cella V dove si trova l’osservatore • inzializza un BB P rettangolare pari alla finestra di vista • renderizza la geometria della cella V con view frustum culling, definito da P e con vertice nell’osservatore • ripeti ricorsivamente per le celle adiacenti seguendo il grafo di adiacenza; per ciascun portale della cella corrente proietta il portale sullo schermo e trova il rettangolo AABB della proiezione; calcola l’intersezione logica di P e del rettangolo AABB proiettato

  16. Portali 5. per ciascuna intersezione logica: se è vuota allora la cella adiacente non è visibile e si scarta, se non è vuota esegui il culling rispetto al frustum che va dall’osservatore al rettangolo proiettato dall’intersezione rettangolare 6. se l’intersezione logica non era vuota le celle adiacenti successive possono essere visibili e si ripete ricorsivamente da 3. con un nuovo P generato dalla intersezione precedente; ogni oggetto già esaminato va etichettato per evitare di ripassarci

  17. eye

  18. Dettagli (detail culling) • si stima l’area in pixel del BV sul piano di proiezione • se è sotto una soglia non si rende • quando l’osservatore è fermo viene disabilitato e si rende tutto • è simile a un LOD semplificato a due soli livelli

  19. Occlusion culling • evitare di rendere più volte oggetti che si occludono lavorando sempre sugli stessi pixel nello z-buffer (paesaggi, alberi, edifici, ...) • occlusion culling è simile a un test di ombra • molte soluzioni: spazio immagine, spazio oggetti, spazio raggi • altra classificazione: basati su un punto, basati su una cella

  20. Occlusion culling • richiede un test di visibilità, basato su ordinamento tra oggetti • G insieme di oggetti da rendere • OR insieme che rappresenta le occlusioni • P insieme di occlusori potenziali

  21. Occlusion culling OR=empty P=empty for each object g in G if (isOccluded(g,OR) skip(g) else render(g) add(g,P) if(largeEnough(P)) update(OR,P) P=empty end end end

  22. Occlusion culling • è costoso • una buona strategia consiste nel creare una rappresentazione degli occlusori iniziale e aggiornarla frame per frame • si può accelerare ordinando gli oggetti ssecondo la distanza

More Related