I am still working to find a solution. Update: i narrowed down the missing functionality in UE 5.2
Here is a log from the packaged .exe with some extra custom logging to show better, what exactly is happening:
LogInterchangeEngine: Display: Interchange start importing source [C:/…*.step.glb]
In Staticmesh.cpp BuildFromMeshDescription is called Line 6516
In StaticMesh-cpp InitResources was called
In Staticmesh.cpp FStaticMeshRenderData:InitResources is called Line 1866
LogInterchangeEngine: Display: In InterchangeTaskCompletion.cpp Line 120
In InterchangeTaskCompletion.cpp Line 120 Registerallcomponents (actor) was called
In InterchangeTaskCompletion.cpp Line 33 UE::Interchange::FTaskPreAsyncCompletion::DoTask was called that calls next ReleaseTranslatorsSource()
ImportSceneObjectDone wurde ausgeführt für Index:::19
InterchangeManager.cpp 343 FimportAsyncHelper::Cleanup
Read Imported Data
LogGeometry: Warning: GeometryScriptError: CopyMeshFromStaticMesh: Requested LOD Type is not available
The interchange import doesn’t fill out the needed CPU-Data i guess, because in most cases it is not needed. I Found a piece of Code Comment:
FStaticMeshLODResourcesToDynamicMesh can be used to create a FDynamicMesh3 from a FStaticMeshLODResources, which is the variant of the mesh in a StaticMesh Asset used for rendering (and which is available at runtime). The FStaticMeshLODResources has vertices duplicated at any split UV/normal/tangent/color, ie in the overlays there will be a unique overlay element for each base mesh vertex.
my next try is i guess is to try if i can manage to extend Interchange somehow to fill a FDynamicMesh3 object.
The Source code of the Engine has a real good quality and is at the same time very big and complex. Advices or motivational speeches will be appreciated.
If someone wonders what this ominous CPU-Data is, here a piece of sourcecode found in (staticmesh.cpp Line 1519 UE 5.2) ( it is not called in my case so only useful for understanding) :
void FStaticMeshLODResources::DiscardCPUData()
{
VertexBuffers.StaticMeshVertexBuffer.CleanUp();
VertexBuffers.PositionVertexBuffer.CleanUp();
VertexBuffers.ColorVertexBuffer.CleanUp();
IndexBuffer.Discard();
DepthOnlyIndexBuffer.Discard();if (AdditionalIndexBuffers)
{
AdditionalIndexBuffers->ReversedIndexBuffer.Discard();
AdditionalIndexBuffers->ReversedDepthOnlyIndexBuffer.Discard();
AdditionalIndexBuffers->WireframeIndexBuffer.Discard();
}#if RHI_RAYTRACING
RayTracingGeometry.RawData.Discard();
#endif
}
It appears to be so simple. Maybe someone want to bite into it and share whatever comes along.