加入收藏 | 设为首页 | 会员中心 | 我要投稿 顺游网_765游戏网 (https://www.765youxi.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 游戏资讯 > 国外资讯 > 正文

《不可思议之梦蝶》:从 PC 版移植到 Nintendo Switch 经验分享

发布时间:2019-05-19 00:08:26 所属栏目:国外资讯 来源:新浪游戏
导读:5月11日,队友游戏李喆在Unity全球开发者大会Unite Shanghai 2019期间进行了“《不可思议之梦蝶(Incredible Mandy)》从 PC 版移植到 Nintendo Switch 经验分享”的主旨演讲。 李喆:大家下午好。自我介绍一下,我是李喆,我在天津的一个独立工作室,之前

  接下来是载入时间的问题,Switch 平台存储实际上是用的一种慢速的存储方式,像梦蝶这种的游戏,第一关载入时间大概在 90 秒左右,你可以做一些载入动画什么的,这个时间还是太长了,没有办法忍受,我们只做一个东西就变成了 30 秒。这里我要提一个非常有名的游戏——ICEY,这个在发布时我正好和他们在办公室聊天,就发现程序员一直在调试,他发现游戏启动时太慢了,整个游戏前 60 秒都是黑屏的,很难调试。其实我就突发奇想,要不改一下声音格式,他就切了一下,直接就从 60 秒变成了十几秒的载入时间,瞬间可以接受了。因为 ICEY 是有很多的语音声音文件,打包还是在文件夹底下的,所以要把所有都载入内存。这种方式对 Switch 有压力的平台有更好的优化方式。

  我们还遇到一个问题,第一次播放声音时有一个卡顿延迟,但是反复播就没有了。我们通过将《梦蝶》这个游戏声音的加载改成流式加载就可以将加载时间从 90 秒减少到到 30 秒,用最小的事情产生最好的结果。还有一个 Wwise 可以把不同音效打在不同的 SoundBank 里面,还有一些共同的音效可以打在公共的 Bank 里面,可以通过这种方式再次减少游戏运行时的这种声音资源带来的压力。

  接下来说一下包体尺寸的优化。Switch 并没有太大的要求,我们也是顺便优化一下包体,主要的优化方式是用 Console 和 Open Editor Log 来做的,你很难发现是不是打入包里了,有些资源觉得根本没用,会通过材质球还会进入包的安装部分。所以通过这个东西完全清楚看到哪些在包里,哪些是不在包的,肯定要把包里的东西进行重点优化。像 Switch 平台是支持 ETC2 和 ASTC 这种模式的,会很快速载入的。你在压缩会产生非常大的压缩率。你找到纹理之后去覆盖平台设置,你可以切换不同压缩格式,压缩格式也不是越小越好,因为压缩的纹理是有显示效果的损失。

  大家要平衡最终的显示效果和包体体积的关系,还有一个注意的东西就是你如果烘焙了,你可以对平台单独设置,这样可以大幅度减少包体容量,这些东西也可以很明显察觉到阴影的显示变化,你需要考虑在体积跟质量之间获得平衡。其实 Switch 的掌机平台是比较低的,下降一些不会有太大变化。

  还有一个是比较容易忘掉的,Mip Maps,这个在后期迭代时会把贴图做得比较大,会做 1024*512 这种模式,如果把 Mip Maps 勾掉的话会有很多能量,所以不会产生实际上的效果。

  这是我们一个 Buill Report,第一步是按照排序来的(英文),这个整体看下来打包之后是 1.8G,这个不是实际打包的,你看 Android 打包出来容量是这个,在里面还会继续压缩。像 Switch 压缩打包结果应该在 1.2G 左右,后续还会有一个打包压缩,在机器上就会占到 1.8G 的容量。

  排第一的是 60Mb、40Mb、25Mb,我们并没有进行太多处理。第二位是 otf,支持多语言的,你要有特殊字体放进去,每个字体都有容量,针对中国,不支持多语言切换的话都可以删掉。第三,Fbx 文件,里面有很多动画,都是比较大的。

  最后说一下 Levels,《梦蝶》场景里有很多 Mesh,它的存储不会占用太多的地方。为什么需要优化呢?你就算切换到静态模式的话,静态合批会被动态物体打断,你在 Framedebugger 里面可以看到是被打成一段一段的。这个 DrawCall 数非常高,对 CPU 压力非常大,这个东西在 PC 是几乎没有影响的,在 Switch 平台和移动平台压力是非常大的。

  我们做了一个合并工作,就是烘焙工作,我们通过第三方工具来做的,叫做 MeshBaker,但是真的是非常有效果。你可以把想合并的静态的 Mesh 选入进去,在工具里去设定每个球的半径大小,这个球半径包含的都可以形成一个簇,可以通过 MeshBaker 自动合并。为什么合并呢?因为在运行前就已经处理好了,再有一个就是说遮挡剔除功能,在摄像机渲染上是可以直接拿掉的,这个可以极大的提高渲染性能,这是合并 Mesh 的目的。合并 Mesh 之后有一个结果可以让场景变得非常大。大家可以想象一个石头大概有 100 面,我这个场景里面石头块有 1000 个,我分的时候板这一块地方一共会有 50 个物体,会合成一个,合成一个之后原来 Mesh 的就不用了,就单独形成了一个顶点数新的模型,存储容量会大幅度提升,会变得非常大。为了提高渲染性能,为了整体的结果,你肯定是要丢失一些东西。在纹理压缩上做了很大处理,让出了很多空间。纹理从一开始,没有优化之前,就包括所有的 Levels 加起来有 2G 多。大家一定要记住这个东西,这是非常非常大的减少包体的办法。

  提升渲染性能。大家玩的 3D 游戏多了之后只认为显卡对游戏性能比较大,我问过很多开发者,其实项目一开始优化时,CPU 跑不动带来的结果几乎都是百分之百的。一般都不会去考虑 CPU 问题。它有一个单独的工具,叫做 NxGraphicDebugger,这个使用起来和他们差不多。我们通过自己的努力优化,没有针对游戏有改动,可以从 Switch 平台优化起来,我可以跟大家分享一个经验,Unity 打包出来的程序,如果使用 Standard Shader,在 Switch 平台到底能运行几个 Cube?就在动态物体,不是静态物体,最后测下来只能运行 6 个,超过 6 个之后就不能稳定在 60 帧了。所以大家在 Switch,在掌机模式下也不用求 60 帧,我觉得 30 帧就已经不错了。

  看一个视频(编者:此视频暂无),这是在 2018 年 6 月 9 日运行的,这是《梦蝶》游戏第一次在运行。在这个时间之前大概经历了一个星期的时间,当时根本运行不了,每次都是闪退。你使用第三方插件时,一定要先把插件关上,看看游戏到底能不能运行,有没有问题,我们一开始闪退花了 3-4 天,是发现插件的原因,而且第三方引擎库输出是非常非常少的,其实是完全一个瞎调试的状态。后来通过项目经验开始关东西,最后排除发现是第三方插件的问题,就可以折半查找,关掉之后看有没有问题用快速查找来看有没有问题。

  这是在一个星期之后,还是这个场景,大家看到全功能已经跑起来了,已经可以稳定在 30 帧以上了,就是这么一个状态。这个过程之中经历了太多太多的调试和处理,最后再经过大概一个月的时间,我后来后来安排了程序员做全职工作,后来整个《梦蝶》每个场景都可以稳定在 30 帧以上,有一些东西其实再说一下经验。比如说 Switch 可以归为移动平台,经过我们调试,像后处理的屏幕 AO 等占用都是比较大的,最后一定要想替代方案。

  我的分享就结束了,谢谢大家。大家如果有什么技术上的问题,可以邮件找我,咱们一起切磋,一起交流,谢谢大家。

(编辑:顺游网_765游戏网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读