Что такое traversal stutter и почему средний FPS его скрывает
Вы бежите по лесу. Справа художественно гниёт избушка, слева шевелится куст, впереди обещают квест, добычу и, если очень повезёт, человека с лицевой анимацией. Счётчик показывает 117 FPS. Компьютер урчит на столе, демонстрируя финансовое благополучие владельца.
Шаг. Ещё шаг. ХРЯСЬ.
Картинка застывает на долю секунды, герой телепортируется вперёд, мышь ощущается деревянной. Затем снова 117 FPS. Разворачиваемся, пересекаем то же место — ХРЯСЬ. Невидимый лежачий полицейский существует.
Так может проявляться traversal stutter — скачок времени кадра, вызванный перемещением по миру. Частая причина — игра не успела подгрузить, создать или добавить в сцену объекты следующей области. Однако одного совпадения по месту для точного диагноза недостаточно: движение способно запускать и другие тяжёлые события.
Высокий средний FPS этому не противоречит. А Unreal Engine 5.8 и DirectStorage 1.4, несмотря на солидные номера и запах будущего, не являются святой водой от всех подобных фризов.
При 60 FPS компьютер располагает примерно 16,7 миллисекунды на кадр. При 120 FPS — уже 8,3 миллисекунды. Девятьсот девяносто кадров он может образцово уложить в бюджет, а на тысяча первом задуматься на 80 миллисекунд. Средняя частота почти не изменится; глаз, рука и находящийся в ней дорогостоящий манипулятор заметят всё.
Поэтому показатель «сто FPS!» защищает от статтера примерно как средняя температура за месяц — от кирпича, упавшего на голову во вторник. Для поиска таких рывков полезнее график frame time — времени формирования каждого кадра.
Traversal stutter привязан к перемещению. Игра делит большой мир на участки и держит поблизости только то, что может понадобиться. Когда герой подходит к условной границе, движок готовит следующую порцию декораций. Если какая-то обязательная работа не закончилась вовремя, кадр ждёт.
В S.T.A.L.K.E.R. 2 обозреватель PC Gamer наблюдал лёгкие рывки возле невидимых границ стриминга на отдельных видеокартах. При этом шейдеры игра компилировала во время загрузки. Пример хорошо показывает: похожие подтормаживания могут иметь разные причины, и средний FPS не раскрывает их происхождение.
Что происходит при входе в новую область игрового мира
Представление «SSD не успел загрузить текстуру» соблазнительно своей простотой. На самом деле за кулисами движется целая похоронная процессия, и споткнуться может любой её участник. Конкретная реализация зависит от движка и игры, но общий путь выглядит примерно так.

Чтение и распаковка данных
Сначала движок решает, какие пакеты ему нужны: геометрия, текстуры, анимации, звук, описания объектов. Они читаются с накопителя, попадают в оперативную память и распаковываются. Затем часть данных требуется передать видеокарте.
HDD действительно способен задержать эту процессию у шлагбаума. SSD значительно сокращает время доступа, особенно когда вместо одного огромного файла приходится добывать множество небольших блоков. Но быстро прочитать запечатанный чемодан не значит мгновенно распаковать его, разложить носки по ящикам и зарегистрировать каждый носок в физическом движке.
Создание объектов и регистрация компонентов
Полученные байты ещё не являются деревом, дверью или бандитом. Движку надо десериализовать данные — восстановить из файла понятные игре объекты, — выделить память, присоединить компоненты, добавить геометрию в сцену, подготовить столкновения и уведомить систему рендеринга.
Документация Unreal Engine отдельно предусматривает покадровые лимиты для асинхронной загрузки, инициализации акторов и регистрации компонентов. То есть даже перечень настроек движка сообщает деликатным канцелярским голосом: «Да, добавление уровня в работающий мир занимает время».
Синхронная загрузка способна остановить основной поток до завершения операции, а создание объектов и сборка мусора — вызвать отдельные пики нагрузки. Это подтверждают материалы Epic об асинхронной загрузке и производительности CPU и памяти.
Как один запоздавший этап превращается в фриз
Хороший стриминг выполняет работу заранее и дробит её на небольшие порции. Пока игрок любуется дальним холмом, компьютер уже готовит его кусты, камни и местных злодеев.
Но герой может приехать быстрее расчёта. Необходимый пакет может зависеть от другого пакета. На игровом потоке внезапно создаётся слишком много объектов. Заканчивается бюджет памяти, начинается выселение старых ресурсов. Или движок решает, что дальше без обязательной геометрии нельзя, и нажимает внутреннюю педаль тормоза.
Вот он, кульминационный ХРЯСЬ. Мир ещё секунду назад притворялся бесшовным, затем шов разошёлся прямо под ногами.
Как отличить traversal stutter от других подтормаживаний
Главный признак — связь с перемещением. Пройдите проблемное место несколько раз в обоих направлениях. Если скачок возникает возле одной границы, особенно одновременно с появлением новых построек или растительности, подозрение на стриминг вполне обоснованно. После ухода далеко от области или перезапуска игры данные могут быть выгружены, и рывок вернётся.
Но точка на карте иногда совпадает с автосохранением, сюжетным триггером, появлением противников или новым графическим эффектом. Компьютерный диагноз по одному симптому — это гадание по кофейной гуще, только кофе стоит дешевле видеокарты.
Компиляция шейдеров
Шейдерный статтер возникает, когда игре впервые понадобилась новая комбинация шейдеров и состояния графического конвейера, а готового Pipeline State Object, или PSO, нет. PSO описывает набор программ и настроек, необходимых GPU для отрисовки. Если объект нужен прямо сейчас, игра может остановиться, пока драйвер готовит эту конфигурацию.
При повторном появлении того же эффекта рывок часто пропадает, поскольку результат попадает в кэш. После смены драйвера, оборудования или очистки кэша представление может начаться заново.
Epic подробно разбирает механизм в материале о PSO precaching. Важно не смешивать два заболевания: shader stutter чаще связан с первым появлением материала или эффекта, а traversal stutter — с событием, которое запускает движение по миру. Подгрузка ресурсов лишь одна, хотя и распространённая, причина. Иногда оба заболевания радостно приходят вместе. Гастролирующий дуэт «Заика и Подгрузка», билеты возврату не подлежат.
Память, автосохранения и обычная нехватка мощности
Постоянно низкий FPS — не traversal stutter. Переполненная VRAM способна вызвать провалы производительности, запоздалую подгрузку текстур и дополнительное перемещение данных между системной и видеопамятью. Нехватка RAM привлекает файл подкачки и может превратить прогулку в показ слайдов. Автосохранение часто привязано к дверям или сюжетным триггерам, а сборка мусора даёт периодические пики независимо от границ стриминга.
Сетевая задержка заставляет дёргаться других игроков и откатывает действия, но не обязательно удлиняет локальный кадр. Поэтому сначала стоит изучить график frame time и поведение проблемы, а уже затем торжественно произносить название болезни.
Почему мощная видеокарта и быстрый SSD помогают не всегда
Когда переход с HDD на SSD полезен
Переход с HDD на SSD — разумная мера, если игра не успевает читать ресурсы с накопителя. Особенно заметной разница бывает в больших мирах, где постоянно запрашиваются многочисленные небольшие блоки данных.
Однако накопитель — только начало цепочки. После чтения остаются распаковка, управление памятью, создание объектов и синхронизация потоков. SSD не ускорит код, который перегружает игровой поток уже после получения данных.
Почему NVMe не гарантирует ровный frame time
Переход с исправного SATA SSD на сверхскоростной NVMe не гарантирует чуда. Если пределом стали декомпрессия, работа CPU, передача ресурсов в VRAM или регистрация тысяч компонентов, дополнительная скорость чтения останется невостребованной.
Мощная видеокарта тоже не исправит перегруженный игровой поток, а более быстрый процессор не перепишет неудачно расставленные границы стриминга. Время всего маршрута определяет его самый медленный участок.
Как влияют RAM и VRAM
Когда свободной RAM или VRAM мало, игре приходится чаще выгружать одни ресурсы и возвращать другие. Это увеличивает объём перемещений и риск ожидания нужных данных. Поэтому полезно понимать, как объём VRAM связан с загрузкой игровых ресурсов.
Впрочем, большой буфер — лишь просторный чулан. Если дворецкий приносит каждую тарелку в последний момент и непременно через парадный зал, площадь чулана не спасёт ужин.
Что меняет Fast Geometry Streaming в Unreal Engine 5.8
Экспериментальный Fast Geometry Streaming, или FastGeo, занимается конкретной частью проблемы. Плагин преобразует геометрию разделённого мира в представление, оптимизированное для стриминга. Epic демонстрировала его в технической демонстрации The Witcher 4, а в UE 5.8 улучшила скорость, стабильность и поддержку разных сценариев.

Назначение сформулировано осторожно: быстрая загрузка статических объектов, не участвующих в геймплее, для огромных бесшовных миров. Именно «экспериментальный», именно «статических». Надпись на упаковке читается здесь.
FastGeo интересен не как чудотворец, а как попытка убрать часть бюрократии, сопровождающей прибытие тысяч камней, фонарей и заборов. Более удобное представление статической геометрии потенциально сокращает часть работы при её потоковой загрузке.
Но FastGeo не компилирует за разработчиков шейдеры, не чинит игровую логику, не увеличивает VRAM и не укрощает динамических персонажей. Его экспериментальный статус также не позволяет обещать появление технологии в конкретных играх или гарантированное снижение статтеров. Перед нами хороший новый гаечный ключ. Сам автомобиль он не собирает.
Что DirectStorage 1.4 ускоряет, а что остаётся на движке
DirectStorage 1.4 на момент подготовки материала доступен как публичная предварительная версия. Он добавляет поддержку формата сжатия Zstandard, или Zstd. Разработчики могут распаковывать подготовленные данные на CPU либо с помощью вычислительных шейдеров GPU. В зависимости от контента это позволяет уменьшить объём чтения и перенести часть работы с центрального процессора.
Вторая важная функция — поддержка глобального D3D12 CreatorID. DirectStorage может связать управляемые им очереди команд с идентификатором, чтобы драйвер корректнее учитывал их при планировании нагрузки GPU. Но «предсказуемее» не означает «бесплатно»: GPU-декомпрессия конкурирует с рендерингом за вычислительные ресурсы, пропускную способность и энергобюджет. Поэтому выигрыш зависит от игры и запаса производительности видеокарты, что отмечает и Tom’s Hardware.
И главное: DirectStorage — API, то есть программный интерфейс для разработчиков, а не турбокнопка Windows. Ресурсы надо подготовить при сборке игры, запросы — правильно организовать, способ декомпрессии — осмысленно выбрать. Обновление системы или подмена DLL не заставят старый проект внезапно воспользоваться Zstd. Microsoft предлагает интегрировать предварительные версии DirectStorage 1.4 и Game Asset Conditioning Library в конвейер производства контента. Ключевое слово — разработчикам.
Что игрок может проверить самостоятельно
Чтобы понять, можно ли убрать фризы в игре хотя бы частично:
- Найдите воспроизводимую точку и пройдите её несколько раз, наблюдая график frame time, а не только счётчик FPS.
- Повторите проверку после перезапуска и после длительного удаления от области. Рывок возле границы, возвращающийся после выгрузки данных, указывает на стриминг, но сам по себе ничего не доказывает.
- Сравните поведение разных эффектов. Однократный фриз при первом появлении нового материала, освещения или эффекта больше похож на компиляцию PSO.
- Перенесите игру с HDD на SSD. Между исправным SATA SSD и NVMe чудо менее вероятно, но сравнение полезно.
- Закройте тяжёлые фоновые задачи и проверьте, не заканчиваются ли RAM или VRAM.
- Уменьшите качество текстур, дальность прорисовки и плотность окружения. Снижение тяжёлых графических настроек также может оставить CPU или GPU запас времени для фоновой работы.
- Ограничьте FPS немного ниже устойчивого уровня. Это иногда смягчает пики, но не уничтожает их причину.
- Не вставляйте десятки «магических» строк в Engine.ini одновременно. Иначе получите новый статтер, сохраните его под именем «FIXFINAL3» и будете лечить уже собственное произведение.
Стоит также сопоставить конфигурацию с требованиями игры. Если проверка выявила ограничение локального накопителя, процессора или памяти, альтернативой апгрейду может стать облачный гейминг. Но сервер не устранит рывок, заложенный в самой игре: он лишь транслирует его с другого компьютера. Кроме того, сетевые задержки и нестабильное соединение могут добавить уже собственные подёргивания.
Если один и тот же фриз сохраняется после снижения настроек и встречается на разных подходящих конфигурациях, вероятнее всего, потребуется патч от разработчиков. Пользователь не может самостоятельно изменить момент запроса ресурсов, распределить создание объектов между кадрами или перестроить границы мира.
Смогут ли новые технологии убрать traversal stutter
FastGeo в Unreal Engine 5.8 потенциально ускоряет стриминг части статической геометрии. DirectStorage 1.4 способен сократить и упорядочить путь сжатых данных от накопителя к CPU или GPU. Оба инструмента атакуют реальные узкие места. Ни один не гарантирует ровного frame time.
Для победы разработчикам всё ещё надо заранее запрашивать ресурсы, разумно делить работу между кадрами, контролировать память, профилировать создание объектов и не устраивать на невидимой границе одновременный въезд леса, деревни, физики, оркестра и тридцати вооружённых граждан.
Так что будущее осторожно обнадёживает. Шов между областями может стать тоньше. Но если портной пьян, DirectStorage принесёт ему ткань быстрее, FastGeo подаст более удобную иглу — а брюки всё равно лопнут на самом интересном месте.