遇到了一个很蛋疼的问题
美术外包那边根据我门策划的需求出了一个帧动画特效
每帧尺寸为 920x1280,合计有 14 帧,
外包那里根本就没考虑过程序这里的感受,每帧都留了很多白
如果是地地道道的空白,我所使用的打包工具就能自动将其裁剪掉
但讨嫌的是,这个白还不是地地道道的空白,它包含了一些噪点纹路,
阻碍的打包工具自动执行裁减空白的功能
好,我只能自己手动去处理了,马勒戈壁的
第一想法是偷懒,用 ps 机械化地操作一遍吧
好的,说干就干,但弄完第一张我就没心情弄第二张了,
真心挺麻烦,特别是保存时的弹窗,令人心生厌烦
只有回归本行了,于是写了个 java 小程序,执行自动裁减的操作
图简单快捷,都裁减成了相同的尺寸:920x920
裁成正方形是有理由的,因为我计划将这些图片缩放到 512x512 大小
正好是 2 的 n 次幂,这样的话,弄成 pvrtc 就挺方便了
ok,至此打包起来就行了,512x512 每帧,2048x2048 尺寸的纹理集能容纳多达 16 张
我选择使用 pvrtc4 的纹理格式,这样一来,仅需占用 2MB 的机器内存
打包完毕输出为成品素材,放到工程中一跑,结果发现效果相当的渣,边缘很粗糙
好吧,只有将纹理格式由 pvrtc4 换成 rgba4444 试试看了
第二跑,依然很渣,至此我有理由推测是因为在程序中将素材放大为了两倍所致
好吧,该怎么办?主流 ios 设备支持的最大纹理尺寸就是 2048x2048 了
要在程序中不执行放大的操作,就不能使用经缩小过的素材了,也就是说,只能使用原尺寸 920x920
这样的话,要将帧数减少到 8 帧,以方便容纳到两个纹理集中
说干就干,使用 pvrtc4 的纹理格式,输出了两张 2048x2048 的纹理集,
计算一下,将在程序运行时占用 4MB 的机器内存,跑了一下,效果比之前真心好了很多
由此得出结论:优化素材占用时,优先考虑更换像素格式,不得已时才能考虑缩小素材尺寸!
最后,计算一下此次优化带来的成效(如果我的计算方法没有问题的话):
优化之前:1024x2048x4x14=117440512(B)=112(MB)
优化之后:2048x2048x0.5x2=4(MB)