
Зачем компилировать шейдеры при каждом заходе в игру?
Купил «Сталкер-2», играю в него на мощном железе: 4080 Super, i7-12700KF, 64 Гб ОЗУ.
И даже с такой конфигурацией игра при каждом включении полминуты подгружает шейдеры. Это проблема оптимизации или сборки моего ПК? Можно ли ее решить и загрузить эти несчастные шейдеры раз и навсегда?

Раз и навсегда шейдеры загрузить не получится: они будут заново компилироваться при установке патчей или обновлении драйверов. Но можно попробовать сократить этот процесс.
На хардверном уровне можно перенести игру с жесткого диска на SSD. На софтверном — обновить драйверы видеокарты, изменить размер кэша драйверов, обновить игру и установить соответствующий мод.
О чем вы узнаете
Зачем шейдеры компилируют и почему это занимает столько времени
Компиляция шейдеров нужна для перевода информации с языка игры на язык видеокарты. Внутри игры всегда несколько версий шейдеров. Например, карты с RTX получают один вариант отображения света, а без него — другой. Разработчики вставляют в билд игры оба варианта, но на конкретном ПК использоваться будет один.
Из-за этого компиляция шейдеров происходит только на ПК, поскольку в консолях применяют конкретные комплектующие, известные заранее. Если компиляция завершена с ошибками, во время игры графический процессор, GPU, может спотыкаться о некоторые текстуры, выдавать фризы и ошибки.
Не вдаваясь в подробности 3D-моделирования, процесс компиляции шейдеров выглядит так:
- Предварительная обработка. Подготовительный этап, на котором данные готовятся к обработке.
- Синтаксический анализ. Код шейдера проверяется на ошибки, система ищет замену поврежденным файлам в образе игры, если возникают проблемы.
- Оптимизация. Из кода удаляются дублирующиеся операции, неиспользуемые переменные и другие компоненты, которые замедляют его работу. Это нужно, чтобы видеокарте, которая будет отрисовывать графику, было проще работать.
- Генерация машинного кода. Облеченный код преобразуется в машинный, который понимает видеокарта.
Как ускорить компиляцию шейдеров
Сократить компиляцию шейдеров по времени при первом запуске игры не получится: образ подбирает их под конкретную конфигурацию ПК. Но можно ускорить последующие компиляции. Для этого:
- Перенесите игру на SSD.
- Обновите драйверы видеокарты. Иногда производители GPU выпускают драйверы для определенных игр. Например, Nvidia делала так для Stalker 2 и Flight Simulator.
- Измените размер кэша шейдеров. Для видеокарт NVIDIA эта настройка располагается в 3D → «Размер кэша шейдеров» → «Без ограничений».
- Скачайте мод. Например, у Stalker 2 есть специальный No Shader Warmup.
- Обновите игру.

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

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

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

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

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

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