Modular Viewports: Nothing works. Crashes and Stability Issues with USceneViewport in UE 5.8.3

Summary

The Modular Viewports plugin in Unreal Engine 5.8.3 exhibits crashes and stability issues when using the USceneViewport widget to display cameras, players, or auxiliary worlds.

The issues occur both when using the built-in AutoLoadWorldAsset property and when calling the ShowCamera() and ShowPlayer() methods through a custom Blueprint-callable wrapper.

The issues have been reproduced in both my main project and a clean test project.

What Type of Bug are you experiencing?

UI / Tools

Steps to Reproduce

Case 1: Crash when using AutoLoadWorldAsset

  1. Create a widget containing a USceneViewport instance.

  2. Set the AutoLoadWorldAsset property to a valid world asset.

  3. Start PIE and open the widget so that the Scene Viewport loads the auxiliary world.

  4. Toggle the widget’s visibility using one of the following methods:

    Subcase A — Hide using visibility

    • Show the widget by changing its visibility, for example, using SetVisibility(ESlateVisibility::Visible).
    • Hide the widget again.
    • Stop PIE, start PIE again, and open the widget.
    • Observe the assertion or crash during the subsequent auxiliary world loading process.

    Subcase B — Remove using RemoveFromParent

    • Remove the widget from its parent using RemoveFromParent().
    • Stop PIE
    • Observe that the editor crashes immediately when RemoveFromParent() is called.

Case 2: Crash when using ShowCamera()

  1. Create a widget containing a USceneViewport instance.
  2. Expose the ShowCamera() method to Blueprint through a custom wrapper, forwarding the call to the original USceneViewport instance.
  3. Start PIE and invoke ShowCamera() with a valid UCameraComponent.
  4. Observe the resulting crash.

Case 3: Crash during PIE teardown when using ShowPlayer()

  1. Create a widget containing a USceneViewport instance.
  2. Expose the ShowPlayer() method to Blueprint through a custom wrapper, forwarding the call to the original USceneViewport instance.
  3. Start PIE and invoke ShowPlayer() with a valid ULocalPlayer.
  4. Observe that the viewport works during normal use.
  5. Stop PIE.
  6. Observe the error or crash during garbage collection or object teardown.

Expected Result

The Scene Viewport widget should be able to display the specified camera, player, or auxiliary world without crashing.

The widget and its associated resources should also be released safely when the widget is removed or PIE ends, without assertions or crashes during garbage collection, world loading, or teardown.

Observed Result

  • Case 1: The editor encounters an assertion or crash during auxiliary world loading when using AutoLoadWorldAsset across repeated PIE sessions.
  • Case 2: Calling ShowCamera() through a custom wrapper causes a crash.
  • Case 3: Calling ShowPlayer() through a custom wrapper works at first, but an error or crash occurs during garbage collection or teardown when PIE ends.

The issues have been reproduced in both the main project and a clean test project.

Affects Versions

5.8

Platform(s)

Windows

For crash reports, include your callstack

Case 1

Subcase A

Assertion failed: ++Queue(QueueIndex).RecursionGuard == 1 [File:D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp] [Line: 705]

0x00007ff93147bec8 UnrealEditor-Core.dll!FDebug::CheckVerifyFailedImpl2() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:797]
0x00007ff9310e8d86 UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksUntilIdle() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:705]
0x00007ff91a164574 UnrealEditor-Engine.dll!FAudioDevice::Teardown() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\AudioDevice.cpp:920]
0x00007ff91a1aec55 UnrealEditor-Engine.dll!FAudioDeviceManager::DecrementDevice() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\AudioDeviceManager.cpp:643]
0x00007ff91a196e8f UnrealEditor-Engine.dll!FAudioDeviceHandle::operator=() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\AudioDeviceManager.cpp:1599]
0x00007ff91a1df8f3 UnrealEditor-Engine.dll!FAudioDeviceHandle::Reset() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\AudioDeviceManager.cpp:1508]
0x00007ff91a9afb5d UnrealEditor-Engine.dll!UGameViewportClient::BeginDestroy() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameViewportClient.cpp:472]
0x00007ff9307de927 UnrealEditor-CoreUObject.dll!UObject::ConditionalBeginDestroy() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Obj.cpp:1359]
0x00007ff9307162ad UnrealEditor-CoreUObject.dll!UnhashUnreachableObjects() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp:6321]
0x00007ff93065802d UnrealEditor-CoreUObject.dll!UE::GC::PostCollectGarbageImpl<1>() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp:5915]
0x00007ff9306dca3a UnrealEditor-CoreUObject.dll!UE::GC::FReachabilityAnalysisState::PerformReachabilityAnalysisAndConditionallyPurgeGarbage() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp:6121]
0x00007ff930687d3b UnrealEditor-CoreUObject.dll!CollectGarbage() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp:6388]
0x00007ff91c27798e UnrealEditor-Engine.dll!UEngine::TrimMemory() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:16731]
0x00007ff91c25d610 UnrealEditor-Engine.dll!UEngine::LoadMap() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:16319]
0x00007ff87601eab1 UnrealEditor-ModularViewports.dll!UE::Engine::FAuxiliaryGameInstance::Make() [D:\build++UE5\Sync\Engine\Plugins\Runtime\ModularViewports\Source\ModularViewports\Private\Engine\AuxiliaryGameInstance.cpp:91]
0x00007ff87601f662 UnrealEditor-ModularViewports.dll!USceneViewport::RebuildWidget() [D:\build++UE5\Sync\Engine\Plugins\Runtime\ModularViewports\Source\ModularViewports\Private\Components\SceneViewportWidget.cpp:75]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d41851d UnrealEditor-UMG.dll!UUserWidget::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:1214]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d2444c3 UnrealEditor-UMG.dll!UBorderSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\BorderSlot.cpp:42]
0x00007ff92d2b3903 UnrealEditor-UMG.dll!UBorder::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Border.cpp:59]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d34dd28 UnrealEditor-UMG.dll!UVerticalBoxSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\VerticalBoxSlot.cpp:33]
0x00007ff92d391a04 UnrealEditor-UMG.dll!UVerticalBox::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\VerticalBox.cpp:63]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d2447a4 UnrealEditor-UMG.dll!UCanvasPanelSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\CanvasPanelSlot.cpp:33]
0x00007ff92d2b4d94 UnrealEditor-UMG.dll!UCanvasPanel::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\CanvasPanel.cpp:59]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d41851d UnrealEditor-UMG.dll!UUserWidget::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:1214]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d34dd28 UnrealEditor-UMG.dll!UVerticalBoxSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\VerticalBoxSlot.cpp:33]
0x00007ff92d391a04 UnrealEditor-UMG.dll!UVerticalBox::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\VerticalBox.cpp:63]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d34c7f8 UnrealEditor-UMG.dll!UHorizontalBoxSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\HorizontalBoxSlot.cpp:33]
0x00007ff92d2ba8e4 UnrealEditor-UMG.dll!UHorizontalBox::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\HorizontalBox.cpp:63]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d2444c3 UnrealEditor-UMG.dll!UBorderSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\BorderSlot.cpp:42]
0x00007ff92d2b3903 UnrealEditor-UMG.dll!UBorder::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Border.cpp:59]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d2447a4 UnrealEditor-UMG.dll!UCanvasPanelSlot::BuildSlot() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\CanvasPanelSlot.cpp:33]
0x00007ff92d2b4d94 UnrealEditor-UMG.dll!UCanvasPanel::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\CanvasPanel.cpp:59]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d41851d UnrealEditor-UMG.dll!UUserWidget::RebuildWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:1214]
0x00007ff92d3ada8e UnrealEditor-UMG.dll!UWidget::TakeWidget_Private() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:993]
0x00007ff92d3ad8af UnrealEditor-UMG.dll!UWidget::TakeWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Components\Widget.cpp:975]
0x00007ff92d23c92c UnrealEditor-UMG.dll!UGameViewportSubsystem::AddToScreen() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Blueprint\GameViewportSubsystem.cpp:182]
0x00007ff92d23d00f UnrealEditor-UMG.dll!UGameViewportSubsystem::AddWidget() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\Blueprint\GameViewportSubsystem.cpp:112]
0x00007ff92d3e6111 UnrealEditor-UMG.dll!UUserWidget::AddToViewport() [D:\build++UE5\Sync\Engine\Source\Runtime\UMG\Private\UserWidget.cpp:1378]
0x00007ff92d42ada6 UnrealEditor-UMG.dll!UUserWidget::execAddToViewport() [D:\build++UE5\Sync\Engine\Intermediate\Build\Win64\UnrealEditor\Inc\UMG\UHT\UserWidget.gen.cpp:1114]
0x00007ff930627b2c UnrealEditor-CoreUObject.dll!UFunction::Invoke() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:7595]
0x00007ff930988e50 UnrealEditor-CoreUObject.dll!UObject::CallFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1198]
0x00007ff9309a04b5 UnrealEditor-CoreUObject.dll!UObject::ProcessContextOpcode() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:3181]
0x00007ff9309a27da UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1265]
0x00007ff9309776f5 UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void (__cdecl*)(UObject *,FFrame &,void )>() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1092]
0x00007ff9309808b5 UnrealEditor-CoreUObject.dll!ProcessLocalFunction'::2’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1343]
0x00007ff9309a250a UnrealEditor-CoreUObject.dll!ProcessLocalFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1362]
0x00007ff9309a27da UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1265]
0x00007ff9309776f5 UnrealEditor-CoreUObject.dll!ProcessScriptFunction<void (__cdecl
)(UObject *,FFrame &,void *)>() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1092]
0x00007ff9309808b5 UnrealEditor-CoreUObject.dll!ProcessLocalFunction'::2’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1343]
0x00007ff9309a250a UnrealEditor-CoreUObject.dll!ProcessLocalFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1362]
0x00007ff9309a27da UnrealEditor-CoreUObject.dll!ProcessLocalScriptFunction() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1265]
0x00007ff9309a1e5f UnrealEditor-CoreUObject.dll!UObject::ProcessInternal() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1394]
0x00007ff930627b2c UnrealEditor-CoreUObject.dll!UFunction::Invoke() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:7595]
0x00007ff9309a19b2 UnrealEditor-CoreUObject.dll!UObject::ProcessEvent() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:2234]
0x00007ff919cf614d UnrealEditor-Engine.dll!AActor::ProcessEvent() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:1518]
0x00007ff8d0c8f3e9 UnrealEditor-EnhancedInput.dll!TScriptDelegate::ProcessDelegate() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\UObject\ScriptDelegates.h:1018]
0x00007ff8d0cad1f8 UnrealEditor-EnhancedInput.dll!FEnhancedInputActionEventDelegateBinding::Execute() [D:\build++UE5\Sync\Engine\Plugins\EnhancedInput\Source\EnhancedInput\Public\EnhancedInputComponent.h:359]
0x00007ff8d0cab4aa UnrealEditor-EnhancedInput.dll!UEnhancedPlayerInput::EvaluateInputComponentDelegates() [D:\build++UE5\Sync\Engine\Plugins\EnhancedInput\Source\EnhancedInput\Private\EnhancedPlayerInput.cpp:881]
0x00007ff91bdadf2e UnrealEditor-Engine.dll!UPlayerInput::EvaluateInputDelegates() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\UserInterface\PlayerInput.cpp:1509]
0x00007ff8d0cac312 UnrealEditor-EnhancedInput.dll!UEnhancedPlayerInput::EvaluateInputDelegates() [D:\build++UE5\Sync\Engine\Plugins\EnhancedInput\Source\EnhancedInput\Private\EnhancedPlayerInput.cpp:430]
0x00007ff91bdf2dd7 UnrealEditor-Engine.dll!UPlayerInput::ProcessInputStack() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\UserInterface\PlayerInput.cpp:1308]
0x00007ff91b4853c1 UnrealEditor-Engine.dll!APlayerController::ProcessPlayerInput() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:2762]
0x00007ff91b49ce6c UnrealEditor-Engine.dll!APlayerController::TickPlayerInput() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:5495]
0x00007ff91b480861 UnrealEditor-Engine.dll!APlayerController::PlayerTick() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:2328]
0x00007ff91b49b1fe UnrealEditor-Engine.dll!APlayerController::TickActor() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\PlayerController.cpp:5647]
0x00007ff919cd999f UnrealEditor-Engine.dll!FActorTickFunction::ExecuteTick() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Actor.cpp:379]
0x00007ff91bd01ac7 UnrealEditor-Engine.dll!TGraphTask::ExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:703]
0x00007ff9310f5e1e UnrealEditor-Core.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:524]
0x00007ff9310e8bfe UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksNamedThread() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:807]
0x00007ff9310e8d99 UnrealEditor-Core.dll!FNamedTaskThread::ProcessTasksUntilIdle() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:707]
0x00007ff9310e9498 UnrealEditor-Core.dll!FTaskGraphCompatibilityImplementation::ProcessUntilTasksComplete() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:1620]
0x00007ff91bd25ec4 UnrealEditor-Engine.dll!FTickTaskSequencer::ReleaseTickGroup() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:1040]
0x00007ff91bd2e925 UnrealEditor-Engine.dll!FTickTaskManager::RunTickGroup() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\TickTaskManager.cpp:2134]

Subcase B

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000590

0x00007ff91be2f57a UnrealEditor-Engine.dll!TSet<TTuple<TWeakObjectPtr<UBlueprint,FWeakObjectPtr>,TWeakObjectPtr<UObject,FWeakObjectPtr> >,TDefaultMapHashableKeyFuncs<TWeakObjectPtr<UBlueprint,FWeakObjectPtr>,TWeakObjectPtr<UObject,FWeakObjectPtr>,0>,FDefaultSetAllocator>::TIterator::TIterator()
0x00007ff91be9b482 UnrealEditor-Engine.dll!UWorld::TransferBlueprintDebugReferences() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:3217]
0x00007ff92626c9c2 UnrealEditor-UnrealEd.dll!UEditorEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:2135]
0x00007ff926dd7696 UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:546]
0x00007ff7e0722779 UnrealEditor.exe!FEngineLoop::Tick() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5859]
0x00007ff7e070c4ac UnrealEditor.exe!GuardedMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:190]
0x00007ff7e070c5ba UnrealEditor.exe!GuardedMainWrapper() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:123]
0x00007ff7e0711256 UnrealEditor.exe!LaunchWindowsStartup() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:277]
0x00007ff7e0725c74 UnrealEditor.exe!WinMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:338]
0x00007ff7e072902a UnrealEditor.exe!__scrt_common_main_seh() [D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
0x00007ffa8407cd87 KERNEL32.DLL!UnknownFunction

Case 2 - ShowCamera()

Assertion failed: CachedSectionLODValues != nullptr [File:D:\build++UE5\Sync\Engine\Source\Runtime\Landscape\Private\LandscapeRender.cpp] [Line: 1038]
No section LOD value cached for this view. Make sure FLandscapeRenderSystem::ComputeSectionsLODForView (FLandscapeSceneViewExtension::PreRenderView_RenderThread) was called

0x00007ff930e4bec8 UnrealEditor-Core.dll!FDebug::CheckVerifyFailedImpl2() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:797]
0x00007ff92e00c0b3 UnrealEditor-Landscape.dll!FLandscapeRenderSystem::GetCachedSectionLODValues() [D:\build++UE5\Sync\Engine\Source\Runtime\Landscape\Private\LandscapeRender.cpp:1038]
0x00007ff92e01607a UnrealEditor-Landscape.dll!FLandscapeRenderSystem::GetSectionLODValue() [D:\build++UE5\Sync\Engine\Source\Runtime\Landscape\Private\LandscapeRender.cpp:1024]
0x00007ff92e00efd2 UnrealEditor-Landscape.dll!FLandscapeComponentSceneProxy::GetDynamicRayTracingInstances() [D:\build++UE5\Sync\Engine\Source\Runtime\Landscape\Private\LandscapeRender.cpp:3070]
0x00007ff8f9ccd0e7 UnrealEditor-Renderer.dll!RayTracing::FDynamicRayTracingInstancesContext::GatherDynamicRayTracingInstances_Internal() [D:\build++UE5\Sync\Engine\Source\Runtime\Renderer\Private\RayTracing\RayTracing.cpp:826]
0x00007ff8f9cccf40 UnrealEditor-Renderer.dll!RayTracing::FDynamicRayTracingInstancesContext::GatherDynamicRayTracingInstances() [D:\build++UE5\Sync\Engine\Source\Runtime\Renderer\Private\RayTracing\RayTracing.cpp:852]
0x00007ff8f9cca89d UnrealEditor-Renderer.dll!UE::Tasks::Private::TExecutableTaskBase<``RayTracing::BeginGatherInstances’::7'::<lambda_4>::operator()'::30’::<lambda_1>,void,void>::ExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:873]
0x00007ff8f8e11e16 UnrealEditor-Renderer.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:524]
0x00007ff8f8d97d08 UnrealEditor-Renderer.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<LowLevelTasks::FTask::Init<UE::Tasks::Private::FTaskBase::Init’::2'::<lambda_1> >'::15’::<lambda_1>,0>::CallAndMove() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\Fundamental\TaskDelegate.h:171]
0x00007ff930aa3047 UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\Fundamental\Task.h:623]
0x00007ff930aa2da4 UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:403]
0x00007ff930aca1ee UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerLoop() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:802]
0x00007ff930a8e905 UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker'::2’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:223]
0x00007ff930d417c4 UnrealEditor-Core.dll!FThreadImpl::Run() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\HAL\Thread.cpp:69]
0x00007ff9311f05b8 UnrealEditor-Core.dll!FRunnableThreadWin::Run() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:167]
0x00007ff9311e9ee5 UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:87]
0x00007ffa8407cd87 KERNEL32.DLL!UnknownFunction

Crash in runnable thread Background Worker #6

Case 3 - ShowPlayer()

Assertion failed: false [File:D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp] [Line: 553]
Object ‘GameInstance /Engine/Transient.UnrealEdEngine_0:GameInstance_2’ from PIE level still referenced. Shortest path from root: (refcounted<2>) (Garbage) PlayerViewportClient /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped.WidgetTree_0.EquipmentViewport.WidgetTree_0.SceneViewport.PlayerViewportClient_0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^ This reference is preventing the old GameInstance from being GC’d ^
→ UObject* UPlayerViewportClient:: = (Garbage) SceneViewport /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped.WidgetTree_0.EquipmentViewport.WidgetTree_0.SceneViewport
→ UObject* USceneViewport:: = (Garbage) WidgetTree /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped.WidgetTree_0.EquipmentViewport.WidgetTree_0
→ UObject* UWidgetTree:: = (Garbage) WBP_TestSceneViewportBridge_C /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped.WidgetTree_0.EquipmentViewport
→ UObject* UWBP_TestSceneViewportBridge_C:: = (Garbage) WidgetTree /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped.WidgetTree_0
→ UObject* UWidgetTree:: = (Garbage) WBP_Inventory_Equipped_C /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0.WBP_Inventory_Equipped
→ UObject* UWBP_Inventory_Equipped_C:: = (Garbage) WidgetTree /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0.WidgetTree_0
→ UObject* UWidgetTree:: = (Garbage) WBP_Inventory_Main_C /Engine/Transient.UnrealEdEngine_0:GameInstance_2.WBP_Inventory_Main_C_0
→ UObject* UWBP_Inventory_Main_C:: = (Garbage) GameInstance /Engine/Transient.UnrealEdEngine_0:GameInstance_2

0x00007ff93147bec8 UnrealEditor-Core.dll!FDebug::CheckVerifyFailedImpl2() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:797]
0x00007ff9268e8d5d UnrealEditor-UnrealEd.dll!UEditorEngine::EndPlayMap() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:552]
0x00007ff92626e00f UnrealEditor-UnrealEd.dll!UEditorEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:2510]
0x00007ff926dd7696 UnrealEditor-UnrealEd.dll!UUnrealEdEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:546]
0x00007ff7e0722779 UnrealEditor.exe!FEngineLoop::Tick() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5859]
0x00007ff7e070c4ac UnrealEditor.exe!GuardedMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:190]
0x00007ff7e070c5ba UnrealEditor.exe!GuardedMainWrapper() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:123]
0x00007ff7e0711256 UnrealEditor.exe!LaunchWindowsStartup() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:277]
0x00007ff7e0725c74 UnrealEditor.exe!WinMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:338]
0x00007ff7e072902a UnrealEditor.exe!__scrt_common_main_seh() [D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
0x00007ffa8407cd87 KERNEL32.DLL!UnknownFunction

Additional Notes

  • Unreal Engine version: 5.8.3.
  • Engine distribution: Epic Games Launcher.
  • Plugin: Modular Viewports.
  • The ShowCamera() and ShowPlayer() methods were exposed to Blueprint through a custom wrapper because they do not have Blueprint implementations in the provided USceneViewport API.
  • Separate call stacks are attached for each reproduction case.

The captured call stack at the time of the assertion included the following functions in the call chain: FAuxiliaryGameInstance::Make(), UEngine::LoadMap(), UGameViewportClient::BeginDestroy(), and FAudioDevice::Teardown(). The assertion occurred in FNamedTaskThread::ProcessTasksUntilIdle() in TaskGraph.cpp (line 705), in the Task Graph recursion guard.

The underlying cause of the assertion has not yet been determined.

The exact root cause has not been determined. Please investigate the stability and lifecycle management of USceneViewport and its auxiliary world handling in Unreal Engine 5.8.3.

Update: I think I found what triggers at least one of the crashes.

In my original setup, I was creating/opening the widget containing USceneViewport from an Enhanced Input event. The call stack showed that this happened inside APlayerController::PlayerTick() / Task Graph execution, while FAuxiliaryGameInstance::Make() synchronously loads the auxiliary world and triggers garbage collection.

I moved the initial widget creation to BeginPlay instead, so it no longer happens from an input/tick context. After doing this, the crash no longer occurs in the same scenario.

I’m still testing this, so I can’t say yet whether this is the actual root cause, but it seems that creating the USceneViewport / auxiliary world from an input-driven tick can trigger the Task Graph recursion assertion.

This also makes me wonder whether USceneViewport / FAuxiliaryGameInstance needs to handle this situation more safely, since calling it from a normal gameplay input event can lead to a synchronous LoadMap() → CollectGarbage() path.