观察 | 来做款重度小游戏

2020-11-04 11:08

本文转载自微信公众号做个小游戏 如有侵权请联系删除

在小游戏开发过程中,过往我们和开发者们分享过CPU、GPU以及内存的多方面优化。但当开发者面对的或者筹备中的是一款重度的小游戏时,单点的优化就显得无法满足需求。

例如在小游戏《轩辕传奇》优化前,游戏功能已经做得非常完善,无论从顶点数、还是三角形面数、drawcall而言,几乎是普通小游戏的10倍、100倍,甚至上千倍,在这种情况下就无法通过单点的某一个函数优化让它的帧率达到理想的提升,在小游戏开发者学院第二季第三讲中,微信公开课讲师为大家带了这种情况的全方位解决方案。

传统性能架构的天花板

在解决性能问题之前,必须搞清楚我们面对的困难是什么?如下图左侧所示是一款外部小游戏框架架构图。

其中游戏引擎中的逻辑占了整体耗时的 80%,反而是游戏玩法部分只占了 20%。这是因为第三方引擎在 JS 侧需要做大量的计算工作,需要把开发者在 JS 侧发出的玩法请求给发已成 GL 渲染接口。由于这中间的过程极其复杂,同时 GL 接口繁琐,iOS 上没有 JIT,多种因素共同导致了传统小游戏架构运行效率低的问题。这也是我们常说的 H5 游戏的性能天花板。

完整小游戏性能优化方案

在针对重度小游戏的性能优化上,我们抛弃了旧的架构,通过统一新方案来实现,方案中包含了游戏生产所需要的各种基本能力。在新方案中,我们也提供配套的各种开发工具及接口能力。从而使得用这套小游戏性能优化方案的游戏,预估能得到3倍以上的性能提升。

在方案的应用上,已经有《神庙逃亡》以及上面提到的《轩辕传奇》等多款小游戏选择了我们的性能优化方案来进行游戏性能的提升。在《神庙逃亡》这样的重度游戏优化中,传统方案在比如实时阴影、光照等方面需要花很大的力气去优化,但是在我们的新框架下则无缝衔接,可以直接享受到方案的便捷。

可以期待,会有更多的MOBA、MMO、FPS射击等类型的游戏在小游戏的中出现!

新方案、新架构、新挑战

同时,新的架构也确实会带来新的挑战,抛弃了原有架构,确实会带来新的成本。一方面是新架构、新接口会有学习成本。另一方面是因为新接口、新架构都在高速迭代中,所以对开发者的能力有了更高的要求。面对这些挑战,平台会从几方面考量:

● 不断完善文档,降低工具链的应用性,降低开发者进入门槛;

● 创造沟通机会,欢迎想要接入的游戏团队,通过各种各样的渠道向我们咨询。同时我们也会通过更多场景主动的像大家展示相关的操作。

性能优化方案原理剖析

小游戏性能优化方案的原理和结构主要包括:整体架构、逻辑加速模块、渲染加速模块。

01、整体架构

如上图所示,左边是老的外部GL小游戏框架,右侧是小游戏性能方案的整体架构,主要有两个模块的新增,分别是逻辑加速模块和渲染加速模块。

它的思路很简单,就是下沉,下沉了以后就可以带来游戏的性能提升。它具备高性能、易用性强、跨平台、功能全的几大特点。

02、逻辑加速

在这一模块,我们下沉了对于逻辑上比较有用的计算量很大的模块,比如节点树,比如骨骼和物理,在渲染方面,对渲染的API进行了抽象,包括对渲染对象进行合批。基本上游戏生产链上所有你想要的常用功能都已经做了打包式的优化。

首先是节点树的遍历问题,当节点树非常多的时候就会产生性能的瓶颈,比如MMO这样的游戏节点树多的时候可以达到十万甚至几十万的量级,在这种量级情况下,如果在JS侧,去遍历10万节点树的话是不可想象的。

所以这些性能瓶颈就需要我们做优化,整个性能方案里也充分考量这一点,节点树的下沉也是我们优先考量的要点,我们也通过以下三个模块来实现。

通过该模块的性能优化,开发者可以获得:

● 节点树遍历性能大大提升

● 骨骼动画性能提升 10 倍以上

● 物理模拟性能提升 2-3 倍

03、渲染加速

渲染也是我们强考量的一个模块。老的架构中使用的是WebGL,但是当到达了JS的平台以后,由于JS和C++的交互是有成本的,每一次访问都会有额外耗时,那么就导致想要进行一次流水线的绘制需要调用外部接口相当多。这在重度游戏,尤其10万节点的游戏来说,是完全无法接受的,因此只能摒弃GL接口。

摒弃了 GL 接口后,我们提供了全新的渲染接口。

- 全新的渲染 API,参考了 Vulkan/Metal 等新一代图形 API 的设计。对于渲染流水线进行了新的抽象,可以大大降低渲染流水线的接口调用量,减少 JS 和 C++ 之间的交互成本。

- 除此之外,我们还在基础渲染接口的基础上又封装了一层。让渲染接口和渲染节点绑定。JS 层可以配置和修改每个渲染节点的渲染流水线,在配置后,C++ 可以无需任何 JS 交互的情况下,直接遍历执行每个渲染节点的流水线。进一步减少 JS 交互。

看到这里相信大家已经小游戏性能优化方案有了一定的了解,下图是整个性能方案的整体架构。除了逻辑加速层、渲染加速层,还有大量的 JS 配套能力,整体是一套非常大的系统。我们在尽己所能地提供完备的开发体系,尽可能降低游戏开发者的接入成本。

Sam

Sam

偶尔出现的拖稿王

评论已关闭!

相关资讯