FarCry et patch 1.2 : Shader Model 3.0 bateau

Publié le 22/07/2004 par
Imprimer
Lorsque nous avons eu entre farcrynos mains le patch 1.2 beta de FarCry (mais marqué "final" par NVIDIA), nous avons préféré ne pas nous ruer dessus et attendre la version officielle avant de l´utiliser et de conclure quoi que ce soit. Ceci par précaution habituelle, mais également parce que nous avions quelques soupçons à son sujet, soupçons qui ont été confirmés quand nous y avons regardé de plus près.

Ne préférant pas critiquer un patch beta et ayant de toute manière décidé d´attendre que des drivers officiels soient disponibles chez NVIDIA avant de revenir vers un comparatif de cartes haut de gamme, nous avons laissé le cas FarCry en suspend. Le patch final a été rendu public hier et apporte quelques changements relativement importants (qui vont d´ailleurs dans le sens de ce que nous avions remarqué) ce qui prouve au passage que la version estampillée finale par NVIDIA ne l´était pas. Il est donc temps de clarifier la situation qui est loin d´être simple à cause des différentes versions des shader et de leurs profils de compilation.

Le fameux patch
Le patch 1.2 de FarCry apporte un gain de performances significatif grâce à l´utilisation de 2 optimisations : le geometry instancing et le rendu des lumières en une seule passe. Ceci est rendu possible grâce aux Pixel et Vertex Shader 3.0… selon NVIDIA.

Geometry Instancing
Le geometry instancing permet d´accélérer le rendu répétitif de petits objets identiques (comme l´herbe) en envoyant une grosse commande regroupant tous ces objets au lieu d´envoyer une commande pour chaque brin d´herbe. Chaque demande de rendu consomme des cycles CPU, celui-ci se trouve donc déchargé d´une partie du travail grâce au geometry instancing (mais le GPU n´est déchargé de rien du tout et a même un peu de travail supplémentaire). Seulement voilà, bien qu´introduite par NVIDIA avec le GeForce 6800, cette technologie n´est pas directement liée aux Vertex Shader 3.0 et fonctionne avec tous les Vertex Shader. Qui plus est, nous savons officieusement depuis quelques temps que les Radeon X800 peuvent également accélérer le geometry instancing (bien que nous ne sachions pas dans quelle mesure) et que cela devrait être implémenté dans de futurs drivers. Il apparaît donc évident que cette optimisation n´est pas liée aux Shader Model 3.0 et aurait pu être intégrée par Crytek en concertation avec ATI également.

Utilisation de longs pixel shaders
La fusion des différentes passes du rendu des lumières permet d´accélérer leur rendu et demande principalement une gestion de shader plus longs. Fusionner toutes les passes en Pixel Shader 2.0 n´est ainsi pas possible. Cela peut également demander plus d´interpolateurs haute précision (le SM3.0 en dispose de 10 au lieu de 8 + 2 basse précision) mais d´après notre observation des shaders, cela n´est pas nécessaire dans FarCry. La seule chose requise (en tout cas pour la grande majorité des cas que nous avons pu observer) est de pouvoir gérer de longs shaders : un peu plus de 100 instructions alors que la limite en est de 64 (+32 de texturing) en Pixel Shader 2.0. Cela veut-il dire que les Pixel Shader 3.0 sont nécessaires ? Pas du tout !


Les Pixel Shader 2.x supportés par toutes les GeForce FX mais également par les Radeon X800 le permettent. Les Radeon X800 n´ont qu´un support très léger des Pixel Shader 2.x mais il est suffisant. C´est là qu´intervient le changement dans cette version finale du patch de FarCry qui supporte un mode Pixel Shader 2.x (appelé SM 2.B en référence au profil de compilation HLSL associé aux Radeon X800) réservé aux Radeon X800 en sus du mode Pixel Shader 3.0 (SM 3.0) réservé aux GeForce 6800.

Le test
Les modes SM 2.B et SM 3.0 sont encore beta et ne sont pas activés par défaut. Qui plus est, il faut disposer de DirectX 9.0c et d´une version à jour du compilateur HLSL pour pouvoir les activer.

Nous avons testé ce nouveau patch avec une GeForce 6800 GT. Pour pouvoir tester le path SM 2.B nous avons dû tromper le jeu en lui faisant croire que la GeForce 6800 était une Radeon X800 car ces Pixel Shader 2.x optimisés ne sont activables que si une Radeon X800 est détectée. Etant donné que fausser le système de détection de FarCry peut désactiver certaines optimisations légitimes dédiées aux GPU NVIDIA, nous avons également testé la GeForce 6800 GT "X800" en Pixel Shader 2.0. Nous avons utilisé une scène faisant appel à 3 lumières dynamiques, soit un éclairage complexe (mais ce n´est pas le plus complexe présent dans le jeu), et n´étant pas influencée par le Geometry Instancing.

GeForce 6800 GT "normale", SM 2.0 : 50 FPS
GeForce 6800 GT "X800", SM 2.0 : 48 FPS
GeForce 6800 GT "normale" SM 3.0 : 64 FPS
GeForce 6800 GT "X800", SM 2.B : 61 FPS


Les résultats parlent d´eux-mêmes… Les Pixel Shader 3.0 n´apportent pas de gain par rapport aux Pixel Shader 2.x du path SM 2.B.

Qu´est-ce que cela signifie ?
Que le Shader Model 3.0, contrairement à ce qui a été dit auparavant, n´est pas la source des améliorations de performances dans FarCry et que d´autres GPU peuvent disposer d´optimisations similaires. Le profil PS 2.B étant dédié aux X800 d´ATI, nous pourrions nous dire qu´il était logique que le profil optimisé pour les GeForce 6800 soit écrit en PS 3.0. Mais ce n´est pas si simple car avec les GeForce FX, NVIDIA a introduit un profil PS 2.A. Ce profil PS 2.A étant supérieur au profil PS 2.B il peut sans problème recevoir ces optimisations. Cela signifie que si Crytek avait écrit ces mêmes optimisations mais en utilisant des PS 2.x (profil de compilation PS 2.B pour ATI et PS 2.A pour NVIDIA), toutes les GeForce FX, les GeForce 6800 et les Radeon X800 auraient pu en profiter ! Pire, le profil PS 2.A faisant partie de DirectX 9.0b ces optimisations auraient pu être utilisées par tous les possesseurs de GeForce FX et 6800 dès aujourd´hui et ce, sans utiliser de DirectX et de compilateur beta… Une situation qui nous paraît anormale. Bien entendu il reste possible qu´une infime partie des optimisations nécessitent les Pixel Shader 3.0 (bien que nous émettions de très sérieux doutes à ce sujet) mais cela n´est pas une justification valable.

Conclusion
crytekSoit Crytek s´est perdu dans les différents profils, soit, et c´est la solution la plus probable, Crytek n´a inclus que quelques expérimentations sans réelle réflexion derrière, poussé par NVIDIA qui y voyait là une occasion facile de mettre en avant le Shader Model 3.0 des GeForce 6800 (qui reste malgré cette histoire un élément positif) quitte à flouer tous les possesseurs de GeForce FX. Cette utilisation commerciale trompeuse de cette mise à jour de FarCry est regrettable et c´est probablement ce qui a poussé Crytek a accepter d´ajouter un profil dédié aux Radeon X800 en dernière minute, sachant bien que vu la manière dont logo NVIDIA smallNVIDIA utilisait ce patch, les critiques pour parti pris tomberaient une fois celui-ci analysé. Ceci met au jour un autre problème des optimisations : une optimisation générale, qui s´applique à tous les GPU, peut n´être intégrée que pour un GPU bien précis de manière à fausser l´analyse des performances. Nous espérons bien entendu que cela sera corrigé lors du prochain patch et ne plus revoir ce genre de chose à l´avenir…

Il est utile de rappeler que le support des shaders de FarCry optimisés pour les GeForce 6800 et pour les Radeon X800 est toujours à l´état de bêta version et qu´il pourrait y avoir du changement lors d´un prochain patch avec pourquoi pas des effets plus avancés utilisant réellement le Shader Model 3.0 (ou d´autres nouveautés introduites par les GeForce 6800) ou encore peut-être sera-t-il généralisé à tous les GPU qui peuvent en profiter comme ça aurait dû être le cas dès le départ.
Sommaire
1 - FarCry et patch 1.2 : Shader Model 3.0 bateau
Vos réactions

Top articles