Devrais-je utiliser des textures non dimensionnées à une puissance de 2?

40

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?

Volonté
la source

Réponses:

15

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:

  • Ils prennent moins d’espace sur le disque dur s’ils ne sont pas emballés (lorsque les zones vides emballées donnent très peu d’addition)
  • Vous pouvez gagner du temps sur l'écriture de NPOT -> POT converter. Vous en aurez besoin d'un pour la version finale, mais utiliser des textures NPOT pour la conception et le prototypage d'interfaces / de modèles est tout à fait approprié

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.

Kromster dit de soutenir Monica
la source
6

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.

bluescrn
la source
4

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.

Jari Komppa
la source
3
Si vous utilisez des formats de texture compressés en mémoire (PVR ou DXT, par exemple), la mise à l'échelle à la puissance suivante utilisera considérablement moins de mémoire de texture qu'une texture NPOT non compressée, mais plus petite.
Tetrad
3
Votre libellé est un peu vague. Désolé si cela correspond à ce que vous essayez de dire - les textures compressées nécessitent toujours des tailles de pixels par multiples de 4, même sur du matériel moderne prenant en charge les textures NPOT.
1
Je m'attendrais à ce que le matériel actuel soit toujours composé de textures de mosaïque / mosaïque dans les pilotes lorsque vous les téléchargez. Cela modifie la disposition de la texture pour rendre l'accès plus optimal pour le matériel. Les consoles (je n'inclus pas XNA dans ce cas-là) vous obligent à effectuer manuellement cette optimisation de la disposition dans votre propre chaîne d'outils. Je suis sûr que cela ne fonctionne que sur POW2.
Roger Perkins le
-1

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.

Yusef Ghatavi
la source
Ceci fournit seulement un avantage (déjà spécifié) des textures avec puissance de deux, mais ne traite pas la question elle-même, raison pour laquelle vous utiliseriez des textures sans puissance de deux étant donné les avantages ci-dessus.
Josh
désolé j'ai mal compris la question, par puissance de 2 vous êtes limité à 2048, 1024, 512, etc probablement c'est la raison principale
yusef ghatavi
les options non power of 2 sont également utiles pour les textures ne nécessitant pas de mipmaps, telles que les textures gui et les textures pour les personnages à la première personne toujours proches de la caméra
yusef ghatavi le
-3

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.

DeadMG
la source
6
Habituellement, on positionne des polygones, pas des textures, à l'écran. Les UV peuvent être donnés aux polygones - ils ne doivent pas nécessairement aller de 0 à 1; si votre texture n'a que 30 cm de largeur, il est bon de passer à 0,9375 (ce qui est une autre raison pour laquelle les textures POT sont bonnes - les UV sont exactement représentables).