Computer Graphics
Marco Tarini
Università dell’Insubria Corso di Laurea in Informatica Anno Accademico 2014/15
Lighting: tecniche di Shading
Lighting in breve
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Proprietà del materiale
(dati che modellano i materiali)
Ambiente di illunimazione
(dati che modellano le luci)
Dati geometrici
(es. normale, pos osservatore…)
(lo ca l) LIG H TIN G
R, G, B finale
(un modello di lighting,
“una delle tante formule possibili”)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Es: una equazione di Lighting
∑ −
=
⋅
⋅
⋅
=
1
0
) (
N
i
i B i G i R i
B x G x
R x
r n
L L L
D D D
L r r
ω
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Es: un’altra equazione di Lighting
n spacular
materiale spacular
luce k H N
I ⋅ ⋅ ( ˆ ⋅ ˆ ) +
⋅
⋅
⋅ k ( L ˆ N ˆ ) I luce diffuse materiale diffuse
+
⋅ materiale ambient ambient
luce k
I
emission materiale
k +
tot = I
caratteristiche della luce
caratteristiche del materiale
dati della geometria
Baked Lighting VS Dynamic lighting
• “Baked” lighting
– Precomputare ligthing a priori
(una volta x tutte)
– Memorizzare RGB finali
(es come attributi x vertice)
• Dynamic lighting
– computato a tempo di rendering
• (vedremo ora come e quando) – Gli input (normali, materiali, luci) sono
attributi x vertice o uniforms (es. materiali se uniformi)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
esistono anche schemi misti:
alcune componenti del lighting baked, altre dinamiche PRO: efficienza, e possibilità di usare lighting + complessi (es effetti di lighting globale) CONTRO:
* scena statica,
* luci fissate, e niente effetti
* view-dependent!
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
^
Ripasso: normale di un triangolo
• Cioè il suo orientamento nello spazio
N v 0
v 2 v 1
) ( )
( v 1 v 0 v 2 v 0
N = − × −
|
| ˆ
N N = N
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Lighting faccia per faccia
"flat shading"
geometria di partenza 1. 2.
per ogni faccia, calcolo normale
applico lighting ad 3.
ogni normale, e coloro faccia dell’RGB risultante
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Definizione
• Shading:
– ricetta per applicare un lighting
– nb: scelta del lighting model indipendente da scelta dello shading
• Primo esempio:
flat shading
1. Applico lighting a normale di faccia - (ottengo un colore)
2. Copro tutta la faccia di quel colore
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Flat shading: problema
• Approssimo superfici curve con triangoli
• Applico il flat shading
• Risultato:
–spigoli apparenti su superfici curve brutto un artefatto
non sembra nemmeno !
una sfera
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Flat shading: problema
• Altro esempio:
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Flat shading: problema
• Più faccie uso, meno evidente il problema
>10.000 facce, e ancora si vedono
gli spigoli artefatti perche?
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Il problema e’ legato alla nostra percezione (effetto percettivo)
• A peggiorare le cose:
l'effetto percettivo “bande di Mach”
Il contrasto fra zone di colore uniforme difficilmente sfugge al nostro occhio.
(neanche se le zone sono molte,
e la differenza fra loro è relativamente piccola).
Il cervello aumenta il contrasto fra le zone di colore uniformi
=> L'artefatto è duro a morire!
In realtà sono bande di colore
uniforme In realtà i quadratini
interni sono dello stesso
grigio
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Idea
• Utilizzare l'interpolazione degli attributi dentro alla faccia
Per-vertex shading
(detto anche: "Gouraud" Shading)
• Utilizzare l'interpolazione del colore dentro alla faccia
1- Applico lighting ai 3 vertici di ogni triangolo
• (ottengo un colore)
2- Interpolo il colore nel triangolo
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Idea
Per applicare il lighting, devo avere la normale!
Normale definita naturalmente per un triangolo.
Ma per un vertice?
Henri Gouraud, 1971
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Normali per vertice
• Le normali sono parte del modello
– input del rendering, non computate nel rendering!
• La normale (dei vertici)
nasce insieme al resto del modello 3D – esempi:
• quando si modella una sfera, un cilindro, un cono...
• quando si estrae la superficie da una griglia volumetrica…
(normale da derivate discrete)
• quando si costruisce una superficie triangolata campionando una superficie parametrica…
• nella modellazione manuale…
• in quella procedurale…
• Altrimenti...
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Normali per vertice:
inferirle dalla geometria di una mesh
Normale di un triangolo:
v 1
v 2
v 1 ×v 2
Nˆ v
ˆ
1N
2
N ˆ
ˆ
3N
ˆ
4N ˆ
5N ˆ
6N Normale di un vertice
condiviso da n triangoli:
N n
N N
N ˆ ˆ ... ˆ
2
1 + + +
=
|
| ˆ
N
N = N
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Dove avviene la computazione del lighting?
Fr am m en ti & at tri bu ti in te rp ol at i Ve rti ci & lo ro a ttr ib ut i
Screen buffer Ve rti ci p or ie tta ti & at tri bu ti co m pu ta ti
rasterizer triangoli
co m pu ta zi on i pe r f ra m m en to rasterizer
segmenti rasterizer punti
co m pu ta zi on i pe r v er tic e
x y
z
v
0v
1v
2v
0v
1v
2M 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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Per-vertex lighting (aka “Gouraud shading”)
Fr am m en ti & va ry in g in te rp ol at i Ve rti ci & lo ro a ttr ib ut i
Screen buffer
Ve rti ci p or ie tta ti & va ry in g rasterizer
triangoli
co m pu ta zi on i pe r f ra m m en to rasterizer
segmenti rasterizer punti
co m pu ta zi on i pe r v er tic e
compreso:
proprietà materiale del e normale
trasformo geometria applico e lighting
interpolo
colore Compreso:
col. finale compreso:
colore per vertice
(risultato del lighting)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Gouraud shading
• Risultati:
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Si può fare meglio
• idea: invece di interpolare il colore dopo il lighting.
interpolo la normale prima del lighting!
• caveat: interpolando due vettori normali, non ottengo un vettore normale:
• (devo rinormalizzare dopo l'interpolazione)
n r 1
n r 0 interpolaz fra e n r
0n r
1interpolaz fra e rinormalizzata
n r
0n r
1M 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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Si può fare meglio
• Invece di interpolare il colore dopo il lighting.
interpolo la normale prima del lighting!
Per-fragment Shading
(detto anche “Phong shading” ) Bui-Tuong Phong , 1973
1- Interpolo la normale nella faccia 2- Rinormalizzo
3- Applico lighting
* Ma attenzione a non confondere il Phong Shading (uno shading) con il Phong Lighting Model (modello di illuminazione)
*
* *
*
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Phong shading
Fr am m en ti & va ry in g in te rp ol at i Ve rti ci & lo ro a ttr ib ut i
Screen buffer
Ve rti ci p or ie tta ti & va ry in g rasterizer
triangoli
co m pu ta zi on i pe r f ra m m en to rasterizer
segmenti rasterizer punti
co m pu ta zi on i pe r v er tic e
compreso:
proprietà materiale del e normale
trasformo normale sia posizione che
interpolo
normale compreso:
normale interpolata compreso:
normale trasformata
rinormalizzo e applico lighting per ottenere
il colore del frammento
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Shading a confronto
Per-vertex Lighting - (a.k.a. "Gouraud Shading") meno oneroso:
applico il lighting una volta per vertice – di solito #vertici << #frammenti
Per-fragment * Lighting – (a.k.a. " Phong Shading“) risultati migliori
specialmente con i riflessi luminosi e piccoli (alta “glossiness”)
Flat shading Goraund shading Phong Shading (*) talvolta (ma impropriamente) detto: per-pixel lighting
Si tratta di un problema generale
• Calcolare una funzione per vertice (e interpolare il risultato):
– maggiore efficienza – approssimazione peggiore
• Calcolare una funzione per frammento (interpolando i suoi parametri):
– più oneroso
– approssimazione migliore
• Il lighting non fa eccezione!
• Considerazione:
– se la funzione è lineare, il risultato è lo stesso! (dimostrare) – quindi, in questo caso, meglio anticipare la computazione a vertice – (vale anche per le sottoespressioni)
– in gergo: «to lift» the computation (da per-fragment a per-vertex)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
quando si usano normali per vertice
flat shading Goraud shading
(Phong shading è simile)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i aquando si usano normali per vertice
• Gouraud e Phong shading sono pensati per superfici curve
– eliminano gli spigoli “artefatti”
– ma eliminano anche gli spigoli “corretti”!
• Possibile soluzione: duplicare i vertici
Si tratta (nuovamente) di un problema generale
• Situaz: mesh indicizzata con attributi per vertice:
– il valore dell atturbuto è interpolato dentro le facce
• Conseguenza:
– il valore degli attributi è necessariamente continuo (C0) su tutta la sup
• Q: come posso ottenere una discontinuità?
• A: replicazione di vertici (vertex seams) (seam = «cucitura») – vertex seam: due vertici separati (indice diverso),
coincidenti in xyz con attributi diversi
• La normale non fa eccezione!
– discontinutà di normale = una «sharp feature» nella mesh – (es fra due facce di un cubo)
• vale per tutti gli attributi che richiedano discontinuità occasionali – es: di colore, di texture coordinates (vedremo)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Si tratta (nuovamente) di un problema generale
• Vertex seams (replicazione dei vertici)
• Vantaggi:
– la duplicazione riguarda solo i pochi punti dove la discontinutà appare
• (nella maggior parte della mesh, non ci sono duplicazioni)
– una sola struttura dati (mesh indicizzata) per gestire tutti i casi
• (es: sia superfici lisce = con normali continue, che con sharp features = con normali discontinue)
• (es: posso fare flat shading solo in alcune parti della mesh (come?)
• Svantaggi:
– la connettività viene modificata (es la mesh non è più watertight) – replicazione nelle strutture dati = male
(oneroso, necessità di tenere le copie uguali)
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 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a