Alembic import as "Skeletal Mesh"

hihi all. I get crash after importing Alembic 800 frames as Skeletal Mesh. If 100~ frames, import without problems. How can this problem be solved?

Crash →
Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Containers/Array.h] [Line: 703] Array index out of bounds: 988073600 from an array of size 988073600

UE4Editor_Core
UE4Editor_Core
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_AlembicLibrary
UE4Editor_Core
UE4Editor_Core
UE4Editor_Core
UE4Editor_Core
UE4Editor_Core
kernel32
ntdll

1 Like

With “Editor symbols for debugging” I got this

Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Containers/Array.h] [Line: 703] Array index out of bounds: 988073600 from an array of size 988073600

UE4Editor_Core!AssertFailedImplV() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:104]
UE4Editor_Core!FDebug::CheckVerifyFailedImpl() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:461]
UE4Editor_AlembicLibrary!DispatchCheckVerify<void,<lambda_171dde5f8e8bf0c6e06289e47e00b980> >() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Misc\AssertionMacros.h:165]
UE4Editor_AlembicLibrary!AbcImporterUtilities::GenerateDeltaFrameDataMatrix() [D:\Build++UE4\Sync\Engine\Plugins\Experimental\AlembicImporter\Source\AlembicLibrary\Private\AbcImportUtilities.cpp:1216]
UE4Editor_AlembicLibrary!<lambda_bf0cf85dc4342a5998d863efde993431>::operator()() [D:\Build++UE4\Sync\Engine\Plugins\Experimental\AlembicImporter\Source\AlembicLibrary\Private\AbcImporter.cpp:1205]
UE4Editor_AlembicLibrary!UE4Function_Private::TFunctionRefCaller<TFunction<void __cdecl(int,FAbcFile *)>,void __cdecl(int,FAbcFile *)>::Call() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Templates\Function.h:549]
UE4Editor_AlembicLibrary!<lambda_cc46014b65a5dcf61c74faf2be8aa74f>::operator()() [D:\Build++UE4\Sync\Engine\Plugins\Experimental\AlembicImporter\Source\AlembicLibrary\Private\AbcFile.cpp:525]
UE4Editor_AlembicLibrary!ParallelForImpl::TParallelForData<TFunctionRef<void __cdecl(int)> >::Process() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Async\ParallelFor.h:177]
UE4Editor_AlembicLibrary!TGraphTask<ParallelForImpl::TParallelForTask<TFunctionRef<void __cdecl(int)> > >::ExecuteTask() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:886]
UE4Editor_Core!FTaskThreadAnyThread::ProcessTasks() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:1066]
UE4Editor_Core!FTaskThreadAnyThread::ProcessTasksUntilQuit() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:889]
UE4Editor_Core!FTaskThreadAnyThread::Run() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:966]
UE4Editor_Core!FRunnableThreadWin::Run() [D:\Build++UE4\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:86]

Trying to debug it I’ve fugured that the problem lays is that TArray length is 32 based and it’s limited to 2,147,483,647. Since I have 2 093 952 normals each have 3 coords and 841 frames I get that I need = 5 283 040 896 long TArray. But because it’s 32 based, it overflows and this is where we get number 988073600 in the error 5 283 040 896 - 2 147 483 647 x 2 ~ 988 073 600.

So the question is - how do I make TArray length 64 int based?
I’ve tried to use TArray64 but had no success (code example is below, output I got is “Warning: DEBUG_LOG: Zeroed 5283040896 matrices len 988075595”).

    TArray64<float> DebugMatrices;
    int x = 528304089;

    DebugMatrices.AddZeroed(x*10);
    UE_LOG(LogTemp, Warning, TEXT("DEBUG_LOG: Zeroed 5 283 040 890 matrices len %d"), DebugMatrices.Num());

PS I’m working with @cortek1 on this issue

1 Like

Forgot to post update here. This problem is kind of resolved by Epic Games here - Unreal Engine Issues and Bug Tracker (UE-150964)

What they basically did they replaced crash with alembic importer stop working when it reaches the limit and gives you error message that it won’t work. Basically what it means for cinematic production is that Alembic Skeletal Mesh pipeline is very unreliable given that it doesn’t support big meshes and Epic Games doesn’t seem to be interested in adding that support in the future (given the way they resolved that problem).