Фризи компіляції шейдерів: чому найгірші саме перші хвилини

Чому гра ривкує на всьому, що показує тобі вперше, чому оновлення драйвера повертає це все назад і чому видалення кешу шейдерів — те єдине «виправлення», яке гарантує, що ти заплатиш за це ще раз.

Ти запускаєш гру, у яку давно не грав, і перші десять хвилин жахливі. Кожна нова зброя, кожен новий ефект, перша поява певного ворога — ривок. Потім усе вгамовується, і до другого вечора гра йде плавно. Нічого з того, що ти змінив, цього не зробило. Це зробив час.

Або інша версія: гра йшла нормально, ти оновив драйвер відеокарти — і вся перша година знову нерівна.

Це той самий механізм, і це одна з небагатьох причин фризів, яка справді нормальна — у тому сенсі, що здорова машина з правильним програмним забезпеченням дає її сама.

Чому цю роботу мусить робити саме твоя машина

Шейдер — це маленька програма, яка виконується на відеокарті. Розробник гри пише її високорівневою мовою і компілює, але лише частину шляху — до проміжної форми, яка описує, що програма робить, а не як саме це має робити конкретний графічний чип.

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

Тож коли сцена вперше потребує певної комбінації шейдера, стану рендеру й розкладки вершин, щось доводиться скомпілювати. Якщо гра просить це посеред кадру й чекає, той кадр запізнюється. Цей запізнілий кадр і є той ривок, який ти відчув.

Результат записується в кеш шейдерів на диску. Коли те саме з'являється вдруге, скомпільований код читається з кешу, а не будується заново, — і саме тому гра стає кращою, поки ти граєш, і саме тому другий сеанс уже нормальний.

Що відкидає тебе на початок

Кеш дійсний лише для того драйвера й того заліза, які його побудували. Будь-що з цього списку знецінює його, повністю або частково, і перша година гри знову нерівна:

Жодне з цього не є несправністю. Це ціна того, що кеш правильний, а не застарілий.

Як зрозуміти, що в тебе саме це

Компіляція шейдерів має впізнаваний відбиток і не схожа на жодну іншу позицію зі списку причин фризів:

  1. Воно згасає. Це визначальна ознака. Якщо на третій годині фризи такі самі, як на третій хвилині, то це не воно.
  2. Воно прив'язане до новизни. Перша поява зброї, зони, погодного ефекту, певного ворога. Той самий коридор удруге проходиться чисто.
  3. Воно не зважає на температуру й тривалість сеансу. Теплові проблеми гіршають, що довше ти граєш; це — навпаки, кращає.
  4. Воно повертається за розкладом, який ти можеш назвати — після оновлення драйвера, після патча, після очищення, — а не випадково.
  5. Завантажена частина — не відеокарта. Компіляція — це робота процесора. Відеокарта, що під час цих ривків тримається помітно нижче за повне завантаження, тут очікувана й не є доказом окремої проблеми, описаної в раптові просідання FPS в іграх.

Якщо ці п'ять пунктів не описують твій симптом, повертайся до загального списку в чому ігри фризять на Windows 11 — тамтешні причини самі по собі не згасають.

Що з цим робити

Здебільшого — дати цьому статися. Але по краях є й справжні варіанти вибору.

Не видаляй кеш шейдерів як виправлення. Це та єдина порада на цій сторінці, яку варто прочитати двічі. Очищення кешу постійно приписують як ліки від фризів, а насправді воно гарантує, що ти заплатиш повну вартість компіляції ще раз, із нуля. Це законний крок діагностики при візуальних артефактах після зміни драйвера. І це протилежність виправленню продуктивності.

Користуйся власним кроком попередньої компіляції гри, якщо він є, і не пропускай його. Гра, яка дві хвилини тримає екран «компіляція шейдерів» перед меню, робить саме цю роботу наперед — там, де вона коштує тобі лише очікування.

Після оновлення драйвера лиши машину ввімкненою на якийсь час. Деякі драйвери перебудовують шейдери DirectX 12, поки система простоює, саме для того, щоб середовище виконання робило цього менше згодом. Це допомагає лише тоді, коли машина справді отримує час простою.

Тримай гру та її кеш на SSD і поза синхронізованою папкою. Хмарний клієнт стежить за кожним записом, а гра пише свій кеш шейдерів постійно — кожен запис перетворюється на роботу драйвера-фільтра плюс вивантаження тим самим з'єднанням, яким користується твій матч.

Не вимірюй усередині цього вікна. Запис, знятий у перші хвилини після оновлення драйвера, вимірює компілятор, а не драйвер. Як читати результат бенчмарку охоплює правила порівняння; так легко випадково порушити перше з них.

Що про це каже сканування

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

Це навмисно не подається як несправність, яку треба лагодити. Лагодити нема чого — є вартість, яку платять один раз, і найчесніше, що може зробити інструмент, — це сказати тобі, що ти всередині неї, щоб ти не витратив вечір на звинувачення якогось налаштування.

Де це перестає бути нормальним

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

А якщо прогін нерівний увесь час, а не лише на початку, то ти дивишся натомість на високий середній FPS, але погані 1% low — це проблема подій, а не розігріву.

Пов'язане

Граєш у CS2? Які параметри запуску ще щось роблять і де в меню відео насправді лежать кадри: Низький FPS і фризи в CS2: виміряний контрольний список

w0a не змінює жодного налаштування Windows, поки ти не попросиш, а твік зберігає старе значення, перш ніж записати нове. Бути в курсі

Ця сторінка допомогла?

Чого бракувало або що не спрацювало? Ми читаємо кожну таку відповідь.

Якщо ця сторінка не розв'язала проблему, напиши нам — скажи, яку статтю ти читав, і ми виправимо статтю.