系列文章:
游戏性能优化(1)-why & benchmark
游戏性能优化(2)-budget
性能预算(performance budget)是指根据游戏类型、上市时间为游戏定位目标机型和设置性能目标。在开发早期,制定美术效果目标、美术制作规格、技术选型,同时,在整个项目生命期中,对性能进行管理控制,反复优化来实现目标。
制定美术效果和性能目标
在制定美术效果和性能目标要考虑的因素很多,主要分为:
-
游戏类型
不同类型的游戏对性能的要求是不一样的,对性能要求最高的游戏类型是FPS游戏,FPS游戏需要稳定60FPS才能达到手感要求。其他竞技类游戏比如MOBA要求更低一些,但是也要足够的流畅,至少要稳定30FPS以上。MMO游戏要求相对更低一些,但是一般也要达到30FPS左右。一些休闲游戏、卡牌游戏对FPS的要求也不高。 -
上市时间
在端游时代,一款产品研发周期很长,动辄4、5年。那么在制定美术效果和性能目标的时候,要着眼于上线时间点时的市场。美术效果一般也会定位超越市面上所有可见游戏(可能次世代这个词就是这么来的)。
对于手游的研发,研发周期较短,制定美术效果和性能目标时,相当于端游要更加保守一些。 -
游戏定位
对于主打画面的游戏,比如很多次世代MMO游戏,会在美术效果上倾向更多的资源,可以在性能上有所妥协。
对于主打玩法的游戏,没有必要在美术效果上太过激进,优先保证游戏的流畅性,来提升玩法体验是更加理智的选择。
在理解了要考虑的因素之后,我们可以通过参考市面上的游戏、做性能试验分析以及根据经验来确定最后的方案。
性能预算与研发周期
我们把整个项目的研发分为几个阶段来讨论性能预算:
-
研发早期
这个阶段还在确定项目的研发方向和计划,这个时候要和策划、美术一起确定玩法和美术需求,在项目早期就达到一定的共识和性能权衡。在给予美术和策划足够的空间的同时,也要确认性能不会有过高的风险。同时,要根据需求对技术方案进行调研,确认核心的技术选型,并且制定美术制作标准。
部分美术制作标准涉及到大量资源的制作(比如模型的面数规格),一定要在早期确定一个没有风险的标准,否则回炉成本是几乎无法承受的(模型全是钱啊)。 -
项目中期
项目中期是项目最长的研发期,关于性能有三件事情要做:(1)对能够提升性能的技术点进行长期的跟进调研(2)持续跟进美术资源控制(3)持续跟进代码性能控制。不过大部分情况下,这个时候大家的关注点还是要把美术效果和玩法做好,所以一般性能问题一直处在下滑状态,并且低于上线标准。 -
项目后期
在项目的后期,项目临近上线。由于持续的美术资源堆积、持续的玩法堆积,性能问题一般还是没有达到上线标准。这个时候能做的事情是:(1)权衡性能和美术效果,舍弃部分美术效果(2)效果分级,对美术效果进行合理的分级。最高档能在最高档机型上正常游戏、中档能在主流机型上正常游戏、低档保障最低的目标机型能正常游戏。(4)为了达到最后的性能目标,开启各种黑科技trick。
经过各种努力,性能开始慢慢朝着及格线迈进。
技术选型和制作标准
性能预算对制作标准的影响(随着硬件发展变化,并不准确):
- 角色面数
这个根据角色的显示大小和显示数量来制定,一般端游可以到1W+;手游控制在2000面左右。 - 同屏最高面数
端游50W左右;手游5W左右,10W之内 - DrawCall
端游一般1000+;手游200左右 - Layout规划
在Layout规划的时候尽量使用最少的面数和Drawcall来表现美术效果。远景尽量采用天空、地表系统、和森林系统(森林系统可以优化成面片显示)表现。采用建筑群显示比较难以优化(也可以采用建筑群合并的方式优化)。 - 场景大小规划
大世界要比小场景对性能的压力更大 - 视角视距
开阔的视角视距需要渲染更多的模型,对性能压力大,可以考虑讨巧的45度视角(比如镇魔曲) - 物理系统
避免全部物件带有物理表现(很多游戏的做法是,只有主角有比较复杂的物理效果表现) - 光照系统
减少实时光的使用,尽量使用烘焙 - Batch
在模型制作时,要考虑如何规划Batch,使用同样材质球和贴图的模型可以进行Batch。要权衡Batch和模型复用问题。 - 材质
考虑选择pbr、cartoon等不同的方案,尽量减少材质对贴图的使用。 - 后处理
手机分辨率特别高,要减少后处理的使用,考虑合并后处理。 - UI
在规划UI布局时,要考虑降低UI的overdarw。 - 脚本语言的选择
效率:lua>python
以上部分只包含项目早期要关注的内容,个人认为目前列举的还不够准确,后面我会持续更新以上内容。以上给出的部分数据都可商榷,灵活性比较大。
常见的分析工具
- GPA
端游GPU分析 - VTune
端游CPU分析 - XCode
iphone性能分析,能分析CPU、GPU性能 - Adreno Profiler
Android GPU分析 - Snapdragon Profiler
Android GPU分析 - Unity Profiler
Unity程序全方面分析
引用
- 《Video Game Optimization》
- 《Optimized C++》