Les Processeurs Graphiques Programmables

Slides:



Advertisements
Présentations similaires
( Application Programming Interface)
Advertisements

Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
Technique des Surfels Surfels: Surface Elements as Rendering Primitives SIGGRAPH 2000 H.Pfiste, J.van Baar, M.Zwicker, M.Gross.
IMAGIS-GRAVIR / IMAG Rendu de forêts en temps-réel iMAGIS / GRAVIR Franck Sénégas DEA IVR Tuteur: Fabrice Neyret.
1 Visualisation avec OpenGL Jérémie Allard 4 Novembre 2002.
Programmation des logiciels infographiques interactifs 2D et 3D, et le OpenGL.
Modélisation géométrique à l’aide d’un maillage
Images synthètiques de haute qualité
Techniques de points de contrôle en OpenGL : formes de Bézier
PROTOTYPE D’UN PROGRAMME ÉCRIT EN C++ BASÉ SUR OPENGL
OpenGL Shading Language Introduction. But de ce cours  Non-buts  Spécialistes GLSL  Experts en GLSL  Exploration du pipeline graphique  Séparation.
Credits : Joëlle Thollot, Hector Briceño, Edmond Boyer
Architecture et Fonctionnement d’un GPU Géométrie Rendu.
Introduction à la programmation graphique
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 10 Textures –Définir la texture –Superposition d’une texture sur une surface plane –Superposition.
1 Initiation à la micro-informatique Le matériel un clic pour la suite… Moniteur.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
L'image: Le codage des images BacPro SEN Lycée Condorcet.
Modélisation Géométrique Cours 4 : Acquisition de la géométrie.
Courbes d'Interpolation Interpolation de Lagrange, et Interpolation B-spline.
Utilisation d’avistep
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
Portage d'une application sur GPU CreditCruncher.
1 Estimation temps réel du flot optique Julien MARZAT 3A – ISA CPDS Tuteur ENSEM:Didier WOLF Tuteur INRIA :André DUCROT.
Traitement d'images en Java avec JAI
Interfaçage entre Maple et du code externe
Pourquoi est-il nécessaire de comprendre les projections et le géoréférencement? (->diverses sources à superposer pour croiser les informations) GEOREFERENCEMENT.
Synthèse d’images Antoine Bouthors
education. fr/cid99696/ressources-maths-cycle
I- ANALYSE DU BESOIN / Plan
Pas de variable globale
Les notions de classe et d'objet
Détection des erreurs.
AO (Architecture des ordinateurs)
7.1 Transformation linéaire
Principes de programmation (suite)
Algorithmique Langage C
Les fonctions.
Fonctions affines.
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
SIF-1053 Architecture de ordinateurs
Activités Mentales : Niveau 2nde
Classification des archtecutres paralleles
Jean-Emmanuel DESCHAUD
OpenGL et WebGL, comparaison de performances dans le framework Geant4
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
GRAPHISME PAR ORDINATEUR
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
La caméra GIF-4105/7105 Photographie Algorithmique, Hiver 2015
Plus de 4000 langages....
Architecture de machines Le microprocesseur Cours
ACP Analyse en Composantes Principales
Le morphage d’images Steph Hoffman
MICROSCOPE OPERATOIRE
Programmation graphique
Problèmes de traversée
Transformation linéaires
Programmation Android Les listes
Cinématique : concepts de base
GRAPHISME PAR ORDINATEUR
Projet Logimage ESP Dakar Janvier 2019 Alain Faye
Encadré par : M. Mohammad EL GHABZOURI Elaboré par : - AZEGAMOUT Mohamed - ABOULKACEM abdelouahed - GOUN Ayoub EXPOSÉ Sous le thème : SER 2018 Parallélisme.
GRAPHISME PAR ORDINATEUR
Yves Chevallier & Andrew Watson
Les graphiques des relations linéaires
Transcription de la présentation:

Les Processeurs Graphiques Programmables P. Gautron

Plan Structure Programmation Applications

Plan Structure Programmation Applications

Structure globale du GPU Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …

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

Structure globale du GPU Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …

Rasterizer Rôle : remplissage de polygônes

Rasterizer Rôle : remplissage de polygônes V2 Scan Line I1 IP I2 V1 V3 : Interpolation Linéaire

Structure globale du GPU Matrices Géométrie Géométrie transformée Vertex Shader Image finale Fragment Shader Rasterizer Sources lumineuses, …

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

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

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

GPU : Mécanismes Câblés Backface Culling : Elimination des faces non visibles

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

GPU : Mécanismes Câblés Deph test : résolution des occlusions Z < Z ?

GPU : Mécanismes Câblés Alpha Blending : mélange α α

Plan Structure Programmation Applications

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

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);

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

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

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

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);

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);

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

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); }

Plan Structure Programmation Applications

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) }

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; }

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, …

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…

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

Liens OpenGL (FR) : http://raphaello.univ-fcomte.fr/IG/Default.htm Tutoriaux, OpenGL 1.1 OpenGL (EN) : http://opengl.org/ Spécifications, Exemples OpenGL (EN) : http://opengl.org/ Spécifications OpenGL et GLSL, Exemples OpenGL pour les jeux (EN) : http://nehe.gamedev.net/ Tutoriaux, OpenGL avancé avec shaders Edition intuitive de shaders : http://developer.nvidia.com/object/fx_composer_home.html http://www.ati.com/developer/rendermonkey/ Calcul parallèle sur GPU (EN) : www.gpgpu.org

Livres

Livres