作者madeinheaven ()
看板PUBG
標題[情報] 虛幻引擎針對Battle Royale模式更新
時間Fri Oct 6 13:54:09 2017
虛幻引擎為 Fortnite: Battle Royale 項目做的改進
https://goo.gl/2asqGT
什麼是 Fortnite: Battle Royale?
最近,我們發佈了一個新的 PVP 遊戲模式,叫做 Fortnite: Battle Royale。該遊戲模
式中,100 個玩家空降在一個 5.5 平方公里的遊戲區域,玩家之間互相戰鬥,最後一個
玩家則是最終勝利的玩家。在這個需求下,這樣的遊戲規模給 Fortnite 開發團隊帶來了
一些新的挑戰,這篇文章就來討論一下這些挑戰。
為了開發 Battle Royale 這一遊戲模式,我們做了諸多方面的改進,包括性能的改善,
內存優化和工作流程優化。這些改進不僅僅是為了 Fortnite: Battle Royale,更將會為
虛幻引擎 4 的開發團隊帶來改善,尤其是在開發中遇到類似需求的開發團隊。
所有的這些改善都可以通過 Perforce 或者 GitHub 獲得。相當多的改進都會在這個月即
將發佈的虛幻引擎 4.18 中得以整合,來不及整合的一些剩餘改進則將會在整合在 4.19
中。
專屬服務器(Dedicated Server)的性能
首要需要解決的一個挑戰是優化 dedicated server,以便能在遊戲中同時容納 100 個玩
家,保持在每秒 20 幀服務器計算刷新率,並且保持較小的帶寬需求。
在每幀中,服務器會將一個玩家附近所有的 actor 信息更新給該玩家。這意味著對於每
個玩家,都需要判斷和該玩家相關的所有 actor 是哪些,找到這些 actor 發生了什麼樣
的變化,並且將這些變化信息打包發送給該玩家。為了將 CPU 的計算時間控制在最小的
數值上,並且發送最小的網絡包,這樣才能為遊戲提供最佳的遊玩體驗。
這項工作主要都是在分析遊戲性能並優化遊戲邏輯代碼,但在這一過程中,我們也發現了
一些需要對引擎進行改進的地方。
以下就是我們為 dedicated server 優化所做的引擎的改進:
在用戶連接的時候,將 level streaming 的遠程調用(RPC)合併,以減少遠程調用的次
數。(將會在 4.19 中整合)
將操作系統中的 Socket Buffer 大小改為可配置,並在 Battle Royale 的項目中增加該
數值。這個改動將能夠避免同時連接的客戶端的 buffer 溢出而導致服務器的過度加載。
(將會在 4.19 中整合)
當角色並未站立在任何其他 component 的時候,減少 CharacterMovement 遠程調用所需
要的帶寬,比如在跳躍的過程或者在降落的過程中。(將會在 4.19 中整合)
新增了一個功能,用於限制服務器的每幀發送更新給客戶端的數量。我們目前的默認設置
是在遊戲大廳中限制在每幀只給 25 個客戶端更新,在遊戲中每幀只給 50 個客戶端更新
。(將會在 4.19 中整合)
限制客戶端向服務器發送移動更新的頻率。避免因為客戶端的幀率過高而頻繁的向服務器
發出移動消息而使得服務器過度負載。(已經在 4.17 中整合)
新增了一個選項,可以選擇不要複製一個客戶端的 ping 的信息給其他客戶端,因為該方
法在大量玩家的情形下會導致很多額外的網絡流量。(將會在 4.19 中整合)
移除了在網絡同步時 FArchive::SerializeIntPacked 函數中幾處分配內存的調用,修改
了 CompatibleChecksum 的計算方式。(將會在 4.19 中整合)
修改了 property type 比較方式,從原來的字符串比較改為 FNames 的比較,加快網絡
複製進程的速度。(將會在 4.19 中整合)
新增了一個功能,能夠在客戶端上實時的查看當前的 dedicated server 的網絡統計信息
,對於那些將服務器部署於雲端的項目開發獲得調試的便利。(將會在 4.19 中整合)
對 ability system 做了修改,更好的計算相關性,在使用 ability system 的時候將極
大的減少網絡同步的開銷。(將會在 4.19 中整合)
製作並且渲染一個大地圖
Fortnite: Battle Royale 地圖的遊戲區域有 5.5 平方公里。在跳傘的時候,玩家可以
看到整個地圖,遊戲過程中也支持長距離的可見視野,因此我們需要優化我們的細節等級
(Level-of-Detail)方案來使這一設計變成可能。
我們採用了引擎中的分層遞階 LOD(Hierarchical LOD,HLOD),由 Simplygon 提供的
方案,將地圖中的一些區域合併成一些低面數的簡單網格體,以便於當玩家在遠處時,這
樣的區域能夠在一次 drawcall 中便能完成繪製。這些是已經可用的工具,我們在
Paragon(虛幻爭霸) 中也使用過 – 但這次我們需要做一些改進,以便於美術製作人
員能夠更高效的進行開發工作。
地圖分割的方式能夠讓美術製作人員互相協作,而不會和我們的 HLOD 工具混雜在一起。
我們也對 HLOD 做了一些改進,以便於更好的支持美術工作流程,並新增了一個命令行工
具來重新構建地圖中所有的 HLOD,並能夠在晚間的構建流程上自動重新構建,而不再需
要美術製作人員在本地的工作電腦上構建它們。(將會在 4.19 中整合)
在主機平台發佈產品
Battle Royale 模式下超遠的視野距離和大量的玩家數量,在主機上也遇到了性能和內存
的挑戰,我們同樣需要對這些挑戰做出新的改進,尤其是和內存有關的問題。大部分的工
作都需要在遊戲項目組上對遊戲內容素材進行優化,但我們也在引擎層面做了一些改進和
調整。
以下這些是我們在主機上的一些改進,將會在 4.18 中發佈:
[XboxOne + PS4] 改進了底層內存跟蹤工具,以便更好的識別潛在的內存優化空間。
[XboxOne + PS4] 更高效的貼圖卷更新方式,新的方式降低了超過 240MB 的峰值內存開
銷。
[XboxOne] 基於啟用了那些渲染特性,為不同的 render target 添加控制選項以最大化
利用 GPU 帶寬。
[XboxOne] 減少 D3D12 描述器頭部的內存並節省了 120MB。
[XboxOne] 運行中分配並釋放 render targets 並減少了 100MB 以上的內存。
[PS4] 優化了 texture streaming 和碎片池(defragmentation pool)的處理方式,節
省了 300MB~400MB 的內存。
在為 Battle Royale 項目做開發時,我們還發現和輸入延遲相關的一些問題,尤其是在
30 幀運行速度下。我們成功的對線程同步做了一些改進,並降低了大約 66ms 的輸入延
遲(在 60 幀的遊戲中這裡降低的時間約為一半)。這一修正對遊戲體驗會帶來顯著的改
進,在瞄準的操作中響應更及時,瞄準也變得更容易。(將會在 4.19 中整合)
還有更多!
這裡只是一些隨著 Fortnite: Battle Royale 項目第一個版本而帶來的引擎功能的改善
。在獲得了這些經驗後,我們也已經看到了其他更多的一些改進空間和新的想法想要去實
現,尤其是在超大地圖的開發中 Level Streaming 和編輯器性能方面,這些改進將會持
續對我們自己的遊戲開發團隊以及在遊戲業內使用虛幻引擎的用戶帶來更高效的開發工具
。
------------------------------------------------------------------------------
虛幻引擎為Battle Royale模式優化並改進引擎功能
也就是說絕地求生未來也會有這些優化和功能~!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.205.12
※ 文章網址: https://www.ptt.cc/bbs/PUBG/M.1507269252.A.A5E.html
※ 編輯: madeinheaven (111.243.205.12), 10/06/2017 13:55:33
→ wahaha5678: 一開始看還以為跟PUBG無關XD 10/06 13:57
推 p72910: 哇靠,pubg版的bloodstrike要出了 10/06 14:01
推 zxc8424: 所以是勸pubg不要不爽他們做大逃殺的意思嗎 10/06 17:02
噓 p587868: 所以抄了PUBG的code真的是要協助開發阿? 10/06 18:38
→ omx: 有試玩過這遊戲就知道根本和PUBG完全不一樣 呵呵 10/07 08:12