50
IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Embed Size (px)

Citation preview

Page 1: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

IFT3355: Infographie Pipeline graphique

© Victor Ostromoukhov

Dép. I.R.O.

Université de Montréal

Page 2: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Hardware GraphiqueHardware Graphique

• Graphisme est passé des stations spécialisées coûteuses à tout ordinateur de base

• L’industrie du jeu vidéo pousse pour des améliorations constantes des cartes graphiques

• Performance du GPU double à chaque 12 mois• Les nouvelles cartes programmables sont même

utilisables comme co-processeur mathématique…

Page 3: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

State-of-the-Art Real-Time State-of-the-Art Real-Time RenderingRendering20012001

Page 4: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal
Page 5: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal
Page 6: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

nVIDIA

Page 7: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Réel

Synthétique

CryEngine 2

Page 8: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Système d’affichage

CPU

Mémoire

Périphériques

bus (e.g. PCI/AGP/PCI-express)

Page 9: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Système d’affichage

CPU

Mémoire Framebuffer

Contrôleurvidéo

Moniteur

Périphériques

bus (e.g. PCI/AGP/PCI-express)

libère l’accès au bus avec un bus vidéo

CPU fait tout le travail, mais il a toute la flexibilité

Dans une configuration double buffer, un multiplexeur alterne entre les deux frame buffers

dans les deux sens CPU:GPUv1: 16 lignes à 250 MB/secv2: 32 lignes à 500 MB/sec

Page 10: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline de basePipeline de base

Programmeusager

Traitementgéométrie

Traitementpixel

primitives (points, lignes, polygones)images (textures, masques)

traitement par sommet3D à 2D pixels à l’écran

rasterizationcouleursortie au frame buffer

Page 11: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

APIs (OpenGL, DirectX)APIs (OpenGL, DirectX)

beginX( ); vertex (x,y,z); …endX( );

déclare et active l’état X attributs d’état: couleur, normale, uv, données par sommetinactive l’état X

paramètres d’état:• lumières, géométries, textures, options de rendu, etc.• tout changement d’état réduit la performance• immediate mode (tout passe par le CPU)• optimisation d’états, stocké sur carte graphique

Page 12: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Améliorer la vitesse de renduAméliorer la vitesse de rendu

• Parallélisme– calcul de matrices, triangles, textures, etc.– complexité (logique et silicon) et coût

• Pipeline– n étapes devrait être n fois plus rapide– chaque étape peut aussi être un pipeline elle-même, mais

elle pourrait aussi être traitée en parallèle pour des besoins accrus en performance

– vitesse du pipeline est déterminée par son étape la plus lente (bottleneck)

– il est important de réduire le nombre de sommets transmis (triangle strips, triangle fans, quadrilatères…)

Page 13: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Triangle Strips

v0

v1

v2

v3

v4

v5

v6

v7T0T1

T2

T3

T4T5

T0: v0 v1 v2T1: v1 v2 v3T2: v2 v3 v4T3: v3 v4 v5T4: v4 v5 v6T5: v5 v6 v7

20 2 1 niiviviv

Page 14: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Generalized Triangle Strips

v0

v1

v2

v3 v4

v5

v6T0T1 T2

T3T4

T0: v0 v1 v2T1: v1 v2 v3Swap v3 v2 (triangle dégénéré)T2: v3 v2 v4T3: v2 v4 v5T4: v4 v5 v6

peut même créer desstrips déconnectés

Page 15: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Triangle Fans

v0

v1

v2

v3

v4

v5v6

T0 T1

T2

T3T4

T0: v0 v1 v2T1: v0 v2 v3T2: v0 v3 v4T3: v0 v4 v5T4: v0 v5 v6

20 2 1 0 niivivv

Page 16: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Triangle Strips et Triangle Fans

• Plus difficile de trouver des fans que des strips• Nombre de sommets envoyés au pipeling pour m

triangles

• Ex: m=10, tris=1.2; m=5, tris=1.4

mm

m 21

)1(3=

=D

Page 17: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Créer des strips: STRIPE Algorithm

• Si on permet plus que des triangles, on peut trianguler un polygone de différentes façons

• Patchificationv0 v2 v4 v6 v8

v9,v10

v11

v7,v12v5,v14

v13v15

v3,v16

v17

v1,v18

v19

A chaque tournant, 3 swaps ou 2 sommets en extra

Page 18: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Vertex arrays

• Passe au GPU un vecteur de sommets et un vecteur d’indices reliant ces sommets en triangles

• On peut aussi encoder le vecteur d’indices en un strip

• Si la géométrie n’est pas modifiée entre deux appels au vecteur, on peut la stocker directement en mémoire du GPU

Page 19: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Display Lists

• displayID = createDisplayList( ); …; endDisplayList; … drawDisplayList (displayID);

• Conserve simultanément

– les données sur les triangles directement sur le GPU

– les commandes graphiques (état, texture, etc.)

• Peut imbriquer des display lists dans des display lists

+ Optimise (compile) les commandes graphiques pour le hardware graphique

- Ne permet pas de modifier n’importe quelle donnée sans briser (et donc recompiler) la display list

- Limitations en nombre et en taille

Page 20: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Vertex Buffer Objects (VBO)

• Similaire aux vertex arrays, on peut stocker

– les données sur les triangles directement sur le GPU

– les commandes graphiques par sommet (état, texture, etc.)

+ Permet de modifier des sections des vecteurs (indices et contenu)

- Commandes ne sont pas optimisées (compilées)

Page 21: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Parcours et traitement de la scène– primitives, couleurs,

transformations, textures– Détection/réaction aux collisions,

morphing, frustum culling hiérarchique

• Immediate mode– Flexible mais exigeant pour le CPU

• Retained mode– Structure de forme display list– Optimisations dans l’organisation

des données (compilateur)– CPU ne peut modifier que certaines

parties des données

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 22: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Espace objet à espace monde (ou pyramide de vue)

• Sommet transformé par une matrice combinée

• Normale transformée en fonction du shading (constant/flat ou Gouraud/Phong)

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 23: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Test avec le volume de vue• Si l’objet est à l’extérieur, ce test

réduit le travail dans les étapes suivantes

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 24: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Si le shading est constant, il n’y a qu’une couleur par polygone et lumière

• Pour le shading de Gouraud, une couleur par sommet

• Pour le shading de Phong, il y aura plus de travail à faire lors de l’étape de rasterization

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 25: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Espace monde à espace normalisé de projection

• Une partie des transformations peut être faite lors de l’étape de modeling transformation

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 26: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Un triangle peut alors résulter en plus de trois sommets

• Primitives plus complexes peuvent être traitées par scissoring (ne dessine que si non-rejet trivial: rasterization devient moins efficace)

• On s’attend à un maximum de 10% des primitives à découper, sinon pénalité

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 27: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Après une transformation de perspective, w est en général différent de 1

• Changement d’échelle et translation pour le viewport

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 28: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Pipeline graphique standard

• Scanconversion• Détermination de visibilité

– Zbuffer• Shading (transparence et texture)

Display traversal

Modelingtransformation

Trivial accept/reject

Lighting

Viewing transformation

Clipping

Dividing by wMapping to viewport

Rasterization

Page 29: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Rasterization (scanconversion)

• Calcul par pixel

– Position 2D, profondeur, couleur, coordonnées de texture

– Visibilité

• Double buffer

– Rendu dans back buffer et swap en front buffer (affiché)

• Transparence

– Rendu des objets opaques

– Rendu des objets transparents dans l’ordre derrière-à-devant

Page 30: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Buffers

• Color buffer• Zbuffer• Single et double buffering• Stéréo• Stencil et accumulation

Page 31: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Color Buffer (Frame Buffer)

• Color map– Index (1 byte) dans une table de couleurs

• High color– 2 bytes: 32,768 to 65,536 colors

• True color, RGBA mode– 3-4 bytes: 16,777,216 colors– 32 bits est souvent optimisé pour le traitement

des commandes en hardware

Page 32: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Color Buffer (Frame Buffer)

• True color, RGBA mode– 24 bits est satisfaisant pour afficher les couleurs– Accumulation en rendu multi-passes produit de

la discrétisation (quantisation) des couleurs résultant en des zones uniformes (banding)

– SGI permet de calculer les couleurs en 12+ bits par canal, mais affiche avec 8 bits par canal

• Overlay plane– 1-8 bits, devant le buffer couleur pour menus,

cursors, interfaces, highlighting, etc.– Affiche sans affecter le buffer couleur

Page 33: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Zbuffer

• 16-32 bits (récemment jusqu’à 96 bits en floating point)

• Projection orthographique– Distance entre les séparateurs (zones) est la

même• Projection perspective

– Distance est plus petite près de la caméra que loin de la caméra

– Essayer de borner d’aussi près que possible la scène entre l’avant-plan et l’arrière-plan

Page 34: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Buffering

• Single buffer– Dessine les polygones, clear, dessine les

polygons, …– Synchroniser le clear avec le vertical retrace

du moniteur (Amiga)• Double buffer

– Image précédente est affichée dans le front buffer pendant que dessine dans le back buffer

– Swap buffers (adresse ou BitBLT) durant le vertical retrace

Page 35: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Stéréo

• Rendu d’une image pour l’oeil gauche et une autre image pour l’oeil droit – Lunettes rouge-vert (images en niveau de gris,

possible même en single buffer)– Head-mounted displays (casques)– Shutter glasses (bloque un oeil en

synchronisation avec l’affichage de l’image)

Page 36: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Stencil et Accumulation Buffers

• Même résolution en pixels que le frame buffer

• Stencil

– 1-8 bits pour des opérations de masque

– Volumes d’ombre de Crow (complexité de profondeurs de 256 valeurs)

• Accumulation

– Deux fois (typiquement) la résolution de profondeur

– Couleurs de chaque image sont combinées avec un opérateur

– Profondeur de champ, flou de mouvement, antialiassage, ombres douces, etc.

Page 37: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Rendu en multi-passes

• Une passe: calcule les couleurs et affiche l’image• Multi-passes: plusieurs itérations des opérations

(calcule les couleurs et modifie les couleurs précédentes), ensuite affiche l’image

• Ex: diffus et texture, spéculaire selon texture

Page 38: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal
Page 39: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal
Page 40: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Quelques percées

Mémoire sur carte– Store géométrie– Store textures

1998: multi-textures1999: transformation et illumination2001: shader programmable2002: shader pixel2003: langage de programmation high-level2004: conditions dans les shaders2006: floating point2007: shader géométrique2008: Larrabee (a multi-core architecture)

Page 41: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Direct3D 10 Features

InputAssembler

Vertex Buffer

Index Buffer

Texture

Texture

Texture

Depth/Stencil

Render Target

Stream Output

VertexShader

GeometryShader

Rasterizer/Interpolator

PixelShader

OutputMerger

Page 42: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal
Page 43: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Unified shader architecture to redistribute shader loads

Page 44: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Cg de nVIDIA• (vs. HLSL pour Microsoft, GLSL pour OpenGL)• Langage similaire à C• Un programme Cg est compilé en

– DirectX 8,9,10– OpenGL arb,nvidia

• Utilisé pour les vertex et fragment shaders• Particularités du langage

– Opérateurs acceptent/retournent des scalaires et vecteurs– Swizzling de .xyzw et .rgba

• v3 = s.xxy; // v3.x = s.x; v3.y = s.x ; v3.z = s.y• v3.xw = s; // assignation seulement aux composantes xw

– Fonctions spéciales (abs, dot, log2, reflect, rsqrt, …)– Aucun: pointeurs, opérations sur bits, unions, aucun C++ avancé, …

Page 45: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Vertex Shader

• Programmes pour modifier

– Forme: movements, motion blur, blend, morph, déformations, skinning, volumes d’ombre, etc.

– Couleur/texture: réflexion, bump map, textures projetées

• Un sommet : vertex shader : un sommet

– On doit alors transformer et illuminer le sommet nous-mêmes

– Ne permet pas de créer de nouveaux sommets (avant la venue du geometry shader)

– Impossible de modifier d’autres sommets

Page 46: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Vertex Shader

• Un programme plus long ralentit le pipeline• SIMD: chaque instruction sur un vecteur (r.x, r.y,

r.z, r.w) est traitée en parallèle• GeForce3+4 and Radeon8500/9700:

– 128/256 instructions par vertex shader

Page 47: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Exemples de Pixel Shaders

• Réflexion par pixel• Illumination par pixel (Phong, BRDF)• Textures procédurales

Page 48: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

GPGPU - General Purpose GPU

• Les premiers environnements de GPGPU– Les tableaux deviennent des textures, le calcul devient

une opération de rendu; il faut connaître le graphique– Le pixel shader est souvent préféré pour effectuer autant

d’opérations en parallèle• GPGPU langages:

– CUDA (nVIDIA), CAL (AMD), RapidMind platform, Brook project, Microsoft Accelerator

• GPU est utilisé comme un stream processor• Pas tous les problèmes s’implémentent efficacement sur GPU

– calcul en précision float, pas encore en double– accès mémoire sont limités

Page 49: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

GPGPU - Exemples d’applications

• Ray tracing, radiosity, photon mapping• Simulations physiques dans les jeux (havok)• Simulations selon les équations de Navier-Stokes,

Smoothed-particle hydrodynamics, Lattice Boltzmann, équations d’Euler (fluides, nuages, etc.)

• Librairies de FFT et transformées en ondelettes• Alignements de protéines• Chimie quantique• etc.

Page 50: IFT3355: Infographie Pipeline graphique © Victor Ostromoukhov Dép. I.R.O. Université de Montréal

Larrabee (Intel)

32 cores x 16 single-precision float SIMD per core x 2 FLOPS x 2GHz per core = 2 TFLOPS