Статтеры! Откуда они взялись? Неужели DX11 лучше DX12? И что нас ждет с будущем. Краткий рассказ от разраба для игрока

Статтеры! Откуда они взялись? Неужели DX11 лучше DX12? И что нас ждет с будущем. Краткий рассказ от разраба для игрока

Привет, DTF! Я потратил последние несколько дней на то, чтобы разобраться, что там еще можно классного оптимизировать в моей игре Mainland и наткнулся на совсем свежую информацию о будущем для статтеров в играх. Будет краткая история темы и немного технических вещей. Залетаем!

Статтеры

Для начала разберемся, что вообще такое статтеры

Классические "статтеры" в любой игре
Классические "статтеры" в любой игре

Игроки называют статтерами любое подтормаживание в игре, без разницы чем оно вызвано. Обычно они возникают черт знает когда и ломают удовольствие от игры, выбивая из процесса. А если их много, то это может привести и к удалению игры с гневными отзывами в стиме.
С технической точки зрения, статтер это какая-либо долгая операция, которая занимает больше времени, чем хотелось бы (что и показывают пики на картинке выше).
Можете это представить в виде очереди, в которую затесался охрененно медленный тип, который занимает времени как 5 человек до него и раздражает всех позади. Обойти вы его не можете, бить тоже вряд ли, так что вы просто ждете и злитесь, как и все остальные. Пока он не закончит свои дела, вы его никуда не денете.
Вот и статтеры - такие же. Они занимают место в треде CPU или GPU и не позволяют другим задачам выполняться, ведь они тяжелые и им нужно время.

"Но ведь статтеров раньше же не было" - скажут игроки.

Не было ведь?
Не было ведь?

Статтеры были всегда, просто о многих из них мы уже и забыли. Тут тот же эффект, как если вы зайдете в игру, в которую играли в детстве, а она, оказывается, вообще не такая, какой вы помните.
И все же, статтеры и правда стали гораздо заметнее чем ранее. Но почему?

Dx11 vs Dx12

Отвлечемся от статтеров ненадолго и заглянем в другой важный холивар современных игр. Я не раз видел заявления о том, что 11 был лучше 12. В минимальном формате это выражается в нежелании переходить на игры с 12, а в максимальном - в призывах вообще вернуться на старые способы разработки и отказаться от 12. Шиза ли это? Конечно, ведь заявляющие вряд ли знают реальную причину такой разницы между 11 и 12.

11 и 12 различаются в ряде важных технических вещей. Нас интересует конкретно одна - измененное API для работы с GPU.
11 версия, по сути, требовала от разработчиков драйверов видеокарт запариваться над тем, как там что будет рисоваться под капотом. То есть все игровые движки имели только довольно поверхностную связь с железом и потому не имели контроля над этим процессом.

А вот 12 был создан как раз с широким доступом к тому, что же там "под капотом". Правда, долгое время шейдеры (упрощенно, это то, что определяет внешний вид всего в игре) были все еще простыми и проблем не возникало. Но простота не вечна, и вот игры и шейдеры становились все сложнее. А научить движок нормально работать с новым API оказалось не так просто.

И вот тут то мы и получили "прекомпиляцию шейдеров". Дело в том, что в зависимости от настроек графики, видеокарты (и даже от версии драйвера) шейдеры становятся немного разными. А компилировать их надо. И нашлось простое решение - давайте компилировать все в главном меню, а уже потом пускать игрока поиграть :)

Не украл картинку, а заюзал опенсорс :)
Не украл картинку, а заюзал опенсорс :)

Да. Мы получили компиляцию шейдеров, потому что эту задачу перевалили на разрабов игр, а они слегка подзабили на это и сделали самое простое решение, которое нашли.

Таким образом получается, что DX11 не лучше DX12, а хуже. Он дает куда больше возможностей, но мы все знаем, что приходит вместе с большой силой.

Так, а что будет то?

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

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

Одно из относительно новых, но перспективных направлений есть в UE5. Да, иронично, ведь именно UE получал больше всего претензий за это и не зря. Эпики без дела не сидели и продолжают улучшать систему PSO, которая позволяет отметить, какие шейдеры "скорее всего" игрок скоро встретит. Это дает видеокарте возможность аккуратно подготовить их до того, как игрок их встретит, а значит количество статтеров снижается критически. + это делается на стороне разрабов, а значит ждать компиляции при запуске не надо.
Из минусов - в идеале все еще надо "прогреть" PSO на запуске и первая загрузка уровня может длиться дольше. Первая не за игровую сессию, а вообще в целом. Далее результат кешируется и делать все заново не нужно, пока не придет новое обновление игры или железа.

Казалось бы, а зачем мы вообще отказались от старого пайплайна, который вроде как работал?
Работал то да, но с движением в "виртуализацию" контента в играх старый подход просто перестал вывозить. Ничего из новых технологий тех же Эпиков (да и многих других движков) не пойдет на DX11. Да, у нас все еще много игр, поддерживающих DX11, к тому же классические пайпланы разработки все еще используются многими студиями, но они уйдут в прошлое, как ушли все пайплайны до них. Просто технологиям ну��но еще немного времени, чтобы улучшиться до состояния, когда все станет новым "стандартом".

А, и да, DX12 поддерживается даже на видеокартах которым больше 10 лет, так что не надо думать, что это только для "RTX".

К слову, статтеры бывают не только из-за видеокарт, но это уже другая история :)

Как-то так, народ

Статья внезапная, никто её не просил, но, может быть, кому-то будет интересно узнать чуть больше про игры, в которые ��ы играем.

Для особо желающих - тут хороший подкаст на эту тему, частично оттуда я и брал информацию. Там прямо подробно, но именно про UE5.

А я удаляюсь дальше колупать свою игру :)

Всем удачи!

5
6 комментариев