移动电话游戏性能优化之路
随着手机硬件性能的不断提高,手机游戏的画面渲染、物理模拟等各个环节都取得了长足的进步。即使是顶级旗舰手机,在运行一些大型3D游戏时,也不可避免地会出现卡顿、发热等问题,影响游戏体验。这就要求游戏开发者在底层引擎层面进行深度优化,确保游戏在有限的硬件资源下运行顺畅。
结构优化:ECS和多线程
对复杂的3D游戏而言,传统的单线程架构已难以满足当前的性能要求。我们必须突破这个瓶颈,充分利用现代CPU的多核并行能力。这样就需要从根本上重构游戏引擎的结构。
Entity-Component-System(ECS架构因其自然的数据导向特性而备受推崇。将游戏对象分成数据(Component和行为)(System,使游戏逻辑与数据存储分离,大大提高了并行计算的可能性。我们使用C作为核心游戏系统 重写,并采用ECS架构,为后期多线程优化奠定了基础。
多线程并行是提高游戏性能的有力手段。采用类似Skynet的ltask作为多线程框架,将游戏业务拆分为多线程并行处理。UI、粒子系统、IO和其他模块分配到独立的工作线程,只通过少量的信息通信进行协作。渲染底层的bgfx也是根据多线程渲染设计的。这种并行结构使得总工作量没有增加,但由于任务分散到多个CPU核心,每帧的时间消耗大大减少。
通过xcode的调试信息可以看出,当游戏场景丰富时,CPU占用率约为280%。。若采用单线程架构,几乎不可能在不删除特性的情况下实现流畅的任务。而且在多线程架构下,我们成功地将游戏锁定在30fps上,每帧时间控制在10ms左右,理论上甚至可以支持60fps。
降低CPU费用
虽然多线程结构大大提高了游戏性能,但我们不能止步于此。在手机平台上,能耗是另一个不容忽视的问题。CPU功耗过高不仅会加速电池功耗,还会导致手机发热,CPU自动降低频率,进而影响帧率性能。
在保证一定帧率水平的前提下,我们的目标是尽可能减少CPU开支,从而降低能耗,延长航行时间,提高散热效果。。这种优化要求比PC平台更严格、更全面。
减少CPU费用的技巧有很多,比如尽量避免重复计算,减少对象创建和获取组件的频率,间隔更新UI等等。我们还对场景树更新系统等一些核心系统进行了详细和优化。虽然代码量不大,但Lua重写为C 之后,耗时已经可以忽略不计。
我们还缓存了一些常用的数据,以避免每次创建对象时从配置表中读取。对于不需要实时更新的数据,直接存储在对象内存中,降低了运行时的查询费用。
优化渲染管道
渲染是手机游戏中最耗能的环节,所以我们在这方面做了很多优化工作。在着色器层面,我们精简了常用的光线、阴影等shader,将无关的计算过程降到最低,提高了执行效率。
另外一个值得一提的优化是2D残影特效。作为一种常见的视觉效果,残影的原理是在每一帧中保留一帧图片,并混合渲染。虽然这种做法简单直观,但是当有大量的残影时,会给GPU带来沉重的负担。
我们的优化思路是预渲染残影质感,在GPU中混合渲染残影。这样既减轻了CPU的负担,又充分利用了GPU的并行计算能力,使残影的渲染过程高效流畅。
此外,我们还实践了传统的图形优化手段,如屏蔽消除、照明烘焙等,以确保游戏在有限的移动GPU上也能获得理想的画面表现。
能耗优化
能源消耗优化是我们优化工作的最终目标。一方面,我们希望延长手机的航行时间,让玩家在不频繁充电的情况下长时间沉浸在游戏中。另一方面,控制能耗也意味着减少手机的热值,CPU可以保持在更高的主频率运行,从而保证游戏的流畅性。
我们采取了多管齐下的能耗优化策略。优化了游戏引擎的整体结构,使CPU和GPU的负载达到一定帧率要求,达到最低水平。
我们精简了游戏中的各种特效和粒子系统,只保留了对游戏体验有重要影响的部分。这些视觉效果往往是能源消耗的主要用户。适当的简化不仅可以降低能源消耗,还有助于提高帧率。
为了获得更高的能效比,我们还对手机的硬件特性进行了定制优化。举例来说,对于支持ARM大小核的手机,我们会在大核心上分配一些计算密集型的任务,以获得更高的能效比。为了避免手机过热影响体验,我们还会根据手机的散热性能动态调整游戏的画质设置。
经过这一系列的优化,我们终于在手机平台上实现了游戏的能耗控制在一个合理的水平。玩家可以在不太担心电池电量和发热的情况下,长时间沉浸在流畅的游戏体验中。
游戏性能优化是一个系统工程,需要从结构、算法、渲染等方面入手。,并根据手机平台的特点进行定制优化。我们采用了ECS架构和多线程并行,大大提高了游戏的整体性能。我们还在减少CPU费用、优化渲染管道、控制能耗等方面下了足够的功夫。,最终实现了在手机平台上获得流畅、高效、长航的游戏体验。
这种优化之路并非一蹴而就,而是需要持之以恒的努力。伴随着手机硬件的不断进步,游戏对性能的需求也将不断上升。作为开发者,我们必须始终保持创新,不断探索新的优化技术和方法,以确保手机游戏的体验与时俱进,为玩家带来无与伦比的娱乐体验。。
发表评论