Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione 6: culling: se c'e' ma non si vede!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 2/40 Se non si vede, che non ci sia CULLING –cioe': non perdiamo tempo a renderizzare ciò che non si vede –buttiamo via le primitive che non cambiano la scena o, che non la cambiano abbastanza –facciamolo il prima possibile! (nel pipeline) i tiangoli! (o segmenti, o punti...) chiaro?
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 3/40 Notazione Lo chiamiamo culling se si scartano primitive intere –o interi gruppi di primive Se una primitiva viene spezzata in una parte visibile e una no, lo chiamiamo clipping Se e' un frammento ad essere scartato, si tratta di testing per frammento quale ci fa piu' gola?
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 4/40 Notazione Lo chiamiamo culling se si scartano primitive intere –o interi gruppi di primive Se una primitiva viene spezzata in una parte visibile e una no, lo chiamiamo clipping Se e' un frammento ad essere scartato, si tratta di testing per frammento (principalmente) una ottimizzazione ! (principalmente) una necessità ! (principalmente) una necessità !
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 5/40 Metodologie di Culling Occlusion culling –non si vede... perchè coperto da qualcos'altro View-frustum culling –non si vede... perchè é fuori dal frustum di vista Backface culling –non si vede... perchè é la parte interna di una superficie chiusa Importance culling –(quasi) non si vede... perchè é la sua proiezione è troppo piccola rispetto alla scena
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 6/40 Tipi di culling Eseguiti dall'hardware –automatici –molto efficienti (overhead minuscolo) –ma scartano tardi, e una primitiva alla volta Eseguiti dall'applicazione (SW) –richiedono algoritmi e strutture dati –meno efficienti (overhead anche grandino) –ma scartano presto, e a gruppi quindi é chiaro che la scelta non é fra HW e SW, ma fra solo HW ed entrambi
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 7/40 Tipi di culling Conservativi –scartano solo se sono sicuri –piuttosto, rischiano di diesgnare anche cose che poi non si vedranno Non Conservativi –scartano seguendo un'euristica –rischiano di NON disegnare qualcosa che (in parte) era visibile! casomai, non succede nulla. Si è solo spercato un po di calcolo GPU se succede, si è creato un errore nel renering, cioè un...
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 8/40 Dicasi artefatto un difetto di rendering, –una discrepanza fra modello e immagine –o fra realtà e modello –tipicamente, piazzare sullo schermo un dettaglio che non c'era parentesi notazione parentesi notazione parentesi notazione..."artefatto"!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 9/40 Dicasi artefatto un difetto di rendering, –una discrepanza fra modello e immagine –o fra realtà e modello –tipicamente, piazzare sullo schermo un dettaglio che non c'era parentesi notazione parentesi notazione parentesi notazione..."artefatto"!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 10/40 Metodologie di Culling Occlusion culling –non si vede... perchè coperto da qualcos'altro View-frustum culling –non si vede... perchè é fuori dal frustum di vista Backface culling –non si vede... perchè é la parte interna di una superficie chiusa Importance culling –(quasi) non si vede... perchè é la sua proiezione è troppo piccola rispetto allo schermo
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 11/40 Backface Culling Concetto: –superficie di oggetto chiuso... –non vedro' mai l'interno –cioè non vedrò mai il "dietro delle faccie"
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 12/40 Concetto BASE di questo corso Vettore normale ortogonale ad un piano o ad un un poligono –Detto anche "vettore" normale –Detto anche NORMALE (al/del piano) In pratica: normale == orientamento Nota: a rigore di termini, vettore normale = vettore con norma 1 n ^
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 13/40 Come si trova la normale di un triangolo? Cioe' il suo orientamento nello spazio n ^ v0v0 v2v2 v1v1 facile! e' anche per questo che ci piacciono tanto i triangoli
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 14/40 Come si trova la normale di un triangolo? Traingolo front-facing Traingolo back-facing –"che ci da le spalle" n ^ v0v0 v2v2 v1v1 n ^ v0v0 v2v2 v1v1 view dir
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 15/40 (HW) Backface Culling: dove? frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice set- up
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 16/40 (HW) Backface Culling: quanto? frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice set- up scarto circa il 50% delle faccie... Lo speed-up? x2 ?...ma solo da questo punto in poi!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 17/40 (HW) Backface culling: quando? Non posso usarlo sempre! –devo sapere a priori che l'oggetto é chiusi primitive qui pixels tutto il pipeline HW di rendering (proiezione, setup, rasterizzazione...) stato di OpenGL occlusion culling ON / OFF
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 18/40 (HW) Backface culling: come? Accendere e spengere: glEnable( GL_CULL_FACE ); glDisable( GL_CULL_FACE ); Decidere se scartare le front o le back-facing : glCullFace(GL_FRONT ); glCullFace(GL_BACK ); Tutti questi comandi cambiano solo lo stato. "non fanno nulla sullo schermo" Quale sarà il default? Quando è utile cambiarlo?
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 19/40 Metodologie di Culling Occlusion culling –non si vede... perchè coperto da qualcos'altro View-frustum culling –non si vede... perchè é fuori dal frustum di vista Backface culling –non si vede... perchè é la parte interna di una superficie chiusa Importance culling –(quasi) non si vede... perchè é la sua proiezione è troppo piccola rispetto allo schermo
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 20/40 (HW) View-frustum culling Dato una primitiva –triangolo, segmento, punto E' dentro il view frustum? –(o parzialmente dentro – conservativi!) y z x Meglio fare il conto nelle Normalized Device Coords [-1,+1] x [-1,+1] x [-1,+1]
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 21/40 (HW) View-frustum Culling: dove? frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice set- up...di nuovo, solo da questo punto in poi! Ma ora possiamo agire dall'inizio! Posso scartare moltissimo della scena!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 22/40 Software View-frustum Culling Idea: farlo prima di mandare triangoli nel pipeline di rendering Dividere la scena in blocchi –è nata gia divisa la maggior parte delle volte perchè così sarà possibile scartare (=to cull) interi blocchi alla volta!
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 23/40 left plane near plane bottom plane Software View-frustum Culling Problema: –bisogna fare culling prima delle proiezioni –come sono i piani? view frustum top plane far plane right plane
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 24/40 Software View-frustum Culling Parte 1/4: test di un singolo poligono Nelle coordinate oggetto o mondo! 6 test con 6 piani del view frustum! Ripasso di geometrica: –i piani...
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 25/40 Software View-frustum Culling Parte 2 /4 : Gerarchia di bounding spheres
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 26/40 Software View-frustum Culling Parte 3 /4 : intersezione sfera view frustum Sfera centro c raggio r Test con un piano p (con normale normalizzata) Facile! –pc > r sfera tutta al di qua del piano –pc < -r sfera tutta al di là del piano –altrimenti: sfera mezza dentro e mezza fuori Test contro view frustum: –testare tutti e 6 i piani
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 27/40 Software View-frustum Culling Parte 4 /4 : algoritmo finale Test effettuato con la Bounding sphere della cella se è TUTTA FUORI del VF CULLED se è TUTTA DENTRO il VF, RENDERED tutta la cella se è PARZIALMENTE dentro il VF: –Se siamo allultimo livello: RENDERED –Altrimenti: Test sulle celle di livello inferiore
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 28/40 Metodologie di Culling Occlusion culling –non si vede... perchè coperto da qualcos'altro View-frustum culling –non si vede... perchè é fuori dal frustum di vista Backface culling –non si vede... perchè é la parte interna di una superficie chiusa Importance culling –(quasi) non si vede... perchè é la sua proiezione è troppo piccola rispetto allo schermo
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 29/40 Occlusion Culling Una forma molto importante di culling Scarta moltissimi poligoni –soprattutto quelli che compongono il "mondo" Ma dove attuarla? frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 30/40 Cell-Based Occlusion-Culling (software) Idea base: Preprocessing: –dividere il mondo in celle collegate da "portali" –calcolare per ogni cella il "PVS" PVS = Potentially Visible Set cioe' la lista di celle sono visiblili da quella cella Rendering: –trova la cella x dove è l'occhio –rendering solo delle celle nel PVS di x dentro il view frustum di solito molto oneroso computazionalmente vediamo degli esempi
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 31/40 Struttura: BSP-tree il mondo Obiettivo: circa stesso numero di primitive in ogni cella
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 32/40 Quad-Tree stesso obiettivo il mondo
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 33/40 Quad-Tree esempio frame buffer mondo diviso con quad tree celle con bordo bianco sono nel view frustum ma non sono nel PVS: CULLED James Stewart, School of Computing, Queen's University, Kingston, Ontario
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 34/40 Metodologie di Culling Occlusion culling –non si vede... perchè coperto da qualcos'altro View-frustum culling –non si vede... perchè é fuori dal frustum di vista Backface culling –non si vede... perchè é la parte interna di una superficie chiusa Importance culling –(quasi) non si vede... perchè é la sua proiezione è troppo piccola rispetto allo schermo