Найти в Дзене
Кибер на Спортсе

Зачем игры компилируют шейдеры? Копаемся под капотом графики

Неудобства во благо.

Запуская сегодня какой-нибудь свежий хит, мы все чаще встречаем на запуске некую «компиляцию шейдеров». В зависимости от комплектующих скорость процесса может отличаться, но он никогда полностью не исчезает. Так что же представляет собой эта компиляция и можно ли ее ускорить или отключить?

Если кратко: раз и навсегда шейдеры загрузить не получится, они будут заново компилироваться при установке патчей или обновлении драйверов. Но можно попробовать сократить процесс. На хардверном уровне поможет перенос игры с HDD на SSD. На софтверном – обновить драйверы видеокарты, изменить размер кэша драйверов, обновить игру и установить соответствующий мод.

А что такое шейдеры?

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

Какие шейдеры бывают:

• Вершинные шейдеры отвечают за обработку и деформацию 3D-моделей (их положение, масштабы вершин, etc). Например, за траву, покачивающуюся от ветра.

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

• Фрагментные шейдеры рассчитывают пиксели (текстуры, свет, тени, прозрачность). Проще говоря, шейдер отвечает за много визуальных деталей в кадре. Дым или отражения в луже – его работа.

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

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

-2

В первой половине 2000-х начали появляться игры, в системных требованиях которых было указано «кроме GeForce 4 MX», хотя GeForce 3 поддерживался. Когда я пытался запустить «Принца» или вторую часть Splinter Cell на своей GeForce 4 MX 440, то получал ошибку с отсутствием поддержки шейдеров. Игры тогда только начали освоение пиксельных (фрагментных) шейдеров, и бюджетные видеокарты просто не умели с ними работать.

📌 Самые безумные видеокарты в истории: 4090 на 48 Гб и беспроводная 15-летней давности

Почему шейдеры компилируются так долго и зачем это нужно

Компиляция шейдеров – перевод языка с кода игры в язык (инструкции) конкретной видеокарты. Большинство игр поддерживает несколько билдов шейдеров – для запуска на разных типах видеокарт. Именно поэтому процесс происходит при загрузке игры – необходимо подстроить «сырые» шейдеры под конкретный GPU. В процессе идет оптимизация под видеодрайверы. Софт Nvidia или AMD компилирует шейдеры под свою архитектуру. Такова фича ПК-игр.

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

-3

В Dead Island 2 (движок UE4) можно пропустить этап компиляции. Авторы предупреждают о возможных проблемах, хотя сам процесс загрузки занимает немного времени даже с HDD.

Этапы компиляции:

• Игра передает исходный код шейдера драйверу видеокарты. Код проверяется на наличие ошибок.

• Драйвер видеокарты компилирует его в промежуточный код под определенные технологии видеокарты (например, фичи RTX) и оптимизирует его. Удаляются лишние неиспользуемые или дублирующиеся компоненты, чтобы не нагружать видеокарту излишками.

• Получившийся код преобразуется в «родные» машинные инструкции для видеокарты.

• Результат кэшируется на HDD/SSD для повторного использования в будущем.

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

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

• Обновляйте драйверы: они зачастую оптимизируют компиляторы. Особенно в новинках.

• Установите игру на SSD: кэш шейдеров грузится гораздо быстрее, чем с HDD.

• Не удаляйте папку с кэшем шейдеров. Например, NV_Cache (для GeForce) или AMD/ShaderCache (для Radeon, соответственно).

• Не ограничивайте размер кэша шейдеров. Например, для видеокарт GeForce эту настройку можно найти в Панели управления Nvidia.

-4

Для некоторых игр энтузиасты собирают специальные моды, которые ускоряют или вовсе отключают компиляцию. Использовать их можно, однако с ними может возникнуть ряд графических неполадок в процессе игры: зависания, визуальные баги, проблемы с загрузками текстур или производительностью.

-5

Авторы Call of Duty любят компилировать шейдеры после каждого чиха. Если этого мало, то в настройках процесс можно запустить повторно.

Компиляция шейдеров в играх отличается

В зависимости от используемого движка отличается и алгоритм обработки шейдеров. Взять, к примеру, популярные универсальные движки – Unity и Unreal Engine.

Первый предпочитает компилироваться уже в процессе игры. Да, загрузка быстрая, однако игра получается ресурсоемкой, что сильно сказывается на производительности крупных проектов (например, Escape from Tarkov).

В UE обычно ситуация протиповоложная – после предварительной компиляции система разгружена и таскает необходимую графическую информацию из кэша. Движок также умеет загружать шейдеры на ходу, но итоговый результат может получиться сомнительным – ремастер The Elder Scrolls 4 Oblivion статтерит в том числе и по этой причине. Зато без компиляций при запуске.

-6

Разработчики игр все чаще используют гибридные методы, когда загружают обязательный минимум шейдеров при первом запуске, а дополнительные подгружают в процессе. Разница между методами хорошо заметна на примере портов обеих частей The Last of Us на ПК.

Первая часть сильно «отличилась» на релизе не только скверным техническим качеством, но и особенно затянутыми компиляциями шейдеров. Вторая – получилась более качественной, в том числе совершив прогресс в вопросе компиляции. Она никуда не делась, но разработчики из студии Nixxes Software учли проблемы предшественников (за порт первой игры отвечала Iron Galaxy) и интегрировали частичную компиляцию непосредственно в геймплей и кат-сцены. Получилось не идеально, но оптимально – лучше длительного залипания в черный экран.

-7

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

***

Гайд по обновлению BIOS – и для чего это вообще нужно

Radeon RX 9070 или GeForce RTX 5070 – что лучше?