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,还应该避免精度格式的相互转换。
其他
之前讲解的所有和渲染相关的优化建议都适用于移动设备,比如:
- 减少 OverDraw
- 合理使用光照和阴影(光照烘焙、光照探针、反射探针等)
- 减少后处理效果
- LOD、遮挡剔除
- 优化纹理采样
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