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

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

儲存裝置太慢,資源串流跟不上 Slow storage stalls asset streaming

原因 ID cg-asset-stream · 主要負責 遊戲開發團隊(用戶端開發) · 協同 外部(外部)

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

在 HDD 這類較慢的儲存裝置上,讀取開放世界貼圖與模型的速度跟不上移動,物件會晚出現,或遊戲為了等待讀取而卡頓。

為什麼 騎坐騎、傳送等快速移動,或進入人多的地方,一次需要大量新的貼圖與模型 → 於是 HDD 等較慢的儲存裝置無法以需要的速度讀取,讀取請求越積越多,部分載入還要主執行緒等到完成為止 → 畫面上 貼圖有一段時間是模糊的,建築與角色晚出現;等待讀取的瞬間出現卡頓、定格

症狀
看不見/幽靈物件, 卡頓, 定格
因素
停滯
誰會遇到
只有我
何時
移動中/切換地圖時, 人潮湧入時
負責單位
主要負責 遊戲開發團隊(用戶端開發) · 協同 外部(外部)
遊戲開發團隊要做的事
採用主執行緒不必等待讀取的非同步串流、依移動方向與速度預先讀取、先顯示低解析度(mipmap)與簡化模型再替換、快速移動時串流跟不上就暫時限制移動速度或改用讀取畫面、在最低與建議配備中註明是否需要 SSD。
外部要做的事
引導玩家把遊戲安裝在 SSD 上,並請玩家確認同一顆磁碟上是否正在下載或執行防毒掃描。
數值參考
根據 Microsoft 的說明,舊式硬碟每秒可讀取數十 MB,NVMe SSD 每秒可讀取數 GB,而上一世代的遊戲串流每秒大約使用 50MB。以 SSD 速度為前提、讀取量遠多於此的遊戲放在 HDD 上執行,讀取很容易跟不上移動。
圖表上
只有部分偏高 · 畫格尖峰次數(依儲存裝置類型)、磁碟讀取延遲
查看位置
快速移動時,同時記錄 Windows 效能監視器的 PhysicalDisk\Avg. Disk sec/Read(單次讀取的平均時間)、Current Disk Queue Length 與 PresentMon 畫格時間。開發版本看 Unreal 的 stat Streaming、stat AsyncLoad,以及 Unity Profiler 的 AssetBundle.asset/allAssets 警告(在載入完成前就要求結果,主執行緒只好等待)
符合的跡象
快速移動時磁碟讀取延遲與佇列暴增,同一時間畫格飆高,或貼圖、物件晚出現。同一場景改在 SSD 上執行就消失
不符合的跡象
磁碟很閒、貼圖卻模糊時,是「顯示記憶體(VRAM)不足」;同一個地方第二次去就正常時,是「主執行緒同步載入、著色器編譯」
確認方式
在玩家端環境確認
深入了解
如果只有第一次停住、之後就正常,比較接近「主執行緒同步載入、著色器編譯」;只有儲存裝置慢的電腦每次移動都重複發生,就是這個原因。顯示記憶體不夠、貼圖被反覆移出又載入的「顯示記憶體(VRAM)不足」也會造成貼圖模糊,所以要同時查看磁碟讀取等待與顯示記憶體用量。防毒軟體的即時掃描會在遊戲每次開啟檔案時介入,也可能讓讀取更慢。

出處

  1. DirectStorage is coming to PC Microsoft
    舊式硬碟每秒數十 MB,NVMe SSD 每秒數 GB,上一世代遊戲的資源串流預算約每秒 50MB;開放世界遊戲會在移動時即時讀入遠方景物,用完就丟棄
  2. Texture and mesh loading Unity
    同步上傳在主執行緒的一個畫格內讀取並上傳,造成明顯的停頓;非同步上傳則分散在多個畫格串流
  3. Texture Streaming Overview for Unreal Engine Epic Games
    串流器依視點調高或調低貼圖解析度(mip),大部分計算在非同步工作執行緒進行,並優先載入畫面上看得到的 mip
  4. Profiler markers reference Unity
    AssetBundle.asset/allAssets 警告:在載入完成前就要求結果,主執行緒停下來等待
  5. Stat Commands in Unreal Engine Epic Games
    stat Streaming(串流貼圖的記憶體與數量)、stat AsyncLoad(非同步載入統計)
  6. Windows Performance Monitor Disk Counters Explained Microsoft
    Avg. Disk sec/Read 是完成一次讀取的平均時間(I/O 延遲),Current Disk Queue Length 是量測當下的磁碟佇列長度
  7. PresentMon Capture Application (README-CaptureApplication.md) Intel
    以 FrameTime(畫格之間的 CPU 時間)錄下每個畫格的時間
  8. About regular quick and full scans with Microsoft Defender Antivirus Microsoft
    即時保護會在每次開啟、關閉檔案時掃描

相關原因

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

同一症狀(看不見/幽靈物件)在其他層的原因

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