做个几万人一起玩的《荒野大镖客》有可能吗?
剥离设计和玩法,让我们从技术的角度解析这个问题。
做个几万人的《荒野大镖客》有没有可能
从上面两个部分的论述来看,不难发现如今线上多人游戏面临一个两难的局面。要么就沿用传统 C/S,自己写后端,以降低保真度为代价追求规模;要么就拿 DS 架构办事,缩小规模,提高保真度。
但有没有办法将它们融合起来呢?其实很多开发团队都在思考这个问题。
市面上有着这样特性的产品不多,“褒贬不一”的海盗冒险多人游戏《ATLAS》勉强算一个。抛开产品品质的问题,《ATLAS》用的就是 DS 架构,而且“理论上”支持 40000 名玩家同时游玩。
他们的做法,是在 DS 外自己写了世界服务器和数据服务器的后端。先把多个 DS 实例给拼起来,再由世界服务器统一负责管理 —— 比如只要玩家过地图,就把玩家的数据搬到另一台服务器。其实可以类比成《魔兽世界》的“空间分割法”,当然明显能够看出技术不怎么成熟,Steam 上负面评价最多的地方就是“卡”和“连不上”。
英礴本来也打算打造一个庞大的、高保真度的游戏世界,结果发现技术方面都是坑。于是干脆先把 DS 的问题捋清,降低日后游戏制作的门槛和风险,因此催生出了一个解决方案(工具):SpatialOS。
SpatialOS 是一个基于底层公有云资源的游戏开发环境。它一方面会给你提供云端的服务器托管,一方面给予技术支持,类似于一个多功能插件。这个工具可以很简单的接入虚幻和 Unity 引擎,甚至任何其他的第三方引擎,它主要提供在 DS 架构下扩充多人游戏规模的手段。
其中一个扩容思路和《ATLAS》有点像,如果一个 DS 不够用,就把多个 DS 拼接起来统一管控。因为 SpatialOS 虚幻开发套件的方向就是走多进程,这样更容易利用多核甚至多机器的计算资源,可以突破传统 DS 的限制 —— 简而言之就是给游戏加服务器有用了。
上面这段话有点绕,直接看“把 DS 拼起来”的示例图更加直观。下图中 9 个方块代表 9 个 DS,每个游戏服务器的管辖区域分别由不同颜色代表,玩家不仅可以无缝跨越服务器边界,也能和不同区域的其它玩家互动。
据田桑解释,这背后的秘密是 9 个 DS 之上有一个“网络层”,它才真正负责所有游戏状态的管理。一个 DS 是一个区,通过这个管理层将所有区弥合起来。客户端连到这个管理层,而不是所有的 DS 之上。
说到分层这个概念,SpatialOS 中还有项名为“AI 负载拆分”的功能,正好能解决前文《光环5》战区模式的问题。理论是,如果把 AI 的负载扔到另一个服务器,那不就为玩家扩容腾出空间了吗,而且还不必让 NPC 变“蠢”,可谓一举两得。
这种方法可以采取的应用很广,对延迟要求不高,和核心系统(如物理)耦合度不高的东西都可以拆分出来,比如天气系统。分出来的层,则基于云放到另一台虚拟机上。
英礴本身做了一些实验,使用原生虚幻引擎的情况下,在已有 100 名玩家的基础上最多可以运行 229 个 AI;而将 AI 负载扔到另一个服务器后,维持相同服务器帧率的前提下 AI 数量可以达到 479 个,相当于扩容了一倍。
目前正在测试的冒险生存游戏《拾荒者》(Scavengers),刚好就采用了 AI 负载拆分的技术。开发商 Midwinter Entertainment 表示玩家会在游戏中遭遇极端天气、怪物肆虐,外来入侵者以及敌对玩家团队等各方面的威胁。而 AI 负载拆分使得他们在 3x3 公里的地图内,一方面保证了这些高保真度的体验,一方面又实现了“60 名玩家+300 个 AI”的规模。
当然,尽管分层看起来很牛逼,但银弹却是不存在的,田桑举了个例子:
“假设 A1 区域有 10000 人,负载不下了。那要么把 A1 切成 A1 和 A2,分别放 5000 人,也可能是在 A1 上面再加一层,这都是开发者自己去控制的。但是这个事情会带来成本,因为两个区间之间有大量通信,要靠服务器硬件来堆。
比如一个服务器要从 1000 人扩容到 3000 人,那就分三层……如果每层额外带来的性能损耗是 50%,每一层实际只能跑 500 人,三层只有 1500 人。那你又得多分几层,这时候的损耗可能又不止 50% 了。”
所以,要想在 DS 架构下把玩家的规模扩大,得综合多种方法。SpatialOS 实际上还有一套名为 QBI 的系统,可以自定义降低同步频率,解决一些网络负载的问题。比如其中一个表现就是令距离玩家较近的活动物体看起来更顺畅,越远“越卡”,主要是看开发者如何发挥想象。
正如之前提到的技术限制,MMORPG 人数规模很大,可以达到几千上万人,但基本集中在社交、打怪,或者是副本的交互方式,很少见到有真实的物理模拟。另外一个方向是像《堡垒之夜》《方舟:生存进化》这样的游戏,它们有些地方做得很细致,但人数又容易碰到瓶颈,通常就是房间制的。
由此引申到能不能做“容纳几万人的《荒野大镖客:救赎2》”的问题,田桑认为理论上是可行的,只是还没有开发者触及到这根线。而且即使解决了技术问题后,话题就又回到了无法回避的开发风险和成本。
不过,未来这两种需求应该会交汇到一起,使得线上多人游戏在现今的标准上再进一步:一方面能支持更多玩家,一方面又能保证更真实的模拟。至少有人目前正在朝着这个方向努力,或许再过不久,有着高保真度的大型多人在线游戏就不再仅仅停留在幻想中。
参考资料:
虛幻引擎為 Fortnite: Battle Royale 項目做的改進