105.优化移动端渲染性能

105.性能优化-GPU-优化移动端渲染性能


105.1 知识点

避免 Alpha 测试

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

最小化 DrawCall

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

最小化材质数量

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

最小化纹理大小

和桌面 GPU 相比,大多数的移动设备的纹理缓存都非常小。对于一些老移动设备(iPhone 6s 以前),最大纹理大小仅支持 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. 优化纹理采样

105.2 知识点代码

Lesson105_性能优化_GPU_优化移动端渲染性能.cs

public class Lesson105_性能优化_GPU_优化移动端渲染性能
{
    #region 知识点一 避免 Alpha 测试

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

    #endregion

    #region 知识点二 最小化 DrawCall

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

    #endregion

    #region 知识点三 最小化材质数量

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

    #endregion

    #region 知识点四 最小化纹理大小

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

    #endregion

    #region 知识点五 确保纹理是正方形且为 2 的幂

    // 我们应该尽可能的保证我们的纹理尺寸是正方形且是 2 的幂
    // 比如:
    // 32*32
    // 64*64
    // 128*128
    // 256*256
    // 512*512
    // 1024*1024
    // 2048*2048
    // 4096*4096
    // 这样规则的纹理尺寸更有利于 GPU 对齐进行处理

    #endregion

    #region 知识点六 在着色器中尽可能使用最低精度格式

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

    #endregion

    #region 其他

    // 我们之前讲解的所有和渲染相关的优化建议
    // 都是适用于移动设备的
    // 比如:
    // 1. 减少 OverDraw
    // 2. 合理使用光照和阴影(光照烘焙、光照探针、反射探针等)
    // 3. 减少后处理效果
    // 4. LOD、遮挡剔除
    // 5. 优化纹理采样
    // 等等

    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏