Найти в Дзене
4pda.to

Создатели Unreal Engine раскрыли главную проблему движка и способ её решения

Движок Unreal Engine принёс миру не только хорошую графику и упрощение разработки, но и множество фризов, статтеров и шуток про оптимизацию. Epic Games рассказала, в чём главная проблема движка. Создатели движка Unreal Engine выпустили пост, в котором подробно рассказали об основной проблеме, с которой сталкиваются пользователи, — это статтеры (подвисания). Во всём виноваты шейдеры — части кода, используемые при рендеринге графики. При этом код, поступающий на обработку видеокартой, часто оказывается несовместим с её чипами — для решения этого используются DirectX или Vulkan, преобразующие код в более доступные команды, которые воспримет нужная видеокарта, будь то от NVIDIA или AMD. Однако в современных играх на UE шейдеров могут быть десятки тысяч, а каждому из них нужно создать и отправить собственную команду. Когда это происходит во время игры, возникают подвисания. Решением этой проблемы авторы Unreal Engine считают систему предварительного кэширования PSO (Pipeline State Objects),
   Создатели Unreal Engine раскрыли главную проблему движка и способ её решения
Создатели Unreal Engine раскрыли главную проблему движка и способ её решения

Движок Unreal Engine принёс миру не только хорошую графику и упрощение разработки, но и множество фризов, статтеров и шуток про оптимизацию. Epic Games рассказала, в чём главная проблема движка.

-2

Создатели движка Unreal Engine выпустили пост, в котором подробно рассказали об основной проблеме, с которой сталкиваются пользователи, — это статтеры (подвисания). Во всём виноваты шейдеры — части кода, используемые при рендеринге графики. При этом код, поступающий на обработку видеокартой, часто оказывается несовместим с её чипами — для решения этого используются DirectX или Vulkan, преобразующие код в более доступные команды, которые воспримет нужная видеокарта, будь то от NVIDIA или AMD. Однако в современных играх на UE шейдеров могут быть десятки тысяч, а каждому из них нужно создать и отправить собственную команду. Когда это происходит во время игры, возникают подвисания.

Решением этой проблемы авторы Unreal Engine считают систему предварительного кэширования PSO (Pipeline State Objects), добавленную в UE 5.2. Вместо того чтобы загружать на старте игры или уровня все ключевые объекты и их шейдеры (для чего нужно было долго тестировать тайтл, и в итоге кэш был огромным), новая система вычисляет группу возможных PSO, которые затем использует для рендеринга. Система учитывает материалы на объектах и информацию о меше (анимированных или статичных предметах), а также графические настройки. Из-за этого получается широкая выборка шейдеров, которая при этом не содержит абсолютно все шейдеры уровня или игры.

Например, в Fortnite более 30 тысяч PSO, но в матче используется только 10 тысяч. Благодаря этому, основные объекты будут загружаться во время начала матча, а новые и динамичные детали — в процессе, до этого используя уже прогруженные «заглушки». Авторы Unreal Engine считают, что такой подход поможет сократить количество статтеров и улучшит скорость загрузки шейдеров.