Skip to content
exploring EARLIER EXPLORATION / EMBODIMENT PROTOTYPE

ue-realtime · MetaHuman facial expression and lip-sync prototype

Near-realtime prototype: UE5 MetaHuman face & lip-sync driven by emotion vectors (current A2F latency ~0.5-1s, target sub-200ms).

belong to the system Early Exploration · Embodiment Prototype · Upstream connection emotion of evie-agent → blend shape with LoRA & TTS Studio Sound Assets · Downstream for embodied expression experiments such as UE viewport (see Four-layer engineering chain)·Latest verification: 2026-06

01 / demo display

prototype screen recording

Currently exploring stage, 3 segments MetaHuman + emotion → blend shape link prototype. Click play to view each segment.

clip 01 · prototype
clip 02 · prototype
clip 03 · prototype

02 / Position in the system

Why this layer exists

Embodiment is the layer of virtual humans that is closest to the user's senses - it restores the semantic/emotional signals produced by the Cognition layer into a face that can see, blink, and lean forward slightly. Without this layer, the entire system would remain "words in a dialog box" rather than "a present entity".

ue-realtime undertakes two upstream data streams: one is the emotion vector and dialogue state output by evie-agent, and the other is the sound assets produced by LoRA & TTS Studio. The current evidence remains at the UE viewport prototype, and desktop floating windows and VR are still unverified directions.

Transport layer QoS selection: Text dialogue uses TCP (reliability is priority, losing words is unacceptable); expression data uses UDP semantics (delay is priority, losing a frame of expression does not affect the experience, but the user will immediately notice the lag for 200ms). The existing LiveLink has already used UDP to transmit shape blend data. Future cloud rendering directions evaluate WebTransport (HTTP/3 + QUIC, application layer reliable transmission on UDP) and WebRTC (browser native P2P low latency), Instead of simply saying "use QUIC".

03 / What do you want to solve?

vision-aligned problem statement

There is a ceiling to text dialogue. The "final state" of the virtual human vision is not a chat window, but an entity that can look at you, show expressions, and nod / shake / lean in. This means that the link LLM → emotion vector → MetaHuman blend shape must be real-time (sub-100ms is the ideal number), must be controllable (emotion intensity, transition curve is adjustable), and must avoid the "uncanny valley" (no matter how real the still frame is, it will collapse due to micro-expression misalignment).

Without this layer, Evie will be stuck in "a very talking LLM" - which is precisely the most crowded track of current AI products. ue-realtime brings Evie from chat surface to embodied surface.

04 / Current state + known limit

Where have you done it now?

Status: exploring. The link has been passed to the minimum viable prototype, but it is still far from a "visible product form".

AHas landed

UE5.4 MetaHuman basic rendering runthrough; UE MCP tool set can control MetaHuman's expression/speech/scene switching through PowerShell; Audio2Face (NVIDIA Omniverse) access experiment; prototype LLM → emotion → MetaHuman face shape blend link can be run end-to-end.

BExploring

A2F latency optimization (currently ~0.5-1s, far from real-time); motion library design (several basic actions such as idle / nod / lean in are still being planned); lip sync debugging (Chinese and English phoneme alignment and artifacts).

CTo be resolved

real-time emotion → expression is still in the uncanny valley, and the micro-expression transition is not soft enough; there is no self-built motion capture data set, and now relies on MetaHuman default animation; the desktop floating window form (UE5 viewport embedded in PWA? Independent OBS push flow? Floating window overlay?) has not yet been decided.

05 / Next milestone

What to push next

ASplit emotion mapping and lip sync links

Currently, the two signals are squeezed into the same channel of Audio2Face, so we need to decouple them first. Emotion uses the emotion vector → blendshape weight table lookup method; lip shape continues to use audio → A2F inference. After decoupling, the two link delays can be measured independently.

BExpression control link delay optimized to sub-200ms

Currently ~0.5-1s is mainly consumed in Omniverse inference. After decoupling the emotion channel lookup table + interpolation smoothing, it no longer relies on GPU inference; the mouth channel continues to evaluate A2F latency or alternatives.

CTransport protocol evaluation

WebTransport (HTTP/3) vs WebRTC (P2P) — The cloud direction requires a browser-compatible protocol. Currently LiveLink UDP has been verified to work locally.

DMinimal motion library

5 actions (idle / nod / shake / lean in / blink), let MetaHuman no longer only have expressions.

06 / Iteration log

Version evolution·Problem driven

The following are the key iteration nodes of the ARKit52 route from selection to FACS signature locking. The structure of each record: What problems were encountered → What ideas were used to solve them. All attempts are not listed, only nodes with engineering decision-making significance are listed.

2026-06-02

Reconstruction of the true value of the public data set. Problem: The original label of the data set is dirty, sad is actually a crying face, and surprise contains an eye mask. Solution: Abandon the original label, use detection fidelity to confirm (full true glare with high glare channel), signature retrieval → manual review → clean exemplars 52-dimensional scalar vector to do the truth value.

2026-06-02

Detection engine redundancy. Problem: A single detection engine has no signal for the FACS key AU (levator buccinator / corrugator rhinis) and always outputs 0, disgust / happy, and the accuracy collapses. Solution: Change to a detection engine that supports full channels, all key AUs are active, multi-channel projection standard 52 dictionary.

2026-06-02

FACS signature empirical locking. Problem: The academic textbook signature fails on the self-collected real data - the calibrated wrinkled nose AU of disgust is all angry faces in the real data, and sad is not AU1+15 but AU15+14. Solution: Positive channel + negative constraint weighting (score = positive mean - 0.4 × negative mean), dead channel bypass, parameter-by-parameter comparison table to finalize six emotions.

2026-06-02

Local self-collection of the truth value library. Problem: The existing public data sets either have coefficient ranges that are incompatible with industry standards, or are gated, or speak and open their mouths to drown out emotional signals, all of which are unavailable. Solution: Local self-collection of scalar parameters in line with industry standards through desktop cameras, automatic recording + simulated mobile real-time channels, and full process automation.

2026-06-01

Emotional semantic judgment. Problem: Parameters match ≠ semantic pair, similar emotions (crying/grievance/fear). The parameter difference is very small but the emotions are different. Solution: Blindly feed the actual parameters without giving the target, LLM outputs the emotion category + intensity + basis, and manually judges the consistency instead of giving numerical scores.

2026-06-01

Three-layer verification table. Problem: Universal face detection is seriously inaccurate on non-real faces (animation faces). Mouth opening is 1.0 and the actual measurement is only 0.28. Solution: The actual driving value of the direct reading model is used as an objective guarantee. The detection value is only used in real face scene annotation. The detection is changed to manual triggering to decouple the expression logic.

2026-06-01

Local TTS lip synchronization. Problem: The phoneme timing alignment returned by TTS inference is discarded by the official script. Solution: Replicate the inference path to retain phoneme alignment, map primary vowels to finals, and drive mouth shape + smooth transition in real time.

2026-06-01

The first version of 3D demo. Problem: The online model source was cut off by the proxy wall, and the asset names were mixed in upper and lower case, causing binding failure. Solution: Change to offline model + full asset localization, case-independent compatible matching, verify that the expression driver actually takes effect.

2026-06-01

Full link closed loop for expressions. Problem: There is no automatic verification of the expressions adjusted by the slider, and it is difficult to evaluate the accuracy of LLM emotion → parameter translation. Solution: Add a two-way API service, display 12-channel JSON in real time on the front end, and blindly distinguish emotions and target expressions for side-by-side verification (without applying the scoring template).

2026-06-01

Quantitative deterministic verification. Problem: It is suspected that the candidate solution is a temperature sampling output. Different parameters for the same emotion every time will invalidate the LLM addressing. Solution: Run the deterministic test continuously with the same input, the pixel difference is 0, and the slider to vector mapping is deterministically confirmed, dispelling the illusion.

2026-06-01

Truth source route selection. Problem: The 63-dimensional implicit vector output by a candidate route has no semantics and cannot be addressed by LLM; the official repo of another reference solution has no code, no weight, and cannot be reproduced. Solution: Lock the ARKit52 blendshape dictionary as the truth source (LLM readable, 0-1 scalar, MetaHuman industry standard compatible), and reject the 2D implicit route.

The above nodes involve truth source selection, quantitative certainty, expression signature construction, detection engine redundancy and data set cleaning. The complete iteration is far more than this.

System/Module