Synthèse d`images 3/3

Transcription

Synthèse d`images 3/3
Synthèse d’images 3/3
ENSEEIHT – 3AI
Traitement & Synthèse d’Images
Rappel séance précédente
Geometry
Shader
Vertex Shader
Paramétrage
des triangles
programmable
Transformation
écran
Découpage
Discrétisation
des triangles
Pixel Shader
paramétrable
Fusion
fixe
Séance 3
MISE EN ŒUVRE OPENGL
Plan
• Mise en œuvre du pipeline en OpenGL
– Démo per fragment shading
• Quelques techniques avancées
OpenGL: bases
• Fonctions
– Préfixées par gl: glEnable (), glMatrixMode ()
– Suffixées par: le nombre et le type des arguments
• glColor3i ()
– Scalaires/ vectorielles: glLightfv ()
• Constantes:
– Majuscules
– Préfixées par GL_
• glShadeModel (GL_SMOOTH)
Shaders en OpenGL
• Historiques: Register Combiners, assemblers…
• OpenGL 2.0: normalisation du langage GLSL
• Unification des geometry, vertex et fragment
shaders
– Même nombres d’instructions
– Même fonctions (e.g. accès texture dans VS)
GLSL
• Démonstration
• Code disponible à
– http://dehais.perso.enseeiht.fr/tsi_ogl/
Séance 3
QUELQUES TECHNIQUES AVANCÉES
Rendu multi passes
Vertex Shader
Geometry
Shader
Transformation
écran
Découpage
Texture
Pixel
Shader
Fusion
Images
Rendu multi passes
• Post-processing: effet de halo
Rendu multi passes
• Post-processing: profondeur de champ
Rendu multi passes
• Post-processing: profondeur de champ
Rendu multi passes
• Post-processing: profondeur de champ
Deferred rendering
• Première passe: stockage des positions,
normales,couleurs, profondeur dans des tampons
séparés (G-buffers)
• Deuxième passe: assemblage et ombrage
• Bénéfices:
– Limiter le nombre de calculs par pixels
– Limiter le nombre d’appel de fonction (batch, draw
calls)
• Inconvénients
– Bande passante mémoire
– Anti-aliasing difficile
Deferred rendering
Deferred rendering
Deferred rendering
Deferred rendering
Ombres
Ombres
• Pour chaque source lumineuse si
– Calcul de la profondeur de la scène vue depuis la
source de lumière
• Rendu standard:
– Pour chaque pixel, calculer sa profondeur vis-à-vis
de chaque source lumineuse si
– Si profondeur > zbuffer (si), alors le pixel est
ombré