我阅读了一些关于DXTn和BCn纹理压缩的文章,并且我学会了如何编码这些格式。但我仍然无法弄清楚DXT2和DXT3格式之间或DXT4和DXT5格式之间有什么区别,我猜这些格式的差异是相同的。
在D3D SDK的文档中,它说:
DXT2和DXT3之间的区别在于它是DXT2格式的 假设颜色数据已被alpha预乘。在里面 DXT3格式,假设颜色不是预乘的 α。需要这两种格式,因为在大多数情况下,由 使用纹理的时间,仅检查数据是不够的 确定颜色值是否已乘以alpha。因为 在运行时需要此信息,使用两个FOURCC代码 区分这些案件。但是,数据和插值 用于这两种格式的方法是相同的。
这是否意味着:如果我们有一个带有alpha 0的RGB 127,127,127颜色像素,那么在DXT2中,它实际上会存储RGB 0,0,0,因为127乘以alpha 0?
如果它是对的,我们可以从实际游戏开发中获益吗?在我看来,这是完全没必要的。
此外,BC2和BC3格式发生了什么?据我所知,DXT2 / 3映射到BC2,DXT4 / 5映射到BC3,因此区别不再存在。这是难以理解的吗?为什么呢?
任何帮助都将不胜感激,谢谢!
答案 0 :(得分:5)
据我所知,DXT2和DXT之间确实没有物理差异。 3和DXT4& 5 - GPU以相同的方式解码它们。根据文档中的引用,我怀疑唯一的原因是向开发人员提示纹理是否已被预乘,从而知道要使用什么帧缓冲混合模式,即。 (1,1-SrcAlpha)vs(SrcAlpha,1-SrcAlpha)。