Epic объяснила причины подтормаживания игр на Unreal Engine и предложила решения

Если сказать любому поклоннику игр на ПК сочетание Unreal Engine, есть высокая вероятность, что он подумает о качественной графике, которую можно увидеть в таких играх, как Black Myth: Wukong, Senua’s Saga: Hellblade II и A Plague Tale: Requiem. Однако есть еще кое-что, что часто связывают с Unreal Engine — это фризы или “статтеринг”. Если вы задаетесь вопросом, почему они происходят, разработчики UE подробно объяснили причину и рассказали, как они с этим разбираются.

Начнем с основ. Шейдеры — это небольшие блоки кода, используемые для рендеринга графики, выполняющие конкретные задачи. Это может быть перемещение треугольника по экрану или вычисление цвета пикселя с учетом источников света, материалов и эффектов.

Unreal Engine предоставляет возможности разработки игр с использованием C++ или визуальных блоков кода под названием Blueprints. Чтобы упростить создание графики, используются API вроде Direct3D или Vulkan, преобразующие простую команду в набор более сложных инструкций для графического процессора.

Однако GPU не понимает команды напрямую, поэтому драйверам приходится компилировать шейдеры в понятный для видеокарты формат. В современных 3D-играх таких шейдеров могут быть десятки тысяч, и если их компиляция происходит во время игры, процессор может кратковременно перегружаться, вызывая резкое падение FPS — именно это и называют статтерингом.

Epic объясняет механизм этой проблемы:

Для рендеринга объекта требуется несколько шейдеров (например, вершинный и пиксельный шейдер), а также настройки GPU — режим отсечения, смешивания и другие параметры. Иногда драйвер начинает компилировать шейдеры только при обработке команды рисования, что может занимать десятки миллисекунд и приводить к долгим кадрам.

Чтобы уменьшить фризы, в Unreal Engine до версии 5.2 рекомендовали собирать ключевые PSO (Pipeline State Objects) в кэш при запуске игры или загрузке уровня. Однако это требовало значительных ресурсов и не подходило для игр с динамическим контентом.

Решение проблемы

Epic внедрила систему предварительного кэширования PSO в новых версиях UE.

Когда объект загружается, система анализирует его материалы и вычисляет подмножество возможных PSO, которые могут быть использованы для его рендеринга. Это подмножество меньше полного набора, что позволяет компилировать их во время загрузки игры. Например, в Fortnite компилируется около 30 000 PSO на матч, из которых используется около 10 000.

Но Epic признает, что эта система пока не идеальна. Глобальные шейдеры, используемые для постобработки (например, размытие в движении), пока не могут полностью кэшироваться, что иногда вызывает единичные фризы.

Epic также работает над сокращением объема PSO-кэша в памяти и оптимизацией его хранения. Разработчикам советуют использовать последние версии UE, регулярно профилировать PSO и избегать перехода на DirectX 11, так как он менее эффективен в борьбе с фризами.

Хотя Epic признает проблему с опозданием, решение все же существует. Возможно, в будущем крупные релизы смогут выходить без раздражающих статтеров, и провалы в играх, вроде Star Wars Jedi: Survivor останутся в прошлом.

Leave a comment

Discord

Наш дискорд сервер

Telegram

Мы в Telegram

AWKA.IO © 2012-2025 Все права защищены. Пользовательское соглашение  |  Контакты  |  О нас | Отказ от ответственности | Полное или частичное копирование материалов сайта без согласования с редакцией запрещено.|

Мы используем cookie, чтобы собирать статистику и делать контент более интересным. Также cookie используются для отображения более релевантной рекламы. Вы можете прочитать подробнее о cookie-файлах и изменить настройки вашего браузера.


Перейти к верхней панели