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

Preview:

Citation preview

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…

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

nVIDIA

Réel

Synthétique

CryEngine 2

Système d’affichage

CPU

Mémoire

Périphériques

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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

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

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

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

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

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

Buffers

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

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

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

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

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

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)

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.

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

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)

Direct3D 10 Features

InputAssembler

Vertex Buffer

Index Buffer

Texture

Texture

Texture

Depth/Stencil

Render Target

Stream Output

VertexShader

GeometryShader

Rasterizer/Interpolator

PixelShader

OutputMerger

Unified shader architecture to redistribute shader loads

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

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

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

Exemples de Pixel Shaders

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

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

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.

Larrabee (Intel)

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

Recommended