Как работает графика PUBG. Где оптимизация?
Всем привет, В данном посте хочу поделиться всякой информацией касательно работы графики в PUBG и некоторыми найденными косяками. Этакий познавательно детективный пост.
Видео
Отрисовка кадра игры PlayerUnknown’s Battlegrounds
Процесс построения кадра в PUBG

1. Этап. Непрозрачные статические объекты в поле зрения камеры рендерятся в буффер глубины. Рендерятся без текстур. Поэтому процесс довольно шустрый.

Эта карта глубины нужна движку в последующем для различных целей. Например отсечение лишней геометрии. Тех объектов которые перекрыты другими. Плюс для рисования декалей, для эффекта глубины резкости (DoF), объемного тумана и тд.
Этот этап требует синхронизации с процессором, а значит, пока не построим карту глубины, дальше ничего не рендерится.
И вот тут мы приходим к фейлу №1. В пубжике объектов очень много и карта 8кв км. Дальность камеры конская. Поэтому движку очень часто приходится работать с огромным количеством геометрии в кадре. Тут есть переиспользование данных из предыдущих кадров (для скорости), но когда ты крутишь камерой, то эти данные типа устаревают и нужно начинать все сначала.

На графике количества отрисовок (Draw Call) мы видим пики. На эти пики садится твой ЦП и себе на колени усаживает видюху.
От этого время кадра гуляет, регулярно фризы и прочие неприятности. Кстати, в зависимости от происходящего, перед этим этапом может быть этап симуляции частичек, если у нас есть какие-то взрывы, огонь и прочее.
Идем дальше по построению кадра.
Этап 2.
Рисуем объекты сразу в несколько буфферов: GBufferC дифьюз , GBufferA – нормали, SceneColorDeferred – непрямого освещения, Distortion -отражаемости, матовости и тд.



Потом рендерим HBAO+, каскады теней и прозрачные объекты.



Далее идут всякие эффекты, пост эффекты и кадр готов.
В принципе, ничего особенного. Но разрабам надо разобраться с кулингом. Т.к. стандартное отсечение геометрии работает хреново от слова совсем. Куча геометрии остается не выброшеной из кадра. Как например весь интерьер каньона. Смотрим положение камеры на первом скриншоте. Смотрим на каньон.

В пубже нет предзапеченной инфы по отсечению геометрии, как например это делает UMBRA. И это по-моему единственное спасение. Но зачем оптимизировать, если лучше запилить никому не нужную пустынную карту, на которой багов еще больше чем на старой.