Разработчики опубликовали новый блог об оптимизации PUBG на консолях

Разработчики опубликовали новый блог, посвященный проблемам производительности PlayerUnknown’s Battlegrounds на консолях Xbox и PlayStation. В третьем выпуске PUBG Corp. рассказали, как уровень детализации влияет на быстродействие игры. Прошлые два блога доступны по ссылке.

Всем привет!

С вами свежий выпуск дневников консольной разработки! На этой неделе мы уделим внимание такому понятию, как «Уровень детализации», или LOD, обсудим, какие бывают типы уровня детализации, что это значит и как это влияет на производительность.

В PUBG для разных объектов используются разные уровни детализации. В зависимости от условий используется более высокий или более низкий уровень детализации — для того чтобы достичь необходимого баланса между производительностью системы и качеством картинки. В зависимости от ситуации в PUBG, как правило, используется три уровня детализации: LOD 2, LOD 1 или LOD 0 — самый высокий из них. Чем выше уровень детализации, тем выше нагрузка на систему. И пусть производительность очень важна, мы также должны сделать все необходимое, чтобы избежать снижения качества игры, что возможно при использовании более низкого уровня детализации.

Например. Как работает уровень детализации, хорошо видно, когда вы прыгаете с парашютом, а здания вдалеке выглядят, как пластилин. Это первый и самый низкий из всех отображаемых уровней детализации. В начале матча здания рядом с вами могут выглядеть так же, поскольку идет одновременная обработка большого количества объектов. Их уровень детализации должен как можно скорее повыситься до LOD 0 (самого высокого), однако скорость этого процесса зависит от вашего оборудования.

Также три разных типа уровня детализации применимы и к персонажам: Mesh LOD, Bone LOD и AnimNode LOD. Для начала мы коротко разберем, что такое Mesh LOD и Bone LOD, а затем уже уделим должное внимание главное теме этого выпуска — AnimNode LOD.

Mesh LOD и Bone LOD

Mesh LOD обозначает уровень детализации модели персонажа. Когда персонаж находится рядом с вами, он отрисовывается в LOD 0 (самый высокий уровень детализации), и чем дальше вы от него отходите, тем ниже становится уровень детализации его модели. Типы детализации — LOD 2, LOD 1 и LOD 0 — переключаются постепенно. Как правило, этот переход заметить невозможно, так как он происходит, когда персонаж находится от вас довольно далеко, а потому и выглядит очень мелко.

Bone LOD работает схожим образом, но в этом случае речь идет о количестве «костей», задействованных в анимации персонажа. Таким образом, когда персонаж находится далеко от вас, игра не должна детально обрабатывать его анимацию, снижая производительность вашей системы. Чем ниже уровень детализации, тем меньше данных точек и «костей» обрабатывается игрой. Таким образом, производительность игры значительно повышается, если сравнивать с теми случаями, когда уровень детализации не оптимизируется.

Использование дополнительных уровней детализации (3, 4 и так далее) позволило бы еще сильнее повысить производительность, снизив нагрузку на центральный процессор, однако в такой ситуации нагрузка на память и систему ввода/вывода сильно возрастет. Для консолей такая нагрузка слишком высока, и добавление новых уровней детализации на данном этапе нецелесообразно.

AnimNode LOD

В анимации также применяется уровень детализации под названием AnimNode LOD, хотя мы и не можем использовать его так же широко, как Mesh LOD или Bone LOD, поскольку все внешние изменения будут сразу заметны.

Анимации для бега, поворота головы в сторону или взгляда через прицел — по сути, это управление «скелетом» вашего персонажа. Все анимации скелета персонажа рассчитываются отдельно для каждой его конечности — рук, ног, шеи и так далее.

Мы разработали дополнительный метод работы с уровнем детализации. Он основан на размере модели персонажа по отношению ко всему экрану. Мы задаем параметры, которые позволяют автоматически и динамически выбирать менее детализированный AnimNode LOD для моделей персонажей только в тот момент, когда они находятся от вас на таком расстоянии, что вы не заметите никаких внешних изменений. Это позволяет нам повысить производительность игры, не жертвуя при этом качеством игрового процесса и картинки.

Обратите внимание: в приведенных далее примерах работы AnimNode LOD все изменения происходят на близком расстоянии, это сделано исключительно для наглядности. В PUBG AnimNode LOD действует только на большом расстоянии от игрока.

Вот первый пример работы AnimNode LOD:

(Это служебное изображение, взятое из среды разработки игры, оно используется исключительно в качестве наглядного примера. В PUBG AnimNode LOD отключается только на большом расстоянии от игрока)

На приведенном выше изображении наглядно видна разница между включенным и отключенным AnimNode LOD.

Когда AnimNode LOD полностью отключен, анимации персонажей также отключаются и никак не отражаются на моделях, что положительно сказывается на производительности игры. Однако если игрок приседает, в нижней части его тела должен работать AnimNode LOD, иначе этот игрок будет выглядеть так, будто он стоит.

Для следующего примера мы решили отключить AnimNode LOD, когда персонаж заполняет 10% от всего экрана. Так вам будет еще лучше видно, что происходит, когда AnimNode LOD отключен.

В самой игре AnimNode LOD отключается только в тех случаях, когда модель персонажа выглядит слишком мелкой и разглядеть изменения невозможно.

ВИДЕО #1

ВИДЕО #2

Возможно, вас волнует вопрос «А что происходит, когда я навожу прицел на игрока, который находится далеко от меня?»

Когда вы смотрите через прицел на персонажа, который находится далеко от вас, его модель занимает больше места на экране, и AnimNode LOD включается с динамическими параметрами — все зависит от того, какой процент экрана эта модель заполняет.

Ниже приведен пример того, что происходит, когда AnimNode LOD отключается, если модель персонажа занимает 10% от всего экрана.

ВИДЕО #3

Опять-таки, когда вы играете в PUBG, эти изменения будут незаметны, так как они происходят, когда модель персонажа находится от вас на большом расстоянии и занимает очень небольшую часть экрана.

Производительность AnimNode LOD

На этом графике показано соотношение производительности игры при включенном AnimNode LOD (синий цвет) и выключенном AnimNode LOD (красный цвет), когда рядом с вами находится 10 персонажей. Отключение AnimNode LOD позволяет увеличить производительность игры приблизительно на 10%.

График построен на основе результатов с Xbox One X.​

Чем больше персонажей находится на участке, на котором можно отключить AnimNode LOD, тем выше производительность игры по сравнении с ситуацией, в которой AnimNode LOD включен.

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

Спасибо за внимание! До встречи в новом выпуске дневников консольной разработки.

Команда консольной разработки PUBG

Напомним, что уже завтра, 22 января, новая карта Викенди будет доступна на PlayStation 4 и Xbox One.

Источник: vk.com