Как работает графика PUBG. Где оптимизация?
Здаров!
В данном посте хочу поделиться всякой инфой касательно работы графики в PUBG и некоторыми найдеными косяками. Этакий познавательно детективный пост.
Я запилил все видосом, но не хватает репы на его прикрепление в пост.
Кому лень читать:
Вот линк https://youtu.be/oup3dSeGAhM
А вот таймлапс рендеринга кадров PUBG https://youtu.be/QRrztpb24ag
Кому лень читать и смотреть, снизу оставил линк на снапшоты для RenderDoc, можно самому посмотреть на весь процесс.
Давайте разберем процесс построения кадра в PUBG.
1. Этап. Непрозрачные статические объекты в поле зрения камеры рендерятся в буффер глубины. Рендерятся без текстур. Поэтому процесс довольно шустрый.
Эта карта глубины нужна движку в последующем для различных целей. Например отсечение лишней геометрии. Тех объектов которые перекрыты другими. Плюс для рисования декалей, для эффекта глубины резкости (DoF), объемного тумана и тд.
Этот этап требует синхронизации с процессором, а значит, пока не построим карту глубины, дальше ничего не рендерится.
И вот тут мы приходим к фейлу №1. В пубжике объектов очень много и карта 8кв км. Дальность камеры конская. Поэтому движку очень часто приходится работать с огромным количеством геометрии в кадре. Тут есть переиспользование данных из предыдущих кадров (для скорости), но когда ты крутишь камерой, то эти данные типа устаревают и нужно начинать все сначала.
На графике количества отрисовок (Draw Call) мы видим пики. На эти пики садится твой ЦП и себе на колени усаживает видюху.
От этого время кадра гуляет, регулярно фризы и прочие неприятности. Кстати, в зависимости от происходящего, перед этим этапом может быть этап симуляции частичек, если у нас есть какие-то взрывы, огонь и прочее.
Идем дальше по построению кадра.
Этап 2.
Рисуем объекты сразу в несколько буфферов: GBufferC дифьюз , GBufferA - нормали, SceneColorDeferred - непрямого освещения, Distortion -отражаемости, матовости и тд.
Потом рендерим HBAO+, каскады теней и прозрачные объекты.
Далее идут всякие эффекты, пост эффекты и кадр готов.
В принципе, ничего особенного. Но разрабам надо разобраться с кулингом. Т.к. стандартное отсечение геометрии работает хреново от слова совсем. Куча геометрии остается не выброшеной из кадра. Как например весь интерьер каньона. Смотрим положение камеры на первом скриншоте. Смотрим на каньон.
В пубже нет предзапеченной инфы по отсечению геометрии, как например это делает UMBRA. И это по-моему единственное спасение. Но зачем оптимизировать, если лучше запилить никому не нужную пустынную карту, на которой багов еще больше чем на старой.
Я загрузил снапшоты на мегу https://mega.nz/#F!oew32S5D!-LqDvyKeFMNDHLudeWJo9g
Можно качнуть и просто открыть в RenderDoc, там все посмотреть самостоятельно.
Playerunknown's Battlegrounds
163 поста584 подписчика
Правила сообщества
В данном сообществе запрещено:
- нарушать базовые правила Пикабу;
- размещать посты, не связанные с тематикой сообщества.
А так же:
- прыгать на Починки
- рашить дом со сковородкой - ходить через мосты - стрелять в подоконники По любым вопросам, в том числе нарушению правил, вы можете призвать администратора или модератора сообщества, поставив перед его ником знак @.