Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Les Processeurs Graphiques Programmables
P. Gautron
2
Plan Structure Programmation Applications
3
Plan Structure Programmation Applications
4
Structure globale du GPU
Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …
5
Géométrie transformée
Vertex Shader Rôle : projeter chaque sommet dans le plan image Vertex Shader Géométrie Géométrie transformée Vertex Shader Vertex Shader Vertex Shader
6
Structure globale du GPU
Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …
7
Rasterizer Rôle : remplissage de polygônes
8
Rasterizer Rôle : remplissage de polygônes V2 Scan Line I1 IP I2 V1 V3
: Interpolation Linéaire
9
Structure globale du GPU
Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …
10
Géométrie transformée
Fragment Shader Rôle : calculer la “couleur” de chaque fragment Fragment Shader Géométrie transformée Image finale Fragment Shader Fragment Shader Fragment Shader
11
GPU en Pratique Calcul parallèle Implique:
Indépendance des sommets/fragments Vertex shader lit depuis textures + variables uniformes Vertex shader écrit position sur l’écran + variables Fragment shader lit depuis textures + variables Fragment shader écrit à 1 position dans le frame buffer
12
GPU en Pratique Architecture Implique: Textures = tableaux
Pas de SD complexes Pas de pointeurs Vertex shader ne "connaît" que le sommet en cours Fragment shader ne "connaît" que le fragment en cours Les vertex et fragment shaders doivent être simples
13
GPU : Mécanismes Câblés
Backface Culling : Elimination des faces non visibles
14
GPU : Mécanismes Câblés
Backface Culling : Elimination des faces non visibles Test : Orientation N V.N > 0 V V N V.N < 0
15
GPU : Mécanismes Câblés
Deph test : résolution des occlusions Z < Z ?
16
GPU : Mécanismes Câblés
Alpha Blending : mélange α α
17
Plan Structure Programmation Applications
18
OpenGL : Machine à Etats
glColor( ) glBindTexture( ) glTexCoord((u,v)) glNormal( ) Etats Color Color TexCoord (u,v) Texture Texture Normal Pipeline Vertex Shader Fragment Shader Rasterizer Tests glVertex
19
Description de Géométrie
Réglage de la valeur des états Envoi au pipeline glBegin( {GL_LINES | GL_TRIANGLES | GL_QUADS | … }) glTexCoord{1|2|3|4}{i|f|d}( texture_coord ); glColor{1|2|3|4}{i|f|d}( color ); glVertex[1|2|3|4}{f|d} ( vertexPos); glEnd(); glBindTexture(GL_TEXTURE_2D, tex);
20
Description des Transformations
But : Spécifier la projection de la géométrie dans le plan image 2 matrices 4x4 : ModelView : Positionnement de la géométrie glTranslate(), glRotate(), … Positionnement du point de vue gluLookAt() Projection : Type de camera glOrtho(), gluPerspective() Utilisées dans le vertex shader
21
Projection du sommet sur l’image
Vertex Shader Câblé void main() { gl_Position = gl_ModelviewMatrix * gl_ProjectionMatrix * gl_Vertex; color = gl_Color; texCoord = gl_TexCoord; lighting = computeLighting(gl_Normal, color); } Projection du sommet sur l’image Envoi des attributs pour interpolation Calcul de l’éclairage par sommet
22
Calcul de la couleur du fragment
Fragment Shader Câblé void main() { gl_FragColor = color* texture2D(tex, texCoord)* lighting; gl_FragDepth = gl_Position.z; } Calcul de la couleur du fragment Calcul de la profondeur du fragment
23
Shaders Programmables : GLSL
glEnum vs = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); glEnum fs = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB) glEnum program = glCreateProgramObjectARB() Création glShaderSourceARB(vs, 1, VSSourceString, NULL); glCompileShaderARB(vs); glShaderSourceARB(fs, 1, FSSourceString, NULL); glCompileShaderARB(fs); glAttachObjectARB(program, vs); glAttachObjectARB(program, fs); glLinkProgramARB(program); Compilation Destruction glDeleteObjectARB(vs); glDeleteObjectARB(fs); glDeleteObjectARB(program);
24
Shaders Programmables : GLSL
Utilisation glUseProgramObjectARB(program); glBegin( {GL_LINES | GL_TRIANGLES | GL_QUADS | … }) glTexCoord{1|2|3|4}{i|f|d}( texture_coord ); glColor{1|2|3|4}{i|f|d}( color ); glVertex[1|2|3|4}{f|d} ( vertexPos); glEnd(); glBindTexture(GL_TEXTURE_2D, tex); Nb : Retour au shaders câblés par glUseProgramObjectARB(0);
25
GLSL Types de données Variables Scalaires : float, half, int
Vecteurs : vec2, vec3, vec4, hvec2, hvec3, hvec4 Matrices : mat3, mat4 Textures : sampler1D, sampler2D, sampler3D Variables uniform : définies une fois pour toutes dans le programme Exemples : ID de textures, sources lumineuses, matrices Envoi des valeurs par glSet{Int|Float}Uniform() varying : calculées dans le VS, interpolées et envoyées au FS Exemples : couleur, coordonnées de texture
26
Exemple : Placage de texture
Vertex Shader Fragment Shader varying vec4 color; varying vec4 texCoord; void main() { gl_Position = gl_ProjectionMatrix* gl_ModelviewMatrix * gl_Vertex; color = gl_Color; texCoord = gl_TexCoord; } varying vec4 color; varying vec4 texCoord; uniform sampler2D tex; void main() { gl_FragColor = color* texture2D(tex, texCoord); }
27
Plan Structure Programmation Applications
28
MultiTexturing Vertex Shader Fragment Shader varying vec4 color;
varying vec4 texCoord; void main() { gl_Position = gl_ProjectionMatrix* gl_ModelviewMatrix * gl_Vertex; color = gl_Color; texCoord = gl_TexCoord; } varying vec4 color; varying vec4 texCoord; uniform sampler2D tex1; uniform sampler2D tex2; uniform sampler2D tex3; void main() { gl_FragColor = color* texture2D(tex1, texCoord)* texture2D(tex2, texCoord)+ texture2D(tex3, texCoord) }
29
Eclairage par Pixel Vertex Shader Fragment Shader varying vec4 color;
varying vec4 texCoord; varying vec3 normal; varying vec4 pos; uniform sampler2D tex; void main() { gl_FragColor = color* texture2D(tex, texCoord); gl_FragColor *= lighting(normal); } vec4 lighting(vec3 normal) vec4 lightDir = normalize( gl_LightSource[0].position – pos); return gl_LightSource[0].color* max( 0.0, dot( normal, lightDir)); varying vec4 color; varying vec4 texCoord; varying vec3 normal; varying vec4 pos; void main() { pos = gl_ModelviewMatrix* gl_Vertex; gl_Position = gl_ProjectionMatrix* gl_ModelviewMatrix * color = gl_Color; texCoord = gl_TexCoord; normal = gl_Normal; }
30
Géométrie transformée
Render-To-Texture Idée : réutiliser le résultat d’une passe de rendu dans une autre Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …
31
Géométrie transformée
Render-To-Texture Idée : réutiliser le résultat d’une passe de rendu dans une autre Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Texture Données…
32
GPGPU But : effectuer des calculs parallèles sur GPU
Comment : en exploitant le parallélisme des vertex/fragment shaders Idée de base : faire un calcul séparé pour chaque fragment, et récupérer les résultats
33
Liens OpenGL (FR) : http://raphaello.univ-fcomte.fr/IG/Default.htm
Tutoriaux, OpenGL 1.1 OpenGL (EN) : Spécifications, Exemples OpenGL (EN) : Spécifications OpenGL et GLSL, Exemples OpenGL pour les jeux (EN) : Tutoriaux, OpenGL avancé avec shaders Edition intuitive de shaders : Calcul parallèle sur GPU (EN) :
34
Livres
35
Livres
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.