We have a large number (~10) of security cameras that have to be visible at the same time. These use SceneCapture2D actors and have a very large impact on the overall FPS.
While trying to optimize these, I noticed that a number of options such as their resolution and post post-process settings have very little influence. Even at 1x1 pixels they cause a very large performance hit, which seems to indicate that they have quite a large overhead per SceneCapture.
One area that I suspect to cause this is shadow map generation. It seems like each capture causes a large number of unique shadow maps to be generated. In UE3 there was an option to render SceneCaptures without dynamic shadows, however I have no idea how to achieve this in UE4.
Is there a way to render these without dynamic shadows? In addition are there any other possible ways one can optimize SceneCaptures?
We are working on some mip map generation improvements to the screen capture components which could help with your performance issues, but I don’t have an ETA for you on that.
You may have tried this already but you could change the settings to not use HDR in the rendertexture (which can be more costly) and change your scenecapture actors to use Final Color and not Scene Color (HDR). This would probably bump your build time up a little, but could save on the runtime performance hits.
I am attempting to reproduce this problem but I am not noticing a significant hit to FPS for the 10 cameras I have set up. Can you give me some screenshots of your setup so I can try to reproduce and find a solution for you. In addition to the screenshots, some information on the lighting and how the player is viewing the rendered scene captures would help.
I wanted to check really quick have you in your scene Capture 2D actors reduced the Post Process BLend Weight to 0.0. It should be in the Details Panel all the way at the bottom under Post Process Volume. That significantly helped my FPS on the test level I am work in, mind you I am still setting right at 30 FPS. Let me know I am looking into the code is the shadows are removable or not.
I tried that but noticed little impact as it still used the global post process settings from the volume in the level. So instead I have set the post process settings to override the more expensive effects such as lens flares. This had a small but noticeable impact. Further experimentation resulted in now almost reaching 20 fps. (Compared to ~80 without them) For other having similar issues: the main things that helped were reducing dynamic shadows to a minimum and limiting the captures draw distance as far as possible.
More control over the lighting quality of the scene captures, independent from the main scene rendering, would be greatly appreciated in the future.
On a related note: we tried to selectively disable the scene captures for certain players in a multiplayer environment but have not yet been able to successfully do so. Should this be possible? As this would at least solve the problem for players that are not looking at the camera feeds.
I am glad you found a least the beginning of a way to solve your dilemma. You should be able to set what is and is not replicated on a multiplayer game. I will continue to look into the scene capture performance issues for you.
I wonder if it’s possible to deactivate the automatic capture on movement. I currently have on of them attached to my pawn just for being able to make screenshots which I would like to use as textures somewhere.
In code, yes it would require some heavy lifting (coding), but in Blueprints there is no way to not have a Scene Capture Component not render on movement.
You could have a bit of a workaround where you make a socket on your pawn and place the SceneCapture in a separate Blueprint then when you want to take a screenshot you move (teleport) the SceneCapture Actor (the BP) to the Socket location which is in your pawn and call the Update Capture function, then let it live in this new spot until you need it again and repeat.
Hi, was there anything improved during the last 1.5 years regarding options to make SceneCaptures less expensive? I still can’t find a way to disable shadows for them and unfortunately I still get the same issue Arnage mentioned almost 1.5 years ago.
Just a clarification. There’s no way to disable a scene capture component using blueprint? If I pull off the object pin I do get access to a variable called “active” but setting this to false doesn’t seem to do anything?