Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: C++ и неопределённое поведение - 27.02

>
>
Распределённая сборка Unreal Engine про…

Распределённая сборка Unreal Engine проектов с помощью Horde и UBA

12 Фев 2025

Распараллелить сборку большого проекта на несколько компьютеров? Легко! Разбираемся, как использовать Unreal Horde — новый инструмент внутри Unreal Engine 5.5. В том числе мы посмотрим, как с его помощью запустить анализ PVS-Studio.

В игровом движке Unreal Engine версии 5.5 появился новый инструмент Horde — платформа, позволяющая использовать циклы CPU на других машинах, чтобы распределить нагрузку.

Horde содержит в себе Unreal Build Accelerator — инструмент, реализующий виртуализацию для сторонних программ (например, компиляторов C++ или анализатора PVS-Studio), позволяя им работать на удалённой машине, общаясь с инициирующей по мере необходимости.

В этой статье рассмотрим, как использовать данные возможности Unreal Engine, а также запустим анализ Unreal Engine проекта с помощью PVS-Studio сразу на нескольких машинах.

Установка

Рассмотрим, как установить сервер Horde на своей машине.

Предварительно нам необходимо привязать свой аккаунт Epic Games к GitHub. Сделать это можно в разделе Apps and Accounts в настройках аккаунта Epic Games. После привязки аккаунта на GitHub появится приглашение в организацию Epic Games, которое необходимо принять, чтобы получить возможность выполнить действия, описываемые далее.

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

Помимо этого, можно развернуть сервер Horde с помощью Docker. Для того чтобы это сделать, нам необходимо сгенерировать Personal Access Token на GitHub, а далее авторизоваться с помощью него в GitHub Container Registry. Сделать это можно с помощью следующей команды:

docker login ghcr.io

Если авторизация прошла успешно, то следующая команда сработает, и образ Horde скачается:

docker pull ghcr.io/epicgames/horde-server:latest

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

Однако есть возможность развернуть сервер Horde сразу со всеми необходимыми компонентами с помощью Docker Compose. Для этого нужно взять из исходного кода Unreal Engine файл docker-compose.yaml и выполнить в директории с этим файлом команду:

docker-compose up

Также в этом файле можно предварительно настроить порты, на которых будет развёрнут сервер Horde. По первому порту располагается интерфейс для управления сервером, а по второму — API для подключения агентов:

....
horde-server:
    image: ghcr.io/epicgames/horde-server:latest
    restart: always
    environment:
      Horde__HttpPort: 13340
      Horde__Http2Port: 13342
      Horde__RedisConnectionConfig: redis:30002
      Horde__DatabaseConnectionString:
 mongodb://horde:dbPass123@mongodb:27017/Horde?authSource=admin
    ports:
      - 13340:13340 # Порт для управления сервером
      - 13342:13342 # Порт для подключения агентов
    volumes:
      - ./data:/app/Data 
....

Подключение агентов

Для того чтобы добавить агентов к серверу Horde, необходимо, чтобы на компьютерах, которые будут выступать в качестве агентов, был установлен Horde Agent. Ссылку для его установки можно найти прямо на сервере Horde по URL { HordeHost }/tools:

При установке Horde Agent с помощью .msi необходимо указать URL сервера, к которому он будет подключён:

После окончания установки следует оставить опцию Enroll agent with the Horde Server включённой, чтобы агент отобразился в списке доступных к подключению агентов на сервере Horde. Этот список располагается по URL /agents/registration. После того как Horde Agent будет установлен на удалённой машине, на этой странице появится информация об этом агенте:

Теперь, чтобы подключить его, потребуется лишь выбрать его в списке и нажать кнопку Enroll Agents. После этого в списке агентов на сервере (по URL /agents) появится доступный агент:

Использование

Теперь перейдём непосредственно к тому, как использовать удалённые компьютеры для распределения нагрузки в задачах, связанных с использованием Unreal Engine.

Для того чтобы сборка проекта запускалась на нескольких компьютерах, необходимо отредактировать файл BuildConfiguration.xml (о том, где он находится, написано в документации Unreal Engine). В данный файл добавим несколько свойств, отвечающих за использование Horde и UBA:

<?xml version="1.0" encoding="utf-8" ?>
<Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
  <BuildConfiguration>  
         <bAllowUBAExecutor>true</bAllowUBAExecutor>
     </BuildConfiguration>
 
     <Horde>  
         <Server>http://horde-server-url:13340</Server>  
         <WindowsPool>Win-UE5</WindowsPool>
     </Horde>
 
     <UnrealBuildAccelerator>
         <bForceBuildAllRemote>false</bForceBuildAllRemote>
         <bLaunchVisualizer>true</bLaunchVisualizer>
     </UnrealBuildAccelerator>
</Configuration>

Здесь bAllowUBAExecutor в значении true говорит о том, что в процессе сборки будет использоваться UBA. Группа Horde содержит настройки используемого сервера Horde. В группе UnrealBuildAccelerator находятся настройки UBA:

  • bForceBuildAllRemote в значении false указывает, что сборка должна проходить не только на удалённых компьютерах, но и на сервере;
  • bLaunchVisualizer в значении true, говорит, что при сборке нужно отобразить визуализатор.

Перейдём к проекту. Сгенерируем из .uproject файлы проекта для Visual Studio, чтобы открыть его в этой IDE.

Теперь произведём некоторые изменения. В конструкторе класса в target-файле добавим следующее поле:

StaticAnalyzer = StaticAnalyzer.PVSStudio;

Зачем? Затем, чтобы проанализировать наш проект с помощью PVS-Studio — анализатора, который в том числе интегрируется в Unreal Build Tool для проверки Unreal Engine проектов. Причём проводить анализ мы тоже будем на нескольких компьютерах одновременно!

Примечание. Полная документация о проверке Unreal Engine проектов с помощью PVS-Studio находится по этой ссылке.

Теперь всё готово и можно приступать к запуску. Обращу ваше внимание, что у меня и коллег при сборке проекта с помощью Horde и UBA происходила проблема, связанная с тем, что файлы Unreal Engine по пути его установки были недоступны для использования сборочной системой. Если вы тоже столкнулись с такой проблемой, проверьте, что у файла, указанного в ошибке, не установлен атрибут Readonly, а также, что все пользователи имеют к нему полный доступ.

The "GenerateMSBuildEditorConfig" task failed unexpectedly.

System.UnauthorizedAccessException: Access to the path 'D:\Epic Games\UE_5.5\Engine\Source\Programs\AutomationTool\Mutable\RunMutableCommandlet\obj\Development\RunMutableCommandlet.Automation.GeneratedMSBuildEditorConfig.editorconfig' is denied.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)

at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)

at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)

at Microsoft.CodeAnalysis.BuildTasks.GenerateMSBuildEditorConfig.WriteMSBuildEditorConfig()

at Microsoft.Build.BackEnd.TaskExecutionHost.Execute()

at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

Во время сборки на экране появится визуализатор, показывающий, какие процессы происходят на каждом из Horde-агентов:

В результате получим проанализированный с помощью PVS-Studio проект.

Заключение

В этой статье мы рассмотрели, как можно использовать Unreal Horde и Unreal Build Accelerator для распределения сборки Unreal Engine проекта, а также его анализа с помощью анализатора PVS-Studio.

Раздел документации Unreal Engine, посвящённый использованию Horde находится по этой ссылке. А бесплатно попробовать проверить свой Unreal Engine проект с помощью PVS-Studio можно с помощью данной ссылки.

Последние статьи:

Опрос:

Дарим
электронную книгу
за подписку!

book terrible tips
Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам