Adreno GPU Game Optimization

0 前言

    根据《Adreno GPU Architecture》的说明可知,有限的帧缓冲区带宽和更低的功耗要求,使得TBR成为Adreno GPU更为有效的方式,因此在运行游戏时需要进行一些优化才能取得较好的效果。

1 关于帧率

    游戏将buffer提交给Surfaceflinger,当Vsync来时SurfaceFlinger对buffer进行合成。如果游戏提交buffer的间隔是随机的,就会导致SurfaceFlinger有时需要合成较多的buffer,有时则较少,从而导致帧率时快时慢:

Adreno GPU Game Optimization_第1张图片 图1 Fast-slow frame Issue

    针对上述现象,优化建议如下:

  • 方法一:游戏以固定的间隔来提交buffer,例如可以根据Vsync来帧率设为30或60;
  • 方法二:采用变化的帧率来节省功耗,例如进入游戏时帧率为60,退出游戏时帧率为30。

2 片段总量

    现代的3D游戏依赖于过度的片段工作负载来达到逼真的效果:

Adreno GPU Game Optimization_第2张图片 图2 Fragment amount

 

    针对上述现象,以低于本地显示分辨率的分辨率来渲染可以减少片段的处理。对于中低端手机来说,1280×720是比较合理的图像选择,这个分辨率也同样适用于高端机型。在处理反射、折射等特效的时候,可以使用1/2分辨率甚至更小的buffer,它仍然可以产生极好的效果[1]。

3 减少Draw Call

    因为每个Draw Call都会增加CPU的工作量,每一帧有50个Draw Call并不会带来影响,但是每一帧有500个Draw Call时则会大幅影响游戏性能。同时,当多个物体使用同样的Shader和图形状态时,可以放在同一批进行处理,这样可以减少Draw Call的数量。第三点就是减少数据带宽的使用,比如使用纹理压缩、使用mipmap等[1]。

参考资料

[1]从GPU到3D渲染:游戏图形渲染技巧与性能优化

[2]android性能分析工具Profile GPU rendering详细介绍

[3]Android的GPU过度绘制的优化

你可能感兴趣的:(Display)