ゲームラグ白書 › 一部のユーザーだけに起きる問題
接続ごとの送信バジェット・優先度 Per-connection bandwidth budget and priority
原因ID pt-priority · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
図と実験のあるメインページでこのカードを開く →
サーバーが接続ごとに送る量に上限を設けて近いものから送ると、上限が低く設定された側は、遠くにいるNPCを遅れて受け取るか、受け取れません。
なぜ 人の多い場所で、サーバーが接続ごとの送信量の上限内で重要度順に送信 → すると 帯域幅の推定が低く出た接続(例:バックグラウンドウィンドウで受信確認が遅れている側)は、後ろのほうのオブジェクトを後回しにし続ける → 画面では 遠くにいるNPCが片方でだけ遅れて見えるか、表示されない
- 症状
- 表示されない・ゴースト, 入力遅延
- 要因
- 遅延
- 誰に起きるか
- 同じPCの片方のクライアントだけ, 特定の場所・チャンネル
- いつ
- 人が集中したとき
- 担当
- 主担当 ゲーム開発チーム・サーバー開発 · 副担当 ゲーム開発チーム・クライアント開発
- ゲーム開発チームの対応
- サーバー:後回しになったオブジェクトの優先度を時間とともに上げる(スタベーション防止)、最低限の更新周期を保証。クライアント:バックグラウンドでも受信確認を遅れずに送り、帯域幅の推定が下がらないようにする。
- グラフでは
- 人数・負荷に連動して上昇 · 接続ごとの後回しにしたオブジェクト数、接続ごとの送信量
- 確認箇所
- サーバーに、接続ごとのティック別送信バイト数、送信上限(推定帯域幅)、送れずに後回しにしたオブジェクト数、オブジェクトごとの最後の送信からの経過時間を記録。UnrealではNetworking Insightsで接続ごとのパケットサイズと、その中に含まれるレプリケーション対象を確認できる
- 該当する場合
- 表示されないNPCがその接続で長く後回しにされたオブジェクトで、その接続の上限がほかの接続より低く、混雑するほど後回しのオブジェクトが増える
- 該当しない場合
- 後回しのオブジェクトがなく、そのNPCも時間どおりに送っているなら、送信後の段階(受信バッファ、ロード、表示オプション)。すべての接続が上限に張り付いているなら、サーバー全体の送信量・視界設計の問題
- 確認手段
- ゲームサーバー・クライアントのログ・メトリクスが必要
出典
- Actor Priority in Unreal Engine Epic Games
帯域幅が飽和すると、優先度(距離・視線・最後のレプリケーションからの経過時間)に従ってレプリケートするアクターを選ぶ。すべてのアクターが毎回レプリケートされるわけではない - State Synchronization Gaffer On Games
優先度の累積:今回のパケットに入らなかったオブジェクトが次のパケットに優先して入り、帯域幅の上限はリアルタイムで調整 - Networking Insights in Unreal Engine Epic Games
接続ごとにやり取りしたパケットのサイズと、その中に含まれるレプリケーション対象・プロパティを表示
あわせて読みたい原因
同じ層:一部のユーザーだけに起きる問題
同じ症状(表示されない・ゴースト)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る