遊戲 Lag 白皮書 › 只有部分人遇到的問題
背景視窗的處理限制 Background window throttling
原因 ID pt-background · 主要負責 遊戲開發團隊(用戶端開發) · 協同 外部(外部)
在含圖解與實驗的完整版中開啟卡片 →
背景視窗中的用戶端,會被遊戲、引擎、OS 降低畫格數與處理量。收到的封包來不及處理,就會積壓或溢位。
為什麼 遊戲選項或顯示卡驅動程式的背景畫格限制(例:NVIDIA 驅動程式可在每秒 20~200 之間指定)、省電、引擎的背景暫停設定。OS 也會優先把 CPU、GPU 分配給前景視窗 → 於是 每個畫格處理的封包數減少,佇列堆積,接收緩衝區溢位時就被丟棄 → 畫面上 把視窗切到前景時一口氣全部冒出來,或部分 NPC 始終看不見
- 症狀
- 看不見/幽靈物件, 快轉, 斷線
- 因素
- 停滯, 遺失
- 誰會遇到
- 同一台電腦只有其中一個用戶端
- 何時
- 閒置一段時間後, 一直都有
- 負責單位
- 主要負責 遊戲開發團隊(用戶端開發) · 協同 外部(外部)
- 遊戲開發團隊要做的事
- 網路接收在與遊戲迴圈分開的執行緒持續進行,在背景也保證最低處理量,並開啟引擎的背景執行設定(Unity 為 runInBackground)。
- 外部要做的事
- 引導玩家關閉顯示卡驅動程式的背景畫格限制與電腦的省電模式。
- 數值參考
- Unity 在 runInBackground 設定關閉時,視窗一失去焦點遊戲迴圈就會停止。若只在這個迴圈中接收,這段期間的封包完全不會被處理。
- 圖表上
- 中斷後一次湧入 · 用戶端畫格間隔、每個畫格處理的封包數
- 查看位置
- 在同一台電腦上把一個視窗放前景、另一個放背景,交換角色比較。用 PresentMon 測量兩個處理程序的畫格間隔;有遊戲端 log 的話,查看視窗焦點狀態與每個畫格處理的封包數
- 符合的跡象
- 只有在背景視窗時畫格間隔大幅增加(若是驅動程式限制,會在設定的畫格率所對應的間隔上持平)或處理停止,切換視窗後問題也跟著移到另一個用戶端
- 不符合的跡象
- 在前景視窗也一樣發生時,就不是背景限制造成的。不論視窗位置,總是同一個用戶端異常時,是顯示選項或版本不同
- 確認方式
- 在玩家端環境確認
出處
- Application.runInBackground Unity
runInBackground 預設值為 false,此時應用程式在背景會暫停 - Manage 3D Settings (reference) — NVIDIA Control Panel Help NVIDIA
Background Application Max Frame Rate:把背景遊戲的最大畫格數限制在每秒 20~200 - Priority Boosts Microsoft
Windows 會把前景視窗的處理程序優先順序提高到背景處理程序以上 - PresentMon README Intel
依應用程式收集 Windows 圖形應用程式 CPU、GPU、顯示畫格時間的工具
相關原因
同一層:只有部分人遇到的問題
同一症狀(看不見/幽靈物件)在其他層的原因
查看含圖解與實驗的完整版卡片