So in my currently project I’m using Load Stream Level & Unload Stream Level when approaching and exiting doors to load in and out my levels. There are no landscapes in the levels, only static meshes but the problem is that when streaming in and out the game stutters slightly. Is there a solution to this?
I have looked into World Composition but that looks like its mainly for larger scale landscape levels rather than static mesh levels.
The hitching/suttering is usually caused by the unloading, not the loading. The unloading seems to not be asynchronous (unlike the streaming-in, which is). We had the same problem on the game we shipped and unfortunately could not find a proper solution, but you can mitigate a lot of it by:
Spacing out your level unloads. In our game we would stream in a level and immediately (like, the next node), unload 2-3 levels. This created a very noticeable hitch. We spaced out the unloading by putting a small delay in between each node, but it doesn’t get rid of the hitching entirely.
Designing your way out of the problem. If your streaming is all done at choke points in your level (such as doors), you can hide the hitching by unloading, for example, at the start or end of a door opening animation (where you take control of the camera for a short time) during a part of the animation where the hitching won’t be noticeable , or during a fade to black, etc. On our project, we had cinematics at certain points in the level, and we used the fade to black that started each cinematic as an opportunity to unload a bunch of levels since the hitch would not be visible.
Waiting until Epic fixes this, which does not seem to be very high on their priority list
I have encounter the same problem two days ago, but finally figure out. The Truth is, Epic implement level streaming function very well, the problem is we don’t know how it works and how to use it.
[Load Streaming level] node will load the level data from disk, so it is slow, time consumes depend on your streaming level size. (Mainly happens in game mode, seems it will cache in editor mode).
The Best way is You can load the streaming data at game loading time, just tick the Initially Loaded option at Level Details panel, or use the LoadStreamingLevel node. then at runtime, use [Get Streaming Level] node, feed in StreamingLevel name or use the Unique Instance Name created by [Create Instance] node and set the variable Should be Visible, you will not have any stutters.
My situtaion was I have two levels in one map, one is Day exterior scene with more than 10000k poly counts scanned data, and one is night interior scene with high quality lightmap baked, I want to transition the two map seamlessly, use the method told above, the streaming works perfectly fine.
That’s an interesting solution, however it’s not really viable if you have to worry about memory, since your sublevels will all be loaded in memory at all times. But if you’re using level streaming only for performance reasons and not memory reasons then it should work.
If you are making game and the memory is a problem, load and offload the streaming level is the only way. But you can make user experience better by using aync loading streaming level, maybe not using streaming volumes, consider using your own logic to make the transition feel smooth.
My situation is that we are making Interaction App, the hardware is cheap, most of my level seldom exceed the size 16GB, we prefer load them all, and toggle visibility to gain the performance. Because all the assets is in memory, transition is only one frame waiting.