В Conqueror's Blade мы стремимся создать мир, в котором вы можете воплотить в жизнь свои мечты, завоевать земли и добиться победы в бою. С этой целью мы создали обширные пространства, стены, зигзагом проходящие сквозь земли, и битвы, в которых тысячи солдат идут в атаку, сталкиваются, поджигают стрелы и ведут артиллерийский огонь.

Сложность с масштабными сражениями

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

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

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

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

Теперь мы подробнее расскажем о наших мерах по улучшению производительности и поделимся планами на будущее.

Что было сделано в сезоне Eternal

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

Отряды и бой

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

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

  • «Казнь» силахдаров — стало 410 частиц (было 1200).
  • «Смертельный удар» силахдаров — стало 890 частиц (было 1120).
  • «Стойте насмерть» Седого дозора — стало 420 частиц (было 1120).
  • «Метание бомб» гренадеров Шенжи — стало 210 частиц (было 580).
  • Ополченцы-огнеметатели — стало 118 частиц (было 310).
  • Фальконет (редкий) — стало 2700 частиц (было 6400).
  • Бешенство берсерков — стало 370 частиц (было 1050).
  • Спецэффекты отрядов под воздействием умения глефы «Пыл битвы» — стало 240 (было 410).

Погода и объекты

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

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

Будущие меры по оптимизации производительности

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

В настоящее время мы проводим обширное тестирование для проведения более адресных оптимизаций и планируем провести следующее:

  • оптимизировать фоновые алгоритмы интерфейса для устранения ухудшения производительности и потребления памяти сложными алгоритмами. Области такого улучшения включают мини-карту, шкалы умений и сведения об отрядах;
  • от качества рендеринга зависит, как тот или иной объект будет выглядеть в игре, и в большинстве случаев отрисовка различных слоев не обязательно должна осуществляться с одинаковым качеством. Так, при сражении на стенах точки A Укрепленного форта не требуется идеальный вид главного флага на базе, так как это снизит производительность. В то же время текущее качество рендеринга подходит не для всех ситуаций, поэтому мы будем добавлять слои отрисовки в зависимости от расстояния до объекта на карте. Например, объекты на удалении 100 метров получат качество отрисовки 1, 50 метров — 2, 10 метров — 3, а объекты на удалении 5 метров получат качество рендеринга 4. Это уменьшит количество вычислений и позволит разгрузить графический процессор;
  • заново создать код для одежды и симуляции физики для оптимизации производительности множества малогабаритных модулей, таких как волосы, темляки копий, подолы платьев, плащей и тому подобное;
  • продолжить сокращать количество частиц спецэффектов для улучшения баланса графики и производительности;
  • улучшить распределение качества текстур, чтобы найти баланс между качеством и производительностью для дальнейшего сокращения использования памяти;
  • улучшить графические настройки, добавив больше вариантов и конфигураций, и улучшить распознавание устройств для выбора оптимальных настроек по умолчанию.

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

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