UPL9-18——优化移动端渲染性能

避免 alpha 测试

对于一些低端移动设备,透明度测试是一项特别消耗资源的任务
在大多数的情况下,我们应该尽量避免使用透明测试,而是使用透明混合来代替

最小化 DrawCall

移动设备上高 DrawCall 通常比填充率更容易造成性能瓶颈
因此利用批处理或者自己合并网格来降低 DrawCall 是移动平台上提高性能表现的有效手段
我们应该尽量在移动平台上保证最小的 DrawCall

最小化材质数量

材质数量和 DrawCall 数量息息相关,使用更少的材质,可以有效减少 DrawCall,还可以避免打断批处理
并且它有有助于解决内存带宽问题,因此我们应该在移动平台上保证最小化材质数量

最小化纹理大小

和桌面 GPU 相比,大多数的移动设备的纹理缓存都非常小,对于一些老移动设备(iphone6s 以前),最大纹理大小仅支持 1024 * 1024 大小
目前市面上的大部分移动设备已经支持 2048 * 2048,但是还是建议在项目初期,确定针对的最低配置目标机型
了解该设备支持的最大纹理尺寸,从而来决定我们以什么尺寸来定规则,否则可能最终发布后在低端设备上会出现渲染问题

确保纹理是正方形且为2的幂

我们应该尽可能的保证我们的纹理尺寸是正方形且是 2 的幂,比如:

  • 32 * 32
  • 64 * 64
  • 128 * 128
  • 256 * 256
  • 512 * 512
  • 1024 * 1024
  • 2048 * 2048
  • 4096 * 4096

这样规则的纹理尺寸更有利于 GPU 对齐进行处理

在着色器中尽可能使用最低精度格式

移动设备的 GPU 对着色器中的精度格式很敏感,我们应该尽量使用最小的精度格式,比如 half,还应该避免精度格式的相互转换

其他

我们之前讲解的所有和渲染相关的优化建议,都是适用于移动设备的,比如:

  1. 减少 OverDraw
  2. 合理使用光照和阴影 (光照烘焙、光照探针、反射探针等)
  3. 减少后处理效果
  4. LOD、遮挡剔除
  5. 优化纹理采样

等等