谈Unity3d游戏贴图压缩

UI贴图

一般游戏都会选一个默认的分辨率来做设计,特别是UI,以下都以1080p(也就是1920*1080)来说。

建议一

  • 在1080p的画布下绘制,严格按照分辨率以及比例来绘制,比如当前绘制的按钮从UE的设计上占屏幕的1/10,那就用192*108的像素,或者接近192*108,这样就能避免最后在手机屏幕上出现texel->pixel的放缩偏差。

  • 如果贴图已经做好了,但是是用的512*512(或者128*128),而实际上在手机屏幕上最后显示是要256*256,则不推荐直接在unity里面直接压大小,最好是在ps里缩小贴图之后再修一下,因为压缩或者拉伸肯定会造成失真的,而且越复杂的贴图失真越严重,这是原始贴图失真,必须美术解决。可以参考这篇文章
    img图中注意看绿色中有黑色浸入,需要在ps里再适当优化。

建议二

  • UI贴图全部使用默认压缩,以IOS举例子,也就是pvrtc压缩。pvrtc是有损压缩,也就是说这是不可避免的损失。如果最后的画面上出现锯齿或者模糊,则将此贴图换成32bit格式,之所以这么干就是为了避免盲目不压缩导致内存爆表。
  • 粗略说一下PVRTC压缩算法(其实大部分压缩算法都是类似,感谢这篇文章)。其实说白了就是采取block(比如4*4)的方式来提取原贴图中的特征,分别存储在压缩后图片的位中,最后在解压出来还原原图。说了这么多也就是说,贴图的细节越多,形状越复杂都会导致失真的幅度增加,举个栗子来说,就是圆形比方形失真多,杂色比纯色失真多。
    img

于是得到——

建议三

  • 从设计上一定程度的避免圆形、杂色、过度,特别是大图。如果设计不可避免原型,复杂的形状,繁杂的颜色,则这些贴图只能选择不压缩。
    img这也是是好栗子,很明显环状的地方容易失真,这还没有经过PVRTC的压缩。

性价比

  • 游戏永远是性价比,这基本上是所有的优化系列文章里都会提到的。并不是不让用,而是不滥用。所以大图尽量避免A通道,尽量避免大图,精细的贴图直接选择最高品质(比如常驻界面的Icon、头像以及九宫等,因为这很值得)。

RGBA16与PVRTC的取舍

  • PVRTC因为是特征压缩所以在杂色和形状上面产生的失真多,而RGBA16是精度压缩,在颜色平滑渐变中产生的失真多,也就是在一定程度上,如果PVRTC导致失真特别严重,而这张贴图上颜色平滑过度较少,而可以尝试使用RGBA16代替PVRTC。

A通道

  • 应该也说了很多遍,不需要A通道的请不要导出A通道,比如底图,人物等整张贴图没有透明的请全部涂满

POT

待添加。。。