Бесплатная утилита 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 распространяется в двух вариантах, в виде установщика и портативного билда.
- Моддер заменяет всех персонажей Final Fantasy 7 Rebirth на их оригинальные модели из 1997 года
- Оригинальная Final Fantasy 7 получила новое переиздание в Steam с несколькими современными улучшениями
- Директор Final Fantasy 7 Remake сообщил о финальной стадии разработки третьей части – релиз на всех платформах сразу не скажется на графическом качестве игры