Зачем компили­ровать шейдеры при каждом заходе в игру?

2
Аватар автора

Орлетос

спросил в Сообществе

Купил «Сталкер-2», играю в него на мощном железе: 4080 Super, i7-12700KF, 64 Гб ОЗУ.

И даже с такой конфигурацией игра при каждом включении полминуты подгружает шейдеры. Это проблема оптимизации или сборки моего ПК? Можно ли ее решить и загрузить эти несчастные шейдеры раз и навсегда?

Ненавистный экран
Ненавистный экран
Аватар автора

Антон Копылов

дождался компиляции шейдеров

Страница автора
Аватар автора

Стас Зверянов

пересчитал каждый фотон света в кадре

Страница автора

Раз и навсегда шейдеры загрузить не получится: они будут заново компилироваться при установке патчей или обновлении драйверов. Но можно попробовать сократить этот процесс.

На хардверном уровне можно перенести игру с жесткого диска на SSD. На софтверном — обновить драйверы видеокарты, изменить размер кэша драйверов, обновить игру и установить соответствующий мод.

Что такое шейдеры и зачем они нужны в играх

Зачем шейдеры компилируют и почему это занимает столько времени

Компиляция шейдеров нужна для перевода информации с языка игры на язык видеокарты. Внутри игры всегда несколько версий шейдеров. Например, карты с RTX получают один вариант отображения света, а без него — другой. Разработчики вставляют в билд игры оба варианта, но на конкретном ПК использоваться будет один.

Из-за этого компиляция шейдеров происходит только на ПК, поскольку в консолях применяют конкретные комплектующие, известные заранее. Если компиляция завершена с ошибками, во время игры графический процессор, GPU, может спотыкаться о некоторые текстуры, выдавать фризы и ошибки.

Не вдаваясь в подробности 3D-моделирования, процесс компиляции шейдеров выглядит так:

  1. Предварительная обработка. Подготовительный этап, на котором данные готовятся к обработке.
  2. Синтаксический анализ. Код шейдера проверяется на ошибки, система ищет замену поврежденным файлам в образе игры, если возникают проблемы.
  3. Оптимизация. Из кода удаляются дублирующиеся операции, неиспользуемые переменные и другие компоненты, которые замедляют его работу. Это нужно, чтобы видеокарте, которая будет отрисовывать графику, было проще работать.
  4. Генерация машинного кода. Облеченный код преобразуется в машинный, который понимает видеокарта.
А вот ответ конкретно на ваш вопрос: за полминуты компиляцию можно отключить вовсе

Как ускорить компиляцию шейдеров

Сократить компиляцию шейдеров по времени при первом запуске игры не получится: образ подбирает их под конкретную конфигурацию ПК. Но можно ускорить последующие компиляции. Для этого:

  1. Перенесите игру на SSD.
  2. Обновите драйверы видеокарты. Иногда производители GPU выпускают драйверы для определенных игр. Например, Nvidia делала так для Stalker 2 и Flight Simulator.
  3. Измените размер кэша шейдеров. Для видеокарт NVIDIA эта настройка располагается в 3D → «Размер кэша шейдеров» → «Без ограничений».
  4. Скачайте мод. Например, у Stalker 2 есть специальный No Shader Warmup.
  5. Обновите игру.
Будьте бдительны: неограниченный размер кэша рано или поздно займет весь накопитель
Будьте бдительны: неограниченный размер кэша рано или поздно займет весь накопитель

Почему компиляция шейдеров зависит от игры

Разработчики игр используют разные движки, которые содержат свои алгоритмы работы с шейдерами.

Например, в Unity компиляция происходит в процессе использования. Это ускоряет загрузку, но, если шейдеров много или они зависимы друг от друга, время и нагрузка на комплектующие увеличиваются.

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

Шейдеры также компилируют при первом запуске заранее, но для этого требуется больше времени, поэтому в мультиплеерных играх от этого варианта отказываются. Ведь пространство в них меняется в реальном времени с перемещением игрока.

Вот почему практически во всех проектах используют гибридный формат: загружают необходимый набор шейкеров при первом запуске и подгружают дополнительные в местах перехода в другие локации.

Видео на 10 минут для тех, кому лень было читать материал

Пять современных игр, которые не требуют компиляции при каждом запуске

Kingdom Come: Deliverance 2

Чешская RPG от Warhorse Studios работает на движке CryEngine и выделяется отличной оптимизацией. При этом в игре большой открытый мир, множество геймплейных механик, завязанных на поведении NPC, и великолепная графика

Forza Horizon 5

Главная аркадная гонка современности. В Мексике проходит масштабный автомобильный фестиваль Horizon, а действие разворачивается в огромном открытом мире со множеством испытаний и секретов. Игра работает на кастомном движке Playground Studios, а загрузки здесь чуть ли не мгновенные

Star Wars: Jedi Survivor

На релизе экшен по «Звездным войнам» критиковали за не самую лучшую оптимизацию, но сейчас игра хорошо идет даже на Steam Deck. Unreal Engine 4 обеспечивает плавную частоту кадров при отличной картинке, а шейдеры загружаются всего один раз

Ratchet & Clank: Rift Apart

В ярком экшен-платформере от Insomniac используют мгновенные загрузки для телепортации между уровнями. Визуально игра не уступает последним мультфильмам Pixar и выделяется отличной оптимизацией

Indiana Jones and the Great Circle

В недавней игре про Индиану Джонса используют новейшую версию idTech Engine, на котором работают последние части Doom. Благодаря этому она запускается в стабильных 60 FPS даже на относительно слабой Xbox Series S и не требует компиляции шейдеров на среднебюджетных ПК

Что в итоге

Самый простой вариант ускорить компиляцию шейдеров — обновить жесткий диск и перенести игру на SSD. Во вторую очередь обновите драйверы видеокарты и установите последние патчи от разработчиков. В конкретных играх поможет установка модов.

Антон КопыловРасскажите, чем занимаетесь, пока приходится ждать компиляции шейдеров:
  • беспонтовый пирожокПорадовала скорость компиляции шейдеров во второй части Одних из нас, особенно в сравнении с первой частью на пк.0