I have an aircraft actor which has multiple cameras attached to it, all can look in different directions in the world. With single camera there is no performance issues and frame rate is smooth, but when i register more than one camera and update its properties (location, rotation) in tick there is continous loading and unloading of tileset as usual but frame rate has dropped significantly (from 90 to 20) specifically when one camera zooms in to load highest LOD and other is still zoomed out. I have also tried to update the cesium camera in tick after 10 seconds but the issue remains. I guess it may be due to continous loading and unloading of tiles. Is there any workaround to improve performance?
Great question, are your additional cameras rendering essential to the applications functionality?
If your application incorporates multiple views - A performance hit would be expected as you’re rendering more, and viewing more 3D Tiles, potentially at a higher LOD. You can alter how many tiles are streamed in and out if you expand the cached bytes setting on the tileset itself, so that as tiles are loaded in they remain in memory, but it sounds like the lag you’re experiencing could be frame by frame on the rendering.
If you don’t actually need to view those additional views, but just want to load in more tiles around the user, then the suggestion is to not use cameras at all, and just register frustums to the camera manager representing where those cameras would be.
I hope that helps, any more info would help clarify some next steps you can take.
If I may enter the discussion, I believe I encounter the exact same issue as @dis_afise did.
The main issue for me is overlapping cameras, for instance a WIDE camera and a NARROW camera looking at the exact same location on the ground, both streaming their images.
For instance if you wanted to simulate a drone multi-camera system, you would exactly end up with this cameras setup.
The problem being that I want both streams uninterrupted, so I end up having one WIDE camera asking for low LOD over a wide region, while the narrow asks for a very high LOD on a tiny region contained within the large low-LOD one. If you disable the world update with WIDE, you will have missing tiles. If you disable world update with NARROW, then the NARROW image looks horrible.
This is the specific situation where my FPS also dramatically drop.
I’m curious to know if this is a performance hit due to multiple frustums in the Cesium for Unreal camera manager being considered, or if it inherently is due to the amount of rendering induced by 2 active cameras, one viewing high resolution tiles. Have you seen a change in performance between versions?
From what you’ve described this seems to be the most performant way to approach what you’re looking for.
I’m curious to know if this is a performance hit due to multiple frustums in the Cesium for Unreal camera manager being considered, or if it inherently is due to the amount of rendering induced by 2 active cameras, one viewing high resolution tiles.
Definitely due to multiple frustums, I run the same software with two cameras looking at different locations, one narrow and one wide, no issue whatsoever.
But the issue is not only due to multiple frustums, it’s imho multiple frustums looking at the same location with different FOV/LOD-requirement. @Kevin_Ring We can make that a gh issue with a proper repro methodology if you want.
I ran a test below without being able to recreate it, so if you could share the exact version of Unreal you’re using, and perhaps any other interaction considerations I might have missed, that would help.
I have two cameras, one rotating over the other, both registered as additional cameras in the Cesium camera manager. When they overlap I didn’t see any significant change in performance.
I’ve elevated this to the team to see if there’s any recent changes that could cause what you’re describing.
Throwing this into the chain, I ran into a similar problem. In Unreal 5.7.1 trying to utilize NDisplay in Unreal, I would get poor performance spikes every 3-4 seconds and the overall performance struggled. My NDisplay configuration did have overlapping viewports.
I rolled it back to Unreal 5.6.1 and the poor performance spikes stopped happening.