Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Synthèse d’images 2007-2008 Antoine Bouthors Antoine.Bouthors@imag.fr
2
Rappels Extensions OpenGL Fonctions et constantes supplémentaires
Peuvent ne pas être présentes dans l’implémentation Répertoriées par l’ARB Les plus populaires sont labellisées ARB et intégrées dans les versions suivantes d’OpenGL Exemples : ARB_multitexture, ARB_vertex_blend, ARB_shadow, …
3
Historique Sans carte graphique 3D Software configurable OpenGL
Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Sans carte graphique 3D OpenGL Software configurable Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display
4
Historique Software configurable Cartes graphiques première génération
Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Software configurable Cartes graphiques première génération OpenGL Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Hardware Visibility / Display
5
Historique Hardware configurable Cartes graphiques deuxième génération
Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Hardware configurable Cartes graphiques deuxième génération OpenGL + extensions spécifiques (NV_register_combiners…) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display
6
Historique Hardware programmable
Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Hardware programmable Cartes graphiques troisième génération OpenGL + extensions spécifiques (NV_texture_shader…) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display
7
Historique Extensions pour hardware programmable : langage assembleur ou pire Chaque version de chaque carte de chaque fabricant = 1 langage et 1 extension Lourd pour les développeurs
8
Historique => Cg = langage haut niveau
Compile un programme en assembleur Envoie le code assembleur via l’extension adéquate Les paramètres des shaders doivent tous être explicitement définis
9
Historique DirectX 9 => HLSL OpenGL 1.5 => GLSL Cg : obsolète… ?
Quasi équivalent à Cg OpenGL 1.5 => GLSL Pas de profils, peu de restrictions Interagit avec les états d’OpenGL Cg : obsolète… ?
10
Historique Précurseurs :
RenderMan Shading Language : Langage de rendu de Pixar Stanford Shading Language : Langage au-dessus d’OpenGL pour le multi-passes
11
Futurique Sh/RadidMind : langage plus haut niveau
Mélange programmes CPU et GPU en un seul langage Adapté au GPGPU Accès très bas niveau au GPU ATI: CTM Nvidia: CUDA Vers un RenderMan sur GPU ? GPGPU
12
Principes Remplace les opérations par défaut d’OpenGL
Ne rajoute pas de nouvelles fonctionnalités à OpenGL
13
Principes Deux types de shaders
Vertex shaders : effectue des opérations sur les sommets Transformations Calculs d’illumination Coordonnées de textures … Pixel shaders : effectue des opérations sur les pixels Interpolation des résultats calculés aux sommets Mais aussi les mêmes calculs qu’aux sommets (illumination, …) Accède aux textures Modeling Transformations Illumination (Shading) Viewing Transformation (Perspective / Orthographic) Clipping Projection (to Screen Space) Scan Conversion (Rasterization) Visibility / Display
14
Principes On agit au niveau local :
Vertex shader : un sommet à la fois On ne connaît pas les sommets voisins Pixel shader : un pixel à la fois On ne connaît pas les pixels voisins Au mieux, on peut avoir la variation d’une valeur par rapport au pixel d’à côté
15
Principes Ce qu’on ne peut pas faire Faire des calculs globaux
Accéder au contenu de textures dans un vertex shader (possible mais coûteux) Modifier le blending Lire le framebuffer
16
Principes Ce qu’on peut faire Au niveau des sommets :
Des transformations/projections différentes Des calculs de coordonnées de textures différents Des calculs d’illumination différents Au niveau des pixels : La même chose qu’aux sommets, mais par pixel Utiliser le contenu de textures dans des calculs Changer la profondeur des pixels
17
Les bases : Types Flottants, entiers, booléens ( float, bool, int )
Vecteurs 2,3,4 ( [b,i]vec{2,3,4} ) Matrices 2x2, 3x3, 4x4 ( mat{2,3,4} ) Accesseurs de textures ( sampler{1,2,3}D, samplerCube ) Structures Tableaux
18
Les bases : Entrées Built-in : tous les états d’OpenGL, passés par OpenGL Position, couleurs, directions des lumières Textures Matrices … Attribute : passés par le programme OpenGL Peuvent varier pour chaque sommet (comme couleurs, texcoords, normales, …) Uniform : passés par le programme OpenGL Ne varie pas entre glBegin/glEnd (comme matrices, textures, lumières, …) Varying : fixés sur les sommets par le vertex shader, interpolés sur les pixels, lus par le pixel shader Constant
19
Les bases : Entrées built-in
Vertex shader : Position : gl_Vertex Couleurs : gl_Color, gl_SecondaryColor Normale : gl_Normal Coordonnées de textures : gl_MultiTexCoord Fragment shader : gl_FragCoord : coordonnées du pixel dans la fenêtre gl_Color : couleur du pixel interpolée gl_TexCoord[] : coordonnées de textures interpolées gl_FrontFacing : face ou dos du triangle
20
Les bases : Sorties Vertex shader : Fragment Shader :
gl_Position : position du sommet en coordonnées homogènes (obligatoire) gl_PointSize : taille d’un point en rendu par point gl_FrontColor, gl_BackColor : couleurs gl_TexCoord[] : coordonnées de textures Fragment Shader : gl_FragColor : couleur du pixel (obligatoire) gl_FragDepth : profondeur du pixel
21
Les bases : fonctions built-in
Trigonométrie sin, cos, tan, asin, acos, atan, … Exponentiation exp, pow, log, exp2, log2, sqrt, inversesqrt, … Arithmétiques abs, sign, floor, ceil, fract, mod, min, max, clamp, mix, step, smoothstep Géométriques length, distance, dot, cross, normalize, reflect, refract Accès aux textures texture1D, texture2D, texture3D, textureCube, shadow, … Et d’autres…
22
Les bases : Allure d’un programme
uniform vec4 Bidule; vec4 UneFonction( vec4 Entree ) { return Entree.zxyw; } void main() vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position = pos + UneFonction( Bidule ); Entrée Fonction Point d’entrée Entrées OpenGL Variable locale Multiplication matrice-vecteur Sortie OpenGL
23
Les bases : Compilation
Source du vertex shader Source du fragment shader glCreateShaderObjectARB glShaderSourceARB glCompileShaderARB glGetInfoLogARB Compilation Compilation Shader object Shader object Link glCreateProgramObjectARB glAttachObjectARB glLinkProgramARB glGetInfoLogARB Program object
24
Les bases : Utilisation
glUseProgramObjectARB( Program ); glGetUniformLocationARB(); glUniform{1,2,3,4}f[v]ARB(); glUniformMatrix{2,3,4}fvARB(); glGetAttribLocationARB(); glVertexAttrib{1,2,3,4}f[v]ARB(); glEnableVertexAttribArrayARB() glVertexAttribPointerARB(); Utilisation d’un programme Réglage d’un uniform Réglage d’un attribute Réglage d’un attribute via un array
25
Exemples…
26
GPGPU General-Purpose Computation Using Graphics Hardware
Un GPU = un processeur SIMD Une texture = un tableau d’entrée Une image = un tableau de sortie
27
GPGPU : Applications Rendu avancé Traitement du signal
Illumination globale Image-based rendering … Traitement du signal Géométrie algorithmique Algorithmes génétiques A priori, tout ce qui peut se paralléliser
28
GPGPU : Limitations Récupérer l’image rendue = lent
PCI Express Opérateurs, fonctions, types assez limités Un algorithme parallélisé n’est pas forcément plus rapide que l’algorithme séquentiel
29
Nouveautés toutes chaudes
DirectX 10, Shader Model 4, Nvidia G80: Geometry shader Meilleure architecture (unités de shading unifiés, scheduling des shaders) CUDA : langage bas niveau Meilleures performances Nouvelles possibilités Encore plus orienté GPGPU
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.