Unreal Engine: Multi-Display Rendeirng with nDisplay Plugin

3 minute read

Published:

(work in progress…)

When it comes to multi-GPU and multi-display rendering (e.g., rendering a display wall), the Unreal Engine’s nDisplay plugin could be very useful. In my earlier rendering career, I had handful experience on real-time multi-machine rendering. I am writing this blog from my experience of 2020-2021. Meanwhile many things may change or updated. I will cross-check at my convenient time. The alternatives of nDisplay could be SAGE Web Application and NVidia Mosaic. However, the NVidia Mosaic comes default with the high-end GPUs, e.g., NVIDIA Quadro M4000 and higher. It allows warping (geometry corrections) and blending (intensity adjustments). Moreover, the software spans any application across up to 16 high-resolution panels or, projectors from a single system.

Now, back to the nDisplay plugin. The nDisplay runs in three ways: (i) from the project template (.uproject), (ii) as an executable (File >> Package Project >> Windows), and (iii) enabling nDisplay in existing project with nDisplay plugin. I will follow the first approach, running from project template.

Running from Project Template

nDisplayLauncher.exe (\Engine\Binaries\DotNET), nDisplayListener.exe (\Engine\Binaries\DotNET), configuration file (.cfg), and VRPN (virtual reality peripheral network) are four important attributes for working with nDisplay.

  • Find the nDisplayLauncher.exe and nDisplayListener.exe under UE_version >> Engine >> Binaries >> DotNET folder. I used Unreal 4.24 version.
  • Run nDisplayLauncher.exe, Add the configuration file and hit Run
nDisplay diagram
Figure 1. nDisplay layout.
  • It is also possible adding nDisplay after packaging the project as project_name.exe. For that,
    • find the UE4Editor.exe under UE_version>> Engine>> Binaries >> Win64
    • add nDisplay in existing project, See More
    nDisplay diagram
    Figure 2. nDisplay layout.

Virtual Reality Peripheral Network (VRPN)

VRPN converts data from most devices to mostly three types: Tracker, Analog and Button. The Tracker type holds a position and an orientation. The Analog type is used for any type of axis: joystick axis, mouse axis. The Button type is used for any type of binary button: joystick button, mouse button (See more).

  • We need vrpn_server.exe and vrpn.cfg file. The version should be 7.33.
  • A complete list of VRPN supported trackers can be found here. The devices currently do not support VRPN, need to manually add in the source code. Instructions can be found in Client side VRPN Devices and Creating a new device class.

nDisplay Sync Option

Synchronization is not compulsory for large number of displays, but optional for better performance. The Synchronization supports NVIDIA Quadro Sync for frame consistency, flexibility, and scalability. Some of the high-end compatible GPUs are (2021 list):

  • NVIDIA RTX™ A6000
  • NVIDIA RTX™ A5000
  • NVIDIA RTX™ A4000
  • NVIDIA A40
  • Quadro RTX™ 8000
  • Quadro RTX 6000
  • Quadro RTX 5000
  • Quadro RTX 4000
  • Quadro GV100

For more about Quadro Synch II, Check.

Trouble Shooting

  • The project need to be in a common folder for all the nodes. A google drive can also work for this purpose.
  • I previously saved the project in master machine and shared with slave machine. But it did not work until I save the project in the slave machine.
  • Address will be the IP address of the computer running this Unreal Engine instance. Must be an IPv4 address, IPv6 is not supported.