nDisplay and Cesium on UE5

Hello,

We utilize nDisplay with Unreal Engine for creating large-scale, spherical displays that are blended across multiple PCs using distributed rendering. We have an interest in showing Cesium on our display but are encountering some issues.

We can get Cesium to launch (Using the sample Denver scene with Aerometrix data) through nDisplay, however, the main issue we have is in the frustum culling.

Our setup is 4 views, that are placed together side-side-side-side, to create a 220 degree FOV. Here is a whiteboard sketch to hopefully illustrate this:

So, on the Unreal side of things, each of these views are defined inside of the nDisplay config. When you launch the application through nDisplay, it then utilizes the specified view instead of the main player camera in the level. This becomes an issue when Cesium does the frustum culling. See example picture here:

What’s happening here seems to be that Cesium is only using the FOV of the Player’s Camera inside the level, and not using the other frustas. See below:

So, with the explanation out of the way, I can pose the actual questions:

1. Is there any way to modify the bounds of the frusta that cesium uses for its culling? If not, can the culling be disabled completely so that the view is seamless?

2. Is there any possible way to map culling to the nDisplay outputs so that each PC is only viewing (and culling) what is in its own frusta. That way we don’t have to worry about rendering the whole 220 degrees for each slice.

  • Option 2 would be the preferred solution, but I am not sure if it is feasible to do that. The main benefit of distributed rendering is so that each pc only renders a slice of the fov, so having each slice cull what it doesn’t need would be the best performance.

  • It might be simpler, although less performant, to just widen the culling frusta to the whole 220 degrees and then, at the very least, the area behind the view would still get culled.

  • Last resort would be to disable culling entirely as that would have the worst performance, but should fix the problem.

So, any guidance on the above would be extremely helpful.

Thanks,

Dan Respess
Immersive Display Solutions Inc.

Hello Dan,

For starters, you can disable frustrum culling completely. This can be configured per-tileset in the tileset’s Details panel. But as you mentioned, it does load more tiles than needed for this scenario, so we’ll try to figure out other options. I haven’t used nDisplay myself, so forgive me if I’m incorrect about anything.

The first thing I’d recommend trying is creating additional camera actors that mirror the nDisplay views. Keep these at the same position as the primary view, but rotate them to cover the whole 220 degrees. Hopefully, those additional camera actors will be enough to prevent the final tiles being culled in the final application.

If that works, you may be able to distribute rendering across different PCs by disabling or enabling certain camera actors based on the view that the PC is rendering.

Let me know if this works, if not we’ll try to brainstorm something else.

-Alex

Hey Alex,

Apologies on the response time delay, been a busy 2 weeks, but we’ve made a lot of progress using your suggestions.

So firstly with the “Disable All” solution, we were able to test this out and it works perfectly. All of the views are properly displayed without any culled geometry that should be in their FOV. Of course, that means that none of the geometry is being culled at all, and the performance definitely reflects that. So we tried the Camera Based solution next.

I arranged the UE4 Cameras in the level to reflect the nDisplay config and I was able to get the view to match after forcing a specific camera to render with the Set Active node in the BP. Using that, I developed a simple toggle that determines which PC it’s running on and then sets the desired camera to active based on that. So far, this has worked great and it improves performance over the “Disable All” method considerably.

Thanks so much for your advice, we’ll be sure to reach out in the future if we encounter any more hurdles in our development.

Dan
Immersive Display Solutions Inc

1 Like

Hi All, I know this is an old thread but the information has been very helpful as we setup a similar installation. We may use these suggestions too aid us as well.

However, we are struggling with just the initial nDisplay launch with the photorealistic tileset and UE5.2. Project works well without a Cesium actor in the scene, but as soon as the tileset is added, the remote nDisplay nodes crash on launch. Any insight into distributed rendering issues with Cesium? Currently we have a single project location on a shared drive, but have also tested with local independent versions of the same project on each machine.

Any thoughts, insights, or tricks appreciated!

It’s probably worth taking a look at the log to see where exactly it’s crashing. If it’s tinyxml2 related, the workaround mentioned here may help:

I have also encountered the same problem. May I ask how to solve the problem of tiles not loading in multi screen situations?

This post may help you: