TGDC丨维塔士13年老兵,畅谈“移植优化”方法论

作者:热爱分享的 竞核 2020-12-10

好的开始是成功的一半

12月9日,维塔士上海工作室技术总监Andy Fong带来了以《在高寒处保持温暖 —— Switch游戏优化经验分享》为题的演讲。

近年来,PC、手机平台的各类大作陆续都开始通过移植等方式走向主机平台,NS正是其中大热。


在竞核此前活动“Roguelike浪潮下的先锋探险家们”当中,多方人士都曾表示,NS,尤其是国行NS的用户群体正呈现出越来越强的消费能力。

但在转战NS的过程中,挑战如影随形。无论是移植后的产品质量,还是移植过程的口径对接,都是厂商长久以来所面临的难题。

或许,大家能从今天Andy Fong的演讲中找到解决方案。

移植NS为何总是“吃力不讨好”

Andy Fong,2007年正式加入维塔士上海工作室,迄今为止已有超过13年的游戏开发经验,近年来曾参与《最终幻想12:黄道年代》《黑色洛城》《生化奇兵》《幽浮2》等大作。


可以说,这是一位在游戏产业“战功赫赫”的老兵。

在介绍游戏移植优化方案之前,Andy首先对任天堂在NS平台的一些开发理念进行了分析。

“我认为他的重点是在于功能创新。”Andy说,“这当中就包括把移动平台和主机合并到一个游戏机当中。实际上这更多的是为了方便玩家。”

功能创新在手柄设计方面也有体现。NS手柄加入了新的HD Rumble系统,在让手柄触感更加贴合、写实之外,还能通过红外线来检测玩家手部动作,丰富游玩乐趣。

当然,这种设计也是为了方便多人游戏。NS允许两名玩家操纵同一台游戏机的不同手柄同时游玩对战。除本地多人外,通过网络连线不同主机之间亦可以进行交互。

“实际上,NS并没有采用当前时代最尖端的硬件。”Andy说,“这就导致,如果将其他平台的高品质游戏移植过来,内存使用不得不有所降低。”


他表示,如果想在游戏性能方面保持30FPS,那么就必须在CPU或GPU上做出优化调整。而这种调整,往往要在产品预生产的阶段就做好打算。

然而这显然不会对所有人适用,尤其是那些在研发时,NS尚未问世的作品。“过去的一些客户,他们不允许掉帧、不允许画质下降。面对这样的要求,我们选择采用产品优化的方法进行移植改造。”Andy如是说道。

内存、CPU、GPU优化层层递进

Andy介绍说,内存优化、CPU优化、GPU优化是目前他们采用的部分优化策略。注意,后面两种优化方案,是在内存优化达到一定水平后才会考虑的。


“内存优化方面,就如刚刚所讲,移植作品,尤其是高画质大作,很容易触碰NS的内存上限。”Andy介绍说,“而一旦超过上限,游戏很容易会崩溃掉。”

接着Andy介绍了一些用于内存优化的工具,例如报告工具、屏幕统计工具等。

以屏幕统计工具为例,该软件其实就是通过低层内存的一个分配器,去采集实际上各个模块使用的内存,然后展示在屏幕上便于开发者观察。


诸如此类的内存分析工具所提供的参数,经过程序员的分析,将有效解决内存泄漏、冗余等问题,并帮助制定开发优化策略。

“因为其他平台普遍内存充足,就会有一些不必要的冗余资源,比如立体声的音频、渲染缓冲等等。”Andy表示,他们会尽量争取在不缩减游戏性的情况下,达到一个内存平衡。

剧情动画同样也会进行压缩。实际上很多引擎都支持动画压缩,缩减动画数据。

Andy还表示,他们曾遇到很多关卡内存使用过大的情况。一般来说,他们会选择“拆分”。即将大的关卡拆分成两、三个更小的关卡,大大节省内存。

做完如上的一系列优化后,游戏算是可以在NS上跑起来了,但帧数仍旧不能达标。“这时候就需要在CPU、GPU方面进行一些优化工作。”Andy如是说道。

Andy罗列了CPU各模块实际使用的时间,并表示很多第三方工具都可以做到这一点。事实上,NS平台本身也有提供,但受到NDA保护,只有开发者账号可以了解。

“很多人一说到CPU问题,首先想到的就是draw call。”Andy说,“这将导致渲染线程上的投入时间过长。”

Andy在现场传授了一个解决该问题的方法。此前他的团队曾负责一款开发世界游戏,draw call相当高,最终是通过用不同的渲染步骤去拆分任务,达到多线程渲染,大幅缩减了命令缓冲时间。


而在GPU方面,Andy同样分享了团队长久以来的优化心得。

“GPU性能一般会跟着色器的效率有关,也会跟每个渲染命令所填充的像素有关。”Andy表示,对于NS的主机模式,一般推荐用1080P,而掌机模式则推荐720P。

这种推荐方式也是考虑到GPU性能的综合选择,保证游戏不掉下30帧。

具体优化策略上,Andy团队一般首先考虑去除分支,但实际上这相当困难,因为没法判定升序的流向。

“我们采用的第一个方法是替换写法。”Andy介绍说,“就是使用特殊语句来替代分支语句。或是使用一种条件编译,把不同的分支代码组织成不同的着色器二进制文件。”

除此之外,图块缓冲也是不错的优化方法。具体来说就是把一些绘制的请求集中收集,再把渲染缓冲划分成许多图块,进行播放。

这样的好处是,它能够大大加快你的访问速度,尤其是在你有很多大面积粒子的情况下。有些时候,甚至能收获5ms的提升。

“最好的优化方案,永远是预先的优化策略。”Andy最后总结道。



来源:竞核
原文:https://mp.weixin.qq.com/s/efIhzGpnFxDa6uJEdG3y3A

最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多