开放世界网游是如何搭建起来的
在谈开放世界网游前,我们不妨先回头看看传统网络游戏。在传统网络游戏中,玩家总是扮演着食客的身份,享受着由策划大厨呈上来的美食。反复斟酌的美术设计与动线设定,足够合玩家胃口,但久而久之初见时的惊艳便慢慢褪去;机关式的玩法、固定化的通关条件,通过任务引导的唯一解,平淡甚至厌烦的情绪正在玩家心头酝酿,玩家是时候换一换口味了。
开放世界网游中,玩家的身份正从“食客”向“业余厨师”的身份转变,可以自由操刀,对设定进行各种脑洞大开的排列组合。策划作为规则层面的制定者,需要做的是准好新鲜、完备的食材和一份贴心的使用说明。技能组合、天气系统、地理环境等都被纳入考虑,多元解成为玩家和策划的共同追求。
✦物理✦
和传统无缝大地图相比,开放世界除了超大的世界规模,更多是体现在“开放”二字。在我们的理解中,“世界规则”与“操作自由度”是开放世界设计的两个维度,我们也在不断探索这个度在哪里。
我们不希望既定成文的规则去约束更多可能性产生,比如在世界的通达性上、物质循环上,给到玩家更多的自由度,例如,可以尝试给游戏内每个元素更多的属性值,策划可以去自由配置,甚至是产生复合型物体出来。
将现实世界的物理法则移植到游戏世界中能产生哪些奇妙现象呢?比如草系精灵可以使种子生长,火系精灵可以点燃路障荆棘,冰系精灵可以冻结湖面,翼系精灵可以带你乘风飞翔……
对于游戏中过河的方法,我们希望看到不一样的回答,可以让玩家拥有更多的操作空间,去形成不同的解题效果。像使用魔法使河面结冰、各种飞行姿势、点燃挡路的藤蔓等等。
策划负责脑洞大开,我们则负责搭建舞台,调配好游戏的物理引擎、模拟好贴近现实生活中真实的物理世界。而这也依赖物理和化学引擎的支持,为了保证正常的开发进程,在立项初期,团队就对一款业界物理引擎进行了深入的研究,包括官方文档、源代码、相关技术文献,并且在业务侧进行了封装和持续的重构、优化与测试,跨过了商业引擎门槛高的障碍,对引擎有了很深的了解。
✦AI的智能设计与生态圈的拟真✦
对于开放世界网游的搭建来说,如果说物理法则是开放世界规则制定的基石,AI的智能设计与生态圈的高度拟真则是让开放世界拥有了灵魂。
因此,我们理解中的开放世界,驱动世界的不止是玩家,而应该是MetaAI驱动的,包括AI、TOD、季节与天气等,即使没有玩家的探索,整个世界还在按预设的规则进行推动,世界上的生物依旧可以按照自己的节奏来栖息生存。
像是塞尔达都进行了这种尝试,随着外部事件的不断发生,AI会自主决策做出行动。游戏中的精灵会有明确的种群差异,一些温顺的精灵会接近玩家,而一些凶猛的精灵甚至会在大世界攻击玩家。同样精灵AI也会遵守基本的生活作息和趋利避害的思维模式,像白天工作晚上休息、躲避暴雨、闪电等自然灾害。假如有一天你发现精灵在摸鱼,或是在互相拌嘴,千万别意外。这种机制在开放世界网游中是合理存在的,如果更细致地蹲点观察,也许会挖掘隐藏彩蛋。
开放世界在拟真化,AI生态搭建上是不断进化的一个命题。为了让AI的表现行为、运行效率、扩展性能达到折中,研发团队需要对传统的AI制作工艺进行迭代升级。传统的AI经过了FSM、GOAP、行为树、决策矩阵等多种组织形式的迭代,但在研发过程中,我们发现任何一种形式,都无法满足对“设想”中,丰富的AI生态的需求。
以腾讯自己的产品举例,走近AI,他可以与玩家对视甚至是吵架,这些行为可以基于行为编写程序实现。当玩法发生变化,需要玩家唱歌从AI面前路过并引发AI的“赞识”行为,那就需要为新加行为做一个变更。同时一些自然条件的变化,如日夜、天气、随机的自然事件等等都可以影响AI的最终行为。
当一个AI行为树很庞大时,新加一个AI的“响应”行为非常困难,同时行为树的执行顺序,以及轮询式的Service机制,也会给运行时带来很多不必要的开销。
因此,我们希望把决策能力单独成立一个系统,实现行为和决策可复用,并可以整体管理维护。在此机制上,我们再去做TOD、天气,以便展现游戏其他内容。虽然原则上比较简单,但很多的细节需要反复的打磨、讨论,经过几个月的优化,我们已经有一个比较优秀的框架,但我们还会持续优化和迭代。
有了丰富的AI表现,AI的载体即生态圈也应该是理性化的产物。像现实生活中,雪山在特定海拔才会有雪线,特殊植被生长周期,游戏中的设定应该符合客观世界的常规认知。在严谨追求的基础上,开放世界的游戏玩法,如采集、战斗、世界观的设定,才能更好的结合地形地貌等地理因素实现合理的搭配。
开放世界网游服务器面临的挑战
开放世界网游的真实3D场景,寄托了复杂玩法AI、物理、化学、导航寻路、场景破坏等,丰富的元素给玩家开放世界提供了多元解,这无疑是我们期望的,但这也依赖非常大的“算力开销”。
在传统的单机游戏中,几乎所有的计算都是在客户端完成的,以一种“独占”的方式享受百分百的硬件资源。而在网游框架下,玩家的操作行为、游戏状态以及场景中成千上万个可交互物件都是服务器权威的,因此需要在服务器上完成比传统网游更复杂的运算,这对服务器的算力、承载人数提出了更高的挑战。
✦与传统网游相比✦
传统的游戏地图尺寸一般比较小,如800米*800米,大一点的可能是1200米*1200米,服务器需要采用2D灰度图或3D体素的方式,导出一份场景描述文件用于服务器逻辑计算,大概服务器加载内存约在20-50M左右,那么对于开放世界而言,地图大小是乘方级的增长。
例如一个8公里*8公里的开放世界地图,大小可能是传统游戏单场景的的50~100倍,这意味着整个服务器使用时候尺寸文件更大,加载时长更长、内存占用会更多。
同时为了满足丰富的场景互动玩法,服务器对场景描述的精度要求也会更高,甚至需要保证和客户端一样的精度水平,用于进行一些物理模拟、碰撞与射线检测等;此外,场景也并非一成不变的,天气、季节变化等更复杂玩法的实现也要求服务器进行更庞大的运算,这对服务器的挑战也是极为巨大的。
✦与开放世界单机游戏相比✦
原本开放世界单机丰富的体验,迁移到网游后,产生更大的计算开销,传统开放游戏单机中中,对人和场景,AI互动,没那么复杂,合理配置视野同步和AI运算即可。
但在开放世界网友中所需要承担的不是某一个玩家,而是一群玩家。开放世界场景大,场景物件多,如一个场景服务器支持5000个用户,每个用户有100个NPC,那就有50W个场景对象需要管理。事件发生产生的效果,不仅需要引发事件的玩家感受到,还要考虑到在场的其他玩家。
开放世界单纯大不是目的,要既定规则之内,和世界进行互动,物理、化学规则成立,玩家的行为会被允许,能被第三个人客观感受到,时间也更短。于是对客户端服务器通信模型,处理事务复杂能力提出了要求。
✦开放世界游戏——魔方初体验✦
在“开放世界游戏服务器”这个命题下,传统的Unreal Delicate Server的模式还不是很成熟,因此大量商业引擎的能力,在服务器侧还是需要我们自己去构建。
一是物理引擎涉及到物理模拟,如持续进行旋转的水车、山上滚下的落石、泥泞的沼泽、使用磁铁时的反馈等。
二是开放世界通达性互动,多种到达任意地点的实现手段:飞行\骑乘、搭桥过河、任意攀爬绕路等等。
三是网游运行效率、安全、反外挂等方面。
四是AI的复杂运算,传统网游中一个AI不会借助于整个3D场景去做丰富表现,但在开放世界网游中客户端要承担AI的这些表现所需的运算,这也需要服务器测的适配。
五是游戏内的AI视野管理算法同步问题,每一个AI在游戏场景中都有自己的视野范围,距离较远的玩家的AI不会产生互动,玩家也不必关注AI的状态变化,这能让服务器节省大量计算资源。
开放世界服务器只有做得足够好,才能经得住算力的挑战,才能够提升玩家的同时在线,才能在落实预先设想到的游戏玩法。许多游戏开服时都有服务器崩溃的现象,这种情况也是我们首要考虑的问题,而且还需要在满足丰富玩法的同时,保证比较高的承载人数。
以一般的UnrealDS承载为例,一般的游戏可能搭载32核服务器,每个核可以承载2-3个单局,那一台服务器能实现1000-1500名左右的玩家在线。我们要做的则是要承担至少2-3倍的人数,并不断提高上线,这离不开服务器的持续优化。
架构优化离不开量化的分析与监控指标,在服务器搭建的早期,我们就搭建了一个非常专业的量化监控体系,对服务器上的所有子系统、组件、模块都进行了持续的监控,有了监控就可以边开发边优化,在玩法叠加的同时也持续保障服务器的承载在一个健康的水平。
总结
开放世界网游不仅仅要照护到单人体验,更要顾及到多人体验,所面临的是一个复杂、综合的课题。在AI和服务器算力方面,我们已经开始了前瞻的尝试,将来也将会在其他方面深耕解决更多的难题。
在玩法设计上,作为程序开发,面对“开放世界”这个课题,我们希望在做好技术储备的同时,也充分在技术上探索更多突破的可能性,从而给策划团队更大的想象空间的同时,保障网游化多人体验的及时性与一致性。像是听觉与嗅觉判断,这是传统游戏没有尝试的,我们希望场景中的NPC和AI在基于视觉判断的基础上,可以拥有听觉和嗅觉的判断。策划知道你在这做这套机制到时候,他们也会有不同的想法冒出来我们也鼓励他们去创新,这也是技术团队希望达到的效果。
愿景
开放世界网游并不是一个筐,里面有各种要素、地图足够大就会好玩。我们渴望的是一起制定“拯救世界”的无数种可能,并且在游戏中实现我们天马行空的想法!