한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

遊戲 Lag 白皮書 › L1 用戶端遊戲程式

大量角色同畫面的渲染負載 Render/animation cost of crowds

原因 ID cg-crowd · 主要負責 遊戲開發團隊(用戶端開發)

在含圖解與實驗的完整版中開啟卡片 →

攻城戰、世界王這類數百人擠進同一個畫面的場合,光是繪製的成本就負荷不了。

為什麼 同一個畫面裡數百人與特效重疊 → 於是 動畫、陰影、名字、特效的成本隨人數成比例增加 → 畫面上 FPS 由 60 → 15 大幅下降,所有動作都卡頓,輸入也跟著延遲

症狀
卡頓, 輸入延遲
因素
停滯
誰會遇到
特定地點/頻道, 只有我
何時
人潮湧入時
負責單位
主要負責 遊戲開發團隊(用戶端開發)
遊戲開發團隊要做的事
依距離簡化(LOD)、設定顯示人數上限、提供特效簡化選項、降低動畫更新頻率。
數值參考
即使每個角色只要 0.02~0.1ms,300 人就是 6~30ms。60FPS 的畫格預算是 16.7ms,光這部分就用掉 1/3 以上,多的時候直接超出預算。
圖表上
隨人數/負載上升 · 畫格時間、畫面內角色數
查看位置
比較攻城戰、世界王前後的 PresentMon 畫格時間與 CPUBusy、GPUBusy。開發版本看 Unreal 的 stat Unit(遊戲執行緒、渲染執行緒、GPU 時間)
符合的跡象
畫面內人數越多,畫格時間跟著上升;開啟顯示人數限制或特效簡化選項後立刻改善
不符合的跡象
與人數無關也會飆高時,是「畫格時間尖峰」或「用戶端垃圾回收」。FPS 正常、只有其他人的動作延遲時,是「主執行緒封包處理瓶頸」
確認方式
在玩家端環境確認

出處

  1. Introduction to level of detail Unity
    沒有 LOD 時,畫面上看起來很小的物體也用同樣的複雜度繪製;LOD 可減輕繪製負擔
  2. Animation Budget Allocator in Unreal Engine Epic Games
    動態減少骨架網格(skeletal mesh)的動畫更新(tick),把花在動畫上的時間限制在預算內
  3. PresentMon Capture Application (README-CaptureApplication.md) Intel
    以 FrameTime、CPUBusy、GPUBusy 分辨是 CPU 還是 GPU 拖慢畫格
  4. Stat Commands in Unreal Engine Epic Games
    stat Unit:整體畫格時間與遊戲執行緒、渲染執行緒、GPU 時間

相關原因

同一層:L1 用戶端遊戲程式

同一症狀(卡頓)在其他層的原因

查看含圖解與實驗的完整版卡片