4

我阅读了一些关于 DXTn 和 BCN 纹理压缩的文章,并学习了如何对这些格式进行编码。但是我还是不知道DXT2和DXT3格式或者DXT4和DXT5格式有什么区别,我猜这些格式的区别是一样的。

在 D3D SDK 的文档中,它说:

DXT2 和 DXT3 的区别在于,在 DXT2 格式中,假设颜色数据已经预乘了 alpha。在 DXT3 格式中,假设颜色没有预乘 alpha。这两种格式是必需的,因为在大多数情况下,在使用纹理时,仅检查数据不足以确定颜色值是否已乘以 alpha。因为在运行时需要此信息,所以使用两个 FOURCC 代码来区分这些情况。但是,用于这两种格式的数据和插值方法是相同的。

这是否意味着:如果我们有一个颜色为 RGB 127,127,127 且 alpha 0 的像素,那么在 DXT2 中,它实际上会存储 RGB 0,0,0,因为 127 乘以 alpha 0?

如果它是正确的,我们在实际游戏开发中能得到什么好处?在我看来,这是完全没有必要的。

此外,BC2 和 BC3 格式发生了什么变化?据我所知,DXT2/3 映射到 BC2,DXT4/5 映射到 BC3,因此不再存在区别。是不是被搁置了?为什么?

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

4

1 回答 1

4

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

于 2012-11-15T14:52:20.137 回答