1. 前言

很多年前就想将这些年工作中积累的优化经验撰写成文章,但懒癌缠身,迟迟未动手,近期总算潜下心写成文章。

涉及到具体优化技巧时,博主会尽量阐述原理和依据,让读者知其然也知其所以然。要完全读懂这篇文章,要求读者有一定的计算机语言/图形学/游戏引擎基础。希望读者看完后能将自己的游戏性能优化到一定的高度,使得游戏的效果和效率在高/中/低端设备都能符合或超出产品的预期。

Unity为图例,可举一反三用到其他商业或自研引擎中。

1.1 性能优化的重要性

想必玩过游戏的人会经常感叹:游戏怎么那么卡?手机怎么那么烫?耗电怎么那么快?

其实这些问题都归结于性能问题,性能优化对游戏的重要性不言而喻。

对新游戏项目,中前期可能一直在赶需求赶效果,忽略了性能优化的工作,到中后期性能瓶颈必然会凸显。如果前期做到有效组织资源,制定美术规范,完善开发流程和工具链,后期优化起来会顺手很多,少走很多弯路。

1.2 优化Tips

很多年前,就听到一位图形界的大神说过:优化无止境,优化的最高境界是不渲染。

以前不能完全明白他的话,觉得有点夸张,做过几个游戏项目的性能优化工作之后,深有体会,这么多年过去,言犹在耳,应验了真香定律!

优化的本质就是不渲染少渲染用更省的方法渲染

1.2.1 分清主次

优化性能首先要找出性能瓶颈,对性能影响最大的地方先优化,接着对次影响的进行优化,以此类推。如果能遵守这条规则,优化效果和花费时间的曲线关系大致如下图:

即前期的优化效果会非常明显,但随着时间的推移,花的时间越来越多,优化的效果反而逐渐放缓。这告诉我们:

  1. 首先找出性能瓶颈,优化效果最明显;

  2. 优化无止境,后期优化效果和时间比降低,要适可而止。

1.2.2 善用分析工具

工欲善其事必先利其器。善用分析工具可以快速定位出性能瓶颈,达到事半功倍的效果。性能分析工具请参看:1.3 辅助工具

1.2.3 平衡好性能和效果

每个游戏偏重点不一样,有些游戏偏重效果而不太讲究性能,有些游戏偏重效率而牺牲效果,有些游戏两者需兼顾。

从博主的经验而言,大多数游戏开发者或者玩家,更偏重性能。举个例子,大多数人在玩吃鸡游戏时,为了帧率稳定和耗电慢一点,将所有的画质参数开至最低。

若为性能故,效果皆可抛。

1.2.4 定制优化参考指标

每个项目在优化前,需要定制一个具体的指标参数,比如高中低端机跑在什么设备上,要达到什么样的帧数等等。游戏Z定的参考指标如下表:

此标准是2017年上半年定的,现在可以酌情放宽参数。定好标准后,就以此为依据进行优化,参数指标达到后即可认为优化任务完成。

1.2.5 做好效果等级管理

建议将等级管理逻辑抽象成单独的模块,增加QualityManager的角色,负责统筹管理和实现等级相关的逻辑。其它模块要只要调用这模块的接口,可以轻易实现差异化逻辑。此外,QualityManager可以收集游戏关键参数:fps/网络Ping值/流量,对外提供查询接口。

1.2.6 具体情况具体分析

每个游戏项目的具体情况不一样,不可生搬硬套本文涉及的参数和方法,否正可能适得其反,花费了时间,性能没能很好地提上去。

1.3 辅助工具

目前市面上分析工具很多,特性和适用的平台都不同,下面就简单介绍常用的工具,具体使用方法另行搜索。

1.3.1 引擎分析工具

  • Unity Profiler

Unity Profiler可以查看CPU/GPU/内存/音频/物理/网络等模块的具体消耗参数,是Unity游戏必备的性能分析工具。

  • Unreal

Unreal 3及之前的版本要先用命令行生成profiler文件,再通过UnrealFrontend加载生成的文件查看消耗数。Unreal 4提供了类似Unity的Profiler的窗口,更加便捷。更多参看:Unreal Profiler Tool Reference

1.3.2 IDE分析工具

  • Visual Studio性能探查器

VS只可运行在windows平台,可对当前项目/指定的exe/运行的进程进行CPU和GPU性能采样并查看具体的消耗指标。

  • XCode Instruments

XCode只可运行在Mac OS,可调试Mac OS和iOS的APP的CPU/GPU/内存等性能参数。

  • Android Studio Profiler

Android Studio可运行在Windows和Mac OS,但只可分析Android的APP,参数包括CPU/内存/网络等。

1.3.3 GPU厂商工具

几乎每个GPU大厂都提供了调试自家产品的GPU分析工具。它们与引擎和IDE的工具最大的不同点是:可以查看每次Draw Call的渲染状态/引用的资源/绘制的画面,以及其它独特参数。

  • Tegra Graphics Debugger(NV)

工具本身可运行在各个主流系统,也可以分析OpenGL和Vulkan,但只支持NV旗下的Tegra K1和X1系列GPU。

  • Mali Graphics Debugger(Arm)

类似于Tegra Graphics Debugger, 但全面支持OpenGL的各种版本,还支持Vulkan和OpenCL的调试。

  • PVRTrace(Imagination Technology

 只可调试使用Imagination Technology公司GPU的App。

  • Adreno Profiler(高通)

只可调试使用高通旗下GPU的App。

  • PerfHud(NV)

只支持PC程序,非常强大的GPU调试工具,但无法调试移动设备,需要依赖模拟器。

  • PerfHud ES(NV)

PerfHud移动版,支持移动设备调试, 需要下载整个CodeWorks for Android开发包。

1.3.4 其它第三方工具

  • PIX(MS)

只运行在windows平台,只支持DirectX的分析。

游戏开发43课 移动游戏性能优化1相关推荐

  1. 游戏开发43课 移动游戏性能优化2

    2. 资源优化 病从口入,资源好比是入口,它们若出现问题,会引发一连串性能问题.相反,资源若是优化得好,后面所有章节的性能都可受益.这也是把资源优化的章节提到最前的原因. 2.1 纹理优化 纹理优化的 ...

  2. 【安卓开发系列 -- APP 】APP 性能优化 -- 崩溃分析

    [安卓开发系列 -- APP ]APP 性能优化 -- 崩溃分析 [1]Native Crash 分析示例 [1.1]Linux 编译 breadpad 下载 breadpad 源码 git clon ...

  3. Unity 2D游戏开发教程之为游戏场景添加多个地面

    Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...

  4. ​Unity 2D游戏开发教程之2D游戏的运行效果

    ​Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑 ...

  5. Unity 2D游戏开发教程之2D游戏的运行效果

    Unity 2D游戏开发教程之2D游戏的运行效果 2D游戏的运行效果 本章前前后后使用了很多节的篇幅,到底实现了怎样的一个游戏运行效果呢?或者说,游戏中的精灵会不会如我们所想的那样运行呢?关于这些疑问 ...

  6. 移动端开发的兼容适配与性能优化干货分享

    作者:ChokCoco https://www.cnblogs.com/coco1s/p/11463599.html 本文是内部的一次分享沉淀,偏向基础但是涉及了一些有意思的细节,文笔有限,才疏学浅, ...

  7. 【游戏开发】《Java游戏服务器架构实战》项目在windows上部署

    [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 文章目录 [游戏开发]<Java游戏服务器架构实战>项目在windows上部署 一.配置项目基础环境 二. ...

  8. web前端开发,如何提高页面性能优化?

    web前端开发,如何提高页面性能优化? 内容方面 减少HTTP请求次数 减少DOM操作 减少DNS查询 使用Ajax 可缓存 css方面 把css样式HTML代码页的上端 从页面中分离css代码,从外 ...

  9. 【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7496200 作者:毛星云    邮箱: h ...

最新文章

  1. Intellij IDEA 使用Spring-boot-devTools无效解决办法
  2. 批量ping 查看主机能否ping通,能否ssh上.md,
  3. [CF544D]Destroying Roads_最短路_bfs
  4. 为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复
  5. [hls]m3u8视频如何处理成加密?
  6. 通过函数式编程实现动态对话框处理程序
  7. 【Clickhouse】Clickhouse MergeTree家族引擎
  8. 开源中国 4 周年, 三个平台客户端全面开源
  9. vs2008 sp1补丁安装到最后一点点的时候,就无法安装下去了 解决方法
  10. UDP协议和socketserver以及文件上传
  11. vc listview 大图标间距设置
  12. 华三 h3c 单臂路由配置
  13. 母亲节微信公众号走心文章就用来逗编辑器排版
  14. 静态库调用其它静态库
  15. 哈佛幸福课之改变的感想
  16. Matlab - Solidworks 机器人建模(6)——使用rigidBodyTree构建机器人模型
  17. R语言入门(2)时间序列分析原理
  18. ZOJ - 3939 The Lucky Week【简单方法】
  19. OneNMP路由器、交换机监控
  20. Your PHP version does not satisfy that requirement

热门文章

  1. 为了拿到像素点,GetPixel的速度太慢,改用CreateDIBSection
  2. 3D建模和渲染吃CPU还是显卡?专业显卡和游戏显卡的区别
  3. webuploader-上传图片到服务器
  4. Linq to sql 求和操作
  5. 读jquery 权威指南[3]-动画
  6. 2022年文化艺术品产权交易所研究报告
  7. miui 10 android 9.0,小米基于安卓9.0的MIUI10稳定版来了,你的手机可以更新吗?
  8. mmdetection3d kitti (持续更新)
  9. vue3 ts 挂载全局vscode volar使用飘红
  10. 2021年编程课程网盘资料大汇总,限时领取!