Summary
A Blueprint runtime controller using Create Video Subject works correctly in PIE, but the packaged Windows executable crashes immediately after reaching the Create Video Subject node.
The crash occurs after the camera, video tracks, and video formats are successfully enumerated. The packaged log reports that the Blueprint property using FMonocularAnimationPipelineModels cannot resolve its UScriptStruct.
The failure appears related to FMonocularAnimationPipelineModels being owned by an Editor-only module while being exposed through a runtime Blueprint callable function.
What Type of Bug are you experiencing?
Animation
Steps to Reproduce
- Create a Blueprint-only Unreal Engine 5.8.1 project.
- Enable the MetaHuman, MetaHuman Core Tech, MetaHuman Live Link, and NNERuntimeORT plugins.
- Create an Actor Blueprint such as
BP_MetaHumanLiveLinkRuntimeController. - In
Event BeginPlay, call:Get Video Devices Of TypeGet Video TracksGet Video FormatsCreate Video SourceCreate Video Subject
- Configure
Get Video Devices Of Typewith:Device Type = CaptureDevice - Configure
Get Video Formatswith:Filter Formats = false - On
Create Video Subject, connect aMake Monocular Animation Pipeline Modelsnode. - Set:
NNE Backend = NNERuntimeORTDml Face Detector = /MetaHumanCoreTech/GenericTracker/FaceDetector.FaceDetector Face Head Pose Tracker = /MetaHumanCoreTech/RealtimeMono/HeadPoseTracker.HeadPoseTracker Face Solver = /MetaHumanCoreTech/RealtimeMono/GenericRigSolver.GenericRigSolver - Set:
Create Video Subject → Subject Name = test - Place the Actor in the level.
- Run PIE. The subject is created successfully.
- Package the project for Windows.
- Launch the packaged executable.
Expected Result
The packaged Windows build should create the MetaHuman Live Link video subject and start the animation pipeline, matching PIE behavior.
Observed Result
The packaged build successfully enumerates the camera and video formats:
Capture Device [0] Name=UGREEN Camera 4K Url=vidcap://...
Track Count = 2, Tracks Timed Out = false
Format Count = 44, Formats Timed Out = false
Then the build logs:
LogProperty: Error: Struct type unknown for property
'BP_MetaHumanLiveLinkRuntimeController_C:ExecuteUbergraph_BP_MetaHumanLiveLinkRuntimeController:K2Node_MakeStruct_MonocularAnimationPipelineModels';
perhaps the USTRUCT() was renamed or deleted?
The process then crashes with:
Script Stack:
/Game/Characters/myMetaHumanCharacter/BP_MetaHumanLiveLinkRuntimeController.BP_MetaHumanLiveLinkRuntimeController_C.ExecuteUbergraph_BP_MetaHumanLiveLinkRuntimeController
/Game/Characters/myMetaHumanCharacter/BP_MetaHumanLiveLinkRuntimeController.BP_MetaHumanLiveLinkRuntimeController_C.ReceiveBeginPlay
Fatal error:
Assertion failed
Affects Versions
5.8
Platform(s)
Windows
For crash reports, include your callstack
Raw PC call stack from CrashContext.runtime-xml:
myfirstTemp 0x00007ff6cc300000 + 19196d8
myfirstTemp 0x00007ff6cc300000 + 23f0fd6
myfirstTemp 0x00007ff6cc300000 + 23eded3
myfirstTemp 0x00007ff6cc300000 + 23c9dd6
myfirstTemp 0x00007ff6cc300000 + 23a7de6
myfirstTemp 0x00007ff6cc300000 + 23af1cd
myfirstTemp 0x00007ff6cc300000 + 23c9b50
myfirstTemp 0x00007ff6cc300000 + 23c9dd6
myfirstTemp 0x00007ff6cc300000 + 23c95d1
myfirstTemp 0x00007ff6cc300000 + 2117bd8
myfirstTemp 0x00007ff6cc300000 + 23c8fe9
myfirstTemp 0x00007ff6cc300000 + 4c80f17
myfirstTemp 0x00007ff6cc300000 + 4c5ef9b
myfirstTemp 0x00007ff6cc300000 + 4c66026
myfirstTemp 0x00007ff6cc300000 + 656f0e9
myfirstTemp 0x00007ff6cc300000 + 559e2e1
myfirstTemp 0x00007ff6cc300000 + 646d6ad
myfirstTemp 0x00007ff6cc300000 + 65f006b
myfirstTemp 0x00007ff6cc300000 + 65b0cdf
myfirstTemp 0x00007ff6cc300000 + 55c6e3b
myfirstTemp 0x00007ff6cc300000 + 5547b1b
myfirstTemp 0x00007ff6cc300000 + 985e303
myfirstTemp 0x00007ff6cc300000 + 985d717
myfirstTemp 0x00007ff6cc300000 + 985d8da
myfirstTemp 0x00007ff6cc300000 + 98614c0
myfirstTemp 0x00007ff6cc300000 + 98702b4
myfirstTemp 0x00007ff6cc300000 + fc3da29
KERNEL32 0x00007ffd4ff50000 + 2ccb7
The local packaged build does not provide a symbolicated call stack.
Additional Notes
The referenced model assets are included in the packaged build:
Engine/Plugins/MetaHuman/MetaHumanCoreTechLib/Content/GenericTracker/FaceDetector.uasset
Engine/Plugins/MetaHuman/MetaHumanCoreTechLib/Content/RealtimeMono/HeadPoseTracker.uasset
Engine/Plugins/MetaHuman/MetaHumanCoreTechLib/Content/RealtimeMono/GenericRigSolver.uasset
The Soft Object Path values are valid and work in PIE:
/MetaHumanCoreTech/GenericTracker/FaceDetector.FaceDetector
/MetaHumanCoreTech/RealtimeMono/HeadPoseTracker.HeadPoseTracker
/MetaHumanCoreTech/RealtimeMono/GenericRigSolver.GenericRigSolver
In the installed engine, MetaHumanPipelineCore, which owns FMonocularAnimationPipelineModels, is declared as an Editor module:
{
"Name": "MetaHumanPipelineCore",
"Type": "Editor"
}
However, UMetaHumanLocalLiveLinkSourceBlueprint::CreateVideoSubject is exposed as a runtime-callable Blueprint function and takes this struct as a parameter:
UFUNCTION(BlueprintCallable)
static void CreateVideoSubject(
const FLiveLinkSourceHandle& VideoSource,
const FMetaHumanLiveLinkVideoFormat& VideoFormat,
const FString& SubjectName,
FLiveLinkSubjectKey& VideoSubject,
bool& Succeeded,
float StartTimeout = 5,
float FormatWaitTime = 0.1,
float SampleTimeout = 5,
const FMonocularAnimationPipelineModels& MonocularAnimationPipelineModels = FMonocularAnimationPipelineModels());
This appears inconsistent: PIE can resolve the struct, but the packaged runtime cannot deserialize the Blueprint temporary struct and crashes.
Possible workaround to investigate:
Calling CreateVideoSubject from native C++ with a directly constructed FMonocularAnimationPipelineModels value may bypass the Blueprint temporary
struct deserialization step, but this has not yet been tested in this project.