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

Анатомия игровых лагов › L1 Процесс игрового клиента

Стриминг ассетов отстаёт из-за медленного накопителя Slow storage stalls asset streaming

ID причины cg-asset-stream · Основной ответственный Команда разработки · Разработка клиента · Совместно Внешние стороны · Внешние стороны

Открыть карточку в основной версии с иллюстрациями и экспериментами →

На медленном накопителе вроде HDD текстуры и модели открытого мира читаются медленнее, чем перемещается игрок. Объекты появляются с опозданием, или игра дёргается, ожидая окончания чтения.

Почему Быстрое перемещение на маунте или телепортом либо вход в людное место, где сразу нужно много новых текстур и моделей → Следствие Медленный накопитель вроде HDD не успевает читать с нужной скоростью, запросы на чтение копятся, а завершения некоторых загрузок главный поток ждёт → На экране Текстуры какое-то время размытые, здания и персонажи появляются с опозданием, а пока игра ждёт чтения, бывают микрофризы и фризы

Симптомы
Невидимки / фантомы, Микрофризы, Фриз
Факторы
Остановка
У кого
Только у меня
Когда
В движении и при смене локации, При наплыве игроков
Ответственные
Основной ответственный Команда разработки · Разработка клиента · Совместно Внешние стороны · Внешние стороны
Команда разработки: задачи
Стримить асинхронно, чтобы главный поток не ждал чтения, читать заранее с учётом направления и скорости движения, сначала показывать низкое разрешение (мип-уровни) и упрощённые модели, а потом подменять их, при отставании стриминга во время быстрого перемещения ненадолго ограничивать скорость или показывать экран загрузки, указать в минимальных и рекомендуемых требованиях, нужен ли SSD.
Внешние стороны: задачи
Посоветовать игрокам ставить игру на SSD и проверить, не идут ли на том же диске загрузки или антивирусная проверка.
Цифры для ориентира
По данным Microsoft, старые жёсткие диски читают десятки MB в секунду, NVMe SSD несколько GB в секунду, а игры прошлого поколения тратили на стриминг около 50 MB в секунду. Если игра рассчитана на скорость SSD и читает гораздо больше, на HDD чтение легко отстаёт от перемещения.
На графике
Высоко только у некоторых · число всплесков времени кадра (по типу накопителя), задержка чтения с диска
Где смотреть
Во время быстрого перемещения записывать вместе счётчики PhysicalDisk\Avg. Disk sec/Read (среднее время одного чтения) и Current Disk Queue Length в Системном мониторе Windows и время кадра в PresentMon. В development-сборке смотреть stat Streaming и stat AsyncLoad в Unreal, в профайлере Unity предупреждения AssetBundle.asset/allAssets (результат запрошен до окончания загрузки, и главный поток ждёт)
Подтверждает
При быстром перемещении задержка чтения и очередь диска резко растут, и в те же моменты подскакивает время кадра или с опозданием появляются текстуры и объекты. На SSD в той же сцене этого нет
Опровергает
Если диск простаивает, а текстуры размытые, это «Нехватка видеопамяти (VRAM)». Если со второго посещения того же места всё нормально, это «Синхронная загрузка и компиляция шейдеров в главном потоке»
Чем проверить
Проверка на стороне игрока
Подробнее
Если фриз бывает только в первый раз, а дальше всё нормально, это ближе к причине «Синхронная загрузка и компиляция шейдеров в главном потоке». Если он повторяется при каждом перемещении и только на ПК с медленным накопителем, причина именно эта. Размытые текстуры даёт и другая причина, «Нехватка видеопамяти (VRAM)»: текстуры выгружаются из видеопамяти и загружаются обратно. Поэтому ожидание чтения с диска и занятость видеопамяти смотрят вместе. Чтение может замедлять и антивирус: проверка в реальном времени вмешивается каждый раз, когда игра открывает файл.

Источники

  1. DirectStorage is coming to PC Microsoft
    Старые жёсткие диски читают десятки MB в секунду, NVMe SSD несколько GB в секунду, бюджет стриминга ассетов в играх прошлого поколения около 50 MB в секунду. Игры с открытым миром на ходу подгружают и выгружают дальние пейзажи
  2. Texture and mesh loading Unity
    Синхронная загрузка читает данные и передаёт их на GPU в главном потоке за один кадр, что даёт заметную остановку. Асинхронная загрузка стримит данные на протяжении нескольких кадров
  3. Texture Streaming Overview for Unreal Engine Epic Games
    Стример повышает и понижает разрешение текстур (мип-уровни) в зависимости от положения камеры. Большая часть расчётов идёт в асинхронных рабочих потоках, а первыми загружаются мип-уровни, видимые на экране
  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 Процесс игрового клиента

Причины с тем же симптомом (Невидимки / фантомы) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами