Summary
WaterSplineMetadata check causes crash when entering PIE with a RiverModifier in level.
What Type of Bug are you experiencing?
World Creation Tools
Steps to Reproduce
Create a basic mesh terrain
Add a WaterBodyRiver actor
Add a RiverModifier component to the WaterBodyRiver actor.
Connect the river modifier to the mesh terrain (AffectedMeshPartition)
Hit Play-In-Editor - crash - see callstack.
Expected Result
Game should start.
Observed Result
Crash.
Affects Versions
5.8
Platform(s)
Windows
For crash reports, include your callstack
LoginId:30e89c664ed0ed855c3c5f80f30d7c99
EpicAccountId:dfa8ce18642a4b4ca8ccf6961a00b2f9
Assertion failed: WaterSplineMetadata [File:D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartitionWater\Source\MeshPartitionWater\Private\MeshPartitionRiverModifier.cpp] [Line: 125]
UnrealEditor_Core!FDebug::CheckVerifyFailedImpl2() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:797]
UnrealEditor_MeshPartitionWater!UE::MeshPartition::URiverModifier::ComputeBounds() [D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartitionWater\Source\MeshPartitionWater\Private\MeshPartitionRiverModifier.cpp:125]
UnrealEditor_MeshPartitionWater!UE::MeshPartition::UModifierComponent::ComputeCombinedBounds() [D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartition\Source\MeshPartitionEditor\Public\MeshPartitionModifierComponent.h:378]
UnrealEditor_MeshPartitionEditor!UE::MeshPartition::UModifierComponent::CalcBounds() [D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartition\Source\MeshPartitionEditor\Private\MeshPartitionModifierComponent.cpp:496]
UnrealEditor_Engine!USceneComponent::UpdateBounds() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:1708]
UnrealEditor_Engine!UPrimitiveComponent::UpdateBounds() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\PrimitiveComponent.cpp:4760]
UnrealEditor_Engine!USceneComponent::PropagateTransformUpdate() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:1055]
UnrealEditor_Engine!USceneComponent::UpdateComponentToWorldWithParent() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:827]
UnrealEditor_Engine!USceneComponent::UpdateComponentToWorld() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Classes\Components\SceneComponent.h:961]
UnrealEditor_Engine!USceneComponent::DetachFromComponent() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:2761]
UnrealEditor_Engine!USceneComponent::OnComponentDestroyed() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:1668]
UnrealEditor_Engine!UActorComponent::DestroyComponent() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\ActorComponent.cpp:2204]
UnrealEditor_Engine!USceneComponent::DestroyComponent() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\Components\SceneComponent.cpp:1469]
UnrealEditor_MeshPartitionEditor!UE::MeshPartition::URuntimeCellTransformer::Transform'::2’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartition\Source\MeshPartitionEditor\Private\MeshPartitionRuntimeCellTransformer.cpp:217]
UnrealEditor_MeshPartitionEditor!UE::MeshPartition::URuntimeCellTransformer::Transform() [D:\build++UE5\Sync\Engine\Plugins\Experimental\MeshPartition\Source\MeshPartitionEditor\Private\MeshPartitionRuntimeCellTransformer.cpp:91]
UnrealEditor_Engine!UWorldPartition::ApplyRuntimeCellsTransformerStack'::19’::<lambda_6>::<lambda_invoker_cdecl>() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartition.cpp:2672]
UnrealEditor_Engine!UWorldPartition::ApplyRuntimeCellsTransformerStack'::5’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartition.cpp:2581]
UnrealEditor_Engine!UWorldPartition::ApplyRuntimeCellsTransformerStack() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartition.cpp:2672]
UnrealEditor_Engine!UWorldPartitionLevelStreamingDynamic::FinalizeRuntimeLevel() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartitionLevelStreamingDynamic.cpp:566]
UnrealEditor_Engine!FWorldPartitionLevelHelper::LoadActorsInternal'::37’::<lambda_3>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\WorldPartition\WorldPartitionLevelHelper.cpp:1249]
UnrealEditor_Engine!TBaseFunctorDelegateInstance<void __cdecl(FName const &,UPackage *,enum EAsyncLoadingResult::Type),FDefaultDelegateUserPolicy,FWorldPartitionLevelHelper::LoadActorsInternal'::37’::<lambda_3> >::ExecuteIfSafe() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:806]
UnrealEditor_CoreUObject!FAsyncLoadingThread2::ProcessLoadedPackagesFromGameThread() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp:10960]
UnrealEditor_CoreUObject!FAsyncLoadingThread2::TickAsyncLoadingFromGameThread() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp:11143]
UnrealEditor_CoreUObject!FAsyncLoadingThread2::FlushLoading() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp:13007]
UnrealEditor_CoreUObject!FlushAsyncLoading() [D:\build++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncPackageLoader.cpp:306]
UnrealEditor_Engine!UWorld::FlushAsyncLevelRequests() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:5022]
UnrealEditor_Engine!UWorld::FlushLevelStreaming() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:5414]
UnrealEditor_Engine!UWorld::BlockTillLevelStreamingCompleted() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:4845]
UnrealEditor_Engine!UEngine::BlockTillLevelStreamingCompleted() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:16760]
UnrealEditor_Engine!UGameInstance::StartPlayInEditorGameInstance() [D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameInstance.cpp:547]
UnrealEditor_UnrealEd!UEditorEngine::CreateInnerProcessPIEGameInstance() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:3200]
UnrealEditor_UnrealEd!UEditorEngine::OnLoginPIEComplete_Deferred() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1623]
UnrealEditor_UnrealEd!UEditorEngine::CreateNewPlayInEditorInstance() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1886]
UnrealEditor_UnrealEd!UEditorEngine::StartPlayInEditorSession() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:2928]
UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequestImpl() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1210]
UnrealEditor_UnrealEd!UEditorEngine::StartQueuedPlaySessionRequest() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\PlayLevel.cpp:1111]
UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:2065]
UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\build++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:546]
UnrealEditor!FEngineLoop::Tick() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5859]
UnrealEditor!GuardedMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:190]
UnrealEditor!GuardedMainWrapper() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:123]
UnrealEditor!LaunchWindowsStartup() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:277]
UnrealEditor!WinMain() [D:\build++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:338]
UnrealEditor!__scrt_common_main_seh() [D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll
Additional Notes
Claude pointed me down the path of changing the check() to a ensure() and returning the Boxes array if the error is reached.