This document is about: FUSION 1
SWITCH TO

Performance & Optimizations

Level 4

興趣管理

Fusion BR使用事件一致性複製模式,其允許客戶端只接收他們所感興趣的網路物件的資料。這改善效能及減少網路流量。

每個玩家基於相機方向來定義一個錐形的區域,以接收在它們之前以及靠近它們的物件的資訊。

player aoi

因為Area of Interest (AoI)由一個單一方塊所代表,因此透過使用具有不同大小的多個AoI來完成錐形。上述圖形描述了區域設定。玩家只接收這些區域裡面的物件的狀態,其他物件則被忽略。

專案也含有特殊元件,以進一步減少效能成本及網路流量:

StaticNetworkTransform
在繁衍時的靜態物件的一次性位置/旋轉同步。StaticNetworkTransform用於物品盒。在關卡中可以有上百個盒子,而StaticNetworkTransform的使用比起NetworkTransform更理想。

NetworkAreaOfInterestProxy NetworkAreaOfInterestProxy用於不需要同步位置或旋轉,但仍然需要透過興趣管理系統來篩選的物件。舉例而言,在一個擁有的Agent的下層的武器不需要同步轉換,但是應該基於武器是否在玩家的興趣區域之中,來接收它們的已連線資料。AoI計算的位置取自一個指定的物件。就武器而言,這是基於擁有的代理位置。這個功能沒有網路流量額外負荷。

NetworkCulling 針對本機揀選的小的公用程式。當一個網路物件在一段給定的時間之內不從狀態授權來獲得一個新的狀態(玩家的AoI之外),則揀選已連線物件。

雖然上述功能對於網路流量有一個重大的影響,仍然有一些進一步改善的地方:

  • 基於關卡設定的更好的興趣錐形限制區域
  • 預先計算的可見度區
  • A玩家射擊B玩家,可以被手動新增到B玩家感興趣物件清單,以確保網路資料將被接收及可見(比如,玩家可見到即將到來的拋射物,就算它們從很遠的地方射出)。

如需關於興趣管理的額外的資訊,可參見Fusion興趣管理章節。

基準

在無周邊的專用伺服器執行個體上,針對穩定60Hz模擬的建議的最大玩家計數:

配置(硬體+組建類型) 玩家計數
Mac Mini M1 2020,Mac伺服器(Silicon) 200
Core i9-10900K,Windows伺服器 200
多人遊玩裸機(Intel® Xeon® E-2288G @ 3.70GHz),Linux伺服器 200
多人遊玩裸機虛擬機器(GCP N2 - Intel® Xeon® @ 2.80GHz),Linux伺服器 60 - 80
multiplay bare metal (intel® xeon® e-2288g @ 3.70ghz) performance
隨著時間的多人遊玩裸機(Intel® Xeon® E-2288G @ 3.70GHz)的效能,差量時間為毫秒
multiplay virtual machine (gcp n2 - intel® xeon® @ 2.80ghz)
隨著時間的多人遊玩虛擬機器(GCP N2 - Intel® Xeon® @ 2.80GHz)的效能,差量時間為毫秒

實際的效能及玩家計數非常取決於遊戲遊玩模式。在殊死戰中所有玩家在所有時間都是活躍的,這比起被殲滅的玩家有著低額外負荷的大亂鬥而言總是需求更高。它也受到關卡設計(地圖大小、玩家密度)及遊戲遊玩設計(強制玩家來持續地移動/查看/射擊,有著不同於200名露營者的影響)。上述數字代表了最不佳的案例情節——在繁衍後的第一分鐘——所有玩家活躍地移動、查看及射擊。

關於多人遊玩虛擬機器的注意事項: 另一個影響效能的因素是目前已配置的硬體的規格。在一個對戰(遊戲伺服器執行個體)幾乎無法處理60名玩家的時候,另一個對戰卻可以運行100名玩家而沒有任何問題。這是由於不同的硬體規格所造成的。在一個裸機伺服器上運行,以獲得更高的玩家計數及改善穩定性。

分析

在常用分析工具以外,這個範例提供了在發行模式中的遊戲的離線分析的工具。當遊戲以-recordSession參數來啟動,每一幀都會記錄引擎差量時間及玩家計數,並且儲存在一個CSV格式的檔案之中。然後可以透過提供的Python指令碼(在Assets/Extras.zip中可用),來處理這個檔案,該指令碼將生成附有圖表的HTML檔案。

Application.persistentDataPath路徑或在-dataPath XXX命令中指定的路徑上建立該檔案。

profiling stats

上述圖案顯示了藍色線所展示的一個增加的玩家計數(最多達200),以及引擎差量時間(大多數時間為穩定,有少數峰值高於16毫秒)。在DeltaTimePlayerCount之外,您可以透過一個自訂StatsRecorder執行個體來建立您自己的已追蹤屬性的集。

輪詢

在射擊專案中,可預期有大量的物件繁衍(拋射物、槍口效果、衝擊、命中效果...)。因為一個新的物件的具現化需要許多花費,在Fusion BR中將輪詢所有東西。

有兩種輪詢類型:

  • **NetworkObjectPool**用於輪詢NetworkObjectsNetworkObjectPool執行INetworkObjectPool介面,並且被傳送到Networking指令碼中的NetworkRunner.StartGame功能之中。如需取得更多資訊,請查看Fusion操作手冊中的網路物件輪詢章節。

  • **ObjectCache**是一個泛型GameObject輪詢,其用於非連線物件,比如衝擊效果。它附有一個功能,以在一個指定的延遲之後傳回物件。在程式碼的其他部分可以透過場景內容來存取ObjectCache

Back to top