《沙石镇时光》真的在优化了,没有摸鱼……


3楼猫 发布时间:2023-07-15 06:09:14 作者:沙石镇时光 Language

                                                                                                                                        

各位工坊主大家好,自2022年5月《沙石镇时光》以抢先体验形式发售一年以来,我们收到了很多有关优化问题的反馈,包括加载时间长、城镇内掉帧等情况。今天我们的主题,就是给大家说明一下,为什么《沙石镇时光》会出现这些问题,以及针对这些问题,我们做了一些什么工作——在看完后,您或许会明白,这里并不存在所谓的”屎山代码“,更多的是设计方面的权衡。如果大家在看后还有其他疑问,也欢迎大家在评论区和我们讨论。

1.  《沙石镇时光》优化问题的成因及难点

在2022年5月26日《沙石镇时光》以抢先体验版发售之初,我们收到了较多有关优化问题的反馈:其一是关于游戏的加载时间,其二是有关城镇场景中的帧率不稳定情况。

让我们先从第一点说起。

由于每一次从主菜单进入游戏时(或从存档载入游戏),游戏的场景美术资源、代码等都需要进行加载,才能保证大家能正常玩游戏。而需要加载的资源越多,游戏的加载时间也就越长。举个例子说明,与《波西亚时光》相比,仅建筑方面所使用的资源,《沙石镇时光》就达到了波西亚五倍之多。所以,一开始大家就会明显地感觉到进入游戏的加载时间变长了。

同样的,大家的每一次进出门,每一次进出副本,程序后台都需要进行一次室外场景的卸载和室内场景(副本场景)的加载。由此一来,大家在游戏发售之初体验到的进出门、进出副本时长长的加载时间就由此产生了。

《沙石镇时光》真的在优化了,没有摸鱼……-第0张

                                                                                                                                        

上图所示的是《沙石镇时光》初始场景中的材质数量和《波西亚时光》的材质数量的详细对比

                                                                                                                                        

时光系列一直以来的游戏设计理念是,虽然是单机游戏,但是我们希望玩家在游戏中不要感受到孤独感,希望大家觉得游戏世界是一个鲜活的世界,希望游戏中的NPC能带给大家更多“活”的感受,这样,在结束游戏之后,大家才能回忆起游戏中所渡过的这一段美好的“时光”。因此,游戏内的NPC,都会有他们的日常活动,你会看到他们会和现实中的人物一样上班下班,在驿站吃饭吹牛、日常互动。这意味着,即便当前状态玩家没看到这些NPC,系统也需要进行实时的计算,计算他们当前的位置,计算他们当前的行进路线,计算他们当前正在干的事情。因此,NPC AI的加载也需要花费很多时间。

举个例子来说,沙石镇中,单个NPC AI的行为树节点,中位数就达到了约800个。大几十个NPC AI的加载,必然导致了时间的花销。当然,为了减少一开始的的加载时长,我们采用了一开始只加载行为轨迹,而不加载模型的方式。也就是说,进入游戏后,NPC在后台一直在活动,只有当NPC进入工坊主视野范围时,才在当前帧对NPC的模型进行加载。这可以有效降低一开始的加载时间,但带来的问题是,这一帧突然的加载,会带来帧数的突然降低,卡顿的情况。

当然,帧数的不稳定,还和很多东西有关系。比如夜间的场景表现,由于新增了数十个光源,每一个光源会带来无数的新的阴影,所以夜间也会尤其卡。而且整体场景中,由于我们一开始没有规划好LOD,所以也带来了帧数的降低和不稳定。(所谓LOD,就是针对远近不同的物件模型进行分别处理,让远处的物体显示模型面数低的模型,从而节省性能的开支。)

《沙石镇时光》真的在优化了,没有摸鱼……-第1张

                                                                                                                                        

图为白天与夜间的阴影数量对比,可以看到沙石镇夜晚的阴影数量增加了非常多


2、我们的解决方案

既然已经确定了优化问题的成因,那么接下来就是想办法解决它们。

加载优化

针对加载时间的问题,我们采用的是,让游戏内的主场景资源一直缓存在电脑内存中,而不是像之前一样每进出一次门就进行卸载&加载。这样处理之后,虽然启动游戏(载入存档)还是需要较长时间进行加载,而且游戏的内存占用峰值会有所增长,但是至少每次进出门所需的加载时间大幅减少了。我们于去年9月2日的版本中采用了这个方案,在此次更新之后,至少大多数工坊主不需要每次进出门都刷手机解闷了。为什么说是大多数呢,因为部分玩家的电脑配置中,内存容量不大(比如只有8G),这就导致有的进出门的时候不得不卸载掉某些资源,因此导致了这部分内存容量小的玩家进出门加载依然体验不好。所以,我们推荐使用16G内存进行游戏。

不过这个方法也不是万能的。目前进出挖掘副本和战斗探索副本,依然会感受到不短的加载时间。因为副本资源本身资源就比较多,拿北部遗迹举例,其模型数量,和主场景的模型数量相当。这样的情况下,再大的内存也扛不住。再比如挖掘副本,由于我们采用的是Voxel,这也会导致数据量非常大,因此需要在进入的时候在内存中卸载掉一部分主场景资源,以保证副本的稳定流畅。

(Tips:关于Voxel,大家可以想象成,地图场景中,有无数个可以被拿掉的方块。玩家每挖一下,也就意味着拿掉一个方块。那么这里,本来标记为1,系统就需要把它标记为0并存储下来。想想一下,我们最多的挖掘副本有11层,每一层有数千个Voxel……)

另外,对于NPC AI行为树的加载,目前我们也采用了和之前不一样的做法。之前的做法是,所有的NPC AI的行为树是一整棵树。而目前我们把每一个NPC AI的行为树按照使用环境分为了不同的行为树,比如在主场景中,房间内,副本内,任务剧情内……这样能让单一行为树变得简单一些,也能减少加载时间。

《沙石镇时光》真的在优化了,没有摸鱼……-第2张

                                                                                                                                        

阿尔维奥的行为树示意图【并非最终版本,还会做优化】

                                                                                                                                        

掉帧优化

对于NPC模型加载导致的频繁掉帧,我们尝试优化加载的方式。之前采用的是在一帧之内全部加载完成,而我们现在尝试将NPC分为多个部件,在3-4帧内分步进行加载。由于这个步骤是在后台完成的,大家看到的NPC不会有什么不同,但是在游戏体验上来说,它可以有效地减少大家遭遇的掉帧情况。下图是分布加载的示范。

《沙石镇时光》真的在优化了,没有摸鱼……-第3张

NPC加载示意图,实际上这个过程是在后台完成的

除此之外,我们也在尝试对LOD进行了更加细致的规划——前文中我们已经提到,《沙石镇时光》的场景资源非常丰富,沙石镇上有很多漂亮的建筑,它们都有很多的顶点数和面数,工坊主在离建筑很近时,它们看起来非常好看;而当大家走远的时候,建筑还在视线内,虽然看起来不是那么清晰了,但此时建筑的模型的顶点和面数都不变,性能开销也还是那么多。这种时候,LOD就显得非常重要了。对于已经处于视线之外或者较远距离的物体,使用性能开销较低的模型,减少面数,可以降低电脑运行时候的负担。目前这个工作还在进一步推进中,争取在正式版的时候有一个比较理想的状态。

3、新的问题以及我们的解决方案

可能有不少工坊主都有疑问:在去年9月的版本优化后,确实感觉游戏在加载时间和帧数方面有了不小的提升,但是在几次游戏更新之后,为什么感觉又越来越卡了?

这还得从这几次更新给小镇带来的新变化说起:首先,为了呈现更加美丽的沙石镇以及随剧情进展而诞生的小镇新气象,我们给沙石镇增加了更多小细节,例如阿蜜拉陶器店附近的小陶罐、升级的卡托莉游乐厅、研究站顶部的望远镜等等。这些小装饰单个算下来可能都没有太多的占用,但是相加之下,依然会带来可观的性能开销。

《沙石镇时光》真的在优化了,没有摸鱼……-第4张

《沙石镇时光》真的在优化了,没有摸鱼……-第5张

《沙石镇时光》真的在优化了,没有摸鱼……-第6张

《沙石镇时光》真的在优化了,没有摸鱼……-第7张

以上是更新前后的沙石镇场景细节对比,你能看出有哪些不同吗

另外,随着剧情的推进,沙石镇开始下雨了。雨水的粒子效果以及物理碰撞(如果没有物理碰撞,那么雨就能下进屋子里了)也给优化工作造成了不小的挑战。目前我们采用的方式是,尝试降低远处雨水的粒子效果,进而减少一定的性能开销。

在沙石镇的设计中,我们希望大家能够一眼看到尽可能多的模型,比如站在城镇高处,你可以看到很远的地方且能看到细节,而且很多地方都是可以去的(其它的游戏设计中,可能会使用一个简化的模型将大多数场景进行遮挡),这也导致沙石镇的城镇场景性能开销不可避免的比较多。正如大家所见,随着版本的更迭,沙石镇变得越来越热闹,也越来越美了,但与此同时,这也意味着更多的性能开销。而如何在保证游戏体验的同时,把性能开销降低到可接受的水平,就是我们优化工作的重点。


《沙石镇时光》真的在优化了,没有摸鱼……-第8张


我们在悬崖附近也增加了很多建筑细节,让旷野中的风景更加壮丽,但也带来了更多性能开销

举例来说,我们正在尝试减少会移动的碰撞体的数量,由此来减少物理效果造成的性能开销——具体而言,此前工坊机器上的轴承会随着齿轮的旋转而进行运动、产生碰撞,而现在我们将这类不必要的碰撞关掉了;一些原本由程序控制的场景物体运动,我们使用了性能开销较低的Tweener动画来呈现。如此一来,虽然看起来并没有什么不同,但对于性能开销的的确确是降低了,这一点对于配置较低的机器来说影响会尤为明显。

不得不提的是,在过去每一个《沙石镇时光》的角色身上会有多个功能不同的碰撞体,分别负责攻击判定、受击判定、检测和激活周围物体的交互,现在我们将这些碰撞体也合并成了一个,进一步减少了性能开销。

以上只是我们在做的优化工作中的冰山一角,一个游戏的优化,会牵涉到很多很多方面的工作,我们正在努力解决这些问题,已让大家能体验到一个比较完善,优化比较好的正式版。


《沙石镇时光》真的在优化了,没有摸鱼……-第9张

以上是当前优化工作表中的部分工作内容


4、《沙石镇时光》正式版的优化目标

在本文的最后,我们想要介绍一下《沙石镇时光》正式版的优化目标。我们希望能够通过进一步的游戏优化,让中高配置的工坊主们能够以稳定的50-60帧运行游戏;而对于较低配置的电脑,我们也力争让游戏稳定在45fps左右且极少卡顿的情况下运行。

《沙石镇时光》真的在优化了,没有摸鱼……-第10张

在《沙石镇时光》发售的一年当中,我们推出了”洛根再袭“、”小康生活“、”老熟人儿“以及最近的”利刃出鞘“等多次更新,讲述了规划中第二章节的故事,在这期间我们也从未停止过游戏的优化工作,力图为大家带来更好的游戏体验。但由于设计和规划方面的不成熟,可能依然会有不少工坊主在游玩过程中,感受到了程度不同的优化问题。而这些问题,就是我们计划在正式版上线时(包括之后)一步步解决的。这其中并不存在所谓的”屎山代码“,而是游戏设计的权衡以及技术的迭代。


《沙石镇时光》将于9月26日在Steam,WeGame,EpicGameStore,Bilibili,Nintendo Switch,Sony PlayStation5 和 Xbox one/Series S/X上,同步发售《沙石镇时光》正式版。在正式版中,单人模式主线故事会完结,包括可攻略NPC的剧情,届时沙石镇的故事将迎来大结局。购买过《沙石镇时光》抢先体验版的玩家可以于当天通过免费更新的方式获取到所有内容。

关于Sony PlayStation 4平台,目前我们遇到了一些引擎方面的技术问题,PS4版本可能会比其他平台稍晚一段时间推出,我们会在后续的公告中告知PS4平台的上线时间等消息。

很多玩家所关注的多人在线合作模式,我们计划在正式版上线前就开启不删档测试,但暂时只有PC版用户可以免费更新,主机平台的多人在线合作模式将会视移植情况,在正式版发布后的3个月左右再推出。如果您想了解更多有关《沙石镇时光》的信息,您可以关注我们的官方社交媒体,第一时间获取最新消息。


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com