La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.

Presentazioni simili


Presentazione sul tema: "Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione."— Transcript della presentazione:

1 Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione 6: culling: se c'e' ma non si vede!

2 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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?

3 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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?

4 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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à !

5 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

6 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

7 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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...

8 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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"!

9 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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"!

10 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

11 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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"

12 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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 ^

13 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

14 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

15 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

16 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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!

17 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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 é chiuso primitive qui pixels tutto il pipeline HW di rendering (proiezione, setup, rasterizzazione...) stato di OpenGL occlusion culling ON / OFF

18 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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?

19 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

20 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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]

21 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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...di nuovo, solo da questo punto in poi! Ma ora possiamo agire dall'inizio! Posso scartare moltissimo della scena! set- up

22 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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!

23 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

24 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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...

25 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

26 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

27 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

28 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

29 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

30 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

31 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

32 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

33 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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

34 M a r c o T a r i n i C o m p u t e r G r a p h I c s 2 0 0 6 / 0 7 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


Scaricare ppt "Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione."

Presentazioni simili


Annunci Google