Бесплатная утилита SCSKiller сократила число фризов из-за компиляции шейдеров с 9038 до 11

Энтузиаст под ником BlueHeisenberg выпустил SCSKiller (Shader Compilation Stutter Killer), бесплатную утилиту с открытым исходным кодом. Она борется с одной из самых распространённых проблем современных ПК-игр, статтерами из-за компиляции шейдеров и объектов состояния конвейера (Pipeline State Object, PSO). Эти микрофризы годами портят впечатление от крупных тайтлов, включая игры на Unreal Engine.

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

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

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

На момент публикации утилита поддерживает видеокарты NVIDIA и AMD в играх на DirectX 12, а также игры на DirectX 11 на железе NVIDIA. Владельцам видеокарт Intel пока придётся подождать. SCSKiller автоматически находит игры, установленные через:

  • Steam

  • Epic Games Store

  • EA App

  • GOG

  • Ubisoft Connect

  • приложение Xbox для ПК

  • Battle.net

Для случаев, когда часть конвейеров невозможно определить по файлам игры, предусмотрен опциональный режим записи. Он фиксирует PSO во время игровой сессии, после чего SCSKiller компилирует их, и при следующих запусках задержек уже не возникает.

Собственные тесты разработчика показали заметный эффект. Замеры проводились на RTX 5090 с "холодным" кэшем шейдеров, учитывались задержки длительностью 20 мс и более:

  • FINAL FANTASY VII Rebirth – 19 задержек до обработки и ноль после

  • Hogwarts Legacy – снижение с 1014 до 87

  • Star Wars Jedi: Survivor – снижение с 9038 до 11

Журналисты Wccftech самостоятельно проверили утилиту на FINAL FANTASY VII Rebirth от Square Enix. Встроенный этап компиляции шейдеров в игре довольно короткий и явно не охватывает всё, что встречается в процессе прохождения. SCSKiller, в свою очередь, сгенерировал для игры около 3 ГБ бинарных файлов PSO для видеокарт NVIDIA.

После обработки статтеры из-за компиляции шейдеров, характерные для Rebirth, практически исчезли. Разница особенно ощущалась при перемещении по новым областям и первом появлении эффектов, которые раньше вызывали рывки на пустом кэше. В частности, пропали фризы при первом срабатывании эффектов оружия.

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

SCSKiller доступна в официальном репозитории на GitHub. Нынешняя версия 1.2.0 распространяется в двух вариантах, в виде установщика и портативного билда.

Больше статей на Shazoo
Тэги:

Об авторе

Эксперт по Fallout
Главный редактор
Более 16 лет в индустрии освещения видеоигр, кино, сериалов, науки и техники. Особенно разбираюсь в серии Fallout, ценитель The Elder Scrolls. Поклонник Arcanum и Fallout Tactics. Больше всего играю в Civilization, Old World и градостроители. Изучаю ИИ и загадки космоса.