Nvidia corrige le filtrage des 7800

Publié le 02/09/2005 à 15:10 par
Imprimer

Comme nous vous l'avons indiqué lors des tests des GeForce 7800 GTX et 7800 GT, celles-ci souffrent d'un filtrage anisotrope de qualité contestable puisque celui-ci entraîne un fourmillement dans les textures, plus ou moins marqué selon le jeu, le type de texture et l'angle sous lequel on la voit. Vous trouverez de plus amples détails ainsi que des vidéos qui montrent le problème chez 3DCenter.de 

Nvidia a décidé de réagir rapidement en proposant un driver avec le filtrage corrigé. Le filtrage des 7800 revient donc au niveau de celui des 6800 ce qui est mieux mais pas parfait puisque les 6800 souffraient elles aussi de ce problème de fourmillement dans les textures même s'il était plus réduit. Il est donc toujours visible, nettement dans certains jeux, avec les 6800 et avec les 7800 par défaut. Problème simplement atténué mais toujours là ? Oui et non puisque sur 6800 l'activation du mode High Quality réduisait significativement le fourmillement ce qui globalement le rendait invisible dans les jeux à l'exception de quelques cas particuliers. Activer ce mode sur 7800 avec les nouveaux drivers permet également de faire disparaître le fourmillement, ou tout du moins de l'atténuer à un niveau acceptable, ce que nous avons pu vérifier avec les ForceWare 78.03 beta qui sont disponibles sur nZone .

La correction du filtrage des 7800 tout comme le passage au mode HQ réduisent les performances, mais pas dans des mesures énormes comme certains auraient pu le penser. Nous l'avons vérifié avec un niveau spécial pour UT2003/2004 qui est limité uniquement par le filtrage, en 1920x1440 et en AF8X :


Le problème de filtrage du 7800 n'entraînait donc qu'un gain minime voire complètement nul dans un jeu puisque celui-ci n'est pas limité que par le filtrage, à tel point qu'on peut se demander pourquoi Nvidia aurait implémenté une telle optimisation. La réponse de Nvidia est que ce n'en était pas une, mais bien un bug. Le passage en HQ fait lui baisser les performances d'un peu plus de 10% mais corrige en pratique le problème. Autrement dit avec les nouveaux drivers et en les configurant correctement il est possible de faire disparaître presque complètement le fourmillement des textures à condition d'accepter une baisse de performances en jeu qui en général est de moins de 10%, à l'exception de certains cas particuliers, puisque nous avons pu remarquer une baisse proche de 30% dans certains niveaux d'UT2004, sans que nous ne puissions l'expliquer. Mais globalement dans notre panel de tests habituel la baisse moyenne est de 5-6 %.

Au final le problème peut donc être contourné en activant le mode HQ dans le panneau de contrôle des drivers et ce pour une perte de performances assez réduite. Ceci étant dit il serait nettement préférable que ce fourmillement disparaisse et ce par défaut, ce qui pourrait être le cas dans le futur puisque Nvidia indique continuer à travailler sur ses drivers pour améliorer encore la qualité du filtrage.


Petit rappel : Pourquoi ces optimisations ?

Pour les fabricants de cartes graphiques, et bien que les jeux aient de plus en plus besoin de puissance de calcul au niveau des pixel shaders, le filtrage représente un élément important dans les performances et pouvoir l'optimiser est donc intéressant d'autant plus que les possibilités sont très nombreuses à ce niveau. Sans optimisation, le filtrage anisotrope 16x est 16x plus lent que le filtrage trilinéaire qui lui-même est déjà 2x plus lent que le filtrage bilinéaire, ce qui implique bien entendu que ces filtrages avancés seraient inutilisables si tous les pixels devaient recevoir le filtrage complet. Dans un pixel shader, si le filtrage prend plus de temps que ce que n'a pu prévoir le scheduler, ce qui arrive avec le filtrage AF quand la bande passante mémoire limite l'approvisionnement du texture cache, les unités de calcul sont bloquées et se tournent les pouces en attendant. C'est d'autant plus vrai pour Nvidia qui a une architecture très flexible mais en contrepartie très sensible à ce niveau.

Les optimisations consistent donc à essayer d'éviter le filtrage inutile pour chaque pixel. Certaines optimisations sont simples à mettre en place d'autres demandent des algorithmes très complexes. A côté de cela il existe également des compromis sur la qualité graphique dont certains sont clairement en dehors de la case "optimisation" comme le filtrage anisotrope qui dépend de l'angle introduit par ATI avec la Radeon 8500. Pour des raisons de performances Nvidia a suivi ATI et l'a intégré également dans les 6800 et 7800.

Sans optimisations autres que les optimisations triviales et l'optimisation de l'AF d'après l'angle, voici une idée du type de filtrage que reçoivent les pixels sur une image :


Comme vous pouvez le voir, en AF16X, seulement une très petite partie de l'image reçoit le filtrage AF16X, ce qui est logique puisque seulement une petite partie en a besoin. Tout cela représente une charge relative moyenne de 3 samplings bilinéaires par pixel (il en faut 1 pour le bilinéaire et 32 pour le trilinéaire avec AF16X) tant chez Nvidia que chez ATI.

Mais en dehors de ces optimisations triviales, il y en a d'autres qui peuvent augmenter nettement les performances comme la réduction du nombre de pixels qui reçoivent un filtrage trilinéaire, dont nous vous avons déjà parlé à plusieurs reprises puisque tant ATI que Nvidia y font appel. Celle-ci est cependant moins importante une fois l'AF utilisé puisque le filtrage trilinéaire est rendu inutile sur une grande partie des pixels. Une fois l'AF utilisé il est intéressant de réduire le nombre de samplings, même si peu de pixels le reçoivent puisque ces quelques pixels peuvent avoir un filtrage qui va être 32x plus lent, voire encore plus puisque l'efficacité du texture cache se réduit quand le filtrage se complexifie. Autrement dit les 2% de pixels qui reçoivent de l'AF16x peuvent prendre plus de temps à calculer que les 50% qui reçoivent du simple bilinéaire !

Prenons un exemple : au lieu de 4 samplings pour l'AF4X pourquoi ne pas en faire que 3 ? De la triche ? Pas spécialement. Parfois c'est légitime de le faire d'autre fois ça produit un effet de sous filtrage qui peut causer du fourmillement, c'est peut-être ce type d'optimisation que Nvidia a introduit avec le 6800 et a amplifié avec le 7800.


Dans cet exemple, si les 4 samplings sont compris dans une zone de la texture qui représente 10 texels, on peut supposer que l'un des 4 est inutile comme le montre le schéma. Avec seulement 3 samplings on peut lire les 10 texels et à condition de les combiner correctement, obtenir le même résultat. C'est visiblement là que ce type d'optimisations coincerait puisque combiner correctement ces 3 samplings optimisés est très complexe. Nous ne pouvons pas savoir avec certitude si c'est ce type d'optimisation qui pose ici problème tant Nvidia et ATI gardent secret leur recette du filtrage, mais c'est un exemple qui met en avant la problématique du filtrage : il y a beaucoup de place pour les optimisations mais elles sont souvent très complexes à mettre en place tant au niveau software que hardware.

Vos réactions

Top articles