Cesium3DTile LOD issues with N-Display

Hi all,

I am currently working with Unreal 5.7.1 with an application that is 1 computer connected to three projectors. The hope is to connect to my Cesium ion Self Hosted server on docker to serve world tiles to my application.

I have found that when I am running an application without N-Display enabled, everything runs perfectly fine with regards to both performance and 3DTile LOD which do not transition much at all. However, when I try to run this application by setting an N-Display configuration for the 3 displays, the terrain 3Dtiles both near and far will shift in and out LOD qualities as my character moves.

I have both Preload ancestors and siblings set. I have tried a myriad of options including:

  • Decreasing the Maximum Screen Space Error\
  • Increasing cached bytes
  • modifying the Maximum Simultaneous Tile Loads and Loading descending limit
  • Reducing the number of viewports (different combinations of 3/2/1 projectors)

The above all have impact on performance (usually increasing the latency/loading times) but the LOD of items still appear incorrect.

What can I do to get my application to have the terrain tiles to be as consistent as possible when using N-Display? My goal is to have the Level of Detail remain exactly the same at any distance, but changing settings like Maximum Screen Space Error does not seem to do so, nor is it necessary when I am not using an n-display configuration.

Thank you!

1 Like

I did get the solution for this. From what I understand and any Cesium employee can come correct me, but the CesiumCamera frustum needs to view the entire region in which the program is being ran. The CesiumCamera is automatically placed in the same position and rotation as the default/main player camera with the same FOV.

When I ran the non N-Display program, this worked perfectly fine because there was just a single camera and the program’s viewport came from that camera. When using N-Display (especially with the simple projection policy for my 3 projectors), this camera was only able to apply to my camera that had a 90 degree coverage of the ~140 degree view. After recreating the cesium camera with the right field of view in the right orientation and updating it every frame with the position of my character, it worked correctly.

Here are the supplementary links that helped get me there for my c++ iteration of this.