M2PRO - Images
Année 2007-2008

    TP 2 - Eclairement et Fragment Shaders



vertex lighting fragment lighting
calcul par sommet (vertex shading)
calcul par pixel (fragment shading)



Partie 1 : calculs dans le vertex shader

    Commncez par le plus simple : une matière diffuse (Lambert). De même, dans un premier temps, définissez la source de lumière en utilisant des constantes déclarées dans le vertex shader. Vous pouvez utiliser une source directionnelle ou ponctuelle.

    étape 2 : utilisez des paramètres de shader pour définir la source de lumière. Quel type de paramètre : uniform, attribute, varying ?

    étape 3 : si ce n'est pas le cas, créez une source de lumière ponctuelle.

    étape 4 : si vous le souhaitez définissez complètement la source de lumière : ambient, diffus, spéculaire, couleur du reflet, etc.

    étape 5 : ajoutez maintenant le modèle de phong. Quels paramètres utiliser ? Comment les transmettre au shader ?

remarque : dans quel espace travaille le shader ? Dans quel espace faire les calculs d'éclairement ? Quelles sont les transformations nécessaires ?

Partie 2 : calculs dans le fragment shader

    Créer un fragment shader qui calcule le terme de phong, le terme diffus sera toujours calculé par le vertex shader. Comment transmettre les résultats du calcul entre les deux shaders ?

remarque : dans quel espace travaille le fragment shader ? Dans quel espace faire les calculs d'éclairement ? Quelles sont les transformations nécessaires ?



Partie Subsidiaire : animation fluide ?


    On souhaite maintenant utiliser l'idée du TP1 pour animer un personnage complet en interpolant la position de chacun des sommets d'un maillage.

    Par exemple : le modèle bigguy (nvidia SDK).

t0
t1
t= 8, Image 8 de l'animation
t= 10, Image 10 de l'animation


    Chargez les maillages à deux instants assez éloignés (bigguy_00.obj et bigguy_10.obj, par exemple) et écrivez une fonction d'affichage capable d'interpoler la position de chaque sommet du maillage en fonction du temps.

       remarque : objtoy fournit les fonctions nécessaires : [Documentation et exemple]
       model_vbo_clean (dans model_clean)
       model_set_vertex_norm et model_set_faces_norm (dans model)


    Avez-vous des remarques sur la qualité de l'interpolation ? Quels peuvent être les problèmes ? Comment les régler ?

    Vous aurez sans doute besoin de SDL_GetTicks (cf. SDL_PG) pour vous repérer dans le temps (cette fonction renvoie le temps en millisecondes depuis le début de l'éxécution du programme).

    Chargez tous les maillages et reconstruisez l'animation complète.

    Comment transmettre efficacement tous les paramètres aux shaders ??

    Utilisez les shaders d'éclairement des parties précédentes.

    Et les ombres ?? pour les curieux, un peu de lecture sur les shadow maps.