How to approach "long" game levels?


I am currently working on a game that has a world going all the way up to the guy sort of like a plattformer. Now I want to research about the best practices, specifically I want to keep an eye out on how to build my levels.
The player controls a pawn and the goal is to reach the summit. Like a plattformer. How could I make it optimized so its not too heavy? I am planning to scatter various props and plattforms but I am unsure about the best performance practices.

So essentially my question is what topics should I look into that its culled efficiently and only loads what needs to be loaded? My pawn can however fall down from the summit to the base of the game world if player ends up misjudging a jump. I know to merge actors to reduce drawcalls. Use as little collision geo as possible and all. But I am concerned about how to approach making a continious level optimized for lower hardware as well.

Thank you for any pointers in advance!

EDIT: while we re at it, is it possible to have multiple “lightbakes” in a continues level? Near the summit I would like to have the lighting be in a night state, so ideally I would change the skysphere, but would love to have the props etc in that level bake a directional light which was blue/night. So for each section a different light set up was used.

If it’s not on the screen, it will likely be culled efficiently by Unreal.

If you have a REALLY large level, you’ll want to build different sections as streaming levels, and use some kind of triggers to load/unload the levels (level sections) that aren’t needed. So, “level load” and “triggers” would be good to search for.

If you plan on moving to UE5: data layers could work just fine. As your player progresses, you can load / unload chunks of your level as needed via blueprint.

For example: (in theory) you can trigger via blueprint the new data layer to load with player height if you do not want to place triggers →

z= 40000-50000 → Not loaded / Next to load fi player goes higher
z= 30000-40000–> Loaded / to unload if player drops
z= 20000-30000 – > player’s location
z= 10000-20000 → Loaded / to unload if player goes higher
z= 0-10000 -->> Not loaded / next to load if player drops

You can also have different lighting on different data layers and load / unload as needed. You can test if hidden layer don’t get affected with current bake. An alternative is to have different postprocess volumes changing day to night with some color correction and patience; this will allow you to smoothly transition from one volumen to another.

Data Layers: World Partition - Data Layers | Unreal Engine Documentation

PP volume transition:

I’m currently learning most of this. Still hope it helps.

1 Like


I tested out level streaming and you can have different lightbakes in sublevels which is awesome!

1 Like