Рендеринг на несколько дисплеев с помощью nDisplay и Unreal Engine 4

0
27
Рендеринг на несколько дисплеев с помощью nDisplay ue4

Интерактивный контент не ограничивается отображением на одном экране или даже на одном устройстве с двумя экранами, например, c гарнитурой VR. Все большее число систем визуализации нацелено на более эффективное погружение зрителя в игровую среду путем рендеринга контента в реальном времени через несколько одновременных дисплеев. Эти системы могут состоять из нескольких смежных физических экранов, таких как дисплей Powerwall; или они могут использовать несколько проекторов для проецирования 3D-среды на физические поверхности, такие как купола, наклонные стены или изогнутые экраны, например в виртуальной среде Cave.

Unreal Engine поддерживает эти сценарии использования через систему nDisplay. Эта система решает некоторые из наиболее важных задач при одновременной визуализации 3D-контента на нескольких дисплеях:

  • Это облегчает процесс развертывания и запуска нескольких экземпляров вашего Проекта на разных компьютерах в сети, каждый из которых отображается на одном или нескольких устройствах отображения.
  • Он управляет всеми вычислениями, связанными с вычислением усадки просмотра для каждого экрана в режиме реального времени, основываясь на пространственном расположении вашего оборудования дисплея.
  • Это гарантирует, что контент, отображаемый на различных экранах, остается точно синхронизированным с детерминированным контентом во всех экземплярах Механизма.
  • Он предлагает пассивный и активный стереоскопический рендеринг.
  • Он может управляться вводом из систем VR-слежения, так что точка обзора на дисплеях точно соответствует точке зрения движущегося зрителя в реальной жизни.
  • Он достаточно гибкий, чтобы поддерживать любое количество экранов в любой относительной ориентации, и его можно легко использовать в любом количестве проектов.

Обзор Системы nDisplay

Каждая настройка nDisplay имеет один главный компьютер и любое количество дополнительных компьютеров.

  • Каждый компьютер в сети запускает один или несколько экземпляров упакованного исполняемого файла вашего проекта. Каждый из этих экземпляров Unreal Engine отвечает за рендеринг одного сегмента одной и той же 3D-сцены на одном экране или дисплее.
  • Главный узел также отвечает за прием ввода с устройства VRPN и репликацию этого ввода на все остальные подключенные компьютеры.система nDisplay ue4

Чтобы сделать это возможным, nDisplay добавляет несколько компонентов к обычной архитектуре системы Unreal:

  • Приложение для сетевого обеспечения и управления, которое называется nDisplayLauncher. Вы запускаете это приложение на одном компьютере в сети, чтобы автоматически развертывать и запускать проект на всех компьютерах в сети.
  • Отдельное приложение – «слушатель», который называется nDisplayListener, запускается на каждом компьютере. Это приложение прослушивает входящие запросы от nDisplayLauncher и обрабатывает эти запросы на локальном компьютере.
  • Общий файл конфигурации, содержащий все параметры, необходимые nDisplay для запуска нужного количества экземпляров на нужных компьютерах, каждый из которых отображает правильную точку зрения в трехмерном мире игры, создавая иллюзию плавного рендеринга на всех экранах или проекторах, читайте о файле конфигурации nDisplay ниже.

Начальный этап

В этом разделе описывается, как начать работу с nDisplay в первый раз. Прежде чем вы начнете:

  • Убедитесь, что ваше физическое оборудование – экраны, проекторы и др. – настроено и работает правильно.
  • Убедитесь, что учетная запись Windows, которую вы собираетесь использовать на главном компьютере, имеет права администратора на всех компьютерах, которые вы собираетесь использовать в сети nDisplay.
  • Убедитесь, что все компьютеры, которые вы хотите использовать в сети nDisplay, могут получать соединения TCP/IP через порты 41000, 41001 и 41002. (Вместо этого вы можете использовать разные порты; см. Раздел Изменение Портов Связи ниже.)

Шаг 1. Настройка проекта для nDisplay

Самый простой способ настроить проект на использование nDisplay – это создать его из Проекта Шаблона nDisplay:создание ndisplay из шаблона ue4

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

Если у вас есть существующий проект, который вы хотите использовать с nDisplay, вы можете выполнить ту же настройку вручную. Читайте  статью Добавление nDisplay в существующий проект ниже.

Шаг 2. Настройка файла конфигурации

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

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

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

Шаг 3. Упаковка и развертывание

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

  1. В редакторе Unreal подготовьте и упакуйте свою игру для Windows. Для получения дополнительной информации читайте статью Операции сборки: готовить, упаковывать, развертывать и запускать. Позже, когда вы развернете приложение на подчиненных компьютерах, nDisplay скопирует его в одно и то же место на каждом из целевых компьютеров. Поэтому рекомендуется упаковать ваш проект в папку, которая существует на всех машинах.
  2. Найдите приложение Engine\Binaries\DotNET\nDisplayListener.exe в папке установки Unreal Engine. Скопируйте это приложение в папку, содержащую файл .exe, который вы упаковали для своей игры.
  3. Скопируйте файл конфигурации nDisplay в ту же папку. У вас должен быть упакованный файл Project .exe, приложение nDisplayListener.exe и файл конфигурации, расположенные рядом в одной папке.
  4. Запустите приложение Engine\Binaries\DotNET\nDisplayLauncher.exe в папке установки Unreal Engine.запуск ndisplay ue4
  5. Добавьте упакованный файл Project .exe в список приложений. Нажмите Add в списке Applications, затем найдите и выберите файл .exe, который вы упаковали для своего проекта.
  6. Укажите ваш файл конфигурации. Нажмите Add справа от элемента управления Config Files, затем найдите и выберите файл конфигурации.
  7. Нажмите Deploy application (Развернуть приложение). nDisplay копирует весь контент папки, содержащей исполняемый файл проекта, в то же место на каждом другом компьютере, который вы указали в файле конфигурации.

Шаг 4. Запуск всех узлов

После успешного развертывания проекта на всех компьютерах, указанных в файле конфигурации, вы можете использовать приложение nDisplayLauncher для одновременного запуска проекта на всех компьютерах.

  1. Если у вас еще не запущено приложение nDisplayLauncher, запустите его и настройте файл приложения и файла конфигурации, как указано в предыдущем разделе.
  2. Нажмите Start listeners. Это запускает приложение nDisplayListener на каждом компьютере, который вы указали в файле конфигурации nDisplay.
  3. Когда nDisplay подтвердит, что все слушатели были запущены на всех компьютерах, нажмите Run, чтобы запустить все экземпляры.

Далее вам нужно будет сделать:

  1. Нажмите на Kill, чтобы автоматически отключить все экземпляры Unreal Engine на всех компьютерах, или просто отключите экземпляр Unreal Engine, работающий на главном компьютере.
  2. Нажмите Stop listeners, чтобы закрыть приложение nDisplayListener на всех компьютерах.

О Файле Конфигурации nDisplay

Лучший способ начать разбираться в файле конфигурации nDisplay и создавать свой собственный, – это начать с примеров конфигураций, предоставляемых плагином nDisplay. Если вы создали свой проект из шаблона nDisplay, вы найдете эти файлы в папке вашего проекта в разделе Content/ConfigExamples. Если нет, вы можете найти эти файлы в папке установки Unreal Engine, в папке Templates/TP_nDisplayBP/Content/ConfigExamples.

Структура файла конфигурации nDisplay напрямую связана с различными типами компонентов, которые он использует для визуализации.

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

Конфигурации камеры

nDisplay отображает сцену с одной точки зрения за один раз. Каждая из этих потенциальных точек обзора определяется линией конфигурации камеры.

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

Пример конфигурации:


[camera] id=camera_static loc="X=0.Y=0,Z=1.7" tracker_id=VRPNTracking tracker_ch=0

Параметры:

ПараметрОписание
idУникальное имя для этой конфигурации камеры.
locМестоположение этой камеры в пространстве VR относительно ее родителя.
tracker_idИмя входной конфигурации, которая определяет устройство VR, которое вы хотите управлять положением камеры с течением времени. Этот параметр не является обязательным. Если вы пропустите этот параметр, положение камеры будет статическим в пространстве VR.
tracker_chКогда вы указываете tracker_id, этот параметр указывает канал того устройства, с которого nDisplay будет считывать данные отслеживания.
parentИмя конфигурации scene_node, которую вы хотите использовать в качестве родителя для этого объекта. Этот параметр не является обязательным. Если вы укажете родителя, значения, которые вы зададите в параметре loc, будут относительно положения этого родителя. Если вы не укажете родителя, значения, которые вы установили в параметре loc, будут относиться к корню VR.

 

Конфигурации экрана

Каждый отдельный выходной дисплей визуализирует сцену с текущей позиции камеры, используя усеченный контур, который определяется прямоугольником с определенным размером и размещением в пространстве 3D VR. Каждый из этих прямоугольников определяется конфигурацией экрана. Обычно каждый из этих проекционных экранов имеет те же размеры в пространстве виртуальной реальности, что и физический экран, который вы будете использовать для его рендеринга.

Точка поворота экрана всегда находится точно в центральной точке.

Пример конфигурации:

Это определение описывает экран размером 3 на 3 метра непосредственно перед родительским экраном. Поскольку точка вращения экрана находится в центре прямоугольника, определенного параметром размера, мы добавляем смещение по оси Z на 1,5 метра, чтобы переместить экран вверх на половину его высоты.


[screen] id=screen_front loc="X=1.5.Y=0,Z=1.5" rot="P=0,Y=0,R=0" size="X=3,Y=3" parent=screens

Чтобы определить экран в левой части окна просмотра, мы перемещаем его влево (отрицательные значения по оси Y) и поворачиваем вокруг его локальной оси Y (отклоняемся от курса),


[screen] id=screen_left loc="X=0,y=-1.5,Z=1.5" rot="P=0,Y=-90,R=0" size="X=3,Y=3" parent=screens

Параметры:

ПараметрОписание
idУникальное имя для этой конфигурации экрана.
locМестоположение центра этого экрана в пространстве VR относительно его родителя.
rotУглы наклона (P), отклонения(Y) и вращения(R) направления экрана в градусах.
sizeОбщий размер прямоугольника экрана вдоль его локальных осей X и Y, в метрах.
parentИмя конфигурации scene_node, которую вы хотите использовать в качестве родителя для этого объекта. Этот параметр не является обязательным. Если вы укажете родителя, значения, которые вы зададите в параметрах loc и rot, будут относиться к положению этого родителя. Если вы не указали родителя, значения, которые вы задали в параметрах loc и rot, будут относиться к корню VR.

Конфигурации Узлов Кластера

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

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

Пример конфигурации:

В этом примере настраивается главный узел (по одному на сеть):


[cluster_node] id=node_front addr=192.168.0.1 screen=screen_front viewport=vp_front sound=true port_cs=41001 port_ss=41002 master=true

Этот пример показывает ненастоящий узел кластера:


[cluster_node] id=node_left addr=192.168.0.2 screen=screen_left viewport=vp sound=false

Параметры:

ПараметрОписание
id

 

Уникальное имя для этой конфигурации узла кластера.
addr

 

IP-адрес компьютера, на котором будет запускаться этот экземпляр Unreal Engine. Это должен быть адрес IPv4. IPv6 не поддерживается.
screen

 

Имя конфигурации экрана, которая определяет проекционный экран, за который должен отвечать этот экземпляр Unreal.
viewport

 

Имя конфигурации области просмотра, которая определяет положение визуализированного кадра в окне приложения, запущенного этим экземпляром Unreal Engine.
soundОпределяет, воспроизводит ли этот экземпляр Unreal Engine звук. Параметр необязательный; по умолчанию установлено значение false.
Winx WinY

 

Определяет положение верхнего левого угла окна приложения на рабочем столе в пикселях на экране.
ResX ResY

 

Определяет размер окна приложения в пикселях на экране. Убедитесь, что определение области просмотра, которое вы используете для этого узла кластера, не превышает размер этого окна.
port_cs port_ss

 

Порты синхронизации кластера, используемые главным узлом для связи с другими узлами в кластере. Параметр необязательный; значения по умолчанию 14001 и 14002.
master

 

Определяет, является ли данный экземпляр Unreal Engine главным узлом кластера. Только один раздел cluster_node может иметь для этого параметра значение true. Параметр необязательный; по умолчанию установлено значение false.
eye_swap

 

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

Конфигурации Вьюпорта

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

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

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

Пример конфигурации:


[viewport] id=vp_left X=0 Y=0 width=1920 height=1080

Параметры:

ПараметрОписание
IdУникальное имя для этой конфигурации области просмотра.
XYКоординаты верхнего левого угла области просмотра, в пикселях, в пределах пространства экрана главного окна приложения.
width heightШирина и высота отображаемого кадра в пикселях. Это не должно быть больше, чем размер игрового окна, который установлен параметром size любой конфигурации cluster_node, использующей этот вьюпорт.

Конфигурации Узла Сцены

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

Как и камеры, узлами сцены также могут управлять устройства отслеживания VR.

Пример конфигурации:

Следующие строки определяют иерархию двух узлов, где дочерний узел имеет смещение в 2 метра перед своим родителем.


[scene_node] id=vr_space_root loc="X=0.Y=0,Z=0" rot="P=0,Y=0,R=0"
[scene_node] id=walls_front_group loc="X=2.Y=0,Z=0" rot="P=0,Y=0,R=0" parent= vr_space_root

Следующая строка показывает узел сцены, который настроен для управления устройством VR.


[scene_node] id=cave_wand loc="X=0, Y=0,Z=1" tracker_id=CaveTracking tracker_ch=1

Параметры:

ПараметрОписание
idУникальное имя для этой конфигурации камеры.
locМестоположение этой камеры в пространстве VR относительно ее родителя.
rotУглы наклона (P), отклонения (Y) и вращения (R) направления экрана в градусах.
parentИмя другой конфигурации scene_node, которую вы хотите использовать в качестве родителя для этого узла сцены. Этот параметр не является обязательным. Если вы укажете родителя, значения, которые вы зададите в параметрах loc и rot, будут относиться к положению этого родителя. Если вы не указали родителя, значения, которые вы задали в параметрах loc и rot, будут относиться к корню VR.
tracker_idИмя входной конфигурации, которая определяет устройство VR, которое вы хотите управлять положением узла сцены во времени. Этот параметр не является обязательным. Если вы пропустите этот параметр, положение и поворот узла сцены будут статическими в пространстве VR относительно его родителя.
tracker_chКогда вы указываете tracker_id, этот параметр указывает канал того устройства, с которого nDisplay будет считывать данные отслеживания.

Входные Конфигурации

Каждая камера и каждый scene_node могут управляться устройством отслеживания VR. Для этого вы определяете секцию ввода для каждого устройства VR и обращаетесь к ней в конфигурации camera или scene_node.

Пример конфигурации:


[input] id=CaveTracking type=tracker addr=Tracker0@192.168.0.1 loc="X=-1.5,Y=0,Z=3.4" rot="P-0,Y=0,R=0" front=X right=Y up=-Z

Параметры:

ПараметрОписание
idУникальное имя для этой конфигурации устройства ввода.
typeТип этого устройства ввода VRPN:

  • трекер для устройства слежения.
  • аналог для устройства, которое производит данные оси.
  • кнопка для устройства, которое производит данные логической кнопки (Boolean).
addrАдрес сервера VRPN, который обрабатывает это конкретное устройство. Значение должно соответствовать следующему формату:

DEVICENAME@SERVER_ADDRESS

где:

  • DEVICENAME – это имя VRPN для этого устройства.
  • SERVER_ADDRESS – это IPv4-адрес сервера VRPN.
remapЭтот параметр переназначает номера каналов с устройства слежения, чтобы их входные данные могли считываться с разных каналов в Unreal. Например, некоторые контроллеры используют канал 0 для отслеживания головы и канал 1 для контроллера; другие используют канал 1 для головы и канал 5 для контроллера. Переключение между этими двумя устройствами может потребовать изменения конфигурации и кода времени выполнения для соответствия. Чтобы избежать необходимости вносить какие-либо другие изменения в этом случае, вы можете использовать этот параметр для переназначения каналов.

Например, значение:

remap[0:1, 5:2]

пересылает данные с канала 1 в устройстве отслеживания на канал 0 в Unreal и пересылает данные из канала 2 в устройстве отслеживания на канал 5 в Unreal.

Устройства, в которых type = tracker также принимают следующие дополнительные параметры:

ПараметрОписание
loc rotКак и в других разделах конфигурации, параметры loc и rot определяют смещение положения и поворота в локальном пространстве для этого устройства ввода. Однако для устройства ввода вы обычно используете эти смещения, чтобы отрегулировать корневую позицию устройства слежения в пространстве VR, чтобы соответствовать положению, которое, как вы ожидаете, будет в иерархии узлов вашей сцены.
front right upЭти параметры соответствуют каждой локальной оси трекера в Unreal (вперед, направо и вверх) с соответствующей осью в системе координат трекера. Unreal использует правую систему координат Z-up. Если ваш трекер использует другую систему координат, вы можете использовать эти параметры, чтобы отобразить систему координат трекера в Unreal.

Например, следующая строка отображает ось Y трекера на ось вперед (X) в Unreal; ось X трекера – направо (Y) в Unreal, а отрицательная ось Z трекера -вверх (Z) в Unreal:

front=Y right=X up=-Z

Конфигурация General

Строка конфигурации general содержит параметры, которые контролируют общую работу кластера nDisplay.

Пример конфигурации:


[general] swap_sync_policy=1

Параметры:

ПараметрОписание
swap_sync_policyОпределяет, как выходные данные синхронизируются по сети.

  • 0: нет синхронизации.
  • 1: программная синхронизация
  • 2: NV swap lock (только для рендеринга карт NVIDIA с OpenGL)

 Конфигурация Stereo

Строка конфигурации stereo устанавливает необязательные глобальные параметры для стереоскопического рендеринга.

Пример конфигурации:


[stereo] eye_dist=0.064

Параметры:

ПараметрОписание
eye_distМежглазное расстояние, используемое для смещения изображений, сгенерированных для левого и правого глаза, в метрах.

Структура

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

Пример

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

Он также определяет несколько scene_nodes, которые в совокупности создают следующую иерархию:иерархия ndisplay ue4

Относительные положения и повороты узлов в этой иерархии определяют расположение камеры и шести экранов в пространстве виртуальной реальности, так что шесть проекционных экранов расположены рядом на расстоянии 1 метра от камеры.пример слоев ndisplay ue4

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

Blueprint API

Вы можете контролировать поведение системы nDisplay в логике времени выполнения вашей игры, используя ее Blueprint API.

Чтобы получить доступ к функциям, представленным в этом API для управления кластерами, вводом и рендерингом:

  1. Создайте новый узел Display Cluster > Get Plugin API в вашем Blueprint.
  2. Перетащите с пина Out API и просмотрите категорию Display Cluster:плагин ndisplay ue4

Актер Репликации

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

Для этого nDisplay предлагает два разных компонента, которые вы можете прикрепить к своим актерам:

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

Например, в актере, показанном ниже, компонент DisplayClusterSceneComponentSyncParent_DefaultSceneRoot отслеживает и реплицирует изменения в трехмерных преобразованиях своего родительского актера при перемещении актера по уровню. Компонент DisplayClusterSceneComponentSyncThis отслеживает и синхронизирует перемещения своего дочернего компонента Cube по мере его перемещения относительно корня графика сцены.ndisplay-actor репликация ue4

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

Для этого:

  1. Выберите актера, которого нужно воспроизвести, в окне просмотра уровня или на панели World Outliner.
  2. На панели Details нажмите + Add Component. Найдите DisplayClusterSceneComponentSyncParent или DisplayClusterSceneComponentSyncThis, либо выберите его из списка.добавить компонент ndisplay ue4
Эти компоненты не выполняют полную репликацию. Только преобразования родительского Субъекта или дочерних Компонентов отправляются в кластер.

Использование VRPN Входов

Чтобы использовать устройство ввода VRPN с nDisplay:

  1. Установите сервер VRPN в вашей сети. Эта версия nDisplay требует версии 33 VRPN.
  2. В файле vrpn.cfg сервера, который находится рядом с исполняемым файлом сервера, включите ваше устройство ввода и присвойте ему имя.
  3. В файле конфигурации nDisplay добавьте запись для настройки устройства ввода VRPN, настройте его систему координат и подключите его к камере.

В следующем примере показан один из способов настройки системы отслеживания ART DTrack:

  • В файле Vrpn.cfg, расположенном рядом с exe-сервером vrpn, добавьте следующую строку:

vrpn_Tracker_DTrack DTrack  5000

Это заставляет VRPN получать входы DTrack от порта 5000 и отображать их на устройство VRPN с именем DTrack. (Убедитесь, что DTrack настроен на вывод данных отслеживания через порт 5000.)

  • В конфигурационном файле nDisplay добавьте следующие строки:

[input] id=CaveTracking type=tracker addr=DTrack@127.0.0.1 loc="X=1.32,Y=0,Z=0.93735" rot="P=0,Y=0,R=0" front=Z right=-X up=Y
[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" tracker_id=CaveTracking tracker_ch=0

Первая строка создает устройство ввода nDisplay с именем CaveTracking, которое извлекает данные с адреса VRPN DTrack@127.0.01. Вы должны адаптировать свою систему координат здесь, чтобы соответствовать вашей системе отслеживания и смещения. Во второй строке указывается nDisplay, чтобы он выбирал положения камеры с входа CaveTracking на канале 0.

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

  • В C++ используйте класс IDisplayClusterInputManager.
  • В Blueprints используйте узлы в DisplayCluster> Input. Убедитесь, что идентификатор, который вы указали в узлах, соответствует значению идентификатора, которое вы указали в файле конфигурации. Например:ndisplay_vrpn_api ue4

Изменение Портов Коммуникации

Система nDisplay взаимодействует между хостами через три порта TCP/IP: 14000, 14001 и 14002. Необходимо убедиться, что эти хосты открыты на всех компьютерах.

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

  • Порты Runtime synchronization (синхронизации времени выполнения). Главный узел использует два порта для синхронизации данных с другими узлами в кластере. Чтобы установить эти два порта, включите параметры конфигурации port_cs и port_ss в файл конфигурации в строке cluster_node, которая определяет ваш главный узел. Например:

[cluster_node] id=node_front addr=192.168.0.1 screen=screen_front viewport=vp_front port_cs=42001 port_ss=42002 master=true
  • Порты nDisplay Launcher and nDisplay listener. И nDisplay Launcher, и nDisplay Listener должны быть настроены на использование одного и того же порта связи. Вы можете указать это в командной строке при запуске этих приложений. Когда вы запускаете nDisplay Launcher, используйте аргумент listener_port. Например:

nDisplayLauncher.exe listener_port=15003

Кроме того, вам придется самостоятельно запускать приложение nDisplayListener на каждом хосте с аргументом порта. Например:


nDisplayListener.exe port=15003

Добавление nDisplay в Существующий Проект

Чтобы настроить существующий проект для использования nDisplay:

  1. Включите плагин nDisplay. В редакторе Unreal выберите Edit > Plugins в главном меню. Найдите nDisplay и установите флажок Enabled.ndisplay включить плагин ue4
  2. Включите nDisplay для вашего проекта. Выберите Edit > Project Settings в главном меню и найдите раздел Plugins > nDisplay. Установите флажок Enabled.ndisplay настройки проекта ue4
  3. По-прежнему в окне Project Settings перейдите в раздел Project > Description и установите флажок Settings > Use Borderless Window.ndisplay-project-settings-borderless ue4
  4. Перезапустите Unreal Editor, снова откройте ваш проект и откройте уровень вашего проекта по умолчанию.
  5. На панели World Settings установите для параметра Game Mode > GameMode Override значение DisplayClusterGameModeDefault.ndisplay-world-settings ue4
  6. Добавьте новый актер DisplayClusterSettings на свой уровень. Вы можете найти этого актера на панели Modes в списке All Classes.
  7. Продолжите с остальными инструкциями по настройке в разделе Начало в данном руководстве выше.

Справочник по Интерфейсу nDisplay Launcher

В этом разделе описаны все настройки и параметры, доступные в пользовательском интерфейсе nDisplay Launcher.ndisplay-launcher-ui ue4

Кнопка управленияОписание
Render APIУказывает API рендеринга, который будет использоваться при следующем нажатии кнопки Run.
Render modeОпределяет тип вывода, который производит nDisplay:

  • Monoscopic (моноскопический): без стерео рендеринга
  • Frame sequential (последовательность кадров): активное квадратное буферное стерео
  • Side-by-side: пассивное горизонтально выровненное стерео
  • Top-bottom: пассивное вертикально выровненное стерео

Моноскопический режим не требует каких-либо конкретных аппаратных функций, в отличие от режима Frame sequential. Убедитесь, что ваше устройство отображения, графический процессор и настройки драйвера совместимы с выбранным вами режимом рендеринга.

Use All Available CoresВынуждает каждый экземпляр Unreal использовать все доступные процессоры на своем хосте.

Когда выбрана эта опция, программа запуска nDisplay добавляет опцию USEALLAVAILABLECORES в командную строку, которую он использует для запуска каждого экземпляра.

No Texture StreamingОтключает потоковую передачу текстуры для каждого экземпляра Unreal. Текстуры самого высокого качества всегда загружены.

Когда выбрана эта опция, программа запуска nDisplay добавляет опцию NOTEXTURESTREAMING в командную строку, которую он использует для запуска каждого экземпляра.

Custom command line argumentsЕсли вы хотите, чтобы nDisplay Launcher передавал любые дополнительные аргументы в командной строке, которые он использует для запуска каждого экземпляра Unreal, включите их здесь. Подробнее см. в разделе Аргументы командной строки.
ApplicationsСписок всех упакованных приложений Unreal, которые вы можете запустить с помощью nDisplay Launcher. Используйте кнопки Add и Delete для редактирования списка. Для получения дополнительной информации см. Шаг 3. Упаковка и развертывание в данном руководстве выше.
Config FilesСписок всех файлов конфигурации, которые вы настроили для запуска nDisplay. Используйте кнопки Add и Delete для редактирования списка. Для получения дополнительной информации см. Шаг 3. Упаковка и развертывание в данном руководстве выше.
RunЗапускает приложение, которое вы выбрали в списке Applications, на всех хостах, которые настроены в файле, который вы выбрали в списке Config Files.
KillОтключает все экземпляры Unreal Engine, которые запускал nDisplay Launcher.
Start listenersЗапуск экземпляра приложения прослушивания nDisplay на каждом хосте, настроенном в файле, который вы выбрали в списке файлов конфигурации.
Stop listenersЗавершает работу всех экземпляров приложения nDisplay Listener, запущенных этим средством запуска nDisplay.
Deploy applicationКопирует приложение, выбранное в списке Applications, на каждый хост, настроенный в файле, выбранном в списке Файлы конфигурации.
CopyКопирует в буфер обмена все сообщения, перечисленные в окне журнала слева.
CleanОчищает все сообщения из окна журнала слева.