首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

维塔士上海工作室技术总监:3大板块发力,Switch游戏如何移植?

12月7日至12月10日,由腾讯游戏学院举办的2020腾讯游戏开发者大会(以下简称 TGDC)于线上举行。大会第三天,维塔士上海工作室技术总监Andy Fong就Switch移植游戏如何进行优化的问题,发表了“在高寒处保持温暖”的演讲。

演讲中,Andy Fong谈到了关于任天堂Switch平台开发的一些理念和重点,他认为Switch着重在于创新功能,首先将移动平台跟主机融合在一个游戏机里的,在手柄上加入新的HD震动和红外线检查。

此外,Switch可以同一台主机进行多人游戏,也可多人联机。同时他也强调,Switch并没有投入当下最高性能的一些硬件,所以在移植PC或其他主机端游戏时,内存也要有所降低。

以《生化奇兵合集》为例,Andy Fong在大屏幕上展示了同一游戏场景下,Switch和Xbox平台的效果图。

Andy Fong表示:在保持画质及游戏性的前提下,希望把Switch游戏优化至稳定帧数。为达到这一目标,开发者需要解决3个方面的问题:内存优化、CPU优化、CPU优化。并对协作优化的工具进行选择。

以下为演讲实录,由游戏日报编辑整理

首先在内存优化中,我们通过屏幕统计工具、日志报告、专用内存分析工具去收集实际上各个模块使用到的内存,再从使用内存较多的模块开始,制定相应策略。

比如使用底层虚拟内存分配接口配合虚拟内存页分配器,同时使用动态的VRAM分配,以及为大块VRAM单独分配内存池。此外,我们不太推荐使用环缓冲或双缓冲。

因为其他平台内存足够,存在一些冗余的资源。所以内容优化的其中一项是要清除冗余的资源。

这里分为4个方面:清理不必要的立体声音频、渲染缓冲;及时去掉一些不必要的关卡加载来保持内存平衡;UI贴图和底层贴图其他平台可能选择常驻在内存里,而Switch移植优化时则只会保留当前需要用的贴图。

当冗余的数据清除后,一占用较大内存的贴图也需要优化。这一部分我们选择了ASTC压缩,并限制了最高mipmap的分辨率,并对小贴图进行了合并。

动画数据也选择了更激进的压缩方法。当碰到一些很大的关卡时,其中一个方式是选择拆分成几个小关卡。只有当玩家处于特定关卡时对其单独加载,这样也能较大程度节省内存。

当优化完内存后,游戏基本可以运行,但可能未达到30帧。接下来就是对CPU和GPU的优化。

在CPU上,一方面我们会选择采用一些引擎专用的工具,如UE4的Stat命令。也会用到如Frame PRO等第三方工具。如果有任天堂开发者账号,也能使用到Switch平台自己的CPU研究工具。

在过去的CPU优化经验上,我们会使用到一个多线程渲染。从单线程改变到多线程会怎么样呢?根据以往研究Switch平台的图形接口,实际上是能接受多线程渲染的,但其中最大的难点在于拆分队列。

由于拆分队列的各项设置本身也会占用额外性能,所以在CPU优化中尝试采取了不同的渲染步骤去攻克这一难点。最后完成多线程渲染后,实际上在准备命令缓冲的时间从20毫秒减少到了6毫秒,是一个很大的提升。

CPU优化的另一方面则是图形脚本的原生化。由于现在越来越多的引擎会使用一个图形脚本去进行游戏逻辑,包括UE4的蓝图,此类脚本的重度使用很可能对主线程性能产生压力,所以在Switch移植游戏中,我们是采用原生化的方法是把脚本转换成C++代码。如果是深度原生化提升可能会达到10%到20%。

CPU优化的第三方面是对声音的优化,我们会先使用第三方声音库提供的工具来具体来进行性能检查。其中,经常使用到的优化手段有:使用OPUS和ADPCM格式。

ADPCM的优点在于它有优秀的压缩率并且压缩速度也比较快。但有一个问题是它的声道比较有限。

此外,还有一个问题是关于DSP音效的播放,这些效果需要CPU去进行一定的运算,我们推荐把这些效果烘焙到一些声道上,节省一些运算的效率。而把一些低优先值的声音先去掉或把播放频率降低,也可以节省一些运算时间。对于距离远的一些3D声音可以考虑把它放到虚部。

对于GUP的性能优化,由于GPU一般会跟着色器的效率有关,也会跟每个渲染命令填充的像素有一定关系。考虑到Switch的GPU性能,也为了保障2种模式都能达到30帧,所以主机分辨率采用的是1080P,掌机则是720P。

在GPU性能分析工具的选择上,我们会采用SDK提供的一些API去获取GPU不同步骤中的渲染时间。同时,我们也会采用SDK提供的专门的工具,再通过这2种工具去分析GPU出现了什么问题。

在GPU优化上,我们首先会考虑对着色器进行优化,主要是去除分支。实际上分支语句无论是对于CPU还是GPU都是一些难点,而我们的方法是改变陈旭流程控制的语句,以及替换分支语句写法。其次,我们需要对代码进行优化,代码优化主要的解决方法我们采用的是对图块进行缓冲。

例如,GPU可以把一些绘制的请求收集起来,再把渲染缓冲划分成多个图块,再依次播放。这个方法适用于当游戏中存在大面积的粒子效果,而这些粒子都需要去访问帧缓冲。

当上面所有的GPU手段都没有取得太好效果时,我们会选择对美术资源进行优化。例如在《幽浮2》的很多小房间内,原本是高精度的细节,但是在镜头拉远后,其实并不需要对所有房间都是高精度。于是我们对每个房间创建了相对精度较低的LOD模型,而实际在Switch上显示区别并不大。

除了优化策略,一些优化工具对我们优化也起到了很关键的作用,包括检测掉帧的工具,触发特定敌人和技巧的工具,第三方软件Simplygon、houdini等制作低模LOD的工具,自动测试工具。

总的来说,我们是希望能够在保护原来游戏的画质和游戏性的情况下,Switch移植游戏依旧能达到一个稳定的帧数,能够加强提高玩家的体验。

在最后的Q&A的环节上,Andy Fong对以下几个问题做出了回答:

Q1:从技术层面来说,跨平台适配的难点在哪里?如何应对?

Andy Fong:第一方面是底层系统的一些适配,包括内存I/O输入输出、渲染器的适应。我们需要参考原来它用到了哪些功能,然后在新平台需要怎么去实现这些功。其实就是提早的去定义一个优化的策略。我们需要越早去安排一些工作,对服务器端或者是客户端进行一些调整。

Q2:如何进行图形脚本原生化?

Andy Fong:其实原生化能带来很高的一个性能优化,但确实是有一些困难,首先是一个工具的适应性。它并不能完全百分百的能够对所有的不同类型的脚本都能够适应。包括脚本,工具方面都需要一步步调整。还有一个转化正确性的问题,每做一个原生化都会需要去验证。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201210A0HZKX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券