Shaders Programmables Temps...

Preview:

Citation preview

Shaders Programmables TempsRéel

Etat des lieux sur leur programmation

Mathias Paulin

Equipe Synthese d’Images et Realite Virtuelle

IRIT-UPS-CNRS UMR 5505

Universite Paul Sabatier

Toulouse

Shaders Programmables Temps Reel – p.1

Shaders Programmables Temps Réel

HistoriqueDéfinition.Evolution.Approches temps réel.

Cg : un environnement de développement ?

Shaders OpenGL : exemples d’utilisation

Limitations et problèmes

Démonstrations

Shaders Programmables Temps Reel – p.2

Shaders Programmables Temps Réel

Historique

Cg : un environnement de développement ?Le langage CgLes profils de compilationIntégration dans les applications

Shaders OpenGL : exemples d’utilisation

Limitations et problèmes

Démonstrations

Shaders Programmables Temps Reel – p.2

Shaders Programmables Temps Réel

Historique

Cg : un environnement de développement ?

Shaders OpenGL : exemples d’utilisationEnvironnement d’expérimentation VRMLOpenGL vertex programOpenGL fragment program

Limitations et problèmes

Démonstrations

Shaders Programmables Temps Reel – p.2

Shaders Programmables Temps Réel

Historique

Cg : un environnement de développement ?

Shaders OpenGL : exemples d’utilisation

Limitations et problèmesShaders non portablesCompilateur naïfQuelles solutions ?

Démonstrations

Shaders Programmables Temps Reel – p.2

Shaders Programmables Temps Réel

Historique

Cg : un environnement de développement ?

Shaders OpenGL : exemples d’utilisation

Limitations et problèmes

Démonstrations

Shaders Programmables Temps Reel – p.2

Définition

ShadersProcédure de calcul d’ombragePar abus de langage, calcul de l’apparence

Différents types de shaders :

Objet (basse fréquence)

Sommet (moyenne fréquence)

Fragment (haute fréquence)

Modèle de calcul SIMD

Shaders Programmables Temps Reel – p.3

Définition

ShadersProcédure de calcul d’ombragePar abus de langage, calcul de l’apparence

Différents types de shaders :

Objet (basse fréquence)FormeTransformationsEclairage

Sommet (moyenne fréquence)

Fragment (haute fréquence)

Modèle de calcul SIMD

Shaders Programmables Temps Reel – p.3

Définition

ShadersProcédure de calcul d’ombragePar abus de langage, calcul de l’apparence

Différents types de shaders :

Objet (basse fréquence)

Sommet (moyenne fréquence)CouleurCoordonnées de texturePar extension, position, normale . . .

Fragment (haute fréquence)

Modèle de calcul SIMD

Shaders Programmables Temps Reel – p.3

Définition

ShadersProcédure de calcul d’ombragePar abus de langage, calcul de l’apparence

Différents types de shaders :

Objet (basse fréquence)

Sommet (moyenne fréquence)

Fragment (haute fréquence)Couleur et textureProfondeur

Modèle de calcul SIMD

Shaders Programmables Temps Reel – p.3

Définition

ShadersProcédure de calcul d’ombragePar abus de langage, calcul de l’apparence

Différents types de shaders :

Objet (basse fréquence)

Sommet (moyenne fréquence)

Fragment (haute fréquence)

Modèle de calcul SIMD

Shaders Programmables Temps Reel – p.3

Evolution

Shaders non temps réelShade trees de Cook en 1984Fondés sur le lancer de rayonsUtilisés dans REYES et RenderMan

Shaders temps réelShaders paramétrablesShaders à base de texturesShaders programmables

Nécessité d’un environnement deprogrammation.

Shaders Programmables Temps Reel – p.4

Evolution

Shaders non temps réelShade trees de Cook en 1984Fondés sur le lancer de rayonsUtilisés dans REYES et RenderMan

Shaders temps réelShaders paramétrables

Pipeline graphique classiqueFonctionnalités fixées mais paramétrablesOpenGL ≤ 1.3

Shaders à base de texturesShaders programmables

Nécessité d’un environnement deprogrammation.

Shaders Programmables Temps Reel – p.4

Evolution

Shaders non temps réelShade trees de Cook en 1984Fondés sur le lancer de rayonsUtilisés dans REYES et RenderMan

Shaders temps réelShaders paramétrablesShaders à base de textures

Limités aux shaders d’apparenceApproche multi-passesSGI Interactive Shading Language

Shaders programmables

Nécessité d’un environnement deprogrammation.

Shaders Programmables Temps Reel – p.4

Evolution

Shaders non temps réelShade trees de Cook en 1984Fondés sur le lancer de rayonsUtilisés dans REYES et RenderMan

Shaders temps réelShaders paramétrablesShaders à base de texturesShaders programmables

Pipeline graphique logiciel et matérielRTSL, Cg, OpenGL 2.0

Nécessité d’un environnement deprogrammation.

Shaders Programmables Temps Reel – p.4

Evolution

Shaders non temps réelShade trees de Cook en 1984Fondés sur le lancer de rayonsUtilisés dans REYES et RenderMan

Shaders temps réelShaders paramétrablesShaders à base de texturesShaders programmables

Nécessité d’un environnement deprogrammation.

Shaders Programmables Temps Reel – p.4

Shaders Programmables Temps Réel

Pipe graphique en évolution

Ajout d’étages programmablesTraitement matériel des shaders

Programmation en assembleur des shadersExtensions ARB

Vertex ProgramFragment Program

Extensions propriétairesNVidiaATI

Shaders Programmables Temps Reel – p.5

Shaders Programmables Temps Réel

Pipe graphique en évolutionAjout d’étages programmables

Traitement matériel des shaders

Programmation en assembleur des shadersExtensions ARB

Vertex ProgramFragment Program

Extensions propriétairesNVidiaATI

Shaders Programmables Temps Reel – p.5

Shaders Programmables Temps Réel

Pipe graphique en évolutionAjout d’étages programmables

Traitement matériel des shaders

Programmation en assembleur des shadersExtensions ARB

Vertex ProgramFragment Program

Extensions propriétairesNVidiaATI

Shaders Programmables Temps Reel – p.5

Shaders Programmables Temps Réel

Shader PhongCalcul de l’éclairage par pixelEvaluation du modèle de Phong

AssembleurEcriture complexeRéutilisation difficile

CgEcriture simplifiéeRéutilisation par fonctions

Shaders Programmables Temps Reel – p.6

Shaders Programmables Temps Réel

Shader PhongCalcul de l’éclairage par pixelEvaluation du modèle de Phong

AssembleurEcriture complexeRéutilisation difficile

CgEcriture simplifiéeRéutilisation par fonctions

Shaders Programmables Temps Reel – p.6

Shaders Programmables Temps Réel

Shader PhongCalcul de l’éclairage par pixelEvaluation du modèle de Phong

AssembleurEcriture complexeRéutilisation difficile

CgEcriture simplifiéeRéutilisation par fonctions

Shaders Programmables Temps Reel – p.6

Cg : généralités

ObjectifsLangage de programmation évoluéMulti plate-forme : DirectX et OpenGL

FonctionnementLangage et compilation

Profils de compilationAPI pour l’intégration

API généraleAPI spécifique (OpenGL ou DirectX)

Shaders Programmables Temps Reel – p.7

Cg : généralités

ObjectifsLangage de programmation évoluéMulti plate-forme : DirectX et OpenGL

FonctionnementLangage et compilation

Profils de compilationAPI pour l’intégration

API généraleAPI spécifique (OpenGL ou DirectX)

Shaders Programmables Temps Reel – p.7

Cg : le langage

Langage dérivé de C et C++Types de données

Vecteurs de réelsTableaux de vecteurs

Opérateurs vectoriels surchargés

Fonctions, séquence, sélection, boucles

Bibliothèque de baseMathématiqueGéométriqueTexture

Shaders Programmables Temps Reel – p.8

Cg : le langage

Langage dérivé de C et C++Types de données

Vecteurs de réelsTableaux de vecteurs

Opérateurs vectoriels surchargés

Fonctions, séquence, sélection, boucles

Bibliothèque de baseMathématiqueGéométriqueTexture

Shaders Programmables Temps Reel – p.8

Cg : le langage

Langage dérivé de C et C++Types de données

Vecteurs de réelsTableaux de vecteurs

Opérateurs vectoriels surchargés

Fonctions, séquence, sélection, boucles

Bibliothèque de baseMathématiqueGéométriqueTexture

Shaders Programmables Temps Reel – p.8

Cg : le langage

Langage dérivé de C et C++Types de données

Vecteurs de réelsTableaux de vecteurs

Opérateurs vectoriels surchargés

Fonctions, séquence, sélection, boucles

Bibliothèque de baseMathématiqueGéométriqueTexture

Shaders Programmables Temps Reel – p.8

Cg : profils de compilation

Prise en charge des différents types de GPU

Profils existantsOpenGL NVxx vertex et fragment program

NV30 ⇐⇒ GeForceFXNV20 ⇐⇒ GeForce 3 et 4

DirectX vertex et fragment shadersOpenGL ARB vertex et fragment program

Seul profil réellement portable

Un profil définitLes tailles des types de donnéesLes instructions utilisablesLes variables prédéfinies

Shaders Programmables Temps Reel – p.9

Cg : profils de compilation

Prise en charge des différents types de GPU

Profils existantsOpenGL NVxx vertex et fragment programDirectX vertex et fragment shaders

9.0 : Cg ⇐⇒ HLSL8.0

OpenGL ARB vertex et fragment programSeul profil réellement portable

Un profil définitLes tailles des types de donnéesLes instructions utilisablesLes variables prédéfinies

Shaders Programmables Temps Reel – p.9

Cg : profils de compilation

Prise en charge des différents types de GPU

Profils existantsOpenGL NVxx vertex et fragment programDirectX vertex et fragment shadersOpenGL ARB vertex et fragment program

Seul profil réellement portable

Un profil définitLes tailles des types de donnéesLes instructions utilisablesLes variables prédéfinies

Shaders Programmables Temps Reel – p.9

Cg : profils de compilation

Prise en charge des différents types de GPU

Profils existantsOpenGL NVxx vertex et fragment programDirectX vertex et fragment shadersOpenGL ARB vertex et fragment program

Seul profil réellement portable

Un profil définitLes tailles des types de donnéesLes instructions utilisablesLes variables prédéfinies

Shaders Programmables Temps Reel – p.9

Cg : intégration dans les applications

API générale d’exécution permettant deCompiler à la voléeGérer les paramètres des shaders

Shaders Programmables Temps Reel – p.10

Cg : intégration dans les applications

API spécifique d’exécution permettant deActiver/désactiver les shadersFaire le suivi des paramètres des shaders

Shaders Programmables Temps Reel – p.11

Shaders et VRML

VML : Vrml Modelling LibraryBibliothèque de gestion de mondes VRMLNavigateur et utilitaires associésDéveloppés à l’IRIT depuis 1999Orientée vers l’expérimentation en rendutemps réelhttp://www.irit.fr/∼Mathias.Paulin/Logiciels

Mécanisme d’extension de la grammaireGénération de code C++Chargement dynamique des extensions

Shaders Programmables Temps Reel – p.12

Shaders et VRML

VML : Vrml Modelling LibraryBibliothèque de gestion de mondes VRMLNavigateur et utilitaires associésDéveloppés à l’IRIT depuis 1999Orientée vers l’expérimentation en rendutemps réel

Mécanisme d’extension de la grammaireGénération de code C++Chargement dynamique des extensions

Shaders Programmables Temps Reel – p.12

Shaders et VRML

Intégration de shaders dans la VMLShaders à base de textures

Approche multi-texturesNoeud VRML TextureSet

Approche multi-passes

Uniquement par paramétrage OpenGLLimitation aux shaders basse fréquence

Besoin de programmationComplexité des ShadersShaders moyenne et haute fréquence

Shaders Programmables Temps Reel – p.13

Shaders et VRML

Intégration de shaders dans la VMLShaders à base de textures

Approche multi-texturesApproche multi-passes

Noeud VRML CartoonShader

Uniquement par paramétrage OpenGLLimitation aux shaders basse fréquence

Besoin de programmationComplexité des ShadersShaders moyenne et haute fréquence

Shaders Programmables Temps Reel – p.13

Shaders et VRML

Intégration de shaders dans la VMLShaders à base de textures

Approche multi-texturesApproche multi-passes

Uniquement par paramétrage OpenGLLimitation aux shaders basse fréquence

Besoin de programmationComplexité des ShadersShaders moyenne et haute fréquence

Shaders Programmables Temps Reel – p.13

Shaders et VRML

Intégration de shaders dans la VMLShaders à base de textures

Approche multi-texturesApproche multi-passes

Uniquement par paramétrage OpenGLLimitation aux shaders basse fréquence

Besoin de programmationComplexité des ShadersShaders moyenne et haute fréquence

Shaders Programmables Temps Reel – p.13

Shaders et VRML.

Intégration des Shaders en VRMLdéfinition d’un noeud Appearance ShadersInterface avec CG

Profils ARBCompilation du fichier sourceGestion des paramètres

Multi texturesParamètres numériques

Shaders ARBMême fonctionnement

Shaders Programmables Temps Reel – p.14

Shaders et VRML.

Intégration des Shaders en VRMLdéfinition d’un noeud Appearance ShadersInterface avec CG

Profils ARBCompilation du fichier sourceGestion des paramètres

Multi texturesParamètres numériques

Shaders ARBMême fonctionnement

Shaders Programmables Temps Reel – p.14

ARB Vertex Shaders et Cg.

Exemple de shader : algorithme NPR de Gooch.Codage (simple)

9 lignes de Cg20 lignes d’assembleur

Compilation22 lignes produites par CgNombre de registres identiques

Comportement vérifié sur tout type

de shaders mais . . .

Shaders Programmables Temps Reel – p.15

ARB Vertex Shaders et Cg.

Exemple de shader : algorithme NPR de Gooch.Codage (simple)

9 lignes de Cg20 lignes d’assembleur

Compilation22 lignes produites par CgNombre de registres identiques

Comportement vérifié sur tout type

de shaders mais . . .

Shaders Programmables Temps Reel – p.15

ARB Vertex Shaders et Cg.

Exemple de shader : algorithme NPR de Gooch.Codage (simple)

9 lignes de Cg20 lignes d’assembleur

Compilation22 lignes produites par CgNombre de registres identiques

Comportement vérifié sur tout type

de shaders mais . . .

Shaders Programmables Temps Reel – p.15

ARB Fragments Shaders et Cg.

Exemple de shader : Texture de Perlin.Codage (moyen)

82 lignes de Cg (boucles et fonctions)290 lignes d’assembleur

Compilation340 lignes produites par CgNombre de registres en hausse

UtilisationLimitée pour le momentEmulation logicielle

Shaders Programmables Temps Reel – p.16

ARB Fragments Shaders et Cg.

Exemple de shader : Texture de Perlin.Codage (moyen)

82 lignes de Cg (boucles et fonctions)290 lignes d’assembleur

Compilation340 lignes produites par CgNombre de registres en hausse

UtilisationLimitée pour le momentEmulation logicielle

Shaders Programmables Temps Reel – p.16

ARB Fragments Shaders et Cg.

Exemple de shader : Texture de Perlin.Codage (moyen)

82 lignes de Cg (boucles et fonctions)290 lignes d’assembleur

Compilation340 lignes produites par CgNombre de registres en hausse

UtilisationLimitée pour le momentEmulation logicielle

Shaders Programmables Temps Reel – p.16

ARB Fragments Shaders et Cg.

Texture de Perlin : DescriptionVertex shader

Transformations géométriquescalcul des coordonnées de textures

Fragment ShaderSomme 5 octaves de bruit (2 avec Cg)Eclairage par pixel

Shaders Programmables Temps Reel – p.17

ARB Fragments Shaders et Cg.

Texture de Perlin : DescriptionVertex shader

Transformations géométriquescalcul des coordonnées de textures

Fragment ShaderSomme 5 octaves de bruit (2 avec Cg)Eclairage par pixel

Shaders Programmables Temps Reel – p.17

Cg pour les vertex Shaders

Assez bonne utilisabilitéSimplicité de développement

Code généré non optimalOpérations inutiles ( ∗1 ou +0 )Implantation bizarres

Impossible d’accéder aux états OpenGL

Shaders Programmables Temps Reel – p.18

Cg pour les fragment Shaders

Utilisabilité limitéeSimplicité de développement

Code généré non optimalOpérations inutiles ( ∗1 ou +0 )Implantation bizarres

Gestion fantaisiste des registresGestion fantaisiste des boucles

Shaders Programmables Temps Reel – p.19

Quelles solutions ?

Shaders Programmables Temps Reel – p.20