Interpolation de texture : comment cela affecte les performances du GPU

Interpolation de texture : comment cela affecte les performances du GPU

Depuis l'arrivée des premières cartes 3D sur PC, on utilise ce que l'on appelle l'interpolation de texture. Ce qui était à l'origine utilisé pour éviter l'effet de pixellisation dans les textures de la scène. Cela se fait par un type d'unité appelé « unités de gestion de texture » ​​ou abrégé en unités de texture. Nous expliquons comment cela affecte les performances de vos GPU.

L'une des pièces fondamentales de chaque GPU est l'unité de texture, qui est chargée de placer une image dans le triangle de chaque scène, un processus que nous appelons texturing, mais aussi ce que nous appelons interpolation de texture.

Comment fonctionne l'interpolation de texture ?

textures filtrées simples

L'interpolation de texture est une fonction qui s'étend au mappage de texture, elle consiste à créer des dégradés de couleurs d'un pixel à l'autre afin d'éliminer l'effet de pixellisation dans la scène. Le plus simple étant le filtre ou interpolation bilinéaire, qui consiste à prendre les 4 pixels les plus proches de chaque pixel pour effectuer le calcul d'interpolation.

On utilise aujourd'hui des systèmes d'interpolation beaucoup plus complexes que le filtre bilinéaire, qui utilisent un plus grand nombre de pixels par échantillon. Comme c'est le cas avec le filtre anisotrope à différents niveaux qui peut utiliser 8, 16 et même 32 échantillons par pixel afin d'obtenir une meilleure qualité d'image.

Cependant, malgré l'existence d'algorithmes d'interpolation de texture plus complexes, la grande majorité du matériel graphique est conçue pour l'utilisation du filtre bilinéaire, qui est le moins cher et le plus simple à mettre en œuvre au niveau matériel et permet d'obtenir des résultats. qu'aujourd'hui nous pourrions considérer comme gratuit en termes de coût de calcul.

Interpolation de texture et cache de données

GPU TFLOPS Velocidad

Lorsque l'unité de texture exécute le processus de tutorat de polygone, elle recherche la valeur de couleur stockée dans la texture en mémoire, l'applique au pixel correspondant, effectue les calculs correspondants avec le ou les shaders spécifiés et le résultat final l'envoie à le ROPS afin qu'il soit écrit dans le tampon d'image.

Au milieu de ce processus s'effectue l'interpolation ou le filtrage des textures, mais parce que c'est une tâche répétitive et récursive. Cela se fait par ce que l'on appelle l'unité de texture, qui est en charge de réaliser les différents filtres. Pour ce faire, il nécessite une bande passante élevée qui augmente avec le nombre d'échantillons requis par pixel, au moins quatre fois plus élevée pour chaque texel, ce qui est nécessaire pour réaliser le filtre bilinéaire.

Les unités de texture dans les GPU d'aujourd'hui sont regroupées quatre par quatre dans chaque shader ou unité de calcul. Cela signifie que 16 accès 32 bits sont nécessaires par cycle d'horloge et par unité de shader. C'est pourquoi le cache de données d'une même unité et sa bande passante sont utilisés pour effectuer un filtrage de texture.

Dans le même temps, s'il est nécessaire d'utiliser un filtre de texture de plus haute précision puisque chaque unité de texture ne prend que 4 échantillons par cycle d'horloge, alors il est nécessaire d'utiliser un plus grand nombre de cycles d'horloge pour exécuter des algorithmes d'interpolation de texture beaucoup plus complexes, ainsi réduire le taux de texturation.

Le coût de calcul de l'interpolation de texture

GPU NVIDIA

Aujourd'hui les shaders sont capables d'effectuer une quantité énorme de calculs par cycle d'horloge, ce n'est pas en vain qu'ils sont capables d'effectuer plusieurs TFLOPS, les FLOPS étant des opérations en virgule flottante et le T correspondant au préfixe Tera, qui fait référence à 10 ^ 12 opérations, la puissance de calcul des GPU a donc énormément augmenté.

Aujourd'hui, l'interpolation des textures pourrait être réalisée sans problème à l'aide d'un programme de shader à l'intérieur du GPU, ce qui en théorie éviterait complètement l'inclusion d'unités de texture. Pourquoi n'est-ce pas fait ? Eh bien, du fait que pour compenser la perte desdites unités de texture, il faudrait augmenter la puissance des unités de calcul chargées d'exécuter les shaders d'une manière qui coûterait beaucoup plus cher. C'est-à-dire que nous aurions besoin de placer plus de transistors que nous n'en aurions économisé, donc les unités de texture continuent à l'intérieur des GPU après plus de vingt ans depuis les premières cartes 3D et elles ne disparaîtront pas.

Il faut tenir compte du fait que l'interpolation de texture est effectuée d'une manière pour tous les texels qui sont traités dans la scène, ce qui est énorme et surtout si nous parlons de hautes résolutions telles que 1440P ou 4K. Il n'est donc pas rentable de les supprimer du matériel et tout matériel graphique sans eux va avoir des problèmes de performances majeurs s'il s'en passe, sans oublier que tous les jeux et applications tiennent déjà leur existence pour acquise.

Limitations actuelles de l'unité de texture

GPU AMD VRAM

Une fois que nous avons expliqué son utilité, nous devons prendre en compte les limitations concernant l'unité de textures pour l'interpolation. Le format de texture habituel est RGBA8888 où chacun des composants a une précision de 8 bits et a donc 256 valeurs par composant de couleur.

Cela facilite grandement la mise en œuvre de l'interpolation de texture au niveau matériel. Puisque bien que chaque unité de texture prenne les 32 bits de chaque pixel en interne dans le cache de données, chacun des quatre composants est traité séparément, plutôt qu'ensemble.

Artefacts interpolación texturas

Les problèmes avec cette implémentation ? Lorsque l'unité de texture effectue l'interpolation de chacune des 4 composantes, elle le fait en utilisant seulement 256 valeurs, ce qui, bien que facilitant la mise en œuvre au niveau matériel de l'interpolation de texture, réduit la précision des données pouvant être obtenues, pour ce que nous ne faisons pas. aboutir au résultat idéal pour l'interpolation, mais une approximation de celui-ci.

Ce manque de précision en combinaison avec le fait d'utiliser peu d'échantillons par pixel fait que plusieurs fois dans les textures des jeux des artefacts d'image sont générés qui empoisonnent la qualité finale de la scène. La meilleure solution? Utiliser des méthodes d'interpolation beaucoup plus complexes telles que l'interpolation bicubique, mais cela signifie amener le matériel à des niveaux de complexité beaucoup plus élevés qu'aujourd'hui, car cela nécessiterait quatre fois plus de bande passante avec le cache de données.