DXT2 / 3和DXT4 / 5纹理格式有什么区别?

时间:2012-11-14 07:21:50

标签: graphics 3d textures game-engine direct3d

我阅读了一些关于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,因此区别不再存在。这是难以理解的吗?为什么呢?

任何帮助都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:5)

据我所知,DXT2和DXT之间确实没有物理差异。 3和DXT4& 5 - GPU以相同的方式解码它们。根据文档中的引用,我怀疑唯一的原因是向开发人员提示纹理是否已被预乘,从而知道要使用什么帧缓冲混合模式,即。 (1,1-SrcAlpha)vs(SrcAlpha,1-SrcAlpha)。