Computer Graphics
Marco Tarini Università dell’Insubria
Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2012/13
Lezione Lezione Lezione
Lezione 11: 11: 11: 11: 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 2 / 1 3 ‧ 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…)
(loc al ) LI G H T IN 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Es: equazione di Lighting
“standard” di OpenGL
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 attenuazio ne luce
⋅ f
+
= + 1 , 1
min
2L 3 L 2
1
c d c d
f
attentuazionelucec
spotlight effetto
⋅ f
( direction cutoff Angle beam width )
spotlight
effetto L spot spot spot
f = f , , ,
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) saranno 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
OPPURE 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 2 / 1 3 ‧ 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
• Cioe' 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 2 / 1 3 ‧ 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"
1.
geometria di partenza
2.
per ogni faccia, calcolo normale
3.
applico lighting ad
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 2 / 1 3 ‧ 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
– (la 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 2 / 1 3 ‧ 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
un brutto 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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?
Il problema e’ legato alla nostra percezione (effetto percettivo)
• A peggiorare le cose:
l'effetto ottico bande di Mach
Il contrasto fra zone di colore uniforme difficilmente sfugge mai 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
Idea
• Utilizzare l'interpolazione del colore
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 2 / 1 3 ‧ 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, Henri Gouraud, Henri Gouraud, Henri Gouraud, 1971 1971 1971 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Normali per vertice
• In molti contesti, la normale (x vertice)
“nasce insieme” al resto del modello 3D – esempi:
• quando si modella una sfera, un cilindro, un cono...
• quando si estrae l’iso-superficie da una griglia volumetrica…
(...normale da derivate discrete!)
• per una sup. implicita…
• quando si costruisce una superficie triangolata campionando una superficie parametrica…
• nella modellazione manuale/artisitca (es. Low poly)…
• 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Costruire le normali per vertice in una mesh
(quando non sono già date)
Normale di un Triangolo:
v 1
v 2
v 1 ×v 2
N ˆ
ˆ
1N
ˆ
2N
ˆ
3N ˆ
4N ˆ
5N ˆ
6N Normale di un vertice
condiviso da n triangoli:
n
N N N
N ˆ ˆ ... ˆ
2
1 + + +
=
|
| ˆ
N N
N = Meglio se pesati per :
area del triangolo, angolo (wedge)
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 2 / 1 3 ‧ 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?
F ram m enti & a ttr ib u ti & a ttr ib u ti & a ttr ib u ti & a ttr ib u ti in te rp o la ti in te rp o la ti in te rp o la ti in te rp o la ti Ver ti c i & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti
Screen buffer Ver ti c i por iettati & a ttr ib u ti & a ttr ib u ti & a ttr ib u ti & a ttr ib u ti co m p u ta ti co m p u ta ti co m p u ta ti co m p u ta ti
rasterizer triangoli
c om put az ioni per f ram m ent o set-
up rasterizer segmenti set-
up rasterizer
punti set-
up
c om put az ioni per 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Scelta Fondamentale
• Nel nostro paradigma di rendering, la normale (dei vertici):
• NON viene calcolata nel pipeline (e dove mai potrebbe?)
• viene mandata come ATTRIBUTO per VERTICE
• la normale "fa parte del modello"
• proprio come le posizioni dei suoi vertici, i colori, etc
• la computazione delle normali (a partire dalla geometria) è solo un pre-processing
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Per-vertex lighting (“Gouraud shading”)
F ram m enti & va ryi n g & va ryi n g & va ryi n g & va ryi n g in te rp o la ti in te rp o la ti in te rp o la ti in te rp o la ti Ver ti c i & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti
Screen buffer Ver ti c i por iettati & & & & va ry in g va ry in g va ry in g va ry in g
rasterizer triangoli
c om put az ioni per f ram m ent o set-
up rasterizer segmenti set-
up rasterizer
punti set-
up
c om put az ioni per v er tic e
compreso:
proprietà del materiale e normale
proietto e
applico lightinginterpolo 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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!
• occhio:
interpolando due vettori normali, non ottengo un vettore normale:
• (devo rinormalizzare dopo l'interpolazione)
n 1
r n 0
r interpolaz fra e n
0r n
1r
interpolaz fra e rinormalizzata
n 0
r n 1
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 2 / 1 3 ‧ 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!
"Phong" Shading
(o più semplicemente “per fragment lighting”) Bui Bui Bui
Bui----Tuong Tuong Tuong Tuong Phong Phong Phong ,,,, 1973 Phong 1973 1973 1973
1- Interpolo la normale nella faccia 2- Rinormalizzo
3- Applico lighting
* 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Phong shading
F ram m enti & va ryi n g & va ryi n g & va ryi n g & va ryi n g in te rp o la ti in te rp o la ti in te rp o la ti in te rp o la ti Ver ti c i & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti & l o ro a ttr ib u ti
Screen buffer Ver ti c i por iettati & & & & va ry in g va ry in g va ry in g va ry in g
rasterizer triangoli
c om put az ioni per f ram m ent o set-
up rasterizer segmenti set-
up rasterizer
punti set-
up
c om put az ioni per v er tic e
compreso:
proprietà del materiale e normale
trasformo sia
normaleche
posizioneinterpolo
normalecompreso:
normale interpolata
compreso:
normale trasformata
rinormalizzo e applico
lightingper ottenere
il colore del frammento
Gouraud contro Phong shading 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
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 2 / 1 3 ‧ 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
• Gouraud e Phong shading sono pensati per superfici curve curve curve curve
– eliminano gli spigoli “artefatti”
– ma eliminano anche gli spigoli “corretti”!
• Possibile soluzione: duplicare i vertici
Componenti gemotriche in input al lighting
• Nell’equazione di lighting compaiono componenti geometriche:
– direzioni normale
– direzione di luce (x ogni luce) – direzioni di vista…
• Il computo di, per es, dot( n, l ) può essere eseguito in vari spazi
– spazio oggetto – spazio mondo – spazio vista…
basta che: i vettori coinvolti siano tutti espressi in uno stesso
stesso stesso stesso spazio!
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
quale converrà usare:
dipende da caso a caso.
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Anche le normali possono essere trasformate
x y
z
v
0v
1v
2world Coordinates
y
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x
-z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
Normalized Device Coordinates 1
1 -1 -1
x
xy
z
v
0v
1v
2object Coordinates
modellazione
v is ta pr oi ez ione
viewport Modellazione + Vista:
spesso rototraslazioni (trasformazioni rigide) e scalature uniformi
(che almeno mantengono gli angoli)
Proiezione:
non mantiene gli angoli
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Le normali rimangono "normali" (a lunghezza 1) nella Transform?
• Solo se la modellazione-vista è rigida (rotazioni + traslazioni)
modellazione-vista = V ‧ M
(usually) rotazioni, traslazioni (quindi rigida)
(usually) rotazioni, traslazioni e forse scalature (quindi non sempre rigida)
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Le normali rimangono "normali" (a lunghezza 1) nella Transformazione?
• Se cosi’ non fosse, vanno rinormalizzate prima dell’uso
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di normali
• La normale a una superficie rimane
ortogonale anche dopo una trasformazione affine generica?
• NO
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione delle normali
• Sia M la trasformazione applicata
= 0 t n T
Mt t
Kn n
=
= '
' n ' T t ' = ( Kn ) T ( Mt ) = n T K T Mt = 0 ⇒
T T
T M I K M K M
K = ⇒ = − 1 ⇒ = − 1
Sappiamo che:
Vogliamo che: n ' T t ' = 0 ) ( ' Mp Mq M p q t
q p t
−
=
−
=
−
=
Nota: conta solo la parte 3x3 superiore perché n e t sono vettori
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione delle normali
• La normale viene moltiplicata per la trasposta dell’inversa della parte 3x3 superiore della matrice di vista/modello
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione delle normali
• Casi particolari
– Se la matr. di modelview M è...
1. una traslazione...
2. una rotazione...
3. una scalatura uniforme...
4. una combinazione di queste (è il caso tipico!)...
Sol uz.:
1.
Le nor mal i, come tut ti i vet tor i, sono unaf fect ed
2.
Traspost a di M = inver sa di M . N orm ale va m olti pl.
per M .
3.
Traspost a di M = M.
Nor mal e andr ebbe scal ata (m olti pl.
per uno scalar e), ma
atti vando la rinor mal izzazi one ci ònon ha al cun ef fet to.
4.
Dat o 1 2 e 3, bast a usar e M .
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a