Evolution des cartes graphiques à travers celle de shader models

Le NV20 de nVidia, rejoins plus tard par le R300 d'ATI a apporté uné évolution significative, Les pipelines programmables. Cette évolution s'est accompagnée naturellement d'une avancée parallèle dans le monde des API par l'introduction de Microsoft dans son API DirectX, et plus particulièrement Direct3d, des shaders.

L'objectif de ce chapitre était au départ de retracer une évolution des shaders ces cinq dernières années mise en parralèlle avec l'évolution des cartes graphiques. Hélas, je me suis trés vite rendu compte que cette tâche se révélai un peu trop ardue compte tenu de la simplicité que ce site se fixe comme objectif mais aussi, je dois l'avouer, de mes maigres connaissance quand au fonctionnement appronfondi des shaders.

C'est pourquoi j'ai décidé (à la dernière minute), de traiter cet article d'une manière, et de me contenter de vous fournir une définition de ce que sont les shaders et de ce qu'il ont apporté au monde des dévellopeurs de jeux vidéo (puisque c'est bien de cela qu'il s'agit principalement).

shaders

Initialement introduits par Pixar dans son logiciel RenderMan pour la production de films en images de synthèse, les shaders sont des programmes, écrits avec une syntaxe assembleur ou dans un langage de programmation de plus haut niveau, directement exécutables par la carte graphique et remplaçant certaines parties du pipeline d'execution habituel. Arrivés dans leur première version avec DirectX 8.0 / OpenGL 1.4, les shaders ont apporté une incroyable flexibilité dans le rendu 3D, et la possibilité de développer de nouveaux effets toujours plus impressionnants.

L'avantage principal d'employer des shaders vient de leur flexibilité, qui permet un temps d'élaboration plus rapide ainsi que meilleur marché, mais permet également de rendre les travaux plus riches. Un langage de shader a habituellement des types de données propres comme les couleurs et les vecteurs, mais en raison des divers intervenants industriels et de la forte évolution du secteur, différents langages de shader ont été développés.

Il existe deux types de shaders (dénommés programs sous OpenGL). Sous DirectX, ce sont les vertex shaders et les pixel shaders, chez OpenGL ce sont les vertex programs et les fragment program, ou plus récemment les vertex shaders et les fragment shaders.

vertex shader

Vertex : Point d'un polygone où ses segments se rejoignent et dans le cas d'un segment isolé, bout du segment.
Fonction graphique utilisée dans une scène 3D pour ajouter des effets à un objet en influant sur les coordonnées spatiales (x,y,z) et les valeurs des texture et d'éclairage de ses vertex.
Exemple = des rides qui apparaitraient en temps réel sur le visage d'un personnage souriante.

pixel shader

Pixel shader : Formule mathématique définissant la couleur d´un pixel en fonction de plusieurs paramètres (couleur de base, couleur de la lumière, transparence, etc) programmables. Cette fonction permet donc aux développeurs de créer de nouveaux effets visuels.

langages

Il existe plusieurs langages pour écrire des shaders / programs. Les tous premiers langages possédaient une syntaxe pseudo-assembleur, chaque API (DirectX / OpenGL) possédant sa propre syntaxe. Bien que les shaders soient des programmes relativement courts et peu complexes, avec l'arrivée de nouvelles versions et de nouveaux effets leur écriture s'est révélée plus ardue, et des langages de plus haut niveau ont été développés. Ainsi, il existe le HLSL (High Level Shading Langage) pour DirectX, le GLSL (openGL Shading Langage) pour OpenGL, et le Cg (C for Graphics), qui repose sur une bibliothèque développée par nVidia compatible avec les 2 APIs. Tous ces langages possédent une syntaxe proche du C, ce qui rend l'écriture de shaders bien plus rapide.

Apport au monde de la programmation 3d

Les shaders, depuis leur implémentation dans l'api de Microsoft, ont apporté de nombreuses avancées. Le rôle principal a été de fournir des fonctions pré-construites aux programmeurs en leur garantissant une indépendance complète du materiel. Ils devrai ainsi pouvoir dévelloper des jeux en 3d sans se soucier de la carte que va posséder le joueur.
Toutefois, même si beaucoup a été fait, la guerre que se livrent les deux leaders du marché, à savoir ATI et nVidia, implique souvent de leur part, qu'ils produise chacun leurs optimisations qui ne réagiront pas de la même manière.
Un exemple simple est celui de nVidia qui, sur ces cartes graphiqes GeForce séries 6 et 7, ne supportai pas le HDR en même temps que l'anti-aliasing, et ce, malgrès un support du shader model 3.



Pour en savoir plus : Présence-pc - 3 années d'évolution de shaders : le bilan
Et : matbe.com - Architecture et fonctionnement d'un GPU