Dans les premiers temps d'OpenGL et de DirectX, la taille des textures devait être deux. Cela signifiait que l'interpolation des valeurs de flottant pouvait être effectuée très rapidement, en utilisant un décalage, etc.
Depuis OpenGL 2.0 (et avant cela, via une extension), les dimensions de texture non puissantes à deux sont prises en charge.
Les textures à la puissance de deux ont-elles des avantages en termes de performances sur les GPU modernes et intégrés intégrés? Quels sont les avantages des textures non puissantes?
Une population importante d’ordinateurs de bureau possède-t-elle des cartes prenant en charge des textures non puissantes?
opengl
textures
performance
Volonté
la source
la source
Réponses:
Y a-t-il des avantages en termes de performances à coller à des textures ultra puissantes sur des GPU modernes et intégrés intégrés?
La plupart des GPU modernes prennent en charge les textures non puissantes à deux (NPOT) et les gèrent bien. La baisse de performance est assez faible. Mais il y a peu de problèmes à considérer:
Lorsque vous utilisez une texture NPOT, la mémoire vive prend plus d’espace, tout comme la texture POT de taille supérieure. Techniquement, vous ne faites que gaspiller l’espace qui pourrait être utilisé pour y insérer quelque chose;
Les textures NPOT peuvent être traitées nettement plus lentement (dans OpenGL 2.1, les performances chutaient jusqu'à 30%) par rapport au POT de taille suivante;
Les GPU plus anciens et les GPU intégrés / sur puce ne sont pas aussi avancés, ils supportent souvent les textures NPOT, mais le support est assez lent et maladroit;
Même les anciens GPU peuvent refuser d’accepter / afficher les textures NPOT;
Il peut y avoir des artefacts de bordure causés par une interpolation mip-map, votre texture 25x25 peut avoir une frange noire où des pixels ont été ajoutés pour la farcir à une taille de 32x32.
PS: je ne suis pas certain des appareils mobiles, il pourrait y avoir encore plus de restrictions concernant les textures POT.
Quels sont les avantages, le cas échéant, des textures sans puissance de deux?
Autant que je sache, il n'y a que 2 avantages:
Existe-t-il un grand nombre d'utilisateurs d'ordinateurs de bureau qui n'ont pas de cartes prenant en charge des textures différentes de la puissance des deux?
Autant que je sache et testé sur PC - Oui. Cela inclut un pourcentage majeur de GPUs Speed-Drop / Bugs mineurs et un pourcentage mineur de cartes qui ne gèrent pas du tout NPOT.
la source
Une utilisation courante des textures sans puissance de deux consiste à rendre les textures cibles «de la taille d'un écran» ou «à la taille d'une demi-écran» (et ainsi de suite) utilisées pour les effets de post-traitement.
Dans ces cas, les mipmaps ne sont pas nécessaires, le tampon est toujours décompressé, donc les tailles de texture impaires causent moins de problèmes ici.
la source
Il y avait des limitations pour les textures NPOT sur du matériel ancien. Comme mentionné sur ce wiki OpenGL , certains matériels plus anciens exigent que les NPOT ne disposent pas de mipmaps, les textures compressées nécessitent un alignement de 4x4 pixels, mais les nouveaux matériels doivent le gérer parfaitement.
D'après mon expérience, certains matériels, même relativement nouveaux, subissent des dommages importants en termes de performances si vous utilisez des textures NPOT au lieu de POT. Je ne sais pas quel est le problème. il est possible que dans une combinaison d'états de rendu, le rendu soit réellement effectué par logiciel. Donc, à moins que vous n'ayez de bonnes raisons, je vous recommanderais d'essayer d'utiliser autant que possible les POT.
Pourquoi utiliser des NPOT au lieu de POT - si vous avez des images de taille NPOT, par exemple 1600 x 1200, utiliser une surface de 2048 x 2048 pixels gaspille beaucoup de mémoire vidéo.
la source
La puissance de 2 textures augmente les performances d'environ 30% pour tous les types de GPU. Non seulement les anciens GPU (30% plus rapide est la différence entre un GPU haut de gamme et un moyen), ils prennent 30% plus de bélier mais moins de vram, ils améliorent la qualité fournissant une taille de texture appropriée pour une distance spécifique, il fonctionne comme un anti-aliasing pour les textures. Les artefacts de lignes sombres doivent être gérés par les moteurs de jeu. Les moteurs aaa les gèrent correctement.
la source
Mon art de programmeur est seulement de la taille correcte.
Cela simplifie certainement ma logique d’affichage en sachant que si je veux définir une texture en haut à gauche de l’écran, je peux simplement définir 0,0 en haut à gauche de la texture et voir toute la texture à l’emplacement correct, si je devais ajouter un rembourrage 0alpha, le positionnement de la texture sur le bord de l'écran serait plus complexe. De plus, bien sûr, 0alpha doit encore être mélangé alpha, et si je regarde des textures opaques, je préférerai peut-être ne pas avoir de canal alpha.
la source