Unity-Technologies / Unity-Technologies/com.unity.netcode.gameobjects

NetworkTransform Performance Issue in Large Scenes

オープン
#2,447 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

stat:imported Tracking type:optimization
主要言語
C#
スター
2.3k
フォーク
461
平均マージ
3日 16時間
マージ済み PR(30日)
20

説明

Description

The Network Transform component is significantly more expensive than necessary. I suspect this is due to its lack of batching or usage of the Job System. It might be possible to move most, if not all, the logic into a burst compiled job.

Reproduce Steps
  1. Build a new project with netcode
  2. Add ~500 network transforms
  3. Observe profiler in build

image

Expected Outcome

Executing the syncing of the transforms should incur a time cost on par with simply using a synced network variable of a matrix4x4

Actual Outcome

Considerable performance losses, possibly due to Update overhead

Details

Unity Version 2021.3.12f1
Netcode Version 1.2.0
Transport Version 1.3.0

Additional Thoughts

Im working on a fairly large simulation project, and am using NGO for sharing said data. As such, I have between 500 and 1000 network transforms for syncing simulation data between clients. The profiling data above is after the simulation settles, so the only network messages been sent are heartbeat.

After doing my own deep dive into the network transform, I noticed that the work it was doing wasn't batched. It might be possible to use the job system to deal with these transforms, thus allowing a much larger cap on the amount of synced network objects in a scene.

Sadly, until the performance of the network transform is improved, I'm going to have to attempt to implement my own version of the network transform.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、約500個のNetworkTransformコンポーネントを含むUnity 2021.3.12f1プロジェクトで問題を再現し、ビルドでprofilerを調査します。transform同期のコストを、同期されたMatrix4x4ネットワーク変数のコストと比較し、その後、NetworkTransformの更新パスをバッチ処理するかJob Systemに移行できるかを判断します。完了の基準は、定常状態のオーバーヘッドが大幅に低下することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp, unity
領域
networking, performance
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
20/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。