42
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione 11: lo Shading

Computer Graphics

  • Upload
    sezja

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

Lezione 11: lo Shading. Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 200 6 /0 7. Computer Graphics . Marco Tarini. I 4 fattori che consideriamo. luce finale = ambiente + riflessione diffusa + - PowerPoint PPT Presentation

Citation preview

Page 1: Computer Graphics

Computer Graphics

Marco Tarini

Università dell’InsubriaFacoltà di Scienze MFN di VareseCorso di Laurea in InformaticaAnno Accademico 2006/07

Lezione 11: lo Shading

Page 2: Computer Graphics

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

I 4 fattori che consideriamo

luce finale=

ambiente+

riflessione diffusa +

riflessione speculare+

emissione

Page 3: Computer Graphics

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

Equazione di Lighting

nspacularmaterialespacularluce NHkI )ˆˆ(

)ˆˆ( NLkI diffusematerialediffuseluce

ambientmaterialeambientluce kI

emissionmaterialek

totIluceneattenuaziof

1,1min 2L3L21 dcdcc

f luceoneattentuazi

spotlighteffettof

widthbeamAnglecutoffdirectionspotlighteffetto spotspotspotLf ,,,f

caratteristiche della lucecaratteristiche del materialedati della geometria

Page 4: Computer Graphics

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

^

Normale di un triangolo

• Cioe' il suo orientamento nello spazio

N

v0

v2v1

)()( 0201 vvvvN

||ˆ

NNN

Page 5: Computer Graphics

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

Lighting faccia per faccia

"flat shading"

1.geometria di partenza

2.per ogni faccia,calcolo normale

3.applico lightingad ogni normale

Page 6: Computer Graphics

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

Definizione

• Shading:– ricetta per applicare un lighting

• Ad esempio:

flat shading1. Applico lighting a normale di faccia

- (ottengo un colore)2. Copro tutta la faccia di quel colore

Page 7: Computer Graphics

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

Flat shading: problema

• Approssimo superfici curve con triangoli• Applico il flat shading• Risultato:

–spigoli apparenti su superfici curve

un bruttoartefat

to!non sembra nemmeno

una sfera

Page 8: Computer Graphics

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

Flat shading: problema

• Altro esempio:

Page 9: Computer Graphics

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

Flat shading: problema

• Più facce uso,meno evidenteil problema

>10.000 facce,e ancora si vedono gli spigoli artefatti

perche?

Page 10: Computer Graphics

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

Flat shading: problema

• A peggiorare le cose: l'effetto ottico Mach-band

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 uniformiL'artefatto e' duro a morire.

Page 11: Computer Graphics

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

Idea

• Utilizzare l'interpolazione del coloredentro alla faccia

Page 12: Computer Graphics

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

"Gouraud" Shading

Idea

• Utilizzare l'interpolazione del coloredentro alla faccia

1- Applico lighting ai 3 vertici di ogni triangolo• (ottengo un colore)

2- Interpolo il colore nel triangolo

Per applicare il lighting, devo avere la normale!

Normale definita per una faccia.Ma per un vertice?

Henri Gouraud, 1971

Page 13: Computer Graphics

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

Normali per vertice

• In certi contesti, la normale dei verticinasce insieme al resto del modello 3D.– per esempio,

• quando si modella una sfera, un cilindro, un cono...

• quando si estrae la superficie da un volume(normale da derivate discrete)

• quando si costruisce una superficie triangolata campionando una superficie parametrica

• ...• Sennò...

Page 14: Computer Graphics

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

Normali per verticeNormale di un Triangolo:

v1

v2

v1×v2

vN̂1N̂

2N̂

3N̂4N̂

5N̂6N̂

Normale di un verticecondiviso da n triangoli:

nNNNN ˆ...ˆˆ21

||ˆ

NNN

Page 15: Computer Graphics

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

Dove avviene la computazione del lighting?

Fram

men

ti&

att

ribu

ti

inte

rpol

ati

Verti

ci &

loro

at

trib

uti

Screen bufferVe

rtici

porie

ttati

& a

ttri

buti

co

mpu

tati

rasterizer

triangoli

com

puta

zioni

per f

ram

men

to

set-up rasterize

rsegment

i

set-up

rasterizer

puntiset-up

com

puta

zioni

per v

ertic

e

x

y

z

v0v1

v2

v0v1

v2

Page 16: Computer Graphics

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

Scelta Fondamentale

• Nel nostro paradigma di rendering,la normale (dei vertici):

• NON viene calcolata nel pipeline (e dove?)• viene mandata come ATTRIBUTO per VERTICE

• la normale "fa parte del modello"• proprio come le posizioni dei suoi vertici• la computazione delle normali, se necessaria,

è tipicamente un pre-processing

• concettualmente giusto, e pratico

Page 17: Computer Graphics

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

Gouraud shading

Fram

men

ti&

att

ribu

ti

inte

rpol

ati

Verti

ci &

loro

at

trib

uti

Screen bufferVe

rtici

porie

ttati

& a

ttri

buti

co

mpu

tati

rasterizer

triangoli

com

puta

zioni

per f

ram

men

to

set-up rasterize

rsegment

i

set-up

rasterizer

puntiset-up

com

puta

zioni

per v

ertic

e

compreso:

proprietà del

materialee normale

proiettoe

applicolighting

interpolo

colorecompreso:col. finale

compreso:

coloreper

vertice(risultato

del lighting)

Page 18: Computer Graphics

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

Gouraud shading

• Risultati:

Page 19: Computer Graphics

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

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)

Page 20: Computer Graphics

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

Si può fare meglio

• Invece di interpolare il colore dopo il lighting.interpolo la normale prima del lighting!"Phong" Shading Bui-Tuong Phong ,

1973 1- Interpolo la normale nella faccia2- Rinormalizzo3- Applico lighting

* Attenzione a non confondere il Phong Shading (uno shading) con il Phong Lighting Model (modello di illuminazione)

*

Page 21: Computer Graphics

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

Phong shading

Fram

men

ti&

att

ribu

ti

inte

rpol

ati

Verti

ci &

loro

at

trib

uti

Screen bufferVe

rtici

porie

ttati

& a

ttri

buti

co

mpu

tati

rasterizer

triangoli

com

puta

zioni

per f

ram

men

to

set-up rasterize

rsegment

i

set-up

rasterizer

puntiset-up

com

puta

zioni

per v

ertic

e

compreso:

proprietà del

materialee normale

trasformosia

normaleche

posizione

interpolo

normale

compreso: normaleinterpolat

a

compreso:

normaletrasforma

ta

rinormalizzo eapplicolighting

per ottenereil colore

del frammento

Page 22: Computer Graphics

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

Gouraud contro Phong shading• Goraud Shading - lighting per vertice

molto meno oneroso:applico il lighting una volta per vertice!

• Phong Shading - lighting per frammentorisultati migliori

specialmente con i riflessi luminosi e piccoli (esponente speculare alto)

Flat shading Goraund shading Phong Shading

Page 23: Computer Graphics

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

sia per il Gouraud che per il Phong shading

flat shading Goraud shading(Phong shading è simile)

Page 24: Computer Graphics

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

sia per il Gouraud che per il Phong shading• Goraud e Phong servono per superfici

lisce– eliminano gli spigoli artefatti– eliminano anche gli spigoli corretti

• Soluzione: duplicare i vertici

Page 25: Computer Graphics

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

Gouraud o Phong shading?

• le specifiche di OpenGL non prescrivono quale debba essere usato– spesso: Gouraud

• dipende dall'implementatore HW– non esitono nemmeno comandi OpenGL

che cambiano shading da Phong a Gouraud

– (con HW programmabile, possiamo decidere noi)

Page 26: Computer Graphics

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

Lighting in OpenGL: COME

• Abilitare il lighting:

( il colore corrente – per es glColor3f – non conta più. Conta il materiale corrente!)

glEnable(GL_LIGHTING);

• Ora dobbiamo mandare le normali, settare le luci e i materiali

Page 27: Computer Graphics

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

Normali

• Setto la "normale corrente".Proprio come facevo con i colori:

glNormal3d(x,y,z);

la quarta coordinata e' sottointesa: ZERO!(si tratta di vettori)

Page 28: Computer Graphics

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

Cosa succede alle normali?

x

y

z

v0v1

v2

world Coordinates

y

-zv0

v1

v2

view Coordinates(a.k.a. eye Coordinates)

yx

-zv0

v1

v2

v0

v2

v1

v0v1

v2

screen Space

Normalized Device Coordinates

1

-1 1

-1

x

x

y

z

v0

v1

v2

object Coordinates

modellazione

vist

a

proi

ezio

neviewport

Modellazione + Vista:spesso rototraslazioni (trasformazioni rigide)e scalature uniformi (che almeno mantengono gli angoli)

Proiezione:non mantiene gli angoli

risposta: subiscono la Model-View matrix,ma non la Projection matrix.E' proprio per questo che le due sono tenute separate!

Page 29: Computer Graphics

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

Le normali rimangono "normali" nella Transform?• Solo se la modellazione-vista è rigida

modellazione-vista = V ‧ M

rotazioni,traslazioni

(quindi rigida)

rotazioni,traslazionie forse scalature(quindi non sempre rigida)

Page 30: Computer Graphics

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

Le normali rimangono normali nella Transform?• Morale: se uso scalature nella ModelView

devo rinormalizzare le normali prima del Lighting

• chiedo ad OpenGL di farlo:

o di non farlo: (default)

glEnable(GL_NORMALIZE);

glDisable(GL_NORMALIZE);

Page 31: Computer Graphics

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

Normali come attributi

• Proprio come il colore:glBegin(GL_TRIANGLES); glNormal3fv( n ); glVertex3fv( v0 ); glVertex3fv( v1 ); glVertex3fv( v2 ); glBegin(GL_END);

glBegin(GL_TRIANGLES); glNormal3fv( n0 ); glVertex3fv( v0 ); glNormal3fv( n1 ); glVertex3fv( v1 ); glNormal3fv( n2 ); glVertex3fv( v2 ); glBegin(GL_END);

flat shading !

Gouraud shading (o forse* Phong)* dipende dall'impl. di

OpenGL

Page 32: Computer Graphics

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

Normali come attributi

• Scorciatoia:– se invoco:

glShadeModel(GL_FLAT);

glShadeModel(GL_SMOOTH);

gli attributi non vongono interpolatima rimangono costanti nella faccia(utile per le triangle strip e i triangle fan), finchè non rimetto

Page 33: Computer Graphics

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

OpenGL: luci!

• Abbiamo a disposizione N luci– ricordiamoci: il loro effetto

(ambient + diffuse + specular) si somma

• quante? – dipende dall'implementazione di OpenGL– le specifiche di OpenGL impongono: almeno 8– il numero esatto lo troviamo nella costante

GL_MAX_LIGHT

Page 34: Computer Graphics

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

OpenGL: luci!

• Ogni luce può essere "accesa" o "spenta"

• dove GL_LIGHT0, GL_LIGHT1 etc sono costanti– nota: GL_LIGHTk vale GL_LIGHT0+k. Utile per i for

• di default, la luce 0 è l'unica accesa

glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);...

Page 35: Computer Graphics

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

OpenGL: luci!

• Di ogni luce, settiamo i colori

glLightfv(GL_LIGHT0, GL_DIFFUSE, v);

glLightfv(GL_LIGHT0, GL_AMBIENT, v);

glLightfv(GL_LIGHT0, GL_SPECULAR, v);

Page 36: Computer Graphics

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

OpenGL: luci!

• Di ogni luce, possiamo anche settare:– se voglio effetto spotlight:glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,v);glLightf (GL_LIGHT0,GL_SPOT_CUTOFF,v);glLightf (GL_LIGHT0,GL_SPOT_EXPONENT,v);

default:(0,0,-1) 180 0.0

glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,a);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,b);glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,c);

– se voglio attenuazione con la distanza: default:100

Page 37: Computer Graphics

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

OpenGL: luci!

• Di ogni luce, settiamo la posizione:glLightfv(GL_LIGHT0,GL_POSITION,v);

– Se luce posizionale,v = {x,y,z,1}

– Se luce direzionale, ("distante all'infinito") v = {x,y,z,0}– Coordinate affini!

Page 38: Computer Graphics

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

OpenGL: luci!

• Di ogni luce, settiamo la posizione:

• importante:la posizione delle luci subisce la moltiplicazioneper la matrice MODEL_VIEW corrente

glLightfv(GL_LIGHT0,GL_POSITION,v);

per es: come faccio a fare la tipica headlight?

Page 39: Computer Graphics

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

Equazione di Lighting

nspacularmaterialespacularluce NHkI )ˆˆ(

)ˆˆ( NLkI diffusematerialediffuseluce

ambientmaterialeambientluce kI

emissionmaterialek

totIluceneattenuaziof

1,1min 2L3L21 dcdcc

f luceoneattentuazi

spotlighteffettof

widthbeamAnglecutoffdirectionspotlighteffetto spotspotspotLf ,,,f

caratteristiche della lucecaratteristiche del materialedati della geometria

Page 40: Computer Graphics

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

OpenGL: materiali!

• Settiamo tutti i parametri dei materiali:– i colori: glMaterialfv(face, GL_AMBIENT, colorvec); glMaterialfv(face, GL_EMISSION, colorvec); glMaterialfv(face, GL_DIFFUSE, colorvec); glMaterialfv(face, GL_SPECULAR, colorvec);

glMaterialf (face, GL_SHININESS, intval);

– l'esponente speculare:

"GL_FRONT"

scorciatoia: esiste anche asdasdsadasdasd

che setta entrambii colori allo stesso valore

GL_AMBIENT_AND_DIFFUSE

Page 41: Computer Graphics

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

Il meccanismo "Color – Material"

glEnable(GL_COLOR_MATERIAL);

glColorMaterial(face, mode);

glColorMaterial(GL_FRONT, GL_DIFFUSE);

es: se si mette

attivazione:

uso:

allora come colore diffuso del materiale siuserà (l'altrimenti ingorato) colore corrente - si, proprio quello settato col vecchio glColor3f

Page 42: Computer Graphics

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

Non abbiamo ancora visto:illuminazione da due lati contemporaneamente

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1);

glColorMaterial3f(GL_BACK, ... );

glColorMaterial3f(GL_FRONT, ... );

glColorMaterial3f(GL_FRONT_AND_BACK, ... );

attivazione:

uso: