Unity里的图片压缩

这算是Unity优化的一个基础环节吧,没有机会真正去接触,还是要了解下。

图片格式

  • 不同格式的本质区别在于压缩算法不一样,结果图片大小,还原度也各不相同。
  • 常用图片格式有Png,Jpg,Tga,Psd等。平时主要用Png,Jpg。
  • Jpg是有损压缩不透明,Png是无损压缩有透明。

简单纹理格式

  • Png等图片压缩格式无法直接被GPU解码,需要先解压,便会造成消耗。
  • 不论导入的图片是什么格式,Unity都会将其转换成纹理格式,便于GPU读取。(应该算解压成原始格式吧)
  • 有RGB16,RGB24,RGBA16,RGB32等。

纹理压缩格式(硬件压缩格式 Hardware Accellerated Formats)

  • 把纹理进一步压缩(Texture Compression),不同于Png的那种压缩,是针对GPU的压缩格式。
  • 不同的GPU能解析的压缩格式也不同,所以可能没法简单的只用一种压缩格式。并且如果发现GPU不支持当前压缩格式,Unity就会将纹理转换成RGB(A),首先是解压过程的消耗,其次是内存中会保存两个纹理。
  • IOS所有设备支持PVRTC,Android所有设备支持ETC1,但是ETC1没有透明通道。
  • 有的压缩格式要求文件的分辨率数值为2的次幂(ETC),有的还要求纹理是个正方形(PVRTC)。
  • PVRTC4分别有RGB模式,也有RGBA模式,所以是可以有透明通道的(下面的表格有处错误)。


纹理压缩格式的选择

高清无压缩 - RGBA32

  • 等同于原图了,效果最好,效率最差。

中清晰中压缩 - RGBA16+Dithering/RGB16

  • RGBA16在遇到渐变的时候表现很差,所以需要做抖动(Dithering)处理。
  • RGB16不带透明通道。

低清晰高压缩 - ETC1+Alpha/PVRTC4

  • 能直接被GPU使用,占用少,效率高。
  • ETC1没有透明通道,需要搭配一张透明贴图。
  • ETC和PVRTC都要求像素长宽都为2的次幂,PVRTC要求像素长宽一致。

总结

  • 一般方案:ETC1+Alpha/PVRTC4 和 RGB16/RGBA16 搭配使用。
  • 图片分辨率数值最好为2的次幂(据说就算不是2次幂,最终到GPU中也需要拉伸为2次幂),最好是正方形(用于匹配压缩格式)。

参考

常用纹理和压缩格式
干货:Unity游戏开发图片纹理压缩方案
Unity中的一个简单的图形优化指导

前端网页加载渲染链路优化

opensignal官方提供了2018年2月份统计的全世界4G网络覆盖率和通信速率的统计分布图如下,在目前移动互联网的浪潮下,我们要利用好用户终端设备的每个字节的流量。

Unity进阶技巧 - RectTransform详解

前言 最近要做UI,有时候需要在代码中调整改变UI控件的属性,比如位置、大小等,然而在NGUI里面,控制UI控件的位置等属性的是RectTransform这个组件,这个组件继承自Transform组件,却增加许多自己的特性,在不了解这些特性的情况下鲁莽的去使用它,会导致出现很多匪夷所思的问题,而且使用起来也不够得心应手,于是决定研究一下RectTransform到底是如何工作的 你将学得到什...

unity圆圈自动吸附屏幕边缘

效果: 设置如下:

Unity UGUI优化:解决EventSystem耗时过长的问题 第三部分

则跳过这个anvas:public override void aycast(ointerventata eventata, ist<aycastesult> resultppendist) { if (canvas ==