La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.

Presentazioni simili


Presentazione sul tema: "Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione."— Transcript della presentazione:

1 Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione 11: lo Shading

2 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 / 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 I 4 fattori che consideriamo luce finale = ambiente + riflessione diffusa + riflessione speculare + emissione

3 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 / 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 Equazione di Lighting caratteristiche della luce caratteristiche del materiale dati della geometria

4 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 / 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 ^ Normale di un triangolo Cioe' il suo orientamento nello spazio N v0v0 v2v2 v1v1

5 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 / 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 Lighting faccia per faccia "flat shading" 1. geometria di partenza 2. per ogni faccia, calcolo normale 3. applico lighting ad ogni normale

6 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 / 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 Definizione Shading: –ricetta per applicare un lighting Ad esempio: flat shading 1.Applico lighting a normale di faccia - (ottengo un colore) 2.Copro tutta la faccia di quel colore

7 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 / 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 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

8 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 / 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 Flat shading: problema Altro esempio:

9 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 / 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 Flat shading: problema Più faccie uso, meno evidente il problema > faccie, e ancora si vedono gli spigoli artefatti perche?

10 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 / 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 Flat shading: problema A peggiorare le cose: l'effetto ottico Mach-band Il contrasto fra zone di colore uniforme non 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 e' duro a morire.

11 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 / 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 Idea Utilizzare l'interpolazione del colore dentro alla faccia

12 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 / 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 "Gouraud" Shading Idea 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 Per applicare il lighting, devo avere la normale! Normale definita per una faccia. Ma per un vertice? by Henri Gouraud, 1971

13 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 / 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 Normali per vertice In certi contesti, la normale dei vertici nasce 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 quando si costruisce una superficie triangolata campionando una superficie parametrica... Sennò...

14 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 / 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 Normali per vertice Normale di un Triangolo: v1v1 v2v2 v1×v2v1×v2 Normale di un vertice condiviso da n triangoli:

15 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 / 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 Dove avviene la computazione del lighting? Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice x y z v0v0 v1v1 v2v2 v0v0 v1v1 v2v2

16 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 / 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 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

17 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 / 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 Gouraud shading Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice compreso: proprietà del materiale e normale proietto e applico lighting interpolo colore compreso:c ol. finale compreso: colore per vertice (risultato del lighting)

18 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 / 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 Gouraud shading Risultati:

19 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 / 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 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)

20 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 / 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 Si può fare meglio Invece di interpolare il colore dopo il lighting. interpolo la normale prima del lighting! "Phong" Shading by Bui-Tuong Phong, 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) *

21 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 / 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 Phong shading Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice compreso: proprietà del materiale e normale proietto interpolo normale compreso: normale interpolata compreso: normale trasformata rinormalizzo e applico lighting per ottenere il colore del frammento

22 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 / 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 Gouraud contro Phong shading Goraud Shading - lighting per vertice molto meno oneroso: applico il lighting una volta per vertice! Phong Shading - lighting per frammento risultati migliori specialmente con i riflessi luminosi e piccoli (esponente speculare alto) Flat shading Goraund shading Phong Shading

23 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 / 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 sia per il Gouraud che per il Phong shading flat shading Goraud shading (Phong shading è simile)

24 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 / 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 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

25 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 / 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 Gouraud o Phong shading? le specifiche di OpenGL non prescrivono quale debba essere usato –di solito (per ora) Gouraud dipende dall'implementatore HW –non esitono nemmeno comandi OpenGL che cambiano shading

26 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 / 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 Passiamo a OpenGL 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

27 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 / 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 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)

28 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 / 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 Cosa succede alle normali? x y z v0v0 v1v1 v2v2 world Coordinates y -z v0v0 v1v1 v2v2 view Coordinates (a.k.a. eye Coordinates) y x -z v0v0 v1v1 v2v2 v0v0 v2v2 v1v1 v0v0 v1v1 v2v2 screen Space Normalized Device Coordinates 1 1 x x y z v0v0 v1v1 v2v2 object Coordinates modellazione vista proiezione viewport Modellazione + Vista: trasformazioni rigide (o 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!

29 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 / 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 Le normali rimangono normali nella Transform? Solo se la modellazione-vista è rigida modellazione-vista = V M rotazioni, traslazioni (quindi sempre rigida) rotazioni, traslazioni e forse scalature (quindi non sempre rigida)

30 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 / 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 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);

31 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 / 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 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)

32 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 / 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 Normali come attributi Scorciatoia: –se setto: glShadeModel(GL_FLAT); glShadeModel(GL_SMOOTH); gli attributi non vongono interpolati ma rimangono costanti nella faccia (utile per le triangle strip e i triangle fan), finchè non rimetto

33 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 / 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 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

34 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 / 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 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);...

35 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 35/40 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);

36 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 36/40 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) 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:

37 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 37/40 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!

38 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 38/40 OpenGL: luci! Di ogni luce, settiamo la posizione: importante: la posizione delle luci subisce la moltiplicazione per la matrice MODEL_VIEW glLightfv(GL_LIGHT0,GL_POSITION,v); per es: come faccio a fare la tipica headlight?

39 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 39/40 Equazione di Lighting caratteristiche della luce caratteristiche del materiale dati della geometria

40 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 40/40 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 entrambi i colori allo stesso valore GL_AMBIENT_AND_DIFFUSE

41 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 41/40 Non abbiamo ancora visto: 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 si userà (l'altrimenti ingorato) colore corrente - si, proprio quello settato col vecchio glColor3f

42 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 / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 42/40 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:


Scaricare ppt "Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione."

Presentazioni simili


Annunci Google