Com2uS использует Vulkan для улучшения графики

Скриншот логотипа названия игры из Com2uS Chronicles.

Summoners War: Chronicles US(WW) и KR от Com2uS использует исключительно Vulkan для рендеринга на Android, что обеспечивает повышение производительности до 30%.

Vulkan — это современный кроссплатформенный API для 3D-графики, разработанный для минимизации абстракции между графическим оборудованием устройства и вашей игрой. Vulkan имеет меньшую нагрузку на процессор по сравнению с OpenGL ES, а Vulkan предлагает более широкий набор функций.

Рисунок 1. Скриншот игры.
Рисунок 2. Видео в игре.

Особенности рендеринга

Com2uS разработала расширенные функции рендеринга для Summoners War: Chronicles , в том числе:

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

Мобильное оборудование

Summoners War: Chronicles использует один и тот же рендерер для устройств Android, персональных компьютеров и специальных игровых консолей. Чтобы добиться оптимальной производительности на мобильном оборудовании, Com2uS настроил параметры рендеринга, включая глубину и плотность прорисовки. Чтобы адаптировать некоторые устройства под управлением Android 11 (уровень API 30) и ниже, Com2uS создал альтернативные версии некоторых шейдеров и использовал уменьшенное количество экземпляров. Summoners War: Chronicles также использует адаптивные функции производительности на Android для динамической настройки графических параметров в зависимости от температурных условий устройства.

Обоснование только для Vulkan

Com2uS использовал Vulkan исключительно для Summoners War: Chronicles по нескольким причинам:

  • Минимальные требования к устройствам исключены старые, менее мощные устройства, не поддерживающие Vulkan.
  • Настройка требуемых функций встроенного конвейера рендеринга (BiRP) движка Unity, доступных только в серверной части игры Vulkan.
  • Реализация функций рендеринга с использованием выходных данных вычислительного шейдера и объектов буфера хранения шейдера (SSBO) может быть выполнена в Vulkan, но не в OpenGL ES.

Вычисление рабочих нагрузок

Summoners War: Chronicles выполняет значительную работу по вычислительным шейдерам для получения данных для рендеринга. Вычислительные шейдеры используются для:

  • Отбраковка объектов
  • Проверка столкновений
  • Анимационные задачи
  • Косвенное генерирование данных рендеринга

Полученные вычислительные данные записываются в объекты RWBuffer движка Unity. Для достижения оптимальной производительности Summoners War: Chronicles выполняет все вычислительные задания с помощью одной диспетчеризации, что требует одновременного использования нескольких RWBuffers. Этот подход был возможен только при использовании Vulkan, поскольку бэкэнд Unity BiRP OpenGL ES поддерживает использование только одного RWBuffer за раз.

Наборы данных, созданные для рендеринга, часто превышают ограничения на размер устройства для объектов универсального буфера (UBO). Вместо этого Summoners War: Chronicles использует буферные объекты хранилища шейдеров (SSBO), которые имеют более высокие ограничения емкости. Однако привязка SSBO к операциям этапа вершин требует поддержки SSBO только для чтения. OpenGL ES поддерживает только SSBO для чтения и записи, тогда как Vulkan может помечать SSBO как доступные только для чтения.

Косвенный рендеринг экземпляров с помощью Clay

Для Summoners War: Chronicles компания Com2uS разработала метод объединения нескольких материалов, сеток и текстур в один вызов отрисовки. Com2uS называет эту систему Clay . Клэй повышает производительность игры на 30% за счет значительного сокращения вызовов отрисовки.

Clay начинается на этапе отбора и столкновения с создания списка совместимых видимых визуализируемых объектов. Затем Клей генерирует информацию о рендеринге для каждого идентифицированного объекта в SSBO. Этот процесс выполняется с помощью вычислительных шейдеров, которые позволяют использовать косвенный рендеринг экземпляров с помощью функции рендеринга Unity DrawMeshInstancedIndirect . При непрямом рендеринге информация об экземпляре и параметры количества экземпляров генерируются непосредственно на графическом процессоре. При рисовании объектов вместо привязки традиционной сетки объекта Клэй привязывает конусную сетку, как показано на рисунке:

Рисунок 3. Конусная сетка.

Затем Клей преобразует сетку конуса в вершинном шейдере, используя связанный SSBO данных преобразования вершин, сгенерированных вычислительными шейдерами. Привязка SSBO к этапу вершин требует использования Vulkan. Клей может использовать несколько трансформированных конусов для визуализации одного объекта. Сложность объекта определяет количество конусов.

Рисунок 4. Как сетка конуса преобразуется в дерево.

Данные о материалах для объектов группируются в другом буфере, создаваемом вычислительными шейдерами. Буфер привязан к фрагментному шейдеру. Текстуры рисуемых объектов настраиваются в массиве текстур. Индексы массива текстур объекта включены в данные материала объекта. В идеальных обстоятельствах Clay может выполнять рендеринг максимум с семью вызовами отрисовки:

  • Статические объекты
  • Анимированные объекты
  • Тени (четыре итерации)
  • Размышления

Юнити плюс Вулкан

Summoners War: Chronicles демонстрирует, что мощное сочетание игрового движка Unity и графического API Vulkan позволяет разработчикам создавать на устройствах Android улучшенную графику консольного качества.