纹理压缩的奇妙之旅 漫谈X800的3Dc
最开始的纹理压缩技术并不是微软在DirectX中提出的,这种技术的渊源要追溯到5年以前了。最开始采用纹理压缩技术是S3在OpenGL中首先提出的,最初的名称叫做S3TC。
到了1999年,微软吸纳了这种做法,在他们的DirectX中加入了纹理压缩技术,并且取名为DXTC(DirectX Texture Compression)。
S3TC技术的原理
博采众长的微软在这一步走的非常成功,他们的DXTC技术得到了游戏开发者的肯定,也被显示芯片厂商所支持。
值得提醒的是,纹理压缩的技术虽然看似简单,但是将压缩后的数据存储进显存并不是终结。重要的是需要用显示芯片把这些压缩后的数据进行解压缩,再经过运算贴图到3D模型上。这个过程就需要显示芯片在硬件上支持了,如果不支持,对于压缩后的数据无法识别,照样不能完成纹理压缩,也不能发挥出纹理压缩的优势。
看到这里,可能已经有一些朋友对纹理压缩有了一定的认识,但是如果简单的认为纹理压缩就是将BMP位图压成JPG一类的东西存储进显存里,然后再解开的话那就错了。
纹理压缩应用的算法由于涉及硬件复杂度、解压效率、色彩空间变换等等技术问题,要比单纯的压缩图片复杂的多了。就拿我们刚刚提到的DXTC来讲,这其中就包含着5种不同的算法,DXT1一直到DXT5,这5种不同的算法是根据5种不同的情况来使用的。
纹理压缩技术让游戏开发人员能够轻易的在较小的模型上贴上尺寸较大的纹理贴图,这样就能够让游戏更加逼真。微软的DXTC技术能够对纹理进行6:1的压缩,这就意味着原来一张贴图文件原大6MB,经压缩后存储进显存仅仅为1MB了,这样就能够在同样的显存容量中存储更多的贴图了。
然而,DXTC纹理压缩技术虽然能够带来性能上的提升,但是这种压缩技术却是一种有损压缩,这也就意味着在压缩→存储→解压的过程中势必会对细节有一定的损失,但是这个损失的幅度并不是很大,所以人们也就接受了这种折中的做法。DXTC技术得到了充分而广泛的应用,几乎所有游戏都采用了这种技术。<