What's best: open level or level streaming for unrelated game worlds with loading screens in between?

Hi, in your guys’s experience, in a game comprised of different, totally unrelated, not physically connected worlds, which are in turn made up of multiple smaller levels, obviously related and connected to each other, what is the best way to organize your levels so that it allows for loading screens between these worlds, in such a way that your worlds can actually load while the loading screen is running (on a different thread). Is it through open level or level streaming. Loading screen would be animated.
Thanks.

Hey @AllGamesSuck!

So what you would want to do is use “Open level” for the worlds themselves, and then level streaming for the smaller connected pieces.

I think this thread said it pretty well, so I’ll link you to their description! :slight_smile:

1 Like

Thanks. Do you know if there would be any issues with level streaming, on cooking and such?
I read some people had lighting spill from one level to another on cooking.

That’s very much a “Your mileage may vary, cross that bridge when you come to it” situation. I hate to be “that person” but… planning is a very good thing to do, but once you’ve planned it is better to do something and figure out your issues than spend forever planning!

I know. The thing is, some of the code will be different too, depending which way I choose. So, I wouldn’t want to go back and change it. Like, level transitions, saving/loading, or who knows what else along the way.

I mean regardless of which way you choose, there are going to be hurdles. Check and test often, MAKE BACKUPS OF YOUR PROJECT REGULARLY, every day you work on it at minimum (I cannot stress this one enough and too many people don’t do this). As far as the lighting spilling from one level to another on cooking, that could have been an edge case, I haven’t ever run into that.

But with a million+ moving parts you’re going to have weird things happen. If someone had an issue with cooking lights, for instance, the issue isn’t level streaming- it is likely the static meshes or the lights themselves- placement too far into the static mesh so it doesn’t block the light, making the light part of the persistent level, etc. :slight_smile: You do the big stuff then figure out the small problems. But the way you are describing how you would do level transitions means you should definitely go the way of load the larger worlds with “LoadLevel” and then use level streaming as you go for performance reasons.

1 Like

You mean ‘open level’ on the large worlds?
The ‘larger’ worlds could also be partitioned for performance, right?

I learned that with level streaming there’s no need for save functionality for anything that resides in the Persistent level (except saving to disk), and you can actually get proper loading screens, not possible with open level unless you C++ your game instance to use a different thread for the loading screen. So it seems it’s the better option by far, unless there’s some serious downside to having all your game in one persistent level?

Yes, sorry, I meant “Open Level”.

You would use Open Level to load the primary piece (the Persistent Level) of your “not physically connected world” and then load in pieces as necessary with level streaming. Think of it like this:

You OpenLevel to go to “Paris”.
The streets and buildings are part of the persistent level.
You go to walk into a house. Before touching the door, the inside of the house does not exist. You touch the door handle, then stream in the “house 1” level, populating the inside of the house. You look around, then upon leaving, when the door shuts behind you, “house 1” is then unloaded to free up memory, so you can go into every house and have them detailed without having to load the entire city of Paris before arriving.

As far as larger worlds being partitioned for performance, you’re most likely going to just have to be creative with occlusion/frustum/distance culling and not overload the system with rendering absolutely everything. Hills and buildings in open world games are functioning as performance boosters! :slight_smile:

1 Like

Makes sense. The thing is, if you only go one way, you don’t have to adapt the code for both open level and level streaming.
I’m gonna try level streaming first and adapt later if I need to.
Thanks for the advice.

Yeah, so using level streaming for now. I’ll tick this as the solution. Will try to use one Persistent level for the whole game, it’s a lot more flexible than open level.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.