受UWA这篇文章的启发,我们老大也安排我对原来TrueColor32bit的UI图集进行一次优化。前期准备工作主要是了解了下Floyd的Dither算法,然后继续研究的时候发现大部分UI图片的Dither+A8的效果和ETC1+A8的效果很接近,如下图。ETC也是有损压缩,它的压缩倍率更高(6倍),为什么能和压缩倍率是(1.5倍)的Dither565效果持平呢。所以我又去了解下了ETC1的原理,特作一篇笔记。另外感谢这篇文章,写得很棒。
UI图集压缩优化,以及对Dither和ETC1算法的深入了解-1.jpg (69.84 KB, 下载次数: 3)
2018-3-25 23:15 上传
一、Floyd-Steinberg Dither算法
将24bit的图片转化成16bit过程中因为精度丢失,产生明显的色阶。而抖动算法,则是把这部分丢失的精度,扩散到周围,使得颜色整体更正确。
丢失的精度,我们将它想象为图片上的一些颜料粉末,抖动算法即是将这些粉末朝着某个方向抖动。
[code][/code]这是Floyd-Steinberg抖动算法的Unity中的实现版本,这个算法我把他分为两步。
UI图集压缩优化,以及对Dither和ETC1算法的深入了解-2.jpg (4.83 KB, 下载次数: 1)
2018-3-25 23:15 上传
把当前位置的像素从RGB8888转化为RGB4444,并把最后的浮点数相减得到丢失的精度。 把丢失的精度按照上面的对照图,按比例叠加到周围的像素中。