聚俠網(wǎng)
聚俠網(wǎng) - 做專業(yè)的網(wǎng)頁游戲品牌門戶,提供優(yōu)質(zhì)的網(wǎng)頁游戲資訊攻略!
當前位置: 手機網(wǎng)游 > 手游資訊 > 做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

時間: 2020-09-01 15:09:14  來源: 聚俠網(wǎng)  作者: 聚俠網(wǎng)

剝離設(shè)計和玩法,讓我們從技術(shù)的角度解析這個問題。

多人游戲的規(guī)模,一直是個讓人捉摸不透的問題。從 MUD 發(fā)展而來的 MMORPG,同時在線人數(shù)超過五位數(shù)的并不少見,但到了《方舟:生存進化》《ATLAS》和"吃雞類"的作品中,服務(wù)器、或者說一個房間容納的人數(shù)一般在 70 到 200 之間徘徊。

估計有不少玩家曾經(jīng)幻想過,將《荒野大鏢客:救贖2》這樣細致入微的單人體驗塑造成大型 MMO,上萬名牛仔在西部世界里快意恩仇、何其壯觀。但即使是技術(shù)力如此之強的 Rockstar,也只敢采取"32 人戰(zhàn)局"的設(shè)計方式,并在刪減了一些內(nèi)容的情況下推出《荒野大鏢客 Online》。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

有時候,擴充多人游戲規(guī)模的瓶頸,還不單單只是愿不愿意花錢買服務(wù)器的問題。拋開設(shè)計、玩法上的考慮,許多開發(fā)團隊面臨著"想做大卻沒法做大"的技術(shù)窘境。《絕地求生》跟《堡壘之夜》將人數(shù)設(shè)置在 100,也未必全是討個好彩頭。你要說藍洞和 Epic 想要致敬高見廣春的小說《大逃殺》,那應(yīng)該也是構(gòu)思 42 人相互廝殺的世界。

巧的是,今年我在 CJ 逛展時結(jié)識了田桑。他過去曾在 EA 負責線上游戲的功能設(shè)計,后來又任職英礴(Improbable)的游戲解決方案工程師,跟進過 5 個 MMO 項目,十分了解多人在線游戲的構(gòu)造。我們從"吃雞"的人數(shù)聊到《荒野大鏢客:救贖2》的多人模式,于是就有了這篇科普。

為什么 MMORPG 能支持上萬人

線上多人游戲的規(guī)模能到今天這個程度,肯定不是一蹴而就的。1996 年的 MUD《俠客行》最早是在大學里設(shè)置的服務(wù)器,當玩家規(guī)模增長到 1000 人同時在線時,其負載瞬間就被推到了極限。

同時期圖形化的網(wǎng)游顯得更加"寒磣",由于網(wǎng)絡(luò)游戲的用戶存在多個狀態(tài),如果說文字 MUD 僅僅是用一句話來描述,那圖形化的狀態(tài)可能要涉及到位置、動作、頻率等諸多因素,每秒鐘得同步非常多次,導致數(shù)據(jù)的容量特別大。因此號稱領(lǐng)先于時代的《子午線59》,一個服務(wù)器能夠容納的人數(shù)也只不過 250 人。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

當然,那個年代《子午線59》的同屏人數(shù)已經(jīng)足夠震撼了

《網(wǎng)絡(luò)創(chuàng)世紀》的制作團隊當時沒少為用戶規(guī)模這事操心,在 Alpha 測試的時候他們就覺得 250 人離"大型多人互動"的概念還有些距離,于是 Beta測試前是又是買硬件又是研究新技術(shù)。到了 1997 年,這群人在 BUG 一堆的情況下硬是把能夠同時容納的并發(fā)人數(shù)懟到 3000,導致后來不少漏洞被玩家利用。

在田??磥恚驗?90 年代是個快速發(fā)展的時代,他理解的早期用戶規(guī)模擴容偏向堆帶寬和硬件。只不過現(xiàn)在成本的越來越高,采取這種方法的代價太大,一個側(cè)面現(xiàn)象就是 CPU 的主頻很多年來沒有太大提升。而從技術(shù)的角度來說,傳統(tǒng) MMORPG 使用的架構(gòu)是 C/S(服務(wù)器-客戶機),作為一個被應(yīng)用了 10 多年的架構(gòu),廣泛存在于《Runescape》《魔獸世界》等作品的設(shè)計中,它可以說是網(wǎng)絡(luò)游戲支持上萬人同時在線的基礎(chǔ)。

從名字就能看出來,C/S 最早是兩層結(jié)構(gòu),客戶機也就是玩家電腦(主機)負責渲染,服務(wù)器處理游戲邏輯。后來又加了一層"數(shù)據(jù)庫",搭載了用于保存游戲結(jié)果的存儲器,估計也不用做太多科普。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

一個典型的 C/S 架構(gòu)交互

為了保證用戶的規(guī)模足夠大,傳統(tǒng) MMORPG 在"保真度"上做了很多犧牲。所謂的保真度可以簡單理解成游戲的細致程度,包括物理模擬,比如撞墻之后產(chǎn)生反作用力,或是像《半條命2》那樣實打?qū)嵉陌压拮游赵谑掷飺炱饋?;也包括延遲和同步,比如動作游戲和 FPS 游戲?qū)Ψ?wù)器幀率都有非常高的要求。

根據(jù)田桑的解釋,傳統(tǒng) C/S 的客戶端不做模擬,或者是比較輕量的模擬,它們把這些狀態(tài)以比較低的頻率發(fā)到服務(wù)器,對服務(wù)器的負載要求較低,因此就可以允許更多的玩家同時在線。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

黑色沙漠》在 MMORPG 里的保真度算是不錯,但相比單人游戲還是差了一截

保真度的差異,我們甚至能從單機游戲和 MMO 的渲染邏輯中看出來。單機游戲的圖像會盡可能從 GPU 中加載,理想狀態(tài)下最好能做到不訪問硬盤和主存?!冻夞R力歐兄弟》每個關(guān)卡中的方塊、每個怪物出現(xiàn)的位置都是固定的,角色、敵人和場景在游戲啟動時就渲染讀取完畢,進而放到 GPU 內(nèi)存中。

而 MMO 中更多引入了"其它玩家"的變量,加上其技能、特效、位置的無數(shù)種組合,基本無法提前確定要渲染的東西,因此只能動態(tài)的從主存和硬盤讀取紋理等數(shù)據(jù)??蛻舳伺c服務(wù)器的交互最先只確定玩家位置,本地先進行輪廓渲染,再在保持幀率的前提下一點點把畫面讀出來,體驗肯定要差一些。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

突然冒出來這么多人,在線多人游戲的圖像具有不可預測性

事實上,在犧牲了保真度的前提下,要保證用戶的規(guī)模夠大,盡可能降低服務(wù)器負載,C/S 架構(gòu)仍然需要寫一個極其復雜的后端。從《魔獸世界》的處理方式不難看出,那個年代暴雪工程師的天賦何其之高。

最常見的就是"空間分割法",即把游戲中的地理(地圖)進行分割,逐一分配給不同的服務(wù)器進程或者設(shè)備。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

空間分割法

一個變種是"空間復制法",即把世界復制很多份,每份單獨塞到一個服務(wù)器;而為了解決玩家因刷寶、挑戰(zhàn)高難度怪物而大量聚集起來的問題,他們又研究出"實例法",單以副本的方式為每波玩家提供極其有限的地區(qū)。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

空間復制法

因此在田桑的眼中,基于 C/S 的 MMORPG 有著相當高的技術(shù)門檻:

"市場喜好拋開不說。MMORPG 的技術(shù)門檻就要比 DS 高。UE 的 DS 我個人覺得就是一個非常棒的產(chǎn)品,像做《方舟:生存進化》的,還有其它很多工作室,他們沒有多少后端積累,就可以把游戲做到那個量級。"

而這里提到的 DS(Dedicated Server,專用服務(wù)器),不僅是當下很多主流在線多人游戲都會使用的技術(shù),也恰好能夠解答"為什么「吃雞」的玩家得是 100 人"的問題(當然DS和C/S不是同一類概念)。

為什么一局吃雞的玩家得是 100 人

首先得聲明 100 人只是個數(shù)量級,并非錙銖必究的數(shù)字。

簡單來說,DS 可以比喻成"房間制"。好比《絕地求生》《堡壘之夜》《戰(zhàn)地5》和《我的世界》,一個服務(wù)器(獨立主機)對應(yīng)一個房間,然后這個房間大致能夠容納兩位數(shù)到三位數(shù)的玩家。

目前市面上主流的游戲引擎,如虛幻和 Unity 為線上多人游戲提供的解決方案都是 DS。這是一種能最大限度提高網(wǎng)游保真度的架構(gòu),它最早的目的就是為了解決 FPS 的同步問題,追求高精度、低延遲,涵蓋客戶端預測、服務(wù)器校驗,延遲補償?shù)榷喾N技術(shù)。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

《GTA5》的戰(zhàn)局也是一個 DS

田桑拿虛幻引擎舉了個例子:"DS 結(jié)構(gòu)下,引擎是帶到服務(wù)器上運行的,客戶端渲染相關(guān)的部分被剝離出來了,運行的是物理、AI 等純邏輯。由于服務(wù)器能運行物理計算,所以聯(lián)網(wǎng)游戲可以做到物理的同步,就可以實現(xiàn)很真實的游戲體驗。"

在虛幻引擎的 DS 下,服務(wù)器便承擔了計算碰撞同步的任務(wù),例如判定武器有沒有命中,環(huán)境爆炸產(chǎn)生的碎片軌跡這些東西。而且角色的 AI 行為樹同步也依賴 DS,所以服務(wù)器會高頻率地處理狀態(tài),負載非常大。這導致 DS 架構(gòu)雖然有著支持高保真度游戲的優(yōu)點,同樣也具備高消耗、低承載的缺點。

一個典型例子是《光環(huán)5》的戰(zhàn)區(qū)模式。這個用到 DS 架構(gòu)的模式,支持的最大玩家數(shù)是 24 人,而且對于 AI、載體和目標的數(shù)量都有相應(yīng)限制,原因正是要確保不會超過服務(wù)器的承載量。為此開發(fā)團隊簡化了 AI 邏輯,因此在戰(zhàn)區(qū)模式下 NPC 會顯得比戰(zhàn)役中的要"蠢"。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

如果延續(xù) C/S 架構(gòu)下的擴容思路,玩家們可能會感到困惑 —— 一臺服務(wù)器負載太高,你加幾臺服務(wù)器不就完事了么?

然而,DS 架構(gòu)在這一點上還受限于游戲引擎:

"虛幻引擎的主要邏輯是單線程運行,如果把服務(wù)器的主頻性能,比如從 16 核變成 32 核,能夠負載的人數(shù)其實是不能增加的。而且就算從一臺機器增加到兩臺機器,可容納的玩家數(shù)量也不會變化,因為有一個技術(shù)架構(gòu)的限制……至于增加核心數(shù)有沒有用,這個還要看引擎本身是否支持多線程擴展。"

Epic 有一段時間為了《堡壘之夜》能支持 100 人共斗絞盡腦汁,對虛幻引擎做了不少優(yōu)化。比如在跳傘降落的過程中,主動降低遠程調(diào)用所需要的帶寬;又比如限制客戶端向服務(wù)器發(fā)送移動更新的頻率,避免因為客戶端幀率過高,最終導致服務(wù)器過度負載。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

Epic 曾提到過一個觀點,既然一家公司都要做大型 MMO 了,那肯定有自己獨特的要求和后端解決方案,依樣畫葫蘆地照搬他們的 DS 不太適合,虛幻本身去研究擴容的事情可能會比較雞肋,鼓勵開發(fā)者基于這項技術(shù)自己想辦法。

而主要邏輯是單線程運行的 Unity,其實或多或少也和虛幻引擎一樣需要面臨同樣的問題。

做個幾萬人的《荒野大鏢客》有沒有可能

從上面兩個部分的論述來看,不難發(fā)現(xiàn)如今線上多人游戲面臨一個兩難的局面。要么就沿用傳統(tǒng) C/S,自己寫后端,以降低保真度為代價追求規(guī)模;要么就拿 DS 架構(gòu)辦事,縮小規(guī)模,提高保真度。

但有沒有辦法將它們?nèi)诤掀饋砟??其實很多開發(fā)團隊都在思考這個問題。

市面上有著這樣特性的產(chǎn)品不多,"褒貶不一"的海盜冒險多人游戲《ATLAS》勉強算一個。拋開產(chǎn)品品質(zhì)的問題,《ATLAS》用的就是 DS 架構(gòu),而且"理論上"支持 40000 名玩家同時游玩。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

《ATLAS》

他們的做法,是在 DS 外自己寫了世界服務(wù)器和數(shù)據(jù)服務(wù)器的后端。先把多個 DS 實例給拼起來,再由世界服務(wù)器統(tǒng)一負責管理 —— 比如只要玩家過地圖,就把玩家的數(shù)據(jù)搬到另一臺服務(wù)器。其實可以類比成《魔獸世界》的"空間分割法",當然明顯能夠看出技術(shù)不怎么成熟,Steam 上負面評價最多的地方就是"卡"和"連不上"。

英礴本來也打算打造一個龐大的、高保真度的游戲世界,結(jié)果發(fā)現(xiàn)技術(shù)方面都是坑。于是干脆先把 DS 的問題捋清,降低日后游戲制作的門檻和風險,因此催生出了一個解決方案(工具):SpatialOS。

SpatialOS 是一個基于底層公有云資源的游戲開發(fā)環(huán)境。它一方面會給你提供云端的服務(wù)器托管,一方面給予技術(shù)支持,類似于一個多功能插件。這個工具可以很簡單的接入虛幻和 Unity 引擎,甚至任何其他第三方引擎,它主要提供在 DS 架構(gòu)下擴充多人游戲規(guī)模的手段。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

其中一個擴容思路和《ATLAS》有點像,如果一個 DS 不夠用,就把多個 DS 拼接起來統(tǒng)一管控。因為 SpatialOS 虛幻開發(fā)套件的方向就是走多進程,這樣更容易利用多核甚至多機器的計算資源,可以突破傳統(tǒng) DS 的限制 —— 簡而言之就是給游戲加服務(wù)器有用了。

上面這段話有點繞,直接看"把 DS 拼起來"的示例圖更加直觀。下圖中 9 個方塊代表 9 個 DS,每個游戲服務(wù)器的管轄區(qū)域分別由不同顏色代表,玩家不僅可以無縫跨越服務(wù)器邊界,也能和不同區(qū)域的其它玩家互動。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

據(jù)田桑解釋,這背后的秘密是 9 個 DS 之上有一個"網(wǎng)絡(luò)層",它才真正負責所有游戲狀態(tài)的管理。一個 DS 是一個區(qū),通過這個管理層將所有區(qū)彌合起來??蛻舳诉B到這個管理層,而不是所有的 DS 之上。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

利用多個游戲服務(wù)器來模擬游戲世界的不同區(qū)域

說到分層這個概念,SpatialOS 中還有項名為"AI 負載拆分"的功能,正好能解決前文《光環(huán)5》戰(zhàn)區(qū)模式的問題。理論是,如果把 AI 的負載扔到另一個服務(wù)器,那不就為玩家擴容騰出空間了嗎,而且還不必讓 NPC 變"蠢",可謂一舉兩得。

這種方法可以采取的應(yīng)用很廣,對延遲要求不高,和核心系統(tǒng)(如物理)耦合度不高的東西都可以拆分出來,比如天氣系統(tǒng)。分出來的層,則基于云放到另一臺虛擬機上。

英礴本身做了一些實驗,使用原生虛幻引擎的情況下,在已有 100 名玩家的基礎(chǔ)上最多可以運行 229 個 AI;而將 AI 負載扔到另一個服務(wù)器后,維持相同服務(wù)器幀率的前提下 AI 數(shù)量可以達到 479 個,相當于擴容了一倍。

目前正在測試的冒險生存游戲《拾荒者》(Scavengers),剛好就采用了 AI 負載拆分的技術(shù)。開發(fā)商 Midwinter Entertainment 表示玩家會在游戲中遭遇極端天氣、怪物肆虐,外來入侵者以及敵對玩家團隊等各方面的威脅。而 AI 負載拆分使得他們在 3x3 公里的地圖內(nèi),一方面保證了這些高保真度的體驗,一方面又實現(xiàn)了"60 名玩家+300 個 AI"的規(guī)模。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

當然,盡管分層看起來很牛逼,但銀彈卻是不存在的,田桑舉了個例子:

"假設(shè) A1 區(qū)域有 10000 人,負載不下了。那要么把 A1 切成 A1 和 A2,分別放 5000 人,也可能是在 A1 上面再加一層,這都是開發(fā)者自己去控制的。但是這個事情會帶來成本,因為兩個區(qū)間之間有大量通信,要靠服務(wù)器硬件來堆。

比如一個服務(wù)器要從 1000 人擴容到 3000 人,那就分三層……如果每層額外帶來的性能損耗是 50%,每一層實際只能跑 500 人,三層只有 1500 人。那你又得多分幾層,這時候的損耗可能又不止 50% 了。"

所以,要想在 DS 架構(gòu)下把玩家的規(guī)模擴大,得綜合多種方法。SpatialOS 實際上還有一套名為 QBI 的系統(tǒng),可以自定義降低同步頻率,解決一些網(wǎng)絡(luò)負載的問題。比如其中一個表現(xiàn)就是令距離玩家較近的活動物體看起來更順暢,越遠"越卡",主要是看開發(fā)者如何發(fā)揮想象。

做個幾萬人一起玩的《荒野大鏢客》有可能嗎?

正如之前提到的技術(shù)限制,MMORPG 人數(shù)規(guī)模很大,可以達到幾千上萬人,但基本集中在社交、打怪,或者是副本的交互方式,很少見到有真實的物理模擬。另外一個方向是像《堡壘之夜》《方舟:生存進化》這樣的游戲,它們有些地方做得很細致,但人數(shù)又容易碰到瓶頸,通常就是房間制的。

由此引申到能不能做"容納幾萬人的《荒野大鏢客:救贖2》"的問題,田桑認為理論上是可行的,只是還沒有開發(fā)者觸及到這根線。而且即使解決了技術(shù)問題后,話題就又回到了無法回避的開發(fā)風險和成本。

不過,未來這兩種需求應(yīng)該會交匯到一起,使得線上多人游戲在現(xiàn)今的標準上再進一步:一方面能支持更多玩家,一方面又能保證更真實的模擬。至少有人目前正在朝著這個方向努力,或許再過不久,有著高保真度的大型多人在線游戲就不再僅僅停留在幻想中。