Level Streaming workflow and non-environmental levels - a question to experienced devs

We recently started fully utilizing level streaming for our environments, and it seems like a super powerful feature for optimizing large worlds, for lightmass rendering, and general good compartmentalization and organization of levels. I’m really impressed with the in editor sub-level system and the in-game level streaming system, they are a real pleasure to use.

While the most common use for level streaming seems to be maps containing environments (and every single tutorial I’ve seen on the subject only talks about enviros), I was wondering if it’s also common practice to use level streaming for different game modes or “missions”, or if there is something more appropriate for that.

Here’s a gameplay scenario that I was hoping level streaming might be ideal for, but I’m not experienced enough to foresee potential drawbacks of this, and I’m not sure if this is a common practice for mission / game mode design:

Persistent level

  • Landscape
  • Building A
  • Building B
  • Building C
  • Mission 01

Where the Landscape, Buildings ect are sub-levels which contain actual environments, but the level Mission 01 is a sub-level which contains no environmental assets, but an NPC character you can interact with and the necessary programming / assets for a basketball jump-shot minigame. Maybe the static basket mesh and the physical surroundings are part of Building A, but a collision volume to detect the basketball, and the basketball itself along with a character giving you instructions are all in the Mission 01 level - and if this level was opened on its own, it would just be a bunch of floating assets.

Then if you complete this minigame, Mission 02 gets streamed in, and the NPC tells you to go away to another location, and Mission 01 gets streamed out once you’re on your way to the Mission 02 location which contains the assets for another minigame.

It seems like it would be a great way to build a game where multiple missions take place in a persistent environment (which is exactly what our game is), but I’m hoping to make sure there’s no better way / drawbacks to using level streaming in this manner before we set this up as our project’s workflow.

If anyone has any insight or could share their experience with stuff that might be relevant, I would really appreciate it :o

It depends on the complexity of the levels and the overall game design. If you want the whole cake then you’d make Mission 01 a sublevel of building A. From the assets it’s not that heavy it seems. If you get performance problems you might wanna play with the “minimum time between unload requests” setting. In the end the more complex your levels the more memory they will consume. So if your landscape is very huge it would make sense to have the buildings in seperate levels. Something like entering a building and having it streamed makes sense from a performance view. The whole basketball game should be a piece of cake since the bottleneck is usually only loading too many and too complex geometries and textures at once. In the end you’ll know how you have to approach this after you gave it a test drive on several different machines or platforms. Test early, test often. The more it lags the more you tend to segment it into different levels or sublevels.