Table of Contents |
---|
About nDisplay
The Unreal Engine supports advanced Igloo structures through a system called nDisplay. This system addresses some of the most important challenges in rendering 3D content simultaneously to multiple displays:
...
Why Use nDisplay over the Unreal Toolkit Plugin
There are some inherent problems with the Unreal toolkit that are difficult to overcome. These include:
...
Warning |
---|
The only current issue with nDisplay is the lack of a method to input warps generated by the Igloo system. Requiring the use of scalable to do curved screens at this stage. |
PC Specification for Igloo
The main machine will be the same as the ICE machine. It should be high specification as it will be the center for the models, as the master node. However it will only need to output a single display, and not output anything to the projectors (only the console monitor)
However, it will be responsible for starting Unreal and telling all the other PC’s what to do, as it will be the Master node on the above diagram.
The individual machines will be infrequently used, and will need to be ‘gamer’ ready. This is due to Unreal not outputting it’s best when using Quadro based graphics cards. It also means they can be off the shelf cheaper products with a decent warranty. They can also be specified as smaller form factor machines to fit nicely into a server rack.
A company called MK1 Manufacturing make a wide range of lenovo rack mounting solutions, and could be commissioned to make one for their gaming machine chassis.
Possible solutions could include the LOQ machine, and the Legion T5 machine.
Info |
---|
Further conversations need to happen with Bill to recommend something suitable for a cluster solution. |
Setting up nDisplay within Unreal
Prerequisites
Unreal Version 4.4 or newer.
The computer should be capable of running Unreal Engine, based on these recommended specifications.
A New Project
Epic games have kindly given us a template that sets everything up for you. If this is your first time using nDisplay, Igloo highly recommends creating a new project using this template, and experimenting with the config file.
...
Finally, select a location for your new project, and wether weather you would like to include Starter Content, and enable Raytracing. I would recommend disabling Raytracing for your first project unless you’re familiar with it.
Always Disable Raytracing. It’s not fully supported by nDisplay
...
Upon selection of Create Project the editor will begin to unpack and create the project at the location you have specified. This might take a long time depending on your computers specifications.
Info |
---|
It’s a good idea to create the project within a location that is easy to share on a network. This makes it a lot easier to create the cluster further into the nDisplay pipeline. |
Existing Project
Open your project, and navigate to the Plugin’s window. Search for nDisplay and Enable the nDisplay plugin. This plugin is included in Unreal 2.46 and newer.
...
Tip |
---|
You’ve now added everything to an existing level that is required to get nDisplay working correctly! For advanced systems, please refer to the Unreal Documentation for more guidance. |
Building a project
[How to build the project, and where to place it once built. Adding the listener.exe, and where to find that. Placing the built version within a network shared location./]
...
Info |
---|
Whilst at this location it’s also a good idea to create a shortcut to the nDisplayLauncher.exe by either adding a shortcut to the desktop, or pinning it to your start menu. We will be using this application further in the process. |
Creating the config file
A config file is required to inform each of the machines within the nDisplay cluster, on how to create the various nDisplay components. Luckily Epic has given us a lot of examples of how this configuration file should look. They can be found at this location within your engine folder:
...
Note |
---|
If you edit a config file and save it, you will need to load a different config file, and then re-load your original config file to see the changes you’ve made. Or you could edit the DisplayClusterRootActor.h and add a reload button in. |
Config file with Scalable
Within Igloo structures, instead of creating the setup using the config file, we can create a barebones file, and instead use Scalable to create the screens, blends, and systems.
...
For instructions of editing scalable configuration file, it can be found further into this guide.
Using Scalable to generate warp and blend files
Setting up Scalable for the first time
Once you’ve registered for scalable, purchased a license, or signed up for the free trial license, you will be given a download link for Scalable’s software; Display Manager.
...
You will be greeted with a wizard type system, with 4 pages. The first being:
Display Clients
The Display Clients panel presents an interface that allows you to setup the connections to the remote computers. The right side of the panel shows the displays connected to the current system, while the left side shows all available Display Clients.
...
Use the Display Client on the Local Computer
If the computer running Scalable Display Manager is the only computer used in the system, select the radio button Use Local Display Clients Only. No additional setup is required in the Display Clients panel.
Display Clients on Remote Computers
If your Scalable Display Manager configuration will require connecting to one or more remote computers, select the radio button for Use Remote Display Clients.
Set Up Remote Computers
Note |
---|
One of my Display Clients is not showing as a client available on the network Display Clients are detected on the network using multicast. Standard network troubleshooting is appropriate when they do not appear in the list of Display Clients available on the network. Make sure that:
|
Add a Display Client to the System
Scalable Display Manager automatically detects all Display Clients on the network subnet. The status of each Display Client is displayed in a colored square to the left of its network identifier.
...
Warping and Blending in the graphics card requires Nvidia Mosaic Mode. Please check the website for the latest recommended version of the Nvidia Quadro driver.
Projectors Panel
...
The Projectors panel should accurately reflect the number and resolution of the displays connected to your computer, however Scalable Display Manager can only auto-detect certain common resolutions. If it is unable to detect the current resolution of your display(s), the most common response is that it will simply show a single display at the combined resolution of all your projectors.
...
Here is an example of a 20% overlap setup:
...
Enter the Projector Arrangement
Select the physical arrangement of the projectors: Tiled, if the projectors are next to each other, or Stacked, if the projectors are on top of each other.
Select the number of projectors in a row.
Select the number of projectors in a column.
Click Redetect Displays to save the settings.
Order the Display Clients
The order of the display clients will have a direct effect on the projector numbering. To properly order projectors, set the displays such that the left-most projectors on the blended display appear first in the list. To change the order use the arrow key to move the computer IP up or down.
...
Cameras Panel
...
Basic Camera Configuration
Verify that the number and type of cameras detected by Scalable Display Manager correspond to your system. If the Automatic type doesn't detect the camera configuration properly, please choose your camera type manually.
Info |
---|
If multiple cameras types are connected to the computer, make sure to select the camera type you will use to calibrate. |
Advanced Camera Configuration
The Advanced Camera Configuration allows the user to grab a subset of the total cameras and arrange the order based on serial numbers.
...
Data Collection
...
Adjust the Camera Settings
For a proper calibration, it is necessary to focus the camera and adjust its exposure settings. If the camera captures an image that is too bright it will have difficulty detecting the calibration spot patterns. Similarly, not focusing the camera will reduce the accuracy of the camera detection and may cause artifacts in the resulting warp and blend. It is thus important to make sure the camera(s) can see the entire screen and are capturing well-focused and properly exposed images.
Camera Brightness
Note |
---|
The projectors must appear to be brighter than the ambient light on the screen. If the projectors are coming in at odd angles and have a significant intensity falloff, then the darkest portions of the projectors should be much brighter than any stray light on the screen |
...
If after manual adjustment the image brightness still has saturation problems, click the Auto Tune button. A series of pictures will be taken to auto-adjust the camera. If the image is not normally saturated after the Auto Tune, you may need to manually adjust the camera's brightness. Follow the instructions below for your particular camera.
Begin Data Collection
Click Begin Data Collection.
...
Next, two images will be displayed on each projector, starting again with the first projector and going in order to the last. The first image will be a 5-dot pattern which is used to determine the center of the projected image. The second image displayed is the grid pattern which is used to map where the pixels are falling on the screen.
White Pattern | 5 Dot Pattern | Grid Pattern |
---|---|---|
What to do if an Error Occurs
Most errors encountered during calibration are caused by poor camera positioning or improper saturation of the camera image, resulting in the inability of the software to detect the calibration patterns being displayed. When an error occurs, click the link labeled Click here to troubleshoot this error in the error message window. This will open a browser with the suggested solutions for this particular issue.
...
Data Collection Error Actions
Some of the most common errors encountered during the data collection process have been included in the Error Actions. Error actions allow you to ignore issues with the data collection images which do not inhibit the data collection.
...
The software can not discern the difference between a projected image that does not fill the screen and one that fills the screen but spills off.
End Calibration: In this case, the calibration should be stopped so that the camera can be re-positioned to see the entire projected image. | |
Ignore and Continue: The error action is expected and triggered because the projector is overshooting the screen. Continuing will not cause any issues. |
Choice | Description |
---|---|
Remember this action for this projector for session | Do not stop the calibration for this error on this projector until the software is restarted |
Remember this action for this projector forever | Never stop the calibration for this error on this projector |
Remember this action for all projectors for session | Do not stop the calibration for this error on any projector until the software is restarted |
Remember this action for all projectors forever | Never stop the calibration for this error on any projector |
Projector Visibility
Be careful when editing
Removing a projector from the visibility list for a camera can result in unwanted warp and blends and often cause the system stop calibrating
...
Scalable setup within nDisplay
Once you’ve got your scalable calibration correct, you’ll need to enable perspective mode to export the data to Unreal. To do this click on the Perspective button on the left panel, and then tick the ‘Use Perspective Mode’ button on the menu. You will then need to re calibrate to generate the perspective outputs.
Essentially that is all that’s required for standard nDisplay, from Scalable’s perspective.
However, if you’re using head tracking, it is required that you adjust the eye level to the correct height, for where the exact center of the room will be.
Exporting Data to Unreal
Once your screen has been calibrated using the Scalable system, the master machine will have saved the DataSet to it’s C:/ drive, in the following folder:
...
Note |
---|
Don’t Cut the files, as they are still referenced by Scalable. It may cause a re-calibration resulting in a new dataset. |
Creating Scalable nDisplay config file
This can be created from scratch, or by copying an nDisplay config file, our our sample file below.
Expand | ||||
---|---|---|---|---|
| ||||
You are welcome to copy this file, and expand on it. You should save it as a .cfg.
|
Scalable Config Explained
Header Info
[info] version=”23”
This is the config file header, it specifies the version of Unreal that it supports. It’s best to leave this at default “23” otherwise it causes issues.
Cluster Nodes
[cluster_node] id="node_main" addr="10.1.5.110" window="wnd_all" master="true"
...
Additionally you can also specify:
- which node is the master (there can only be one)
- which node has the sound output (master by default)
- The various ports used for synchronization between the machines (ports 41001 → 41003 are used by default)
Windows
[window] id=wnd_all fullscreen=false WinX=0 WinY=0 ResX=1920 ResY=1080 viewports="vp_1"
...
Additionally, you can also specify ‘Fullscreen’ which is useful if you have a single display output (or a mozaic/eyefinity output) which will increase game rendering capabilities.
Viewport
[viewport] id=vp_1 x=0 y=0 width=3840 height=1080 projection=proj_easyblend_1
...
The projection value, explained below, is which projection policy will be used
Projection
[projection] id=proj_easyblend_1 type="easyblend" file="D:\LocalCalibration\ScalableData.pol" origin=easyblend_origin scale=1
...
Info |
---|
If you are using one machine, with multiple screens, each screen will have it’s own .pol file. |
Camera
[camera] id=camera_static loc="X=0,Y=0,Z=0" tracker_id="ViveVRPN" tracker_ch=0
...
parent - ID of the parent component, default is VR root
tracker_id - the ID of the tracking device, default there is no tracking.
tracker_ch - the ID of the tracking device’s channel (default 0)
eye_swap - swap eyes if in stereo mode; default is false.
eye_dist - distance in meters between the eyes, default is 0.064.
force_offset - force’s a mono camera to behave like a stereo camera, eye_offset works for this behavior too.
Scene Nodes
[scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0"
[scene_node] id=easyblend_origin_1 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0"
...
With simple camera systems, a projector will be paired to a scene object, which would require you to position, or offset the scene object to place the projector correctly. With scalable displays this is not the case, you only need to create as many scene objects for your projectors, the rest is handled by scalable.
Input
Code Block |
---|
[input] id="ViveVRPN" type="tracker" addr="openvr/controller/LHR-8708C47F@10.1.5.169:3884" loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" front="Y" right="-X" up="Z" |
...
type - The specific type of hardware used, options include: tracker
for a tracking device.analog
for a device that produces axis data.button
for a device that produces Boolean button data.keyboard
for a standard computer keyboard.
addr - the address of the server data, if using OpenVRPN you will need to change the IP address to match the machine hosting the server (port 3884 is default), and then also change the Tracker ID which is available in SteamVR Options → configure trackers.
loc - Initial offset (meters)
rot - Initial rotation (Euler)
front - axis mapped to forward direction
right - axis mapped to horizontal direction
up - axis mapped to vertical direction
Other settings
The rest of the settings are explained in more detail within the example files. 99% of the time the defaults are perfect.
Creating a network storage solution
Making nDisplay extremely easy to update and configure requires the use of a NAS (network accessible storage) device. Without it, you would need to manually update each machine with a new version of the Unreal build, and configuration. Instead, all the machines can work from one file, on one machine, that is shared with all of them.
...
It would be beneficial to create a script that copies the files from the shared location, to a standardised local location on the individual machines, whenever they are updated. This stops any errors that could occur due to the same files being accessed by different machines.
nDisplay Launcher
Once you have your Project deployed successfully to all the computers you've identified in your configuration file, you can use the nDisplayLauncher application to start the Project on all computers simultaneously. You should only run this on your master machine, or a console machine (it doesn’t have to be a machine with the unreal project on, it just needs to be on the same subnet. )
...