Computer Graphics -...
Transcript of Computer Graphics -...
1
Computer Graphics
Marco Tarini
Università dell’Insubria
Facoltà di Scienze MFN di Varese
Corso di Laurea in Informatica
Anno Accademico 2008/09
Lezione 6: Lezione 6: Lezione 6: Lezione 6: culling: se c'e' ma non si vede!
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Se non si vede, che non ci sia
• CULLING– cioe': non perdiamo tempo a renderizzare ciò che
non si vede
– buttiamo via le primitivele primitivele primitivele primitive che non cambiano la scena• o, che non la cambiano abbastanza
– facciamolo il prima possibile! (nel pipeline)
i tiangolitiangolitiangolitiangoli! (o segmenti, o punti...)chiaro?
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Notazione
• Lo chiamiamo cullingcullingcullingculling se si scartano primitive intere– o interi gruppi di primive
• Se una primitiva viene spezzata in una parte visibile e una no, lo chiamiamo clippingclippingclippingclipping
• Se e' un frammento ad essere scartato, si tratta di testing per frammentotesting per frammentotesting per frammentotesting per frammento
quale ci fa piu' gola?
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Notazione
• Lo chiamiamo cullingcullingcullingculling se si scartano primitive intere– o interi gruppi di primive
• Se una primitiva viene spezzata in una parte visibile e una no, lo chiamiamo clippingclippingclippingclipping
• Se e' un frammento ad essere scartato, si tratta di testing per frammentotesting per frammentotesting per frammentotesting per frammento
(principalmente) una ottimizzazione ottimizzazione ottimizzazione ottimizzazione !
(principalmente) una necessità necessità necessità necessità !
(principalmente) una necessità necessità necessità necessità !
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 unerrore nel renering, cioè un...
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• un difetto…– di modelling: una discrepanza fra realtà e modello 3D– di rendering: discrepanza fra modello 3D e quello che si vede
nei suoi rendering– es: “inventarsi” un dettaglio che non c'era
parentesi notazione parentesi notazione parentesi notazione
parentesi notazione parentesi notazione parentesi notazione
..."artefatto"!
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• un difetto…– di modelling: una discrepanza fra realtà e modello 3D– di rendering: discrepanza fra modello 3D e quello che si vede
nei suoi rendering– es: “inventarsi” un dettaglio che non c'era
parentesi notazione parentesi notazione parentesi notazione
parentesi notazione parentesi notazione parentesi notazione
..."artefatto"!
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Backface Culling
• Concetto: – superficie di oggetto chiusochiusochiusochiuso...– non vedro' mai l'interno– cioè non vedrò mai
il "dietro delle facce"
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Concetto BASE di questo corso
• Vettore normale ortogonale ad un pianoo ad un un poligono
– detto anche "vettore" normale– detto anche NORMALE NORMALE NORMALE NORMALE (al/del piano)
• In pratica:normalenormalenormalenormale == == == == orientamentoorientamentoorientamentoorientamento
Nota: a Nota: a Nota: a Nota: a rigorerigorerigorerigore didididi termini, termini, termini, termini, vettorevettorevettorevettore normalenormalenormalenormale = = = = vettorevettorevettorevettore con con con con normanormanormanorma 1111
n̂
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Come si trova la normale di un triangolo?
• Cioe' il suo orientamento nello spazio
n̂
v0
v2v1
facile! é anche per questo che cipiacciono tanto i triangoli
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Come si trova la normale di un triangolo?
• Traingolo front-facing
• Traingolo back-facing– "che ci dà le spalle"
n̂
v0
v2
v1
n̂
v0
v2
v1
view dir
view dir
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(HW) Backface Culling: dove?
fram
men
ti(c
andi
dati
pixe
ls)
Verti
ci
(pun
ti in
R3 ) pixel
finali(nello
screen-buffer)
Verti
cipr
oiet
tati
(pun
ti in
R2 )
Z
rasterizer triangoli
com
puta
zion
ipe
r fra
mm
ento
set-up
rasterizersegmenti
set-up
rasterizerpunti
set-up
com
puta
zion
ipe
r ver
tice
set-up
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(HW) Backface Culling: quanto?
fram
men
ti(c
andi
dati
pixe
ls)
Verti
ci
(pun
ti in
R3 ) pixel
finali(nello
screen-buffer)
Verti
cipr
oiet
tati
(pun
ti in
R2 )
Z
rasterizer triangoli
com
puta
zion
ipe
r fra
mm
ento
set-up
rasterizersegmenti
set-up
rasterizerpunti
set-up
com
puta
zion
ipe
r ver
tice
set-up
scarto circa il 50% delle facce...Lo speed-up? x2x2x2x2 ?
...ma solo da questo punto in poi!
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(HW) Backface culling: quando?
• Non posso usarlo sempresempresempresempre!– devo sapere a priori che l'oggetto è chiuso
primitivequi
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(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?
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(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 contonelle Normalized Device Coords
[-1,+1] x [-1,+1] x [-1,+1]
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(HW) View-frustum Culling: dove?
fram
men
ti(c
andi
dati
pixe
ls)
Verti
ci
(pun
ti in
R3 ) pixel
finali(nello
screen-buffer)
Verti
cipr
oiet
tati
(pun
ti in
R2 )
Z
rasterizer triangoli
com
puta
zion
ipe
r fra
mm
ento
set-up
rasterizersegmenti
set-up
rasterizerpunti
set-up
com
puta
zion
ipe
r ver
tice
...di nuovo, solo da questo punto in poi!Ma ora possiamo agire dall'inizio!
Posso scartare moltissimo della scena!
set-up
set-up
set-up
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Software View-frustum Culling
• Idea: farlo prima di mandare triangoli nel pipeline di rendering
• Dividere la scena in blocchi– è nata già divisa nella maggior parte dei casi
(v. scenegraph)
• perchè così sarà possibile scartare (=to cull ) interi blocchi alla volta!
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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...
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Software View-frustum Culling Parte 2 /4 : Gerarchia di bounding spheres
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Software View-frustum Culling Parte 4 /4 : algoritmo finale• Test effettuato con la Bounding sphere Test effettuato con la Bounding sphere Test effettuato con la Bounding sphere Test effettuato con la Bounding sphere della della della della cella cella cella cella • sesesese è TUTTA FUORI del VF è TUTTA FUORI del VF è TUTTA FUORI del VF è TUTTA FUORI del VF
→→→→ CULLCULLCULLCULL• sssse è TUTTA DENTRO il VF, e è TUTTA DENTRO il VF, e è TUTTA DENTRO il VF, e è TUTTA DENTRO il VF,
→→→→ RENDERRENDERRENDERRENDER tutta la cellatutta la cellatutta la cellatutta la cella• sssse è PARZIALMENTE dentro il VF:e è PARZIALMENTE dentro il VF:e è PARZIALMENTE dentro il VF:e è PARZIALMENTE dentro il VF:
– Se siamo all’ultimo livello:Se siamo all’ultimo livello:Se siamo all’ultimo livello:Se siamo all’ultimo livello:→→→→ RENDERRENDERRENDERRENDER
– Altrimenti: Test sulle celle di livello inferioreAltrimenti: Test sulle celle di livello inferioreAltrimenti: Test sulle celle di livello inferioreAltrimenti: Test sulle celle di livello inferiore
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 ‧ C o m p u t e r G r a p h I c s ‧ 2 0 0 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Occlusion Culling
• Una forma molto importante di culling• Scarta moltissimi poligoni
– tutti quelli che compongono il "mondo"• Ma dove attuarla?
fram
men
ti(c
andi
dati
pixe
ls)
Verti
ci
(pun
ti in
R3 ) pixel
finali(nello
screen-buffer)
Verti
cipr
oiet
tati
(pun
ti in
R2 )
Z
rasterizer triangoli
com
puta
zion
ipe
r fra
mm
ento
set-up
rasterizersegmenti
set-up
rasterizerpunti
set-up
com
puta
zion
ipe
r ver
tice
richiede info globaliglobaliglobaliglobali, su tutta la
scena
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Cell-Based Occlusion-Culling (software)
Idea base:• Preprocessing:
– dividere il mondo in celle• collegate da "portali"
– calcolare per ogni cella il "PVSPVSPVSPVS"• PVSPVSPVSPVS = Potentially Visible Set• cioe' la lista di celle sono visiblili da quella cella
• Rendering:– trova la cella xxxx dove è l'occhio– rendering solo delle celle
• nel PVSPVSPVSPVS di xxxx• dentro il view frustum
di solitomolto oneroso
computazionalmente
vediamo degli esempi
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Struttura: BSP-tree(Binary Spatial Partitioning tree)
il mondo
Obiettivo: circa stesso numero di primitive in ogni cella
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Quad-Tree (in 2D, o 2.5D – es. campi d'altezza)Oct-Tree (in 3D – partizione di un volume)
• stesso obiettivo
il mondo (2D)
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Quad-Tree
• esempio
frame buffer
mondodiviso con quad tree• celle con bordo bianco
sono nel view frustumma non sono nel PVS:CULLEDCULLEDCULLEDCULLED
James Stewart, School of Computing, Queen's University, Kingston, Ontario
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 8 / 0 9 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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