Several methods for making loading screen, would like some suggestions and idea-sharings

I’ve tried several methods but all of them are not perfect, I’m posting them below and looking for some suggestions, better ideas, etc.

The fade out to black effect can be applied for all methods, you can make a Blueprint UserWidget with fade to black animation.
Then, before calling Open Level or the equivalent action, create this widget and delay for the time of fade out, so the screen would be pure black when you are ready to go to next level.
However the fade in from black is not always applicable, details in below.

  1. [Blueprint] Black screen + Open Level

Actually this is a do nothing, just use the fade out widget mentioned above, then use Open Level.

Pros:

  • The easiest one.
  • All dynamic actors are cleared by UE.
  • You can use different GameMode and PlayerController for each level, since all levels are fresh-started.
  • Fade in can be done in level BP’s BeginPlay() and it’s easy, since the screen is already black.

Cons:

  • Black screen is just not enough.

Note:
The screen is actually frozen when it’s black, but user see nothing so it’s fine.

  1. [Blueprint and C++] Switch to loading movie + Open Level

Basically following this tutorial A new, community-hosted Unreal Engine Wiki - Announcements and Releases - Unreal Engine Forums
You need a C++ written GameInstance, bind Pre Load Map event, and call the MoviePlayer when Pre Load Map triggers.
Then, in Blueprint, call Open Level then Pre Load Map is fired, so the loading screen is fired.

Pros:

  • All dynamic actors are cleared by UE.
  • You can use different GameMode and PlayerController for each level, since all levels are fresh-started.
  • The loading screen is rendered by another thread, so it runs very smoothly.

Cons:

  • The loading screen, actually a SWidget, played by MoviePlayer is not rendering in Stereo, so it looks not nice (or, not acceptable) in VR.
  • Not to mention, SWidget can only be created by C++.
  • No proper timing for Fade in effect; The end of loading screen stop immediately so there no timing for fade out, thus no fade in.
  1. [Blueprint] Transition Map (Seamless Travel) + Console Command “ServerTravel”

There’s a flag in GameMode called Use Seamless Travel, make it True.
Then create a small level with any visual effects you like, it would serve the loading screen.
In Project Settings/Maps and Modes/Transition Map, set the level just created.
Now, use Execute Console Command node with “ServerTravel NextLevel” instead of Open Level node with “NextLevel”.
Player would be put into Transition Map (i.e. Loading Screen) and wait for the loading.

Pros:

  • All dynamic actors are cleared by UE.
  • The loading screen is a normal level, so it renders correctly in VR, also you can put anything you like here.

Cons:

  • You can NOT use different GameMode and PlayerController for each level, since they are copied to the next level.
  • No proper timing for Fade in effect; The end of loading screen stop immediately so there no timing for fade out, thus no fade in.
  1. [Blueprint] Stream Level + Load Stream Level

Well the stream level mechanism.

Pros:

  • Fade out/in timing are well controlled since unload/load level are all manually controlled.

Cons:

  • All dynamic actors are NOT cleared by UE, need manually control.
  • You can NOT use different GameMode and PlayerController for each level, since they are always the same.
  • Even with the name of streaming, there’s still occasional freezing.

These are all I tried, none of them are perfect, so I’m really not sure which one is better.
Thanks!

2 Likes

There was a loading screen tutorial recently added to the Wiki, But I can’t find the link to it.
It was done by “TheJamish”

Hi Ryan:

That’s the link I posted, it’s my option 2.
Thanks for reply though!

I was trying Option 3. but my Transition Map doesn’t show up and it just goes right to the next level. Can you help?

Your computer is unloading/loading the next maps too quickly. You can add a timer event to the transition map, although it’s not a bad thing to not have a transition as long as the cross fades are not too jarring. Unless it’s taking a minute or longer between the fade, then something is wrong with the streaming to the transition map.

edit: As far as not being able to use different game modes or player controllers, you can always customize the values for each within the level blueprint. Kind of a pita depending how much you need to change, but it’s an option. As for what I use, I usually go with option 3, to actually have a transition map that the game transitions to.

Just to let you know if you are developing for the Oculus rift there is already a loading hour glass in the bottom right corner when your level is loading which against a black screen is the least jarring in VR.

Thank you. I will give it a try.

If you want something like 3 with more control, a nice solution is using LoadStreamLevel and having a persistent level with a loading area(black sphere and the effects you want). Then teleporting the player back and forth between the actual level and loading area. This is more suitable for non-multiplayer games.

The black screen will fade to a default white room if using SteamVR. I had posted a similar question and there seems to be a way to exchange the white room with a custom skybox (Customization of SteamVR - XR Development - Epic Developer Community Forums - post from muchcharles). However, I coulnd’t find time to test it yet. But I think this information belongs into this thread :slight_smile:

I can’t seem to get your third method working. With SeamlessTravel set to false, the execute command works like a regular open level node. With it set to true, the execute command doesn’t do anything at all. Do you have any suggestions?

I use servertravel at the end of a match, works good. No compositor comes up.

Problem i have is starting a multiplayer game (server/host)
I don’t know of any way to avoid the compositor if starting a new multiplayer host :confused:

I realized I needed to package the game for the servertravel command to work.

The problem is that when immediately jumping into the transition level, there is a period of a few seconds where the HMD is not properly oriented. The effect is as if ‘LockToHMD’ is unchecked. Then after a few seconds the HMD functions properly.
Any suggestions on why this might be happening?

Check out the recent VR loading screen work done using VR layers. It was initially done for the Rift but I believe there is a Vive implementation now as well.

It basically uses reprojection and the the outside VR compositors to show a head tracked screen while the engine is loading.

What is your target VR platform?

Great post marsonmao;. I am going through the exact same thing, trying to find an animated loading screen for the game. I had just a regular static loading screen which was fine but console requires an animated loading screen if any of the levels go over 30 seconds. And when you set the slow hard drive section on sometimes maps will go over maybe by a few seconds which triggers having to have an animated loading screen. Which I didn’t think was going to be that big of a deal but now the game’s finished I’m in testing and now I was looking and they said to get an animated loading screen I’m going to have to convert the whole thing over to level streaming.

I think epic has done some incredibly amazing things with the unreal engine, and I think they have some of the smartest people on the planet working there. But it never ceases to amaze me on some of the simplest things that you would think is just a core piece for the game is totally left out. It would seem like in the project settings they would have an option just like they have an option for a movie that loads when you first start the game it seems like they would have an option where you can just choose a loading movie between levels. It seems like that would be a basic 101 option that any game engine would have. But I degress.

I have read and gone through everything that you have gone through and have spent over week researching this which I’m sure you have and others many many others have done the same thing. I’m not for sure what the best way is at this point I did try the plugin that Nick created and it did work in the editor but I could never get it to work when I packaged the product and most likely the causes I think the project has to be c++ and I was working in a blueprint project. So it looks like from what I can tell just like you wrote the only way to get an animated loading screen in blueprint is to use level streaming which says like such a pain and especially since the game has different game modes.

Maybe somebody smart out there will create a blueprints plug in and put it on the marketplace for us. Or maybe epic will finally wake up and put this much needed option in the engine for everyone. Please disregard any grammatical errors, I am using Google speech to text.

Does this help you out? Sounds like a predicament, but I just saw this a minute ago and it came to mind. Apologies if you’ve already seen or considered it:

“Unreal Engine 4 (UE4) offers support for displaying videos or images while a level loads when using Oculus, Gear VR, SteamVR, and PSVR Head Mounted Displays (HMDs). The loading movie or image will run on the rendering thread and can also help to mask frame rate issues while your content is loading. In the following document, we will take a look at how you can set these VR Splash Screens in your UE4 projects.”

Thank you **iamisandisnt for the information! Was able to get **Nick’s plug-in to working and it is perfect, but I will keep that information and try it out in the future. Thanks again for the reply.