TP1 : Mod�les d'illumination locale
- Sources du projet
- Sp�cifications GLSL
- OpenGL 3.2 API Quick Reference Card
Échauffement

(d'apr�s LightHouse3D, A. R. Fernandes)

Testez le shader smoothColor. Vous obtenez l'image d'un cube dont les couleurs aux sommets sont interpolées linéairement. Une fois l'application compilée, vous pouvez modifier le shader courant et le recharger durant l'exécution avec la combinaison de touches 'CTRL+L'. Le code des shaders se trouve dans les fichiers .vert pour la transformation des sommets et .frag pour la rasterisation des fragments (dans le r�pertoire qviewer/shaders). Un menu d�roulant vous permet par ailleurs de choisir l'un des shaders d�clar� dans le fichier programs.xml.
La gestion des shaders est encapsul� dans la classe GQShaderManager. Comme illustr� par le diagramme, cette classe charge et compile ind�pendamment les vertex et fragment shaders avant de pratiquer l'�dition de lien du programme complet. Regarder la m�thode drawScene de la classe Scene pour un exemple d'utilisation de GQShaderManager. Une fois le programme activ�, les variable uniformes (notamment les matrices de transformation) peuvent �tre initialis�es.
Regarder ensuite le code OpenGL dans les m�thodes createVAO et draw de la classe Cube. La premi�re va créer un Vertex Array Object (VAO). Celui-ci permet, lors de l'affichage, d'envoyer en une seul instruction la géométrie (le buffer des sommets : VBO) et ses attributs (couleur, normales...) à la carte graphique. La seconde m�thode est appelée à chaque fois que la fenêtre doit être redessinée. Elle active le VAO et demande le dessin de la g�om�trie � la carte graphique. Dans la suite des TP, nous utiliserons la classe GQVertexBuffer pour encapsuler ces appels.
Modèle de Phong
La luminance réfléchie par cette source se décompose en une partie ambiante la, une partie diffuse ld et une partie spéculaire ls. Si N est la normale à la surface au point d’intérêt à ombrer P, L la direction de la source de lumière depuis le point P et V la direction de P au point de vue alors :

ca = ka * ma * la
avec ka le coefficient de réflexion ambiant, ma la couleur ambiante du matériau et la la couleur ambiante de la lumière.
cd = kd * md * N.L * ld
avec kd le coefficient de réflexion diffus, md la couleur diffuse du matérau et ld la couleur diffuse de la lumière.
cs = ks * ms * ls * (max(R.V,0))^s
avec ks le coefficient de réflexion spéculaire, ms et ls la couleur spéculaires de l’objet et de la lumière, s la brillance de l’objet.
La couleur de l’objet sera alors ca + cd + cs.
Gouraud shading (par sommet)
Le programme phongVertex doit illuminer le lemming avec un �clairement de Phong pour une source lumineuse ponctuelle avec une interpolation de Gouraud.
Afin de bien comprendre comment est form�e l'image finale, mécrire le vertex shader pour afficher tour � tour les images constitu�es uniquement de l'�clairement ambiant, puis diffus, puis enfin sp�culaire :

Phong shading (par fragment)

Modifier les shaders pour impl�menter une interpolation de Phong, c'est-à-dire calculer la couleur en chaque fragment. Vous avez également besoin de passer les vecteurs L, N et V du vertex au fragment shader : ces vecteurs doivent être normalisés, mais où doit être réalisée cette normalisation ?
Quel(s) changement(s) dans l'illumination constatez-vous ?
Que pensez-vous du surcoût en terme de calcul qu'implique cette interpolation ?
Éclairement de Blinn-Phong
Modifier les shaders afin d'impl�menter un �clairement de Blinn-Phong. Pour cette variante, la composante sp�culaire s'obtient avec la formule :
ls = ks * ms * ls * (max(N.H,0))^s
o� H est le demi-vecteur entre les vecteur oeil V et celui de la source lumineuse L.
Vous devriez obtenir un r�sultat �quivalent � l'�clairement de Phong en multipliant par quatre l'exposant de brillance.
Toon shading

Le Toon shading est un modèle d'éclairage qui permet de générer des images à l'aspect cartoon. Le principe est de seuiller l'ombrage utilisé pour le rendu pour obtenir des bandes de couleur uniformes.
La couleur est calcul�e � partir de l�angle form� entre la normale � la surface N et le vecteur L. Plus pr�cisément, on peut att�nuer la couleur du lemming par pallier en seuillant le produit scalaire N.L.
Créer une nouvelle paire de shaders toon implémentant cette première étape de rendu non-photoréaliste (la suite au TP3).