|
| Trousse de secours pour comprendre les Pixels shaders 2.0 | | Auteur : JF Maquiné | Dernière révision : 11 Juillet 2005 |
|

| | |
Pixel et fragment : Pixel shader est un terme avant tout destiné aux utilisateurs, les développeurs parlent quant à eux de fragment shader. C'est la même chose, seul le point de vue change. Un pixel est un point de couleur à l'écran (ce que voit l'utilisateur). Il est le résultat d'un calcul associant des points provenant de différentes textures (fragments) et d'opérations mathématiques. Les développeurs travaillent avec des fragments et le résultat est un pixel, ce que voit l'utilisateur. Par exemple si vous regardez dans une pièce à travers une fenêtre les couleurs ne seront pas tout à fait les mêmes si elle est ouverte ou fermée. On va associer les fragments de la fenêtre avec ceux des objet de la pièce pour produire le pixel final. En OpenGL les pixels shaders se nomment les fragments shaders.
Texel et fragment : Vous n'avez peut-être jamais rencontré le terme de fragment et vous êtes tenté de penser qu'il s'agit d'un texel. Ce serait une erreur. Un texel est un point appartenant à une texture avant son application à un triangle. Ce triangle appartient à la géométrie (représentation en fil de fer) d'un objet ou personnage. Pour appliquer une texture à ce triangle, il faut la déformer puis appliquer un filtrage (voir article : filtrage des textures) pour éviter d'avoir des effets visuels indésirables. Il n'y a donc plus de correspondance directe entre les texels (point de la texture) et les points du triangle texturé, qu'on nomme fragment. Les fragments ne sont pas issus directement des textures stockées en mémoire.
Shader : Les shaders sont de petits programmes envoyés au processeur graphique et exécutés par lui. Attention c'est bien le processeur graphique qui va exécuter le programme et non le microprocesseur principal. Pour créer ces programmes on utilise un langage de programmation des shaders. Il en existe deux : Cg (C for Graphics) développé par NVidia et HLSL (High Level Shader Language) développé par Microsoft. En fait Cg et HLSL sont assez semblables, la raison c'est qu'il y a eu une coopération entre NVidia et Microsoft pour élaborer ces compilateurs.
Différence entre Cg et HLSL : Cg produit du code pour les API DirectX ou OpenGL, tandis que HLSL uniquement pour DirectX. Une deuxième différence importante existe et cela concerne les utilisateurs ! Cg optimise pour utiliser le moins de buffers possible et HLSL le moins d'instructions possible sans prendre en compte le nombre de buffers nécessaires. C'est quoi ces buffers et pourquoi sont-ils si importants ? Les buffers dont on parle ici sont des mémoires internes au processeur graphique qui permettent de stocker des valeurs provisoires lors de l'exécution d'un shader. Si le nombre de buffers est insuffisant, le processeur devra stocker ces informations provisoires dans la mémoire de la carte graphique, ce qui peut considérablement ralentir leur vitesse d'exécution. Les spécifications de DirectX 9 mentionnent la nécessité d'avoir 12 buffers au moins pour les shaders. Les FX 5800 et FX5900 n'en possèdent que 2 spécifiques aux shader, les autres provenant de la mémoire de la carte graphique et donc lent d'accès (note : ces cartes respectent donc bien les spécifications DX9 sur le nombre de buffers, leur vitesse n'étant pas précisée par DX9). Ceci explique pourquoi le Cg compile les programmes de shaders dans la seule optique de limiter le nombre de buffers nécessaires et donc d'utiliser le plus souvent les 2 buffers spécifiques aux shaders. La conséquence est que le Cg optimise pour les cartes graphiques NVidia, comme l'a montré un test du site Beyond3D sur le jeu Tomb Raider. Lorsque les shaders du pixel shader 2.0 sont compilés avec le Cg, les performances des cartes ATI et NVidia sont du même ordre. Lorsqu'ils ont été compilés avec HLSL, les ATI se montrent deux fois plus rapides, et les scores des NVidia baissent d'environ 10%. Conclusion il faut espérer que les développeurs utilisent HLSL pour les pixels shaders 2.0 de leur jeux. |







| | |
Le fillrate c'est quoi ? : Le fillrate c'est la quantité de pixels que peut produire/envoyer à l'écran le processeur graphique, mais celui-ci varie en fonction de l'utilisation. Le fillrate absolu dépendant de la fréquence du GPU, de son architecture. On distingue aussi le fillrate en mode single-texturing et multi-texturing, mais : dans le cas où on utilise des shaders c'est le mode single-texturing qui nous intéresse. On utilise pour cela la formule :- Fillrate absolu = Fréquence du microprocesseur * nombre de pipes
Un pipe étant une unité de production de pixel. La FX5900Ultra dispose de 4 pipes et a une fréquence de 450 MHz (soit 1800 MPixel/s) et la 9800Pro de 8 pipes à 380 MHz (soit 3040 Mpixel/s).
Le fillrate des pixels shaders 2.0 : Quand on utilise les pixels shaders 2.0, le fillrate dépend de ce que fait le shader (le programme). Toutefois en généralisant le principe de fonctionnement d'un shader 2.0 on peut se faire une idée. Un shader va contenir des instructions vectorielles (instructions manipulant les trois composantes couleurs) et des instructions scalaires (instructions manipulant généralement la valeur de transparence). Ces instructions travaillent / appellent un certain nombre de textures. Le fillrate d'une carte graphique utilisant les pixels shaders 2.0 dépend du fillrate absolu, divisé par une variable qui correspond aux capacités de l'architecture du processeur graphique à manipuler les instructions et les textures définies par le shader.On obtient la formule suivante : - Fillrate pixel shader = Fillrate absolu / X
Déterminons X pour la 9800Pro contre FX5900Ultra : La 9800Pro sait calculer simultanément une instruction vectorielle avec une instruction scalaire ou une texture. Comme le nombre d'instructions vectorielles dépasse normalement le nombre d'instructions scalaires et le nombre de textures utilisées, la valeur X pour la 9800Pro est égal au nombre d'instructions vectorielles. Pour la FX5900 c'est plus complexe. Cette carte ne sait pas gérer simultanément les instructions vectorielles, scalaires et de texturing. X sera donc égal au moins à la somme de toutes les instructions utilisées. Donc X sera toujours plus grand pour la FX5900Ultra que pour la 9800Pro. Mais même égale l'équation du fillrate pixel shader sera toujours favorable à la 9800Pro ! (pour voir un exemple détaillé de ce calcul lisez l'article de Damien Triolet - voir ci-dessous). |

| | |
Ce long mini-article fait suite à la parution d'un article fait par Damien Triolet du site TT-hardware. Son article, qui faisait réfèrence lui-même au test comparatif pixel shader 2.0 basé sur le jeu Tomb Raider du site beyond3D, expliquait de manière détaillée les raisons des faibles performances des cartes FX5900 en pixel shader 2.0 comparé aux ATI 9800. Son article contient une telle richesse d'informations que je trouvais dommage qu'il ne puisse être compris par un grand nombre de lecteurs. J'ai donc pris contact avec lui et après l'avoir harcelé de questions j'écrivais mon propre article visant à présenter les éléments de base du pixel shader 2.0. Je tiens donc à remercier Damien pour son aide précieuse :).
L'avenir est au pixel et vertex shaders, c'est-à-dire à la programmabilité de fonctions. Mais outre la possibilité de faire des choses plus complexes les shaders apportent parfois la possibilité de faire des choses avant même qu'elles ne soient intégrées au GPU. Les shaders permettent donc d'anticiper dans la mesuredu possible des techniques 3D très récente ou d'améliorer des techniques existantes.
Du point de vue matériel (hardware) deux directions s'opposent actuellement entre ATI et Nvidia. ATI est pour la fusion des pipelines de pixel et vertex shaders. On perd en spécialisation, mais on gagne en souplesse de distribution des tâches. Pour Nvidia, la fusion n'est pas à l'ordre du jour et rien ne dit qu'elle le sera pour eux un jour. Dans cette optique Nvidia continue à faire des processeurs aux pipelines bien spécialisés et cela leur réussi assez bien. L'avenir nous dira qui d'ATI ou de Nvidia a raison, mais je dois reconnaître que j'ai un petit penchant pour l'aspect élégant que présente la notion de fusion des pipelines des pixels et vertex shaders. |

YOUM (analyseur syntaxique temps réel) | Nombre de définitions trouvées 78 Multi-dico par texte : actif - Multi-mots par définition : 4
|
|
|



 
|