Sistemi Multimediali II
Lezione 6:
culling:
se c'e' ma non si vede!
Università dell’Insubria
Facoltà di Scienze MFN di Varese
Corso di Laurea in Informatica
Anno Accademico 2004/05
Marco Tarini
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
(principalmente)
una ottimizzazione !
• 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 (principalmente)
una necessità !
• Se e' un frammento ad essere scartato, si tratta di
testing per frammento
(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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
Tipi di culling
• Eseguiti dall'hardware
quindi é chiaro che
la scelta non é fra HW e SW,
ma fra solo HW ed entrambi
– 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
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 ‧ 2 0 0 4 / 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
• Conservativi
– scartano solo se sono sicuri
– piuttosto, rischiano di diesgnare anche cose che poi
non si vedranno
casomai, non succede nulla.
Si è solo spercato un po di calcolo GPU
• Non Conservativi
– scartano seguendo un'euristica
– rischiano di NON disegnare qualcosa che (in parte)
era visibile!
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 ‧ 2 0 0 4 / 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
parentesi notazione parentesi notazione parentesi notazione
..."artefatto"!
• 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
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 ‧ 2 0 0 4 / 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
parentesi notazione parentesi notazione parentesi notazione
..."artefatto"!
• 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
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
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)
n^
• In pratica:
normale == orientamento
Nota: a rigore di termini, vettore normale = vettore con norma 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 ‧ 2 0 0 4 / 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
Come si trova la normale di un triangolo?
• Cioe' il suo orientamento nello spazio
v1
n^
v2
v0
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 ‧ 2 0 0 4 / 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?
• Traingolo front-facing
n^
view dir
v2
v1
v0
• Traingolo back-facing
– "che ci da le spalle"
v2
view dir
n^
v1
v0
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 ‧ 2 0 0 4 / 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
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
rasterizer
punti
frammenti
(punti in R2)
setup
(candidati pixels)
Z
Vertici
proiettati
computazioni
per vertice
Vertici
(punti in R3)
(HW) Backface Culling: dove?
pixel
finali
(nello
screen-buffer)
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 ‧ 2 0 0 4 / 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
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
rasterizer
punti
frammenti
(punti in R2)
setup
(candidati pixels)
Z
Vertici
proiettati
computazioni
per vertice
Vertici
(punti in R3)
(HW) Backface Culling: quanto?
pixel
finali
(nello
screen-buffer)
...ma solo da questo punto in poi!
scarto circa il 50% delle faccie...
Lo speed-up? x2 ?
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 ‧ 2 0 0 4 / 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: quando?
• Non posso usarlo sempre!
– devo sapere a priori che l'oggetto é chiusi
occlusion culling
ON / OFF
primitive
qui
stato di OpenGL
tutto il pipeline HW di rendering
(proiezione, setup, rasterizzazione...)
pixels
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 ‧ 2 0 0 4 / 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: come?
• Accendere e spengere:
glEnable( GL_CULL_FACE );
glDisable( GL_CULL_FACE );
Tutti questi comandi cambiano solo lo stato.
"non fanno nulla sullo schermo"
Quale sarà il default?
Quando è utile cambiarlo?
• Decidere se scartare le front o le back-facing :
glCullFace(GL_FRONT );
glCullFace(GL_BACK );
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
(HW) View-frustum culling
• Dato una primitiva
– triangolo, segmento, punto
• E' dentro il view frustum?
– (o parzialmente dentro – conservativi!)
y
• Meglio fare il conto
nelle Normalized Device Coords
x
[-1,+1] x [-1,+1] x [-1,+1]
z
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 ‧ 2 0 0 4 / 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
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
rasterizer
punti
frammenti
(punti in R2)
setup
(candidati pixels)
Z
Vertici
proiettati
computazioni
per vertice
Vertici
(punti in R3)
(HW) View-frustum Culling: dove?
pixel
finali
(nello
screen-buffer)
...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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
• Problema:
– bisogna fare culling prima delle proiezioni
– come sono i piani?
view frustum
top plane
left plane
near plane
right plane
far plane
bottom 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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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 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 ‧ 2 0 0 4 / 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 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 ‧ 2 0 0 4 / 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 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 all’ultimo 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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
Occlusion Culling
• Una forma molto importante di culling
• Scarta moltissimi poligoni
– soprattutto quelli che compongono il "mondo"
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
rasterizer
punti
frammenti
(punti in R2)
setup
(candidati pixels)
Z
Vertici
proiettati
computazioni
per vertice
Vertici
(punti in R3)
• Ma dove attuarla?
pixel
finali
(nello
screen-buffer)
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 ‧ 2 0 0 4 / 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
Cell-Based Occlusion-Culling (software)
Idea base:
• Preprocessing:
– dividere il mondo in celle
di solito
molto oneroso
computazionalmente
vediamo degli esempi
• 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
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 ‧ 2 0 0 4 / 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
Struttura: BSP-tree
Obiettivo: circa stesso numero di primitive in ogni cella
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
• esempio
frame buffer
mondo
James Stewart, School of Computing, Queen's University, Kingston, Ontario
diviso con quad tree
• celle con bordo bianco
sono nel view frustum
ma non sono nel PVS:
CULLED
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 ‧ 2 0 0 4 / 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
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 ‧ 2 0 0 4 / 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
Scarica

ppt