Archive

Archive for November, 2010

DXT++纹理压缩格式(大结局)

November 4th, 2010 1 comment

续前一篇。后来用LBG算法实现了一个简单的矢量量化…

以上是测试纹理的局部对比,左图为原始dds,右图为压缩后再解压出来的dds,在这个压缩质量下将测试图片的颜色数从原始的2603个减少到了172个,压缩后的color table(对于512的纹理原始尺寸为64k)为28k,selector部分64k只压缩到60k,压缩后文件尺寸为87k,压缩比仍然不高,相对原始dds只减小了1/3左右。

Read more…

Categories: 程序/算法 Tags:

DXT++纹理压缩格式(续)

November 2nd, 2010 4 comments

之前写过一篇文章DXT++纹理压缩格式,讨论了将dds文件进一步压缩的可能。上个周末花了时间将文中提到的算法实现了。

结果发现效果没有想象中的好,压缩是压缩了,但是压缩比基本和直接把dds压缩成zip格式相当,甚至不如压缩比更高的7z格式。 不要被文中最后提到的两个例子蒙骗,那两个是很特殊的纹理,颜色数非常少……

所以说目前来看,dxt++无损压缩的实用价值不大,因为用zip压缩也能达到类似的压缩比,可能的利用价值在于它可以通过损失一些颜色数,简单的说就是把近似的颜色合并,减少huffman编码的比特数从而进一步提高压缩比。反正dds本身已经是有损压缩,画质要求不高的话再损一点可能也能接受。

这个算法本身来自网络,所以干脆也开源了,托管在google code上,svn地址是http://dxtpp.googlecode.com/svn/trunk/ ,包含所有源代码,一个测试工程和一张测试用dds图片(老奶奶Lenna)

目前还很土,只支持DXT1格式,而且不支持mipmap,接下来会尝试一下有损压缩,如果确实有前途的话,我会继续完善其他DXT分支格式的支持。

Categories: 程序/算法 Tags: