Parallelize camera rendering for multi-cam robotic system to increase FPS performance

Dear Unreal Engine enthousiasts,

Would anyone of you know how to parallelize rendering of multiple cameras in Unreal Engine in order to reduce GPU computation time?

Let me explain. My team and I are developing a multi-cam system for an underwater exploration robot. We are currently using 8 cameras (in addition to the actor’s main camera) placed around the robot to continuously stream its surroundings with 1280x800 images for feature tracking and ultimately pose estimation. In contrast to the feed of the main camera, those 8 additional camera feeds are not displayed on screen, but added to a buffer and sent over ROS topics for further computations.

Even though we develop our simulated environment with Unreal Engine on a Windows 10 machine with an “NVIDIA GeForce GTX 1660” GPU, the more cameras we add to our multi-cam system, the lower the available FPS as shown in the following graph (“in” and “out” simply means inside and outside a simulated ship ballast, indicating that the more details are visible from cameras’s perspective, the less FPS are finally available; from this graph, we also observe that the lower the resolution of the cameras, the higher the available FPS):

Since the CPU and GPU work together to render the images (as explained here, we believe that the GPU is bottlenecked by the fact that the draw calls required by the CPU to handle the 8 different camera feeds is too heavy.

Indeed, our FPS loss is caused by the fact that the rendering of the images perceived by each of the cameras is apparently executed sequentially and not in parallel as shown in the GPU profiling figure below (obtained with the GPUProfiling console command after launching the game):

Due to the fact that each rendering is processed one atfer the other, we are currently running at 3 FPS with 8 cameras in addition to the main camera. A temporary (but viable) solution we found is to not activate “ray tracing” (representing in total about 60% of the rendering computation time as shown in the following image), which allows us to go up to 15 FPS:

We are not experts in video game development and would like to ask the Unreal Engine community for advice. Do you have any knowledge of a way to eventually parallelize the rendering of multiple cameras in order to get enough FPS while keeping the ray tracing setting on? Is such a method actually possible with Unreal Engine?

In advance, thank you very much for your time and your wise advice!

Keypoint summary:

  • Operating system: Windows 10
  • Graphics card: NVIDIA GeForce GTX 1660
  • Unreal Engine version: 4.26.2
  • Challenge: rendering multiple cameras in a parallel manner (not to be displayed on screen but to be added to a buffer), more precisely 8 cameras of resolution 1280x800, with decent FPS performance even with ray tracing option enabled
1 Like

Hi @Antho_1426, have you found any solution to this issue?

We’re preparing synthetic datasets in Unreal Engine 5.2 that are rendered from 4 different cameras at the same time. Synchronization is the key here, so it needs to be done in the same tick. I’m looking for the solution how to make it parallel.

My idea for this issue is to use multiplayer mode and render from multiple clients (each would render only one camera), but I don’t know if it will be possible to make perfect synchronization this way.

Hi @da.st did this solution work for you?