Фризы компиляции шейдеров: почему первые минуты самые тяжёлые

Почему игра рвётся на всём, что показывает тебе впервые, почему обновление драйвера возвращает всё это обратно и почему удаление кэша шейдеров — то самое «решение», которое гарантирует, что ты заплатишь за него ещё раз.

Ты запускаешь игру, в которую давно не играл, и первые десять минут ужасны. Каждое новое оружие, каждый новый эффект, первое появление конкретного противника — рывок. Потом всё устаканивается, и ко второму вечеру игра идёт плавно. Это сделало не то, что ты поменял. Это сделало время.

Или другая версия: с игрой всё было в порядке, ты обновил драйвер видеокарты — и весь первый час снова рваный.

И то и другое — один и тот же механизм, и это одна из немногих причин фризов, которая по-настоящему нормальна: её выдаёт здоровая машина с исправным софтом.

Почему эта работа обязана происходить на твоей машине

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

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

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

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

Что отбрасывает тебя в начало

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

Ничто из этого не является неисправностью. Это цена того, что кэш остаётся верным, а не устаревшим.

Как понять, что у тебя именно это

У компиляции шейдеров узнаваемый почерк, и ни на что другое из списка причин фризов она не похожа:

  1. Оно сходит на нет. Это определяющий признак. Если на третьем часу фризит так же, как на третьей минуте, — это не оно.
  2. Оно привязано к новизне. Первый вид оружия, области, погодного эффекта, конкретного противника. Второй проход по тому же коридору чистый.
  3. Оно не зависит ни от температуры, ни от длительности сессии. Проблемы с нагревом становятся хуже, чем дольше ты играешь; это — лучше.
  4. Оно возвращается по расписанию, которое ты можешь назвать — после обновления драйвера, после патча, после очистки, — а не случайно.
  5. Занята не видеокарта. Компиляция — работа процессора. Видеокарта, сидящая заметно ниже полной загрузки во время этих рывков, здесь ожидаема и не является свидетельством отдельной проблемы, описанной в Внезапные просадки FPS в играх.

Если эти пять пунктов твой симптом не описывают, вернись к общему списку в Почему игры фризят на Windows 11: тамошние причины сами по себе не сходят на нет.

Что с этим делать

В основном — дать этому случиться. Но по краям есть и настоящий выбор.

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

Пользуйся собственным шагом предкомпиляции игры, если он у неё есть, и не пропускай его. Игра, которая перед меню две минуты держит экран «компиляция шейдеров», делает ровно эту работу заранее — там, где она не стоит тебе ничего, кроме ожидания.

После обновления драйвера оставь машину включённой на какое-то время. Некоторые драйверы пересобирают шейдеры DirectX 12, пока система простаивает, — как раз чтобы потом среда исполнения делала это меньше. Помогает это только в том случае, если машине достаётся время простоя.

Держи игру и её кэш на SSD и вне синхронизируемой папки. Облачный клиент следит за каждой записью, а игра пишет свой кэш шейдеров постоянно — каждая запись превращается в работу драйвера-фильтра плюс отправку по тому же соединению, которым пользуется твой матч.

Не измеряй внутри этого окна. Запись, снятая в первые минуты после обновления драйвера, измеряет компилятор, а не драйвер. Как читать результаты бенчмарка разбирает правила сравнения; так легко случайно нарушить первое из них.

Что об этом говорит сканер

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

Это намеренно подаётся не как неисправность, которую надо чинить. Чинить нечего — есть цена, которую платят один раз, и самое честное, что может сделать инструмент, — сказать тебе, что ты сейчас внутри неё, чтобы ты не потратил вечер на обвинение какой-нибудь настройки.

Где это перестаёт быть нормой

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

А если прогон неровный на всём протяжении, а не только в начале, то смотреть надо Высокий средний FPS, но плохие 1% low: это проблема события, а не прогрева.

Похожие статьи

Играешь в CS2? Какие параметры запуска ещё что-то делают и где в меню видео на самом деле лежат кадры: Как повысить FPS в CS2 и откуда берутся микрофризы: чек-лист по замерам

w0a не меняет ни одной настройки Windows, пока ты не попросишь, а твик сохраняет старое значение, прежде чем записать новое. Сообщить мне

Эта страница помогла?

Чего не хватило или что не сработало? Мы читаем каждый такой ответ.

Если эта страница не решила проблему, напиши нам — скажи, какую статью ты читал, и мы её исправим.