Steps to Reproduce
  1. Find a mesh in the Content Browser that has at least one morph target
    1. Some meshes don't seem to trigger the bug. MetaHuman face meshes trigger it, as does the "Owen" mesh in QAGame (/Game/CE_Cascade/Characters/Owen/Meshes/Owen).
  2. Double-click to open it in Persona
  3. In the Morph Target Previewer tab on the right, right-click on a morph target and choose Delete

The editor will now fail this assert and exit:

check(IsInGameThread() || IsInGarbageCollectorThread());

 

Expected result: the morph target should be removed from the mesh, and should still be gone after restarting the editor and loading the mesh again.

Callstack
UnrealEditor-CoreUObject.dll!FUObjectArray::FreeUObjectIndex(UObjectBase * Object) Line 291 
UnrealEditor-CoreUObject.dll!FUObjectArray::FreeUObjectIndex(UObjectBase * Object) Line 291 
UnrealEditor-CoreUObject.dll!UObjectBase::~UObjectBase() Line 148 
[Inline Frame] UnrealEditor-Engine.dll!UMorphTarget::\{dtor}() Line 94 
UnrealEditor-Engine.dll!UMorphTarget::`vector deleting destructor'(unsigned int) 
UnrealEditor-CoreUObject.dll!StaticAllocateObject(const UClass * InClass, UObject * InOuter, FName InName, EObjectFlags InFlags, EInternalObjectFlags InternalSetFlags, bool bCanRecycleSubobjects, bool * bOutRecycledSubobject, UPackage * ExternalPackage) Line 3300 
UnrealEditor-CoreUObject.dll!StaticConstructObject_Internal(const FStaticConstructObjectParameters & Params) Line 4217 
[Inline Frame] UnrealEditor-Engine.dll!NewObject(UObject *) Line 1656 
UnrealEditor-Engine.dll!FFinishBuildMorphTargetData::ApplyEditorData(USkeletalMesh * SkeletalMesh, bool bIsSerializeSaving) Line 273 
UnrealEditor-Engine.dll!FSkeletalMeshRenderData::Cache(const ITargetPlatform * TargetPlatform, USkinnedAsset * Owner, FSkinnedAssetCompilationContext * ContextPtr) Line 325 
UnrealEditor-Engine.dll!USkeletalMesh::CacheDerivedData(FSkinnedAssetCompilationContext * ContextPtr) Line 4301 
UnrealEditor-Engine.dll!USkeletalMesh::ExecuteBuildInternal(FSkinnedAssetBuildContext & Context) Line 1939 
UnrealEditor-Engine.dll!FSkinnedAssetAsyncBuildWorker::DoWork() Line 47 
UnrealEditor-Engine.dll!FAsyncTaskBase::DoWork() Line 285 UnrealEditor-Engine.dll!FAsyncTaskBase::DoThreadedWork() Line 309 
UnrealEditor-Core.dll!FQueuedThreadPoolWrapper::FScheduledWork::DoThreadedWork() Line 128 
UnrealEditor-Core.dll!FQueuedThreadPoolWrapper::FScheduledWork::DoThreadedWork() Line 128 
[Inline Frame] UnrealEditor-Core.dll!FQueuedLowLevelThreadPool::AddQueuedWork::__l2::<lambda_9ed0233657edd7a72d2d0baa6df6647d>::operator()() Line 467 
UnrealEditor-Core.dll!LowLevelTasks::FTask::Init::__l15::<lambda>(const bool bNotCanceled) Line 504 
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FTask::Init::__l15::LowLevelTasks::FTask * <lambda>(const bool) &) Line 47 
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<LowLevelTasks::FTask * <lambda>(const bool),0>::Call(void *) Line 162 
UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::TTaskDelegateImpl<LowLevelTasks::FTask * <lambda>(const bool),0>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> & Destination, void * InlineData, unsigned int DestInlineSize, bool <Params_0>) Line 171 
[Inline Frame] UnrealEditor-Core.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48>::CallAndMove(LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __cdecl(bool),48> &) Line 308
UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() Line 656 UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask * & InOutTask) Line 162 
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::TryExecuteTaskFrom<&LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue::DequeueGlobal,0>(LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue * Queue, LowLevelTasks::TLocalQueueRegistry<1024>::FOutOfWork & OutOfWork, bool bPermitBackgroundWork, bool bDisableThrottleStealing) Line 361
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::FSleepEvent * WorkerEvent, LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue * ExternalWorkerLocalQueue, unsigned int WaitCycles, bool bPermitBackgroundWork) Line 402 [Inline Frame] 
UnrealEditor-Core.dll!LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda_0a548c7e497de3cc77a9e48080e1524f>::operator()() Line 90 
[Inline Frame] UnrealEditor-Core.dll!Invoke(LowLevelTasks::FScheduler::CreateWorker::__l2::<lambda_0a548c7e497de3cc77a9e48080e1524f> &) Line 47 
UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefCaller<<lambda_0a548c7e497de3cc77a9e48080e1524f>,void __cdecl(void)>::Call(void * Obj) Line 475 
[Inline Frame] UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,void __cdecl(void)>::operator()() Line 602 
UnrealEditor-Core.dll!FThreadImpl::Run() Line 67 
UnrealEditor-Core.dll!FRunnableThreadWin::Run() Line 149 
UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() Line 71

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-168068 in the post.

1
Login to Vote

Fixed
ComponentUE - Editor - Content Pipeline - Asset Build
Affects Versions5.15.2
Target Fix5.2
Fix Commit23927566
Main Commit23928684
Release Commit23927566
CreatedOct 24, 2022
ResolvedJan 31, 2023
UpdatedFeb 14, 2023