View
32
Download
0
Category
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
Recommended