De l'intérêt ou non du Shader Model 3.0
Au lancement du NV40, que l'on appelle plus volontiers GeForce 6800, NVIDIA a mis en avant une fonctionnalité qu'il juge décisive face à la concurrence : le support de
DirectX 9.0c et du Shader Model 3.0. Cette nouvelle implémentation des shaders est censée apporter une plus grande souplesse aux développeurs qui trouveront en elle plus de flexibilité grâce notamment à la possibilité d'exécuter un plus grand nombre d'instructions par programme. Outre l'augmentation du nombre maximal d'instructions autorisées, le modèle 3.0 des shaders supporte le branchement dynamique pour les Pixel Shaders. On notera également l'arrivée du Geometry Instancing pour les Vertex Shaders et du Vertex Texturing qui permet au vertex d'accéder aux textures, chose qui n'était pas possible auparavant. Toutes ces nouveautés ne sont là que pour rendre les programmes plus efficaces et pour permettre aux développeurs d'utiliser un seul shader là où il devait en utiliser plusieurs auparavant. Visuellement aucune différence ne distingue un jeu qui supporte le Shader Model 3.0 d'un jeu qui supporte le Shader Model 2.0 et ce malgré la tentative fort maladroite du marketing américain de NVIDIA qui voulait nous faire croire le contraire. Si le gain apporté par le support du Shader Model 3.0 n'est pas visuel, il devrait en théorie se ressentir au niveau des performances. Nous avons eu à cœur de vérifier cela en utilisant
Far Cry avec son patch final 1.2 et le Service Pack 2 de Windows XP (qui intègre DirectX 9.0c). En sus de ces pré-requis nous avons dû utiliser la dernière build 61.77 des
pilotes ForceWare qui supporte le Shader Model 3.0. Pour notre test nous avons utilisé notre propre démo faites sur le niveau du porte-avion ainsi qu'une démo sous Volcano. Dans les deux cas nous constatons des gains indéniables. Mais ces gains sont-ils bien dus aux PS 3.0 ?
Far Cry qui a pénalisé le GeForce 6 à sa sortie, du fait de l'utilisation du path NV3x, permet à NVIDIA de reprendre aujourd'hui le flambeau des performances face à son concurrent canadien. Il faut dire qu'à lui seul le patch 1.2 permet de gagner quelques 10% de performances dans les cas les plus extrêmes (1600x1200) auxquels il faut ajouter un gain supplémentaire induit par l'activation des Shader Model 3.0. Gain qui peut être compris, selon la complexité de la scène, entre 3 et 15%. D'après NVIDIA Far Cry, dans sa version 1.2, fait appel au Geometry Instancing pour gérer entre autres l'herbe et les arbres et aux Pixel Shaders 3.0 pour gérer l'éclairage. Ici Far Cry est dorénavant capable d'utiliser un éclairage par pixel qui est réalisé en une passe contre plusieurs auparavant toujours dans le but d'améliorer les performances.
A première vue, Far Cry semble donc plaider en faveur du Shader Model 3.0 confirmant que celui-ci augmente bien les performances. En réalité il n'en est peut être à pas tout à fait de même. Au début de notre test NVIDIA nous avait fait parvenir une version baptisée finale du patch 1.2 qui s'est révélée quelque peu différente de la véritable version finale. Celle-ci ajoute en effet un mode de rendu spécifique pour les Radeon X800 et le numéro de build passe de 1318 à 1325. De quoi renverser la vapeur ? Oui, et non ! Puisque ce nouveau mode baptisé SM2.B active certaines des fonctions du X800, comme le Geometry Instancing qui n'est pas directement lié au Shader Model 3.0. Le rendu SM2.B permet également aux cartes basées sur le X800 d'utiliser des shaders plus longs ce qui devrait en théorie relever leurs performances. Dans leur version 2.0 les shaders peuvent contenir un maximum de 64 instructions alors que l'implémentation 2.x permet de faire reculer cette limitation. Mais alors se pose une nouvelle question... Si les cartes ATI qui ne disposent pas du Shader Model 3.0 peuvent exploiter des fonctions comme le Geometry Instancing, on peut penser que le patch 1.2 de FarCry contient finalement bien peu d'éléments en Shader Model 3.0, n'en déplaise à NVIDIA....

Dans les faits les
Processeurs ATI ne sont pas forcément favorisés par le SM2B, les performances dans ce mode étant parfois de quelques
FPS inférieures à celles obtenues en mode normal, tout dépendant de la scène utilisée. Il faut aussi savoir que le path SM2B traite trois lumières par passe quand le path SM3 en traite quatre par passe, pour une raison pas forcément évidente. Si l'ajout du rendu SM2B ne permet pas à ATI de repasser devant NVIDIA sur le plan des performances il met en lumière le très faible gain apporté entre SM2B et SM3 sur les cartes GeForce 6. Cela n'est pas réellement surprenant surtout si l'on considère qu'avec les GeForce 6 il faut un minimum de 8 cycles pour faire un branchement dynamique. Fort de ce constat les développeurs de
Crytek ont d'ailleurs préféré utiliser des branchements statiques pour ne pas pénaliser les performances des GeForce 6. A la lumière de ces premières observations, le non support par ATI du Shader Model 3.0 n'est donc toujours pas un drame en soit, l'architecture du GeForce 6 étant de toute façon supérieure même lorsque le Shader Model 3.0 est désactivé. Reste maintenant à voir comment se comporteront les prochains jeux annoncés comme supportant le Shader Model 3.0 pour vérifier si cette fonction est véritablement déterminante pour un GPU moderne. Tout espoir de voir le Shader Model 3.0 offrir un plus grand niveau de complexité graphique sans dégradation des performances n'est donc pas encore totalement vain. Il nous faut également rappeler que si Far Cry 1.2 supporte le Shader Model 3.0 ce support reste théorique. En effet il n'est pas activé par défaut dans le jeu et est uniquement accessible en mode développeur tout comme le rendu spécial X800. Ce dernier mode de rendu pose d'ailleurs un problème puisqu'il pourrait, dans l'abolue théorie, profiter aux GeForce FX…