🎮 Как с помощью Unreal Insights оптимизировать игру на Unreal Engine

Unreal Insights – это профайлер, доступный в UE из коробки. В данной статье мы разберём, как, пользуясь Unreal Insights, оптимизировать две основные метрики игры: время выполнения и потребление памяти.

Что ещё за Unreal Insights

Unreal Insights – это инструмент позволяющий разработчикам исследовать производительность их UE-приложений с точки зрения времени выполнения, времени загрузки ассетов, потребления памяти, сетевой производительности, производительности анимации и UI.

Как собрать и запустить Unreal Insights

При установке Unreal Engine через лаунчер Epic Games, уже собранный исполняемый файл Unreal Insights будет находиться по адресу <директория установки движка>/Engine/Binaries/Win64/UnrealInsights.exe

В случае если вы компилируете движок из исходников, то собрать Unreal Insights можно через соответствующий проект в solution:

Проект Unreal Insights в общем solution движка

Общие сведения о работе с Unreal Insights

Прежде всего стоит сказать, что профилирование происходит по каналам. Канал в данном случае представляет собой поток информации об определенной составляющей вашей игры. Например, канал CPU передаёт информацию об использовании процессора, канал GPU – об использовании видеокарты, Log – о сообщениях, выведенных в лог. Помимо этих трех каналов существуют также несколько других, полную информацию о которых можно найти в официальной документации.

Для того чтобы указать какие из каналов ваша игра будет посылать Unreal Insights и по какому IP-адресу запущен профайлер, необходимо запускать игру с дополнительными параметрами:

Параметры для включения профилирования
-trace=cpu,gpu,loadtime,counters,log,frame,memory -llm -tracehost=127.0.0.1 -counterstrace

Здесь:

-trace – указывает список каналов данных, с которых необходимо снимать.
-llm – необходимо для канала memory.
-counterstrace – для счетчиков.
-tracehost – указывает IP-адрес машины, где запущен Unreal Insights.

Данные параметры включают профилирование по всем основным каналам и указывают игре, что Unreal Insights запущен на локальной машине. Доступно и удаленное профилирование.

Для того чтобы запустить проект с дополнительными параметрами перейдите в Editor Preferences и задайте необходимые параметры в Additional Launch Parameters. Убедитесь, что Unreal Insights уже запущен и после этого просто запустите проект в Standalone-режиме.

Установка дополнительных параметров запуска

Когда проект будет запущен, в Unreal Insights появится строка с Live-сессией:

Live-сессия в Unreal Insights

Также откроется новое окно, где и будут представлены результаты профилирования:

Результаты профилирования. Обратите внимание, что для Live-сессии данные будут обновляться в реальном времени
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека C/C++ разработчика»

Профилирование времени выполнения с Unreal Insights

Откройте вкладку Timing Insights. Она состоит из нескольких панелей:

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

Главная фича вкладки Timing Insights – это возможность выбрать отдельный кадр в панели кадров (например, подозрительно долгий кадр) и получить детальную информацию о том, что и как долго происходило на протяжении этого кадра. Для этого необходимо кликнуть на нужном кадре и Unreal Insights сам выделит нужную часть в панели таймингов:

Агрегация данных профилирования по промежутку времени

Также вы можете получить агрегированные данные по любому промежутку времени, просто зажав ЛКМ на начальном моменте на линейке времени и отпустив на конечном.

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

Информация о timing-событии

Панель таймингов отображает данные по нескольким потокам (трекам) сразу. Чтобы включить или отключить отдельные треки, перейдите в меню Tracks в левой верхней части панели таймингов:

Выбор треков для отображения

В панели таймеров будут отображены все события, произошедшие в выделенном промежутке времени, сгруппированные и отсортированные в соответствии с выбранными в этой же панели настройками:

Панель таймеров

Панель счетчиков отображает данные по другому типу метрик, связанному не со временем выполнения, а с количеством вызовов, которые называются, как несложно догадаться, – счетчиками.

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

Важная функция доступная в Timing Insights – это фокусировка панели таймингов на моменте, когда в лог было выведено определённое сообщение. Для этого всего лишь надо кликнуть на нужное сообщение в панели лога и курсор панели таймингов сам установится на необходимом моменте:

Панель логов – способ позиционировать курсор панели таймингов на моменте, когда в лог было выведено какое-либо сообщение

Чтобы добавить свое тайминг событие, используйте макрос TRACE_CPUPROFILER_EVENT_SCOPE в необходимой области видимости, например, в начале функции:

Макрос для включения профилирования отдельного фрагмента функции
void UMyEnemy::ReloadWeapon()
{
    TRACE_CPUPROFILER_EVENT_SCOPE(TEXT("UMyEnemy::ReloadWeapon"))
    //payload code
}

Для добавления собственного счетчика в C++ файле необходимо задекларировать счетчик с помощью макроса TRACE_DECLARE_INT_COUNTER (или любого другого из этого семейства). Затем значение счетчика можно изменять используя макросы TRACE_COUNTER_SET, TRACE_COUNTER_INCREMENT и им подобные.

В примере ниже был создан кастомный счетчик, который попеременно увеличивается и уменьшается на 5 единиц каждые 500 миллисекунд.

Демонстрация попеременного увеличения и уменьшения счетчика

Полный список доступных макросов для работы со счетчиками можно найти в хедере ProfilingDebugging/CountersTrace.h.

Профилирование памяти с Unreal Insights

Откройте меню и поставьте галочку на Memory Insights. Откроется соответствующая вкладка:

Результаты профилирования памяти

Работа с данными профилирования памяти гораздо проще, чем с таймингами. На основной панели находятся графики потребления памяти различными частями игры/движка, например, Audio, Textures или Meshes с названиями, говорящими сами за себя. В верхней части находится трек Main Memory Graph, где отображается всё то же самое, но для эргономичности наложенное друг на друга.

В правой части вкладки в панели LLM Tags двойным кликом можно включить или отключить треки, которые будут отображаться в основной панели.

Вывод

Unreal Insights – отличный инструмент для разработчика на Unreal Engine, который может дать несколько действительно ценных советов о том, что и где в вашей игре нуждается в оптимизации.

***

Материалы по теме

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

karpekin
01 сентября 2020

🏓 Создаем 2D-игру на Unity: инструкция для новичка

Показываем, как создать простую 2D-игру на Unity на примере игры в пинг-пон...
Библиотека программиста
23 июня 2017

Разработка игр – это просто: 12 этапов изучения геймдева

Разработка игр на плаву, она перспективна и набирает популярность. Мы подго...