S3 / DXT / BC压缩和纹理格式

时间:2015-04-17 18:10:48

标签: image opengl textures gpu

我知道使用DXT压缩是因为它节省了大量内存和带宽。但是,DXT的质量并不是那么好。 DXT是否经常使用?是否使用其他压缩格式?是否通常使用原始(无压缩)格式?

我也读过BPTC纹理压缩,但我没有OpenGL 4.x支持,只有OpenGL 3.x。

我知道这个问题没有一个完美的答案,但是一些“指南”会非常有用。

1 个答案:

答案 0 :(得分:1)

通常没有。它因应用程序的不同而有所不同,许多游戏都会让您选择是否要压缩纹理或不交换质量以提高性能。

关于DXT / S3TC质量的问题在于它因压缩器而异;这是存储预压缩纹理的格式存在的部分原因。显然它可以节省存储和加载时间,但是如果离线完成可以提高压缩图像质量(类似于使用比盒式过滤器更复杂的预过滤mipmap)。

同样,纹理压缩算法不适用于纹理的所有用途(特别是如果尺寸不是4x4的倍数)。您可以对法线贴图执行的最糟糕的事情之一是使用传统DXT对其进行压缩。您可能听说过“3Dc”压缩,这实际上只是DXT5的一种变体,它保留了法线贴图所需的某些属性,但对传统图像来说完全没有必要。

至于BC和DXT之间的差异,主要取决于图像质量和多功能性。 BC 1-3实际上与DXT 1-5相同,只有BC6BC7需要D3D10 +类硬件。 GL称之为BPTC(BC6HBC7)将4x4压缩块划分为单独的颜色渐变,以根据需要提高图像质量(这可能是P来自的地方)。

如果你有BC6HBC7的硬件支持,你将获得更好的图像质量和对sRGB和浮点纹理压缩的支持,但你可以没有这些东西(所有DX9游戏都可以)