Jai donc créé une texture. Jai enregistré la texture RVB avec la compression BC7, puis ajouté un canal alpha [carte spéculaire] avec différents niveaux de niveaux de gris, et enregistré à nouveau le fichier au format RGBA avec compression BC7. Le fichier résultant a la même taille que celui sans alpha, mais il contient des informations supplémentaires -alpha channel. Comment cest possible? Vous ne pouvez pas avoir de gâteau et manger du gâteau comme je le comprends, alors y a-t-il des compromis pour assurer la même taille?
Jutilise Photoshop avec le plugin Intel DDS.
Réponse
BC7 encode toujours efficacement 4 canaux. Cela fait partie de la nature du format. Activer alpha signifie que le compresseur lira et utilisera la valeur alpha dans votre image source, mais cest tout.
Toutes les images compressées BC7 dune dimension donnée ont la même taille, puisque BC7 compresse chaque 4×4 groupe de texels en 128 bits. Mais cela ne signifie pas qu’ils ont la même qualité .
BC7 est un format d’encodage adaptatif. Bien que chaque bloc ait une taille fixe (à la fois spatialement et par bit), chaque bloc stocke le nombre de canaux qui bloquent réellement la compression et la manière dont ils sont corrélés les uns aux autres. Les spécificités de sont complexes , mais lavantage général est que le compresseur détermine sur une base par bloc le type de compression qui fonctionne le mieux pour un bloc particulier. Si le compresseur peut regarder un bloc et voir que lalpha pour tous les texels est 1.0, alors il peut dépenser plus de bits des 128 bits sur les couleurs et moins sur lalpha.
En tant que telle, une texture " sans alpha " est exactement comme une texture avec alpha où chaque texel a un alpha de 1. Ces blocs dépenseront la majorité de leur bits sur les parties non alpha des texels, ne gaspillant que quelques bits sur un champ " mode " qui permet au décompresseur de savoir que lalpha est une constante 1.0.
Cela signifie également que si votre texture a un alpha variable, mais que certaines de ses parties ont un alpha constant, BC7 peut encoder ces zones alpha constantes avec moins de bits, de sorte que plus des bits peuvent être dépensés pour améliorer le codage des couleurs.
Vous ne devriez donc pas penser quil y a un problème car les deux commutateurs de compression sont sortis avec le même nombre doctets.
Réponse
Voici un ar ticle sur le format BCn: cliquez sur moi . Il est écrit par Nathan Reed, qui est très actif sur ce site. Il passera donc probablement et pourra répondre à votre question avec plus de détails, même si je pense que larticle vous expliquera tout ce que vous devez savoir.
La partie la plus pertinente pour votre question semble être cette section du article:
BC signifie « compression de bloc », et les formats BCn fonctionnent tous en termes de 4 × 4 blocs de pixels. Toutes les images sont découpées en ces petits blocs, et chaque bloc est autonome – les données pour le décoder sont toutes dans un bloc contigu en mémoire . De plus, la taille de chaque bloc compressé est fixe, soit 8 ou 16 octets , selon le format BCn utilisé. Cela représente un taux de compression de 4: 1 ou 8: 1, si limage source est au format RGBA 8 bits.
Tant que votre pixel count ne change pas, la taille de la texture ne change pas non plus. Cependant, plus vous utilisez de canaux (seuls 3 et 4 sont pris en charge par BC7 selon la documentation Microsoft ), moins vous pouvez stocker dinformations par canal de couleur dans un bloquer. Cela signifie que vous perdez plus dinformations en raison de la compression lors de lutilisation de RGBA au lieu de RGB.