VR CAVE optimization issue [nDisplay]

Hello, I’ve been trying for a few weeks to optimize the perfomance of Unreal Engine in our VR CAVE, but with very limited success.
I’m running Unreal Engine in our CAVE using nDisplay and Switchboard. At first without any change, the official nDisplay template was running between 10 and 20 FPS. Then I used the Perfectly Optimized template (I only kept DirectX12) and now it runs at 35 to 45 FPS. I created a new nDisplay configuration, and tried different variations, like putting one viewport per node, or putting two viewports in one node, etc. But it never really helped achieve stable 60 FPS (which is the max output that our projectors can deliver for one eye).


I used the Stat UNIT command to gather some statistics :

When the whole CAVE is running (using the one viewport per node config) :
(Stats from the Control PC node, but the other nodes have more or less the same values)
FPS : 31
Frame : 33 ms
Game : 25 ms
Draw : 27 ms
RHIT : 29 ms
GPU Time : 9 ms

When only the nodes of one Render PC are running :
FPS : 36
Frame : 27 ms
Game : 9 ms
Draw : 27 ms
RHIT : 21 ms
GPU Time : 2 ms

When only one node is running :
FPS : 60
Frame : 16 ms
Game : 4 ms
Draw : 16 ms
RHIT : 13 ms
GPU Time : 3 ms

When only one node is running and Render Sync Policy is set to None:
FPS : 280
Frame : 3 ms
Game : 2 ms
Draw : 3 ms
RHIT : 1 ms
GPU Time : 2 ms

When using the 2 Render PCs (no Control PC) and two viewports per node in the nDisplay config :

FPS : 36
Frame : 25 ms
Game : 9 ms
Draw : 26 ms
RHIT : 20 ms
GPU Time : 3 ms


Our current CAVE setup :

Our CAVE is composed of 3 different faces : 2 walls and 1 floor. Each face is split into two parts, so we have a total of 6 screens. Each screen’s image is projected using a BARCO F80-09 with active stereo enabled.

Projector config :
Input 1 : DisplayPort 1 | EDID : 2560x1600@60Hz
Input 2 : DisplayPort 2 | EDID : 2560x1600@60Hz
Stereo : Sync Delay : 0 | Dark Time : 1600
Display Mode : Display Setup : ActiveStereo | Frequency 120Hz


Computers config :

We have 3 computers running on a local network for our CAVE. 2 are for render and the other one is for control. Render PC config (same for both) :

CPU Intel(R) Xeon(R) Silver 4215R CPU @ 3.20GHz 3.19 GHz (2 processors)
GPU 2 x NVIDIA RTX A6000
RAM 128 GB
Synchro Card: NVIDIA QUADRO G-SYNC II
OS : Windows 10
DirectX : DirectX12
Internet access : No

Control PC :
CPU Intel(R) Xeon(R) W-2225 CPU @ 4.10GHz (4.10 GHz)
GPU NVIDIA RTX A4000
RAM 64 GB
Synchro Card : None
OS : Windows 11
DirectX : DirectX12
Internet access : Yes

On each Render PC, one of the GPUs is connected to 2 projectors (4 outputs) and the other to one projector (2 outputs), so each Render PC must render 6 windows. We are tracking the user’s head movement using Optitrack.


Config nDisplay :

GPU : Each node is set to use the graphic adapter the output is plugged to.
Render Sync Policy: Ethernet
I tried using the NVIDIA Mosaic with Render Sync Policy set to NVIDIA and all the viewports under one node set to fullscreen, but it didn’t improve the performance.
All the viewports have the same dimensions as the nodes they are in.
Render API : DX12
Render mode : Mono

I tried launching it as both a standalone and a packaged game, but saw no significant improvement when launching as a packaged game.
All the LiveLink/Optitrack components were disabled for the tests.

I suspect the bottleneck might be related to the CPU or a synchronization issue, but I’m not sure how to address it.

Feel free to ask if you need more details. Any suggestions to improve performance are very welcome!