Техноблогеры объявили войну плохой оптимизации игр на ПК

Сегодня, 9 февраля 2022 года, эпатажный техноблогер Лайнус Себастиан с каналов Linus Tech Tips и Techquickie совместно с Digital Foundry (отделение Eurogamer, специализирующееся на технической стороне видеоигр) объявили войну плохой оптимизации игр на ПК, обличив все проблемы данной платформы.

Самый яростный удар был нанесён по так называемой "компиляции шейдеров". Если коротко, шейдер, по сути, это программа выполняемая на гпу, выходными данными которых является разная информация. В вершинных шейдерах — это параметры вершин меша. Пиксельные шейдеры выполняются попиксельно. Компиляция — это перевод человеческого кода в машинный.

Как отмечает Лайнус, на консолях такой проблемы нет, потому что железо уже известно. Шейдеры там скомпелированы заранее и уже хранятся в каталоге. Игра просто обращается к ним.

На ПК же, из-за огромной вариативности комплектующих, шейдеры нужно индивидуально компилировать под каждое уникальное железо.

Есть два способа это сделать — сразу при первом запуске игры. Это занимает какое-то время. Зато взамен вы получаете абсолютно плавный опыт работы игры. Из самых больших минусов, делать компиляцию придётся каждый раз после обновления драйверов и каждого нового патча игры (привет Warzone и COD).

Второй способ — это компилировать шейдеры прямо во время игры. Каждый раз, когда встречается новый шейдер. И тут начинаются проблемы. В момент компиляции шейдеров игра начинает "подлагивать" из-за слишком сильной нагрузки на подсистему памяти и процессор. Лаг, или как это ещё называют — "статтер", может длиться как несколько миллисекунды и быть незаметным без мониторинга с графиками, так и длиться целые секунды. Что уже сильно раздражает. Загвоздка здесь в том, что уникальные шейдеры в игре могут попадаться на протяжении всей игры. В каждом уровне. На каждой новой локации. К сожалению, из-за долгого ожидания первого запуска игры в первом способе, многие разработчики предпочитают второй.

Пример статтеров при компиляции шейдеров
Пример статтеров при компиляции шейдеров

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

Масла в огонь подливает тот факт, что раньше данная проблема не была столь выражена. Она начались после перехода на новое API от Microsoft — DirectX 12. Теперь статтеры в играх встречаются значительно чаще. Но у DX12 есть и преимущества.

Следующим пунктом Лайнус отметил крайне неэффективное использование подсистемы памяти на ПК для игр. Сначала данные из дискового устройства загружается в оперативную память, потом уже в видеопамять. И всё это с запросами к ЦП со стороны видеокарты.

На консолях же единый пул памяти и видеокарта может обращаться к данным в обход процессора. Windows имеет схожую технологию — Direct Storage. Но она всё ещё не появилась в публичном доступе и игры нужно будет специально затачивать под работу с ней.

Техноблогеры объявили войну плохой оптимизации игр на ПК

Пример данного недостатка Лайнус продемонстрировал на God Of War 2018 года. Так, с менее мощным процессором мы получаем просадки фпс из-за подгрузки уровней. Слабый процессор просто не успевает обрабатывать столько данных.

Слабый процессор хуже справляется с подгрузкой уровня
Слабый процессор хуже справляется с подгрузкой уровня

Последний негативный аспект можно отнести и к консолям — неэффективное использование многоядерности современных процессоров. Игры, в основном, нагружают лишь одно ядро. В Far Cry 6 видно, что из-за излишней нагрузки одного ядра появляются статтеры при быстром перемещении по отрытому миру.

Слишком много для одного ядра
Слишком много для одного ядра

Частично ситуацию исправляет DirectX 12, который позволяет использовать при отрисовке кадров более одного ядра процессора. И технология Async Compute. С ней видеокарта берёт на себя часть вычислений, таким образом снижая нагрузку с ЦП. Плюс, меняет и оптимизирует конвейер построения кадра. Если раньше вычислительная нагрузка производится только после графической, теперь это может делаться параллельно. Но Async Compute доступно только в DirectX 12.

Справа Async Compute
Справа Async Compute

Также относительно недавно Alexander Battaglia из Didgital Foundry в одном из видео пообещал более детально разобраться со статтерами в играх при использовании DirectX 12 и Unreal Engine 4.

Похоже, недовольство из-за отсутствия плавности в играх набирает обороты. Посмотрим, как на это отреагирует Microsoft и разработчики видеоигр. Также, возможно, мы наконец выясним, чья это вина — криворуких разработчиков игр или криворукого API.

405405
338 комментариев
100 ₽

Мир, если разработчики начнут оптимизировать игры под ПК.

212
Ответить

Так, с менее мощным процессором мы получаем просадки фпс из-за подгрузки уровней. Слабый процессор просто не успевает обрабатывать столько данных.Аналитика на грани фантастики просто.

227
Ответить

А на PS4 с никакущим процессором - успевает. Посыл понятен?

9
Ответить