36
Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse Master Informatique 2019-2020 [email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 1 / 36

Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Chapitre 4 : OpenGL 3DEclairage par modèle de Phong

Modélisation 3D et Synthèse

Master Informatique

2019-2020

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 1 / 36

Page 2: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Objectif

I Modèle de Phong = calcul de la couleur provenant de 2 contributions : la réflexion diffuse(couleur mat) et réflexion spéculaire (couleur brillante = tâche spéculaire).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 2 / 36

Page 3: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

1 Produit scalaire et produit vectoriel

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 3 / 36

Page 4: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Produit scalaire (dot product)

I Apparait pour : équations algébriques (plan), test d’intersection, test de localisation (d’unpoint par rapport à un plan, ...), éclairage (angle d’incidence de la direction d’éclairage surun objet), orientation (tests de directions « opposées » ), ...

Soient u =

ux

uy

uz

, v =

vx

vy

vz

:

I Le produit scalaire donne un nombre.

I u · v = ux vx +uy vy +uzvz (calcul valable uniquement dans un repère orthornormé).

I Norme d’un vecteur : ‖u‖=√

u ·u =√

ux ux +uy uy +uzuz

I Normer un vecteur u signifie le « rendre »de norme 1 (ou unitaire) : u′ = u‖u‖

I Autre calcul du produit scalaire : u · v = ‖u‖‖v‖cos(u,v)

I Si u et v sont normés, u · v ∈ [−1,1]

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 4 / 36

Page 5: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Interprétation du produit scalaire

I Projection :

I u · v = u ·hI ‖h‖= |u·v |

‖u‖

I Si u est unitaire : h = (u.v)u

I Angle et localisation :

u · v = 0 (orthonormal) u · v > 0 (aigu) u · v < 0 (obtus)

I Si u et v unitaires alors u · v = cos(u,v) (donne un nombre dans [−1,1].

I acos(u · v) donne alors l’angle entre u et v dans [0,π].

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 5 / 36

Page 6: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Produit vectoriel (cross product)

I Apparait pour : détermination de normales (vecteur orthogonal à un plan), construction devecteurs (repères par exemple), construction d’orientations (définition d’un sensdirect-indirect), ...

Soient u =

uxuyuz

, v =

vxvyvz

: w = u× v =

uy vz − vy uzuzvx − vzuxux vy − vx uy

u

v

u∧v

I Si u et v colinéaires (i.e. u = λv ) alors u× v = 0

I w est orthogonal à u et v .

I w est orienté tel que (u,v ,w) est direct (rêgle de la maindroite)

I ‖w‖= ‖u‖‖v‖|sin(θ)|

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 6 / 36

Page 7: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Remarques sur le produit vectoriel

I Attention le produit vectoriel est non commutatif : u× v =−v×u (changement de signe).

I Un vecteur orthogonal à un polygone est appelé une normale et peut être calculé parproduit vectoriel si on connait les sommets.

I Exemple d’un triangle (A,B,C) : n =−→AB×−→BC est une normale.

I La normale d’un triangle (A,B,C) sera dite directe si les sommets A, B et C sont décritsdans le sens trigonométrique par rapport à la normale (en regardant la normale pointéevers soi).

I sens trigonométrique = sens contraire des aiguilles d’une montre.

N

A

B

C

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 7 / 36

Page 8: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Classe Vector3

I On confond généralement points et vecteurs dans la même classe (à l’utilisateur de savoirce qu’il manipule).

class Vector3 {

public :/ / / cons t ruc ts the vec to r ( x , y , z )e x p l i c i t Vector3 ( double x =0.0 , double y =0.0 , double z = 0 . 0 ) ;/ / / g e t t e r sdouble x ( ) const ;double y ( ) const ;double z ( ) const ;/ / / s e t t e r svoid x ( double k ) ;void y ( double k ) ;void z ( double k ) ;

. . .private :

s td : : array <double ,3 > c_ { 0 . 0 , 0 . 0 , 0 . 0 } ; / / x=c_ [ 0 ] , y=c_ [ 1 ] , z=c_ [ 2 ]

} ;

/ / / @brief Ex : p=p1+p2Vector3 opera tor +( Vector3 a , const Vector3 &b ) ;/ / / @return the dot product a . bdouble dot ( const Vector3 &a , const Vector3 &b ) ;/ / / @return the cross product v1 x v2Vector3 cross ( const Vector3 &v1 , const Vector3 &v2 ) ;

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 8 / 36

Page 9: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Eclairage

I Pour ajouter du réalisme et pour la perception de la 3D, on propose de calculer la couleurdes pixels pour simuler un éclairage de la scène par des sources lumineuses.

⇒ calcul de la couleur provenant de 2 contributions : réflexion diffuse (couleur mat) etréflexion spéculaire (couleur brillante = tâche spéculaire).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 9 / 36

Page 10: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Données

Les données nécessaires au calcul d’éclairage sont :I Les sources (principalement la position).

I Le matériel des objets (caractéristiques qui traduisent comment est réfléchie la lumière dessources).

I Les composantes (rouge, vert, bleu) qui apparaissent dans la suite sont comprises entre 0et 1.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 10 / 36

Page 11: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Modèle d’éclairage

I On choisit le modèle empirique de Phong.

I Très simple, mais aussi très éloigné de la réalité.

I Le vecteur V est appelé vecteur d’observation, le vecteur L est appelé vecteur d’éclairage.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 11 / 36

Page 12: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Intensité diffuse 1/2

I On suppose qu’un objet (un matériel) diffuse la lumière reçue de manière uniforme danstoutes les directions.

I L’intensité perçue ne dépend donc pas de la position de l’observateur par rapport au pointéclairé.

I L’intensité sera un nombre calculé entre 0 et 1 (1 = éclarage maximal, 0 = éclairage nul).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 12 / 36

Page 13: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Intensité diffuse 2/2

I L’intensité dépend de l’angle d’incidence des rayons lumineux sur la surface de l’objet

• un éclairage direct (i.e. la lumière arrive orthogonalement à la surface) donne uneintensité maximale.

• un éclairage fuyant (i.e tangent à la surface) donne une intensité nulle.• ⇒ prise en compte de la normale N (i.e. vecteur orthogonal) à la surface au point P.• on souhaite que l’intensité varie « continuement »entre ces 2 positions extrèmes de la

manière la plus réaliste possible.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 13 / 36

Page 14: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Calcul de l’intensité diffuse

I On supposera toujours que N et L sont normés pour ce calcul (‖N‖= ‖L‖= 1).

I Le calcul de l’intensité du diffus par cos(N,L) est un « bon »choix.

I Comme les vecteurs sont de norme 1 : cos(N,L) = N ·LI ⇒ il suffit de calculer N ·L.

I seul le « coté »dirigé par la normale est éclairé : intensité = max(dot(N,L),0.0) (siN ·L < 0 alors éclairage nul).

I ⇒ important de spécifier correctement le sens de la normale.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 14 / 36

Page 15: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Traduction en OpenGL

I On se contente ici de calculer la réflexion diffuse uniquement aux sommets :• On donne le vecteur normal en chaque sommet (attribut du vertex shader).• On calcule l’intensité lumineuse dans le vertex shader.• ⇒ obtention d’une couleur en chaque sommet.

I La couleur des pixels lors de la rasterization est alors simplement obtenue par interpolationlinéaire des couleurs.

I ⇒ approximation convenable.

⇒ l’interpolation linéaire des couleurs, dans le cadre de l’éclairage est appeléeinterpolation de Gouraud.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 15 / 36

Page 16: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Shaders

# vers ion 330

layou t ( l o c a t i o n =0) i n vec3 p o s i t i o n ; / / l a p o s i t i o nl ayou t ( l o c a t i o n =1) i n vec3 normal ; / / l a normale

uni form mat4 p r o j e c t i o n ;uni form vec3 l i g h t P o s i t i o n ; / / p o s i t i o n de l a source lumineuse

out vec4 fCo lo r ;

void main ( ) {vec3 L= l i g h t P o s i t i o n−P; / / L = Source−Pvec3 N=normal ;

L=normal ize ( L ) ;N=normal ize (N ) ;

f l o a t i n t e n s i t e = max( dot (N, L ) , 0 . 0 ) ;

fCo lo r = vec4 ( i n t e n s i t e , i n t e n s i t e , i n t e n s i t e , 1 ) ;

g l _ P o s i t i o n = p r o j e c t i o n∗vec4 ( pos i t i on , 1 . 0 ) ;}

# vers ion 330

i n vec4 fCo lo r ;

out vec4 f ragCo lo r ;

void main ( ) {f ragCo lo r= fCo lo r ;

}

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 16 / 36

Page 17: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

MaterielI Pour avoir une couleur quelconque il suffit de multiplier l’intensité par la couleur souhaitée (cette couleur

diffuseColor fait partie des caractéristiques du matériel de l’objet tracé).

# vers ion 330

layou t ( l o c a t i o n =0) i n vec3 p o s i t i o n ; / / l a p o s i t i o nl ayou t ( l o c a t i o n =1) i n vec3 normal ; / / l a normale

. . .

un i form vec4 d i f f u s e C o l o r ;

void main ( ) {. . .

f l o a t i n t e n s i t e = max( dot (N, L ) , 0 . 0 ) ;

fCo lo r = i n t e n s i t e∗d i f f u s e C o l o r ;

g l _ P o s i t i o n = p r o j e c t i o n∗vec4 ( pos i t i on , 1 . 0 ) ;}

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 17 / 36

Page 18: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Normales 1/3

I On donne une normale à chaque sommet pour le calcul d’éclairement.

I Fournir le vecteur orthogonal au polygone tracé?⇒ pas nécessairement (liberté totale dedonner la normale qu’on souhaite).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 18 / 36

Page 19: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Normales 2/3

I Pouvoir spécifier une normale différente en chaque sommet permet d’obtenir uneapproximation de la forme courbe souhaitée.

I ⇒ permet d’obtenir une perception d’un objet lisse en calculant correctement les normales.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 19 / 36

Page 20: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Normales 3/3

I Résultat pour le diffus :

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 20 / 36

Page 21: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Exemple de spécification des normales pour un objetcomplexe

I La normale de l’objet à représenter peut ne pas être connue et difficilement calculable.

I ⇒ Prendre la moyenne des normales aux facettes incidentes au sommet peut donner unebonne approximation de la surface lisse.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 21 / 36

Page 22: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Effets « spéciaux »avec les normales

I Seule la normale traduit la forme géométrique courbe.

I Le calcul d’éclairement donne alors la perception de relief.

I il s’agit du principe appliqué par la technique dite du « Bump mapping » : spécifier lesnormales d’un relief sans toucher à la géométrie de l’objet.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 22 / 36

Page 23: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

2 FRONT/BACK

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 23 / 36

Page 24: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Orientation d’un triangle : FRONT/BACK

I Un polygone est dit frontal si sa projection à l’écran est orienté direct (est dit arrière sinon).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 24 / 36

Page 25: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Remarques

I Pour les facettes convexes (V1,V2,V3, ...), le signe de V1projV2proj ∧V2projV3proj (=

déterminant) suffit pour déterminer si la facette est frontale ou non.

I Un point P est dit frontal s’il est élément d’une facette frontale.

I Si N est la normale directe (appliquée en P), alors P est frontal ssi V .N > 0.

I (⇒ on peut appliquer la notion frontal/arrière à des objets non décrits par polygones).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 25 / 36

Page 26: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Propriété (back face culling)

I Pour une surface close (frontière entre l’intérieur et l’extérieur d’un volume) bien orientée(faces directes vers l’extérieur) et pour un observateur placé à l’extérieur du volume :• une facette arrière correspond à la face intérieure au volume (i.e. le coté du polygone

qui fait face à l’observateur est intérieur au volume).• ⇒ les facettes arrières sont donc nécessairement occultées (i.e. l’observateur ne voit

pas l’intérieur).• ... donc inutile de les tracer⇒ élimination des faces arrières ou « back face

culling ».

I En OpenGL :• glCullFace(GL_BACK) ou glCullFace(GL_FRONT) pour indiquer les faces à

éliminer• glEnable(GL_CULL_FACE) pour activer l’élimination des faces arrières (élimine la

phase de rasterization sur les polygones arrières)[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 26 / 36

Page 27: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Orientation de la normale pour l’éclairement

I Un point P sera éclairé uniquement si sa normale N et le vecteur d’éclairage L sontorientés dans le "même sens" (N ·L > 0)

I Un point P FRONT (i.e. dont on voit la face directe) sera éclairé avec la normale N

I Un point P BACK sera éclairé avec l’opposée −N.

I ⇒ attention à la cohérence de l’orientation directe/indirecte pour l’ensemble des faces etau sens de la normale associée à chaque sommet.

Ces critères sont issus de l’étude des cas qui peuvent se présenter pour être toujourscohérent. Par exemple :

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 27 / 36

Page 28: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Eclairage ambiant

I Lorsqu’un point n’est pas directement éclairé par une source, il apparaitra complêtementnoir.

I On contre ce problème en donnant une couleur constante aux objets⇒ matériel ambiant.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 28 / 36

Page 29: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Vertex Shader

l ayou t ( l o c a t i o n =0) i n vec3 p o s i t i o n ;l ayou t ( l o c a t i o n =1) i n vec3 normal ;

uni form mat4 modelviewMatr ix ;uni form mat3 normalMatr ix ;uni form mat4 mvp ; / / p r o j e c t i o n M a t r i x∗modelviewMatr ix

uni form vec3 l i g h t P o s i t i o n ;uni form vec3 m a t e r i a l D i f f u s e ;uni form vec4 mater ia lAmbient ;

out vec4 fCo lo rFron t , fColorBack ;

void main ( ) {vec4 pos i t ionEye ;vec3 V, L ,N;f l o a t d i f f u s e I n t e n s i t y F r o n t , d i f f u s e I n t e n s i t y B a c k ;/ / compute l i g h t i n g data i n Eye coord ina tes :pos i t ionEye=modelviewMatr ix∗vec4 ( pos i t i on , 1 ) ;V=−pos i t ionEye . xyz / pos i t ionEye .w;L= l i g h t P o s i t i o n +V;N=normalMatr ix∗normal ;

/ / normal ize a l l vec to rsL=normal ize ( L ) ; V=normal ize (V ) ; N=normal ize (N ) ;

/ / d i f f u s e i n t e n s i t y f o r f r o n t and backf l o a t NdotL=dot (N, L ) ;d i f f u s e I n t e n s i t y F r o n t =max( NdotL , 0 ) ;d i f f u s e I n t e n s i t y B a c k =max(−NdotL , 0 ) ;

/ / co l o r = ambient + d i f f u s e ( d i s t i n c t ma te r i a l s f o r f r o n t and back could be def ined )fCo lo rF ron t = d i f f u s e I n t e n s i t y F r o n t∗vec4 ( ma te r i a lD i f f use ,1 )+ mater ia lAmbient ;fColorBack= d i f f u s e I n t e n s i t y B a c k∗vec4 ( ma te r i a lD i f f use ,1 )+ mater ia lAmbient ;

g l _ P o s i t i o n =mvp∗vec4 ( pos i t i on , 1 ) ;}

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 29 / 36

Page 30: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Fragment Shader

i n vec4 fCo lo rF ron t ;i n vec4 fColorBack ;

out vec4 f ragCo lo r ;

void main ( ) {i f ( g l_FrontFac ing ) {

f ragCo lo r= fCo lo rF ron t ;}else {

f ragCo lo r=fColorBack ;}

}

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 30 / 36

Page 31: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Spéculaire

I La spécularité traduit l’aspect « brillant »de l’objet.

I La réflexion spéculaire provient de la réflexion (au sens « miroir ») des rayons lumineux surl’objet.

I ⇒ on considère alors la direction miroir R du vecteur d’éclairage L (R est le symétrique deL par rapport à N).

I L’intensité de la réflexion spéculaire est maximale dans la direction R et est atténuée autourde cette direction R.

⇒ L’intensité perçue (i.e. la couleur) par l’observateur va donc dépendre de sa positionpar rapport à la direction R.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 31 / 36

Page 32: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Calcul de R

I H = (L.N)N (interprétation du produit scalaire par projection) et 2H = L+R (diagonalesse coupent en leur milieu).

I ⇒ R = 2(L ·N)N−L

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 32 / 36

Page 33: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Calcul spéculaire

I Le calcul de V .R (cosinus de l’angle entre V et R) donne une approximation correcte del’effet spéculaire (maximal dans la direction si R dirigé directement sur l’observateur ;atténué autour).

I Comme pour le diffus : on affecte une caractéristique Ks = (rouge,vert,bleu) pour lematériel.

I Ne pas oublier : tous les vecteurs doivent être normés (V .R = cos(V ,R) ∈ [−1,1])

⇒ CouleurSpéculaire(P) = Ks(V ·R)

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 33 / 36

Page 34: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Résultat

I Le calcul du spéculaire donne une « tache »lumineuse sur l’objet (conséquence de laréflexion des rayons lumineux).

I Pour accentuer ou atténuer l’effet autour de la direction principale, on donne également uncoefficient de brillance s.

I ⇒ CouleurSpéculaire(P) = Ks(V ·R)s

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 34 / 36

Page 35: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Spéculaire et Gouraud

I Spéculaire : très mal rendu s’il est calculé uniquement au sommet puis interpolé.

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 35 / 36

Page 36: Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong ...aubert/m3ds/m3ds_openGL3DPhong.pdf · Chapitre 4 : OpenGL 3D Eclairage par modèle de Phong Modélisation 3D et Synthèse

Interpolation de Phong

I On calcule la réflexion spéculaire en chacun des pixels (donc dans le fragment shader).

I Les vecteurs L,V ,N sont interpolés linéairement par rapport aux valeurs aux sommets(L,V ,N définies comme varying).

[email protected] M3DS/ 4 - OpenGL - Phong Master Informatique2019-2020 36 / 36