I’m working on my first game and I’m experiencing a lighting performance issue and I seek guidance from unreal wizards to defeat this curse.
Map size: 7300x6500
The game map consists of a building multiple rooms with interactive lighting in each room and the rest of the map without lighting.
Nanite is enabled in all meshes that are opaque.
All lights mobility are set to stationary with the Attenuation Radius around 500.
Screenshots are made in the worst performance location.
Game runs at 40 fps on my high end PC
-CPU: AMD Ryzen 7 3800X
-GPU: NVIDIA GeForce GTX 1080
-RAM: 64GB DDR4 3000Mhz
And it runs at around 15fps on my Gaming notebook.
-CPU: Intel Core i5-8300H
-GPU: GeForce GTX 1050 4GB
-RAM: 8GB DDR4 2400 MHz
How can I remove or mitigate this loss of performance?
All lights on in-game
All lights switched off in-game
The drop in FPS seems reasonable to me considering the lower powered hardware in your laptop.
You can do some things to make sure you’re getting max performance in a laptop:
-Make sure you’re plugged in, usually performance gets throttled when you’re on battery
-If you have an Intel processor along with an Nvidia GPU it will try to switch between the Nvidia GPU and the low power GPU that’s integrated with the Intel processor, you would want it to use the Nvidia GPU for something like UE4 but Windows isn’t good at doing that properly and I’ve found that you can ensure that you are getting the most out of the Nvidia GPU by setting it as the default with no switching, it would result in a greater power usage (battery will drain faster). Open the Nvidia Control Panel and go to the 3D Settings category and then set it to use the Nvidia GPU as the global default, you can’t just assign Unreal to use the Nvidia GPU you have to set it as the default for everything.
Thanks for the reply, I’ve packaged and sent my game to close friends to test the map layout and performance and even they, that have similar specs, are experiencing on average 20~30 fps. I’ve been think in either turn Lumen off or try to find a way to cull lights in rooms that I can’t see, as I’ve readed that streaming a level with only the lights of a room won’t work as if any of the players activate the stream volume players will load the level.
Edit1: Found out that there is an option for Client side level streaming, I’ll try to work on that.
You can use the light distance culling. Really though, you need to actually profile your scene, otherwise you’re optimizing blind.
Thanks for the reply,
I don’t know much about profiling but I used the “stat initviews” to see what was happening and not added it to the Screenshots to not hide the scene. The 3 main factors that were dropping the fps were 1st Init dynamic shadows, 2nd Oclusion Cull and View Visibility;
I tested distance culling but I didn’t liked the results as the location of the screenshots was by far the worst as it gives the player a view range of the entire building width.
I’ve been getting improvements with the level streaming on client side. In the same position I’m getting 90 fps, as the other lights that were rendering behind culling and culled objects are getting unloaded and the 2 most troublesome factors that were Init dynamic shadows and Oclusion Cull dropped significantly.
I’m still testing some other factors, I’ve modeled one object for each Floor’s floor, walls, footers, etc… and I’ve readed posts that large complex objects are bad for performance. You think that I should segment the walls,floors, etc… or it doesn’t matter with nanite?
PS:All the measurements were taken with all Engine Scalability Settings on EPIC, I’ll need to investigate more about it later.
Run the project in standalone and press
ctrl shift ,
It will open the GPU profiler and you can expand all the categories to determine where the time is being spent to render each frame