Hi! I have a very simple setup of multiple sublevels in a persistent level. When a pawn overlaps with a custom volume, bound to a sublevel, the volume calls SetShouldBeLoaded(true) on its level and that’s it. As you can see on the trace below, something causes a hitch on GPU. I was thinking that it is some FlashAsyncLoading, but these events are being correctly bookmarked on the trace and aren’t present in the range of the loading.
This trace was recorded in a development build. The logs don’t have anything related to streaming, rendering or compilations.
I was also trying to capture this frame in RenderDoc, it successfully snapshots the frame before and it looks normal. When it starts to capture the frame with the hitch, the game executable just exits without any logs or crashes.
The setup of the project is pretty default, I’m using some recommended CVars for streaming (I didn’t notice any difference with or without them)
;DefaultEngine.ini
[ConsoleVariables]
p.Chaos.EnableAsyncInitBody=True
LevelStreaming.AllowIncrementalPreRegisterComponents=True
LevelStreaming.AllowIncrementalPreUnregisterComponents=True
p.Chaos.AsyncPhysicsStateTask.TimeBudgetMS=5
And the project has Lumen and Nanite disabled (switched to screen space GI and Reflections)
;DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.ReflectionMethod=2
r.GenerateMeshDistanceFields=False
r.DynamicGlobalIlluminationMethod=2
r.Lumen.TraceMeshSDFs=0
r.Shadow.Virtual.Enable=0
r.Mobile.EnableNoPrecomputedLightingCSMShader=1
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true
r.Nanite.ProjectEnabled=False
r.AntiAliasingMethod=5
r.MSAACount=1
r.TemporalAA.Upsampling=False
r.Lumen.Reflections.HardwareRayTracing.Translucent.Refraction.EnableForProject=False
This is a code snippet that triggers loading, nothing special. Explicitly set bShouldBlockOnLoad to false
void UFuturismTravelComponent::ClientPrepareToTravel_Implementation(const FFuturismTravelInfo& TravelInfo)
{
CurrentTravelInfo = TravelInfo;
CurrentTravelInfo.DestinationLevelStreaming->bShouldBlockOnLoad = false;
CurrentTravelInfo.DestinationLevelStreaming->bShouldBlockOnUnload = false;
CurrentTravelInfo.DestinationLevelStreaming->SetShouldBeLoaded(true);
CurrentTravelInfo.DestinationLevelStreaming->OnLevelLoaded.AddDynamic(this, &ThisClass::OnDestinationLevelLoaded);
}
The sublevel, that I’m trying to stream, consists of 4 background meshes, one landscape and some stones, placed as foliage.
Also, all levels in the project have OFPA (One File Per Actor) enabled. So far I know it is editor-only feature and doesn’t impact packaged builds (I was tracing dev build). In the editor the automatic loading of level actor packages caused FlushAsyncLoading and hitches on the GameThread, but in the build looks like it is not the case.
Also, I’ve checked some articles on level streaming and optimizations (like this, this and this), but haven’t found anything similar to my problem. Tried some advices, that might be related, but they didn’t change anything.
Do you have any clues what could be wrong or what else I could check to pinpoint the issue? I’ve been investigating it for a week and out of ideas.


