🎮 Как с помощью 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
Прежде всего стоит сказать, что профилирование происходит по каналам. Канал в данном случае представляет собой поток информации об определенной составляющей вашей игры. Например, канал CPU передаёт информацию об использовании процессора, канал GPU – об использовании видеокарты, Log – о сообщениях, выведенных в лог. Помимо этих трех каналов существуют также несколько других, полную информацию о которых можно найти в официальной документации.
Для того чтобы указать какие из каналов ваша игра будет посылать Unreal Insights и по какому IP-адресу запущен профайлер, необходимо запускать игру с дополнительными параметрами:
Здесь:
-trace
– указывает список каналов данных, с которых необходимо снимать.-llm
– необходимо для канала memory.-counterstrace
– для счетчиков.-tracehost
– указывает IP-адрес машины, где запущен Unreal Insights.
Данные параметры включают профилирование по всем основным каналам и указывают игре, что Unreal Insights запущен на локальной машине. Доступно и удаленное профилирование.
Для того чтобы запустить проект с дополнительными параметрами перейдите в Editor Preferences и задайте необходимые параметры в Additional Launch Parameters. Убедитесь, что Unreal Insights уже запущен и после этого просто запустите проект в Standalone-режиме.
Когда проект будет запущен, в Unreal Insights появится строка с Live-сессией:
Также откроется новое окно, где и будут представлены результаты профилирования:
Профилирование времени выполнения с Unreal Insights
Откройте вкладку Timing Insights. Она состоит из нескольких панелей:
- Панель кадров с диаграммой общего времени кадра в верхней части.
- Панель таймингов, занимающая основную часть окна, показывает сколько времени было проведено внутри отдельного scope.
- Панель с сообщениями лога в нижней части.
- Панель таймеров и счетчиков справа.
Главная фича вкладки Timing Insights – это возможность выбрать отдельный кадр в панели кадров (например, подозрительно долгий кадр) и получить детальную информацию о том, что и как долго происходило на протяжении этого кадра. Для этого необходимо кликнуть на нужном кадре и Unreal Insights сам выделит нужную часть в панели таймингов:
Также вы можете получить агрегированные данные по любому промежутку времени, просто зажав ЛКМ на начальном моменте на линейке времени и отпустив на конечном.
Наведя на любое из событий, вы можете получить информацию об инклюзивном и эксклюзивном времени выполнения, процентном соотношении между временем выполнения этого события и события вызывающего и еще несколько более продвинутых свойств события:
Панель таймингов отображает данные по нескольким потокам (трекам) сразу. Чтобы включить или отключить отдельные треки, перейдите в меню Tracks в левой верхней части панели таймингов:
В панели таймеров будут отображены все события, произошедшие в выделенном промежутке времени, сгруппированные и отсортированные в соответствии с выбранными в этой же панели настройками:
Панель счетчиков отображает данные по другому типу метрик, связанному не со временем выполнения, а с количеством вызовов, которые называются, как несложно догадаться, – счетчиками.
Программист может создавать свои счетчики, равно как и свои тайминг-события, чтобы отслеживать значения каких-либо свойств игры в течение времени. Например, так можно отслеживать количество врагов на уровне или любое другое важное для производительности значение.
Важная функция доступная в Timing Insights – это фокусировка панели таймингов на моменте, когда в лог было выведено определённое сообщение. Для этого всего лишь надо кликнуть на нужное сообщение в панели лога и курсор панели таймингов сам установится на необходимом моменте:
Чтобы добавить свое тайминг событие, используйте макрос TRACE_CPUPROFILER_EVENT_SCOPE
в необходимой области видимости, например, в начале функции:
Для добавления собственного счетчика в 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, который может дать несколько действительно ценных советов о том, что и где в вашей игре нуждается в оптимизации.