Informatique Graphique

Utilisation des shaders

Guillaume Gilet

Shaders et programmation du pipeline graphique

  • Le but de ce TP est de réaliser un ensemble d'exercices afin de vous familiariser avec les shaders et la programmation en GLSL
  • Commencez par vous familiariser (si besoin) avec les exemples présentés en cours
  • Rappel : le cours se trouve ici

Vertex Shader et transformations

  • Dans le vertex shader, créez une variable couleur de nature varying et de type vec3. Cette variable sera transmise au fragment shader qui doit l'utiliser pour définir la valeur de couleur du fragment. Cette variable prendra les valeurs suivantes :
    • Une valeur arbitraire (définie en dur dans le code)
    • La valeur de la position dans l'espace objet de chaque sommet
    • La valeur (absolue) de la position dans l'espace objet de chaque sommet
    • La valeur de la position de chaque sommet projeté sur l'image
    • Pour la suite des exercices, utilisez la valeur absolue de la normale comme couleur

Vertex Shader et déformation

  • Ces exercices (indépendants du premier) reposent sur la déformation de la géométrie dans le vertex shader.
    • Déplacez, dans l'espace de l'objet, chacun des sommets ayant une coordonnée X supérieure à 0 de 0.03 unités le long de sa normale.
    • Déplacez, dans l'espace de l'objet, chacun des sommets ayant une coordonnée Y supérieure à 0 de 0.2 unités le long de son axe X. Il suffit d'augmenter la valeur de la coordonnée x de la position du sommet.
    • Réalisez cette dernière opération dans l'espace écran (après projection). Que constatez vous ?

Vertex Shader et déformation (bis)

  • Utilisez une variable temps (définie par le CPU) afin de réaliser une animation du modèle basée sur le temps
  • Commencez par déformer les sommets du lapin dans l'espace objet en fonction du cosinus de cette variable temps (par exemple,pour un sommet : x = x + 0.1*cos(y*time))
  • Réalisez ensuite la même opération dans l'espace image et commentez
  • Beaucoup d'autres déformations sont possibles. A vous d'expérimenter !

Interaction Vertex-Fragment et place des calculs

  • La plupart des programmes reposent sur une interaction entre vertex et fragment program.
    • Dans le vertex shader, calculez une couleur pour chaque zone de l'objet (par exemple, une couleur spécifique pour les sommets avec Z > 0 et une autre pour les Z <= 0) et assignez cette valeur à la variable couleur. Assignez a chaque fragment cette couleur dans le fragment shader.
    • Recommencez la même opération en assignat cette fois la position dans l'espace objet a la variable couleur et en effectuant le calcul de couleur finale dans le fragment program. Que constatez vous ? Pouvez vous expliquer pourquoi ?