linux平台支持压缩纹理,美术资源超级压缩方法

如何在质量下降不大的情况下降低一倍的占用?如何让臃肿的美术资源压缩再压缩?

JPEG->WDP/WEBP

大部分项目都陆续废掉了JPEG,而最好的代替品是微软的HD Photo,wdp格式,在PSNR差不多的情况下,wdp能比JPEG小一倍多。

(wdp的encoder/decoder不好找的话,我这里有一份微软的库)

观察下面的演示图片不要缩放PDF,用100%显示才看得清楚差别

38dcc6c4e5af7b4f4cd29464a177182c.png

f6458360235ed5e92029cedc9b26421e.png

JPEG 16.18 KB,可以看出脸部方块已经很严重,头发等高频部分已经看不清楚,帽子和墙面质量损失严重,而下面这张WDP文件(HDPHOTO,XnView可以转换)只有13.85KB大小,质量却比JPEG好很多。(通常情况下峰值信噪比差不多的话,WDP能够小一倍):

压缩比从强到弱依次是:WDP>WEBP>JPEG2000>JPEG。因此换用WDP格式能缩小不少资源。

PNG->WEBP

非界面元素,仅仅是为了使用ARGB32的资源,可以用webp的带alpha有损格式代替,能节省不少。

实时纹理压缩

PS Vita里面已经大范围用到了实时纹理压缩方法,DXT格式存储纹理仅仅是为了方便显卡,但是它的地压缩率却害苦了硬盘。废除DXT格式,用wdp格式或者webp格式有损保存图片(不要用JPEG了,JPEG太差)。运行时动态载入并且动态生成dxt格式再载入显卡。如此在质量微弱损失的情况下,可以至少获得4-5倍的空间节省。

PS Vita使用的动态生成dxt的库叫:

4da32f9d3c74f52f42febb480d52234b.png

一般用作模型纹理,UI这种单调,锐利的图片,还是PNG好点。这种方法对风景,人物等纹理的压缩效果最佳。(也可以把转换工作放到安装/更新后,只转一次)。

2d4f0d14d5da92cee09285cca88cb8de.png

DDS格式 256.13KB

23c7338bec0d836d52c9b06b29435cda.png

WDP高质量 49.61KB

2d98e6dcaf12c3eaaf7d898c930cf10f.png

WDP低质量:13.85KB

图片格式

图片大小

原始图片BMP24BITS

786KB

DDS

256KB

WDP高质量

49KB

WDP低质量

13KB

JPEG低于“WDP低质量”的质量

16KB

MIPMAP整合

结合前面动态生成DXT格式,dds里面一般有很多mipmap,按照下面组织原理把这些mipmap全部整合到一张HD Photo图片上。各个子图片元素大致相同,一次性压缩能获得更好效果。

b092b6fad3d5d8485078663b0f83cfc5.png

当需要还原时再将其切割,并转换回DDS格式。

MIPMAP实时生成

虽然物体远近可以用不同的mipmap来提供更真实的效果,但是mipmap的制作上,很多却是先画一张高解析度的图,然后用BOX/BICUBIC等方法缩小出若干张来。负责任点的才会再稍加修改。

显卡的BILINEAR采样绘制对于需要将图片缩小显示的效果比BICUBIC差很多,甚至不如BOX方法。所以很多就是提前用BICUBIC生成缩小后的图片作为一组mipmap存到dds。

这样还不如运行时实时用BICUBIC从最高清的那张纹理自动生成mipmap,再组装成dds载入显卡。可以发现效果和原来的差不多,而容量足足少了一倍。

H264保存纹理动画

H264的2PASS方式保存纹理动画的各帧数据,alpha单独用无损格式保存。

抛弃ZLIB换用LZMA2

换用LZMA2能够高于zlib差不多25%的压缩率(LZMA1只有18%左右)。现在Linux内核压缩文件已经从bz2改为 LZMA2的xz格式了。

aa5adb8150d34503256fd49a10f77801.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值