我阅读了一些有关DXTn和BCn纹理压缩的文章,并且学习了如何编码这些格式。但是我仍然不知道DXT2和DXT3格式之间或DXT4和DXT5格式之间有什么区别,我想这些格式的区别是相同的。

在D3D SDK文档中,它说:

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

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

如果是正确的话,我们可以从实际的游戏开发中受益吗?我认为完全没有必要。

此外,BC2和BC3格式发生了什么?据我所知,DXT2 / 3映射到BC2,DXT4 / 5映射到BC3,因此不再存在区别。难道是同性恋吗?为什么?

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

最佳答案

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

07-28 14:00
查看更多