Stereo

Stereo Workflow

Stereo (HMC) is the highest-fidelity job type — the depth-constrained solve resolves facial geometry that monocular footage cannot. In exchange each take needs two parent assets for its actor first: a camera calibration and a prepared MetaHuman Identity. The queue produces both and chains them for you.

Pipeline stages

Requires
Camera Calibration CreateCalibrateStereo
->
Identity CreateMHID_<Actor>
↓
Then solves
Validate Input
->
Generate DepthStereo only
->
Clean DepthOptional
->
Process Performance
->
Export + Save
Depth generation is skipped when the take already has a linked depth sequence.

Required assets

AssetTypeNotes
Capture Data UFootageCaptureData Must reference both camera image sequences
Identity UMetaHumanIdentity Auto-discovered under the actor folder; built by an Identity Create job
Camera Calibration UCameraCalibration Required for depth generation; auto-discovered, or built by a Calibration job

The parent chain

Stereo is a family of three job types in a strict dependency order. The first two exist only to produce the assets the third consumes:

TierJobProducesBlocks until ready
1 CalibrateStereo A CameraCalibration from a checkerboard take, linked to the take and discoverable by the actor's other takes. -
2 Identity Create A rigged, prepared MetaHumanIdentity (MHID_<Actor>), built from an identity take using the calibration. Needs the calibration (for depth). Runs in an interactive editor (cloud AutoRig login).
3 Stereo performance A Performance asset + face AnimSequence — a depth-constrained solve. Needs both the calibration and the prepared identity for its actor.
The iron rule: a stereo take never processes without both parent assets for its actor. Depth is generated from the calibration before the solve, so a bad calibration would poison every take built on it — which is why the calibration quality gates sit upstream. Mono and Audio jobs depend on neither and never wait.

Queue in any order

Execution ignores row order: the batch runs CalibrateStereo first, Identity Create second, everything else third, so prerequisites exist by the time a take preflights. The queue is strictly serial (Epic's single-performance lock), and takes classify by name — grid / calib tokens become CalibrateStereo, identity / dna become Identity Create. Drop a whole actor folder in at once and let the tiers sort themselves out.

Worked example. Queue everything under Imports/Aaron/ in any order and press Start:
  1. Aaron_Calib_Grid runs first (CalibrateStereo) -> a Camera Calibration next to the take.
  2. Aaron_Identity_DNA runs second (Identity Create): depth with that calibration -> neutral track -> conform -> AutoRig -> MHID_Aaron.
  3. Aaron_Take01..N run last (Stereo): preflight links the calibration and MHID_Aaron, and each take produces a Performance + AnimSequence.
  4. Takes queued before their prerequisites simply wait as a blocked status and resume automatically once the parent completes.

Stereo-specific options

Solve Type Selects the internal stereo solver variant. Leave at default unless directed by Epic support.
Head Movement Reference Frame Frame used as the identity reference for head-movement correction. Set to a neutral, stable, forward-facing frame.
Face Coverage / Width Thresholds Minimum proportion of the face visible in depth, and minimum face width in depth pixels, for a frame to be used. Raise to filter partial-face or too-distant frames.
Baseline / Scale Tolerance Acceptable deviation between the calibrated stereo geometry and the live footage. Increase if the rig was adjusted between calibration and capture.
See Per-Job Options for the full stereo parameter reference.

Depth Clean-Up Pass

An optional Clean Depth stage between depth generation and the solve. It is not a blur or global denoise — it distinguishes background from subject by flood-filling inward from the image border, then patches only genuine interior gaps (dropouts inside the face/body silhouette) with a distance-weighted average of surrounding valid depth. Background and out-of-range pixels are left alone rather than smeared.

Non-destructive Writes a new copy of the depth sequence - package suffix _Clean, sibling _clean directory on disk - so the original capture data is never modified.
Asynchronous EXR I/O and pixel work run on the thread pool, not the game thread — the editor stays responsive. Cancel is checked once per frame, so stopping a batch takes effect within a frame instead of at the end of a ten-thousand-frame sequence; the job shows Cancelling until it settles.
Idempotent Re-running a job that already has a cleaned sequence re-cleans from the newest source rather than stacking passes.

Depth and Other takes

A single camera that recorded its own depth solves down the same branch as Stereo, minus the depth generation stage: the take's depth is consumed as-is. The two types differ only in where the calibration comes from.

Depth The take ingested with a calibration already on its Capture Data - a mobile device running Live Link Face ships one with every take. Nothing to calibrate.
Other The same footage with no calibration on the take - a generic depth camera. The calibration is discovered under the actor folder or linked by hand; no Calibration job can produce one, because a single camera cannot solve a pair.
Both still need an Identity A prepared MHID_<Actor>, exactly as Stereo does. An identity take from a depth camera queues as an Identity Create job on the same name tokens (identity/dna); grid names are ignored for these takes.
Clean Depth applies The clean-up pass above runs on the take's own depth when the setting is on, same as for a generated sequence.
Depth solve for depth takes (Global Settings, on by default) is what routes a newly ingested single-camera take with depth here instead of to Mono. Turn it off and those takes queue as Mono, which ignores the depth and needs no Identity. Picking a type by hand pins it: auto-classification and Retry both leave that job's type alone from then on.

Calibration & Identity jobs

Stereo Calibration

Right-click a checkerboard take and choose Generate Stereo Calibration (Checkerboard Take), or let name tokens (grid/calib) classify it. It drives Epic's MetaHuman Calibration Processing plugin (UE 5.7+) and produces a CC_<TakeName> asset linked to the Capture Data, plus an optional OpenCV calib.json on disk. The board is measured in squares, not inner corners (Epic's shipped board is 11 x 16 at 0.75 cm), and Auto-Detect probes candidate sizes before the full scan. Frame selection, sharpness, board override, and the quality gates live under Global Settings -> Stereo Calibration.

Identity Create

Right-click a stereo identity take and choose Create MetaHuman Identity (Stereo), or let identity/dna tokens classify it. It generates depth, tracks the neutral frame, conforms the template mesh, runs Epic's cloud AutoRig, and prepares the identity for performance (MHID_<Actor>). A finished identity is reused across the actor's takes — delete the asset to force a rebuild.

Identity Create needs an interactive editor session for the cloud AutoRig login, so it is not available in headless / CI runs. Build identities in the editor first, then batch the performance solves.

Discovery and blocked states

Discovery is scoped to the actor's folders, which is why keeping a shoot's takes under one actor folder matters:

  • Calibration lookup: already linked on the Capture Data -> capture parent folder -> take folder -> sibling take folders -> one level higher, never past /Game.
  • Identity lookup: capture parent folder -> actor folder, preferring MHID_<Actor>.
  • Rejected calibrations (set aside for poor quality) are invisible to every lookup until you accept or re-solve them.
StatusMeaning & how it clears
MissingCalibration No calibration found for the actor yet. Requeues automatically the moment one appears (a Calibration job finishes, or you link the asset).
MissingIdentity No prepared identity found for the actor yet. Requeues automatically once one exists.
PoorCalibrationQuality A calibration solved but exceeded a quality gate and was set aside. Waits for an explicit decision — Accept Anyway, or a better re-solve. See Calibration settings.