Un shader est un programme utilisé en image de synthèse pour paramétrer une partie du processus de rendu réalisé par une carte graphique ou un moteur de rendu logiciel. Ils peuvent permettre de décrire l'absorption et de diffusion de la lumière, la texture à utiliser, les réflexions et de réfractions, ombrage, le déplacement de primitives et des effets post-traitement. Par la conception même du processus de rendu, les shaders sont les candidats idéaux pour une exécution parallèle par les processeurs graphiques multiples, situé dans une carte vidéo, permettant un traitement vectorisés soulageant les unité centrale et ainsi obtenir un resultat plus rapidement.
Les shaders sont flexibles et efficaces. Des surfaces apparemment compliquées peuvent être rendues a partir de géométrie simple. Par exemple, un shader peut être utilisé pour générer un carrelage en céramique à partir de la simple description d'un plan.
La réalisation de ce genre de shader est habituellement un processus long. La puissance informatique exigée pour obtenir ce genre d'ombrage à travailler peut être coûteux en raison de leur capacité à produire des résultats photoréalistes. La majeure partie du temps, le rendu est produit par une grille de calcul.
Étonnamment, ces shaders sont conçus pour être exécutés à même le processeur de traitement graphique (GPU) de la carte graphique en se plaçant dans la file de traitement et permettant ainsi des performances optimales. L'architecture des cartes n'a pas eu besoin d'évoluer, étant basé sur un modèle de traitement par flux, le calcul des shaders a trouvé sa place dans la structure globale des cartes.
Ce genre de langage est habituellement dépendant de l'interface de programmation graphique utilisée, bien que quelques applications fournissent également de tels langages intégrant des fonctionnalités limitées.
Historiquement, seulement une poignée de langages ont réussi à s'imposer, et maintenant le marché est fermé, les constructeurs préférant s'aligner sur ceux existants. Une courte description de ces langages est présentée ci-dessous.
Le langage fournit des éléments riches et cela depuis le début, unifiant le processus de traitement sur la géométrie (vertex processing) et sur les pixels (fragment processing) avec le même ensemble d'instructions, permettant des boucles d'instructions, et (plus généralement) des branchements conditionnels.
Historiquement, le langage GLSL a succédé à diverses extensions comparables qui se trouvaient dans OpenGL, tel que ARB_vertex_program, ARB_fragment_program et d’autres. Ces extensions utilisent toutefois un langage de bas niveau de type assembleur avec certaines restrictions, et leur utilisation est maintenant déconseillée. Ces deux extensions ont été également précédées par d'autres propositions qui ne sont pas restées dans les dernières spécifications.
Les premières implémentations de Cg étaient plutôt restrictives permettant à la majorité des matériels de le supporter, mais était tout de même innovant comparées aux méthodes précédentes. Le Cg semble avoir bien survécu à l'introduction des langages shader de nouvelle génération, principalement par son avance prise sur le secteur de la création de contenu numérique, toutefois le langage semble rarement être employé dans les produits finaux. À noter cependant que les jeux vidéo développés sur la prochaine console de jeu de Sony, la Playstation 3, implémenteront leurs shaders avec ce langage.
Une fonctionnalité intéressante que Cg propose réside dans l'utilisation de connecteurs, des types de donnée spéciaux pour lier les différentes étapes du processus. Des connecteurs sont utilisés pour définir l'entrée de l'application à l'étape de traitement géométrique (vertex processing) et aux attributs à interpoler dont le résultat est utilisé pour le traitement des pixels (fragment processing).
Il existe actuellement deux applications différentes des shaders dans les langues temps. Bien que leurs fonctionnalités ait convergé — il est ainsi possible d'écrire un vertex shader en utilisant les mêmes fonctions d'un fragment shader — les différents rôles imposent des limitations propre à chacun qu’il faut reconnaître.
Imagerie numérique | Shader | Shader | Shader | Shader | Шейдер