Les jeux en 3D texturée OpenGL, OpenGL ES et maintenant WebGL utilisent la compression de textures pour permettre des performances décentes.
Malheureusement, le format qui s’est imposé de fait sur le desktop (il est inclus dans Direct3D pour Windows) est soumis à redevance dans les pays qui, malheureusement, reconnaissent les brevets logiciels. Il s’agit du format S3TC de la société S3 Graphics.
Le point avait été abordé dans cette dépêche du mois d’août, qui portait d’ailleurs de très bonnes nouvelles : le lancement de nouveaux formats de compression de textures libres de redevance, équivalents (ETC) ou supérieurs (ASTC) au S3TC. Ça, c’est pour l’avenir. Mais, pour le présent ?
Pour le présent, Rudolf Polzer et Maik Merten ont développé il y a plus d’un an S2TC, un format de compression de textures qui est compatible avec le S3TC, sans recourir aux techniques brevetées pour celui‐ci.
La solution serait un peu moins qualitative, sans que la différence ne soit très visible à l’œil nu (voir la comparaison). Elle serait en revanche plus performante, car plus simple à mettre en œuvre.
Actuellement, vous avez le choix pour votre distribution : installer vous‐même la bibliothèque qui implémente S3TC (libtxc-dxtn) ou celle qui implémente S2TC (libtxc-dxtn-s2tc). Aucune n’est installée par défaut, et si vous faites tourner un jeu nécessitant le format de compression S3TC, celui‐ci tournera sans les textures.
Pour éviter cet écueil, les distributions réfléchissent à intégrer la prise en charge du S2TC par défaut.
Ubuntu vient de franchir le pas, aiguillonné par Valve, et d’autres pourraient suivre (voir debbugs #668645, par exemple).
Aller plus loin
- « À quoi sert la compression des textures ? », par J.‐F. Maquiné sur ONVERSITY (410 clics)
- DirectX : Techniques de compression des textures, par Tanguy Fautré sur ONVERSITY (126 clics)
- S3 Texture Compression, la page Wikipédia anglophone (65 clics)
- La page S3TC sur le wiki dri.freedesktop.org (56 clics)
- [Mesa-dev] S2TC — yet another attempt to solve the “S3TC issue” (73 clics)
- Le GitHub du projet S2TC (53 clics)
# Plus performant ?
Posté par ziliss . Évalué à 7. Dernière modification le 13 octobre 2012 à 20:50.
Plus simple à mettre en œuvre n'implique pas que ce soit plus performant.
L'annonce indique que c'est plus performant car l'algorithme est plus simple. Par contre l'algorithme de compression étant plus simple, il a pu être mieux optimisé, ce qui peut parfois donner une meilleur qualité.
J'ai regardé les comparaisons. Je pense effectivement que bien que S3TC soit meilleur, le joueur ne se rendra pas compte de la différence. Et l'on voit effectivement une très légère meilleur qualité dans certaines images ne comportant pas de dégradés.
[^] # Re: Plus performant ?
Posté par antistress (site web personnel) . Évalué à 5.
Je n'ai pas développé ce point, désolé.
Il faut retenir que, d'après les devs, le compresseur S2TC est plus rapide lors de la compression dynamique, au chargement du jeu :
Et qu'à la décompression, ça ne change rien puisque c'est accéléré par la puce graphique comme S3TC dont c'est un sous-ensemble :
# Pas forcement concluant
Posté par Laurent Carlier . Évalué à 7.
Je viens d'uploader des versions ArchLinux sur AUR (https://aur.archlinux.org/packages.php?O=0&K=libtxc_dxtn_s2tc)
Voilà pour un premier test.
# FXT1
Posté par Gabin II . Évalué à 1.
Il aurait été intéressant d'intégré le format libre FXT1 de feu 3Dfx dans les tests ou alors tenter d'améliorer FXT1.
Un comparatif assez intéressant FXT1 vs S3TC montre qu'il n'était pas totalement à la ramasse, certes moins bon mais avec le temps on aurait pu atteindre l'équivalent voir mieux, suffit de voir ce qui se fait dans la compression video libre.
[^] # Re: FXT1
Posté par antistress (site web personnel) . Évalué à 6. Dernière modification le 14 octobre 2012 à 03:25.
Ce n'est pas la communauté qui dicte les formats de l'industrie sur ce coup là. Il faut donc faire en fonction.
# Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 5. Dernière modification le 14 octobre 2012 à 01:08.
Je ne comprends pas: le problème n'est pas qu'il n'existe pas de format de textures compressées libre—il existe ETC2 pour les textures RGBA et ETC1 pour les textures RGB—le problème est que ces formats libres ne sont pas implémentés dans le matériel. ETC1 commence certes à être implémenté dans pas mal de GPUs, mais le manque de support pour les textures RGBA le rend peu utile (90% des textures utilisées dans les jeux ont un canal alpha qui peut être utilisé pour divers effets), donc c'est plutôt ETC2 qu'on veut, mais je ne connais aucun matériel en circulation qui l'implémente.
On peut certes implémenter un format de textures compressées dans le peintre de fragments (ma traduction de fragment shader) mais ça ne sera probablement pas aussi performant qu'un support direct par le matériel, enfin je serais ravi d'être démenti.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 5.
OK, j'ai lu l'annonce et je comprends maintenant:
OK donc si je comprends bien, S2TC serait un sous-ensemble de S3TC qui évite les parties brevetées.
Plus bas on lit:
OK donc soyons clairs, dans le monde réel, les jeux vidéo fournissent leur propres textures compressées, ils ne se reposent pas sur le GL pour compresser leurs textures pour eux (en tout cas ils n'ont pas à le faire).
La spec OpenGL (et ES) va plus loin en proposant de compresser à la volée des textures non compressées. C'est cette partie qui est sujette à brevets logiciels du point de vue de Mesa (car cette partie doit être implémentée par Mesa) et c'est ça qui rend impossible pour Mesa d'exposer l'extension S3TC. Mais du point de vue d'un développeur de jeux vidéo, ça n'est pas utile.
Ce que j'aimerais, c'est une variante de l'extension S3TC moins le support de la compression à la volée. Comme ça, Mesa pourrait l'exposer sans problème sur les pilotes de matériel gérant ce format en dur (Mesa ne pourrait pas l'exposer sur les autres pilotes et en particulier pas sur LLVMpipe et autres pilotes logiciels), et ça suffirait pour les jeux vidéo.
Note que c'est ce que l'extension de WebGL expose. Pas de support pour la compression à la volée, du coup, pas de problèmes de brevets tant que le matériel prend nativement le format en charge.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 5. Dernière modification le 14 octobre 2012 à 03:24.
Les brevets portent sur la décompression, d'où ce sparadrap :
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 3.
Apparemment ils doivent aussi porter un peu sur la compression, puisque le message sur la liste de diffusion dit:
En gros ce que je dis c'est que la compression par le GL n'est déjà pas une fonctionnalité très utile en soi pour les jeux vidéo (et pour la plupart des applications), et donc l'idée de faire un compresseur castré qui évite les brevets au prix d'une qualité inférieure ne va sembler intéressante qu'à un marché limité, en tout cas probablement pas aux éditeurs de jeux vidéo (la dernière phrase de ta dépêche suggère que Valve est intéressé par S2TC, peux-tu donner une source?)
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 4. Dernière modification le 14 octobre 2012 à 11:10.
La gestion du S3TC est nécessaire pour les jeux Valve, quelque soit le moyen (S3TC ou S2TC).
Source Ubuntu :
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 1.
Au fait, note aussi que pour activer le support de S3TC par Mesa, il suffit de définir une variable d'environnement… ce que Firefox fait depuis la version 16 fraîchement débarquée.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2.
Firefox n'implémente pas le décodage S3TC, elle le passe au pilote.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 1.
Exactement! Mon argument était que ceci suffit à couvrir les besoins des jeux vidéo tout en évitant les difficultés avec les brevets, et j'aimerais donc voir Mesa spécifier une extension OpenGL n'offrant que ça, disons calquée sur la spécification de l'extension WebGL, et la rendre toujours disponible du moment que le matériel sait le faire.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2.
J'ai pas compris ! Mais Mesa fait comme Firefox, elle laisse faire une autre brique (la bibliothèque S3TC suscitée en l'occurrence) qui est optionnelle pour cause de brevets logiciels. Comme les codecs brevetés dans nos distributions.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 2.
Mesa fait plus que ça: elle implémente la fonction glCompressedTexImage2D de OpenGL qui permet de compresser des données de texture non compressées. C'est cette partie dont l'implémentation est sujette à brevet même si le matériel supporte S3TC, parce qu'il faut faire la compression en logiciel. C'est cette partie qui est absente de l'extension WebGL, qui n'est pas très utile pour les jeux vidéo, et que je suggère d'omettre d'une variante de l'extension OpenGL.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2.
Tu veux dire que mesa rejette S3TC pour cause de brevets et pourtant met quand même les deux pieds dedans au titre de la compression ?
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 2. Dernière modification le 14 octobre 2012 à 18:19.
Non! Mesa ne met qu'un pied dedans en prenant 2 précautions:
- 1) en isolant la compression dans une bibliothèque séparée, libtxc_dxtn.so.
- 2) en demandant à ce qu'une variable d'environnement soit définie pour activer le moindre support de S3TC.
Si je comprends bien le but de S2TC est de permettre de supporter la compression sans avoir à prendre ces précautions.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2. Dernière modification le 14 octobre 2012 à 18:24.
Oui! Mais il existe quelques incompatibilitées comme signalé en commentaire par Laurent ci-dessus ou sur le rapport de bogue Ubuntu.
Si ça pouvait être réglé, S2TC serait de mon point de vue une vraie avancée pour les OS libres.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par WhiteCat . Évalué à 3.
Précisions :
Si la lib s3tc est présente il n'y a pas besoin de variable d'environnement pour activer s3tc (dans mesa). La variable d'environnement permet de faire croire que s3tc est activé (quand la lib est effectivement absente).
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par claudex . Évalué à 3.
Et l'intérêt est de pouvoir passer directement l'instruction au matériel pour qu'elle soit traité par ce dernier.
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par WhiteCat . Évalué à 2.
Encore faut-il que l'application (le jeu) le supporte. En tout cas avec ETQW ça ne marche pas du tout.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 4. Dernière modification le 14 octobre 2012 à 03:20.
Les appareils mobiles implémentent ETC2 pour la plupart (OpenGL ES).
Pour les appareils desktop, c'est un problème : ainsi Intel vise la certification OpenGL ES 3 (après la 2 qu'il a obtenue récemment) pour Sandy/Ivy Bridge (Gen 6 et 7) et il doit trouver un moyen de décompresser les textures au format ETC2 matériellement.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2. Dernière modification le 14 octobre 2012 à 03:30.
Matériellement ou pas, si l'on en croit un des dévs Intel :
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 3.
Peux-tu me citer un seul appareil mobile disponible sur le marché qui offre effectivement le support de ETC2 dans les bibliothèques OpenGL ES 2 livrées dessus?
Parce que j'avais regardé il y a quelques mois et j'en avais trouvé zéro. Si le support de ETC2 était largement répandu, on n'aurait pas choisi PVRTC et ATC comme formats mobiles à exposer par WebGL en plus de S3TC pour bien couvrir le marché.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 3. Dernière modification le 14 octobre 2012 à 11:34.
Arf j'ai peut-être extrapolé.
J'avais déduit de cette phrase que les puces autres que PowerVR géraient ETC mais ce n'est pas ce qui est écrit en fait :
Apparemment Mali-400 gère ETC 1 ou 2 ?
Pire, au niveau logiciel, Wikipédia EN ne parle que de ETC1
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par Benoit Jacob (site web personnel) . Évalué à 1.
Pas mal d'appareils gèrent le ETC1 en effet, mais c'est ETC2 qu'il nous faut, et je n'ai pas vu d'appareil, Mali-400 ou autre, le gérant. Je suppose que le suppot d'ETC2 va se répandre avec OpenGL ES 3.0, mais ça veut dire qu'il faudra attendre plusieurs années avant que ça ne représente l'essentiel du marché.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 2. Dernière modification le 20 octobre 2012 à 18:02.
Par contre une texture ETC1 marche avec les appareils supportant ETC1 ou ETC2 (=un appareil ETC2 peut décoder le ETC1).
Et il est possible de stocker une texture ETC1 et ETC2 dans un même fichier sans pour autant que le fichier ne prenne la place de deux textures (certaines parties, on ne sait quel pourcentage, sont partagées). Voir ce lien.
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 3.
ETC2 Texture Compression For Intel Is Happening
[^] # Re: Il existe déjà des formats libres; le problème c'est le support matériel.
Posté par antistress (site web personnel) . Évalué à 1.
Intel Continues Work On ETC2 Texture Compression
# Les brevets sur S3TC seraient invalides
Posté par antistress (site web personnel) . Évalué à 3. Dernière modification le 14 octobre 2012 à 18:12.
Une remarque complémentaire sur les brevets de S3TC que j'oublie de mettre depuis le début de cette dépêche : S3TC serait dans le giron de HTC si j'ai bien suivi, et Intel a émis publiquement de sérieux doute quant à la validité du brevet. Mais tant que le brevet n'est pas invalidé…
[^] # Re: Les brevets sur S3TC seraient invalides
Posté par antistress (site web personnel) . Évalué à 4.
Source : http://www.phoronix.com/scan.php?page=news_item&px=OTkxMQ
[^] # Re: Les brevets sur S3TC seraient invalides
Posté par Benoit Jacob (site web personnel) . Évalué à 2.
Valide ou pas, je crois qu'il remonte à plus de 10 ans donc il va bien finir par expirer.
[^] # Re: Les brevets sur S3TC seraient invalides
Posté par antistress (site web personnel) . Évalué à 2.
Lié ou pas : Intel Mesa To Force On S3TC, Floating-Point Textures
# Trop bas niveau?
Posté par devnewton 🍺 (site web personnel) . Évalué à 5.
Est-ce qu'opengl n'est pas trop bas niveau sur ce coup là?
En tant que développeur de jeux multiplate-formes, plutôt que de jouer au mega puzzle "quelle est la combo de 500 paramètres pour gérer mes textures avec le hardware sur lequel je tourne", j'aimerais bien pouvoir faire quelque-chose comme:
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.