Дневники разработки для Консолей. Выпуск 1.

Всем привет!

Перед вами первый выпуск нашей новой рубрики «Дневники консольной разработки» (Console Dev Report), которая приходит на смену еженедельным статьям в сообществе!

Как сообщалось ранее, мы собираемся публиковать отчеты каждые две недели и будем освещать в них вопросы производительности, а также проблемы разработки и их исправление. Обратите внимание, что иногда этот график может меняться в зависимости от объема животрепещущих материалов.

Сегодня мы поговорим про частоту кадров и наши планы по ее увеличению, чтобы всем игрокам было приятно играть в PUBG.

Для начала

Игроки сообщают нам о падениях частоты кадров. Особенно сильно это происходит на поздних этапах матчей из-за часто возникающих перестрелок на ближней дистанции (CQC). PUBG выполняет расчет всех ресурсов в радиусе 1 километра от персонажа. То есть, где бы ни находился ваш бравый боец, игра скрупулезно рассчитывает все, что находится на расстоянии до 1 км от него. На позднем этапе игры, когда белая зона сжимается почти до предела, оставшиеся бойцы собираются в небольшом круге. Это значит, что в одной области находится больше игроков, для которых нужно рассчитать ресурсы. То же самое происходит в горячих точках высадки, однако на поздних этапах нужно учитывать большее количество ресурсов, ведь многие прибывшие в зону персонажи под завязку набиты собранными вещами. Транспорт, обвес, раскраска оружия, дымовые завесы — вот только малый перечень ресурсов, которые приходится учитывать.

Чтобы повысить производительность и уменьшить количество просадок частоты кадров, надо сократить объем рассчитываемых ресурсов. Сейчас мы расскажем о своих попытках это сделать, но сперва позвольте объяснить термин «Поле обзора». Обычно так называют угол обзора картинки, которую видно на экране монитора. Если на экране показался противник, знайте, что он попал в поле обзора. Впрочем, не все, что попадает в поле обзора, обязательно показывается на экране. Это поле зависит от направления и угла взгляда. Если противник окажется за стеной, то он тоже будет как бы в поле вашего обзора, но видеть вы будете не его, а стену.

Добавьте описание

В поле обзора

Объекты в поле обзора рассчитываются всегда. Именно поэтому вы видите перемещение союзных и враждебных персонажей. Чтобы как можно точнее отображать перемещающихся персонажей, серверу требуется «считать наперед».

Предположим, персонаж А куда-то увлеченно бежит. Сервер получает данные о местоположении персонажа от клиента пользователя А, а потом передает их обратно. При обмене клиента и сервера этими сведениями, отправленные данные о местоположении персонажа А должны совпадать с прежними данными об этом персонаже, даже если тот продолжал двигаться. Если данные начинают слишком различаться, возникает так называемая «рассинхронизация». Чтобы точно определять местоположение персонажа, сервер прогнозирует его перемещение по вектору и скорости, в итоге точно понимая, где должно находиться ваше электронное воплощение. Кроме того, сервер прогнозирует местоположение с учетом проверки возвышения местности и наличия блокирующих движение препятствий, таких как стена. Эти меры значительно ускоряют реагирование и позволяют точнее определять местоположение персонажа, устраняя проблему рассинхронизации.

К сожалению, для точного прогноза при перемещении персонажа требуется учитывать больший объем ресурсов. Так и появляется одна из причин падения частоты кадров. Мы решили повысить производительность и потому убрали расчеты, без которых вполне можно обойтись. В результате производительность скакнула вверх, а частота кадров стала просаживаться реже. График ниже называется «Время расчета физических объектов за кадр». Тестирование проводилось силами 30 ботов. На графике представлены кривые действующей и улучшенной сборок. Последняя скоро будет реализована в готовящемся обновлении. По сокращенному времени видно: чем меньше ресурсов приходится рассчитывать, тем выше производительность.

Добавьте описание

Вне поля обзора

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

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

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

Ниже мы помещаем график улучшения под уже привычным названием «Время расчета физических объектов за кадр». Для его составления мы снова выпустили на поле 30 ботов. На графике представлены кривые действующей и улучшенной сборок.

Добавьте описание

Как видите, мы доработали расчет в поле и вне поля обзора, что повысит производительность благодаря уменьшению времени, которое тратится на определение местоположения персонажей. Это стало закономерным следствием уменьшения объема рассчитываемых ресурсов. В результате частота кадров будет падать реже, да и в среднем она возрастет. Мы продолжим работать над повышением частоты кадров, чтобы вы получали еще больше удовольствия от игры. Ждите новый отчет через две недели!

Еще увидимся!

Спасибо!

PUBG

Обсудить статью
Поделиться Статьей