1 / 42

Computer Graphics

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 +

sezja
Download Presentation

Computer Graphics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. Normale di un triangolo • Cioe' il suo orientamento nello spazio ^ N v1 v2 v0 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

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

  6. Definizione • Shading: • ricetta per applicare un lighting • Ad esempio: flat shading • Applico lighting a normale di faccia - (ottengo un colore) • 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 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

  7. Flat shading: problema non sembra nemmeno una sfera • Approssimo superfici curve con triangoli • Applico il flat shading • Risultato: • spigoli apparenti su superfici curve un brutto 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 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

  8. 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 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

  9. Flat shading: problema >10.000 facce,e ancora si vedono gli spigoli artefatti • Più facce uso,meno evidenteil problema 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 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

  10. Flat shading: problema • A peggiorare le cose: l'effetto ottico Mach-band Il contrasto fra zone di colore uniformedifficilmente 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. 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

  11. Idea • Utilizzare l'interpolazione del coloredentro alla faccia 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

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

  13. 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ò... 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

  14. Normali per vertice Normale di un Triangolo: v1 v1×v2 v2 Normale di un vertice condiviso da n 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 6 / 0 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

  15. Dove avviene la computazione del lighting? set-up set-up rasterizer punti rasterizer segmenti v1 v0 v2 Frammenti & attributi interpolati Vertici poriettati & attributi computati Screen buffer Vertici & loro attributi set-up rasterizer triangoli computazioniper vertice computazioniper frammento y v1 v0 v2 x z 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

  16. 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" • propriocome le posizioni dei suoi vertici • la computazione delle normali, se necessaria,è tipicamente un pre-processing • concettualmente giusto, e pratico 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

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

  18. 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 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

  19. Si può fare meglio • Invece di interpolare il coloredopo il lighting.interpolo la normaleprima del lighting! • occhio:interpolando duevettori normali, non ottengo un vettore normale: • (devo rinormalizzare dopo l'interpolazione) 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

  20. Si può fare meglio "Phong" Shading * * Attenzione a non confondere il Phong Shading (uno shading) con il Phong Lighting Model (modello di illuminazione) • Invece di interpolare il coloredopo il lighting.interpolo la normaleprima del lighting! Bui-Tuong Phong,1973 1- Interpolo la normale nella faccia 2- Rinormalizzo 3- Applico 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 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

  21. Phong shading set-up set-up rasterizer segmenti rasterizer punti rinormalizzo e applicolighting per ottenereil coloredel frammento trasformo sia normale che posizione compreso: normale interpolata compreso: normaletrasformata interpolo normale compreso: proprietà del materialee normale Frammenti & attributi interpolati Vertici poriettati & attributi computati Screen buffer Vertici & loro attributi set-up rasterizer triangoli computazioniper vertice computazioniper 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 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

  22. Gouraud contro Phong shading Flat shading Goraund shading 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) 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

  23. sia per il Gouraud che per il Phong shading 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 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

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

  25. Gouraud o Phong shading? • le specifiche di OpenGL non prescrivonoquale 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) 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

  26. 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 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

  27. Normali la quarta coordinata e' sottointesa: ZERO! (si tratta di vettori) • Setto la "normale corrente".Proprio come facevo con i colori: glNormal3d(x,y,z); 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

  28. risposta: subiscono la Model-View matrix, • ma non la Projection matrix.E' proprio per questo che le due sono tenute separate! Cosa succede alle normali? v1 v0 v2 • Modellazione + Vista: • spesso rototraslazioni (trasformazioni rigide) • e scalature uniformi • (che almeno mantengono • gli angoli) • Proiezione: • non mantiene gli angoli y v0 v1 x v2 z object Coordinates screen Space modellazione viewport y 1 y y v1 v1 -1 v1 v0 v0 x v2 proiezione v1 v2 vista -z -z v0 v2 v0 x z x 1 v2 -1 view Coordinates (a.k.a. eye Coordinates) Normalized Device Coordinates world Coordinates 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

  29. Le normali rimangono "normali" nella Transform? • Solo se la modellazione-vista è rigida modellazione-vista = V ‧ M rotazioni,traslazioni (quindi rigida) 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 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

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

  31. Normali come attributi flat shading ! Gouraud shading (o forse* Phong) * dipende dall'impl. di OpenGL • 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); 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

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

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

  34. OpenGL: luci! • Ogni luce può essere "accesa" o "spenta" • dove GL_LIGHT0, GL_LIGHT1 etc sono costanti • nota: GL_LIGHTkvale GL_LIGHT0+k. Utile per i for • di default, la luce 0 è l'unica accesa glEnable(GL_LIGHT0); glEnable(GL_LIGHT1); ... 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

  35. OpenGL: luci! glLightfv(GL_LIGHT0, GL_DIFFUSE, v); glLightfv(GL_LIGHT0, GL_AMBIENT, v); glLightfv(GL_LIGHT0, GL_SPECULAR, v); • Di ogni luce, settiamo i colori 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

  36. OpenGL: luci! • Di ogni luce, possiamo anche settare: • se voglio effetto spotlight: default: (0,0,-1) 180 0.0 glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,v); glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,v); glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,v); • se voglio attenuazione con la distanza: default: glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,a); glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,b); glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,c); 1 0 0 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

  37. 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! 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

  38. 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? 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

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

  40. OpenGL: materiali! glMaterialfv(face, GL_AMBIENT, colorvec); glMaterialfv(face, GL_EMISSION, colorvec); glMaterialfv(face, GL_DIFFUSE, colorvec); glMaterialfv(face, GL_SPECULAR, colorvec); • l'esponente speculare: scorciatoia: esiste anche asdasdsadasdasd che setta entrambi i colori allo stesso valore glMaterialf(face, GL_SHININESS, intval); GL_AMBIENT_AND_DIFFUSE "GL_FRONT" • Settiamo tutti i parametri dei materiali: • i colori: 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

  41. Il meccanismo "Color – Material" attivazione: glEnable(GL_COLOR_MATERIAL); uso: glColorMaterial(face, mode); es: se si mette glColorMaterial(GL_FRONT, GL_DIFFUSE); allora come colore diffuso del materiale si userà (l'altrimenti ingorato)colore corrente - si, proprio quello settato col vecchio glColor3f 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

  42. Non abbiamo ancora visto:illuminazione da due lati contemporaneamente attivazione: glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1); uso: glColorMaterial3f(GL_BACK, ... ); glColorMaterial3f(GL_FRONT, ... ); glColorMaterial3f(GL_FRONT_AND_BACK, ... ); 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

More Related