早期 RTS,XBOX360 LIVE遊戲常用同步策略是什麼?格鬥遊戲多人聯機如何保證流暢性和一緻性?如何才能像單機遊戲一樣編寫網遊?
【算法概念】
該算法普遍要求網速RTT要在100ms以内,一般人數不超過8人,在這樣的情況下,可以像單機遊戲一樣編寫網絡遊戲。所有客戶端任意時刻邏輯都是統一的,缺點是一個人卡機,所有人等待。
1.客戶端定時(比如每五幀)上傳控制信息。2.服務器收到所有控制信息後廣播給所有客戶。3.客戶端用服務器發來的更新消息中的控制信息進行遊戲。4.如果客戶端進行到下一個關鍵幀(5幀後)時沒有收到服務器的更新消息則等待。5.如果客戶端進行到下一個關鍵幀時已經接收到了服務器的更新消息,則将上面的數據用于遊戲,并采集當前鼠标鍵盤輸入發送給服務器,同時繼續進行下去。6.服務端采集到所有數據後再次發送下一個關鍵幀更新消息。
【算法演示】
我根據該算法将街機模拟器修改出了一個可用于多人對戰的版本,早期有一個叫做kaillera的東西,可以幫助模拟器實現多人聯機,但是并沒有作幀鎖定,隻是簡單将鍵盤消息進行收集廣播而已,後來Capcom在PSP和360上都出過街霸的聯網版本,但是聯網效果不理想。這個算法其實局域網有細就經常使用了,隻是近年來公網速度提高,很容易找到RTT<50ms的服務器,因此根據上述算法,在平均RTT=100ms(操作靈敏度1/10秒),情況下,保證自動計算關鍵幀适應各種網絡條件後,就能夠像編寫單機遊戲一樣開發網遊,而不需狀态上作複雜的位置/狀态同步。
從上圖的演示中可以看到,兩個模拟器進程都在運行1941這個遊戲,兩邊客戶端使用了該算法,将邏輯統一在一個整體中。最後這張圖是運行KOF99的效果圖,兩邊完美同步,上圖是我開發的街機對戰效果,在公網環境下,隻要不是小型寬帶用戶,一般電信或者聯通用戶都能有一個比較好的體驗。
【幀間無等待改進】
針對傳統幀鎖定算法網速慢會卡到網速快的問題,實踐中線上動作遊戲通常用“定時不等待”的方式再每次Interval時鐘發生時固定将操作廣播給所有用戶,不依賴具體每個玩家是否有操作更新:單個用戶當前鍵盤上下左右攻擊跳躍是否按下用一個32位整數描述,服務端描述一局遊戲中最多8玩家的鍵盤操作為:int player_keyboards[8];
服務端每秒鐘50次向所有客戶端發送更新消息(包含所有客戶端的操作和遞增的幀号): update=(FrameID,player_keyboards)。客戶端就像播放遊戲錄像一樣不停的播放這些包含每幀所有玩家操作的update消息。客戶端如果沒有update數據了,就必須等待,直到有數據到來。客戶端如果一下子收到很多連續的update,則快進播放。客戶端隻有按鍵按下或者放開,就會發送消息給服務端(而不是到每幀開始才采集鍵盤),消息隻包含一個整數。服務端收到以後,改寫player_keyboards
雖然網速慢的玩家網絡一卡,可能就被網速快的玩家給秒了(其他遊戲也差不多)。但是網速慢的玩家不會卡到快的玩家,隻會感覺自己操作延遲而已。另一個側面來說,土豪的網宿一般比較快,我們要照顧。
随機數需要服務端提前将種子發給各個客戶端,各個客戶端算邏輯時用該種子生成随機數,另外該例子以鍵盤操作為例,實際可以以更高級的操作為例,比如“正走向A點”,“正在攻擊”等。幀鎖定系列方法目前也成功的被應用到了若幹線上實時動作遊戲中。
關于幀鎖定系列的方法有很多類似實現(包括後面提到的幀間無等待改進,包括 Lock Step等),但是他們的核心都是一個:保證所有客戶端每幀的輸入都一樣。這樣的方式被格鬥遊戲,RTS和足球(FIFA類)、籃球(NBA)等體育和動作遊戲大量使用,比如我們熟悉的各大戰網平台遊戲(Xbox Live等),還有很多基于模拟器的街機對戰平台。以及不少大型多人橫版動作遊戲。以開發便利,同步邏輯直觀而受到大家歡迎。
而近兩年動作遊戲領域也湧現出一些新的改良方法,比如 Time Warp,以客戶端先行 邏輯不一緻時回滾的方式,帶來了更好的同步效果,俗稱時間回退法。不果國内暫時沒看到有遊戲這麼嘗試,更多的是國外近兩年的雙人動作遊戲比較多,要求遊戲每幀狀态都可以保存,邏輯上開發會複雜一些。國内大部分是超過兩人出去副本的,在3-4人出去 PK的情況下,引入狀态回退,會讓整個效果大打折扣。不果2人的效果确實有所改進,有興趣的同學可以搜索 Time Warp相關的論文。
2009年,雲遊戲(遊戲遠程渲染)技術得到廣泛應用,客戶端上傳操作,服務端遠程渲染,并以低延遲視頻編碼流的方式傳回給客戶端,用的就是這樣類似的技術。客戶端不需要高額的硬件,也不存在盜版問題,其中 Gaikai和 OnLive兩家公司做的比較好。
2012年,Sony推出 Playstation Now技術,可以在 PSV和 PS3/PS4上玩雲遊戲,玩家不需要購買遊戲就可以免費體驗一定時間。使得 PSV/PS3等低端硬件也可以流暢的跑 PS4遊戲。
但是目前國外網絡環境下跑的還比較流暢,國内的網絡環境要低延遲傳送 HD畫質的視頻流還比較困難,視頻都是比較費帶寬的。但是幀鎖定等保證每幀輸入一緻的算法,在當今的網絡質量下傳遞一下玩家操作,還是沒有任何問題的。
90%玩家直呼看得過瘾,玩得更過瘾!更多資訊,更多精彩,請關注5玩
five-game(長按複制)
,