The MetaHuman DNA asset is a configurable asset that changes how MetaHuman DNA is authored, imported, configured, cooked, and runtime-evaluated. The DNA asset provides a way to:
Configure
DNAConfig, pick coordinate systems, and tune in platform RigLogic settings.Integrate MetaHuman characters into runtime games.
Upgrade projects from 5.7 or earlier to 5.8 with a scriptable migration path.
How DNA Differs From UDNA
In MetaHuman 5.8 the DNA asset replaces the UDNAAssetAssetUserData pattern and appears in the content browser as a standalone asset, where previously the DNA asset was stored in the USkeltalMesh.
5.8 DNA Features
Generalized coordinate-system conversion: DNA can be loaded into, and re-emitted in any of the following:
Target coordinate system.
Rotation convention.
Face winding order, driven by a fully-described
FDNAConfig.
Dedicated
UDNAasset type: A first-class, standalone DNA asset with its own content browser entry, replacing theUDNAAsset AssetUserDatapattern.Project-level RigLogic settings: You can find a RigLogic page by opening Project Settings > Plugins > RigLogic. The page provides per-import defaults that apply to every newly imported DNA asset.
Per-platform
DNAConfigandRigLogicConfiguration: Both structs carry per-platform fields that are flattened to the cook target during PreSave, so each platform ships only the LODs and runtime parameters it needs.Optimized cooked serialization: Cooked DNAs serialize the already-initialized
FRigLogicstate directly into the archive instead of raw DNA bytes, delivering ~50× faster runtime initialization.Headless migration commandlet: (
ConvertLegacyDNAAssets) for upgrading existing projects.
How DNA Works in 5.8
Performs general-case coordinate-system conversion on every spatial channel of the DNA: neutral joint translations and rotations, joint deltas, vertex positions and normals, blend-shape deltas, RBF solver raw control values, and face winding.
Promotes DNA to a content-browser-discoverable asset (
UDNA) with:Import.
Export.
Create-from-legacy actions.
Provides a way for a project to declare default LOD ranges, calculation backend, FP precision, multi-threaded ML toggle and layer load flags once, in Project Settings, and have them applied to every newly imported DNA.
Applies in-place edits, such as:
Editing
DNAConfigon aUDNAre-runs the converter against the in-memory bytes.Rebuild the runtime context with needing to reimport.
At cook time, flattens per-platform values into the
Defaultslot for the target platform; cooked archives carry only minimum-runtime DNA + a serialized RigLogic state.At load time, restores
FRigLogicdirectly from the archive instead of rebuilding from DNA bytes.Migrates legacy
UDNAAssetuser-data to standaloneUDNAassets in a single, scriptable, source-control-aware pass.
Because the destination space is now arbitrary, you can target any coordinate system. The conversion produces a correctly-built skeletal mesh and joint hierarchy in the requested space, and it renders correctly inside Unreal.
However, animations are not coordinate-system-agnostic:
An
UAnimSequencecontaining only animation curves plays back correctly on a DNA in any target space — curves drive RigLogic inputs, which are space-independent.An
UAnimSequencecontaining bone tracks carries absolute joint transforms baked in UE-native space. If the skeletal mesh underneath is in a different space, those bone-track transforms are applied verbatim and the mesh will deform incorrectly.
Recommendation: for ship-targeted MetaHumans where bone-track animation will be played, keep the DNA in {Left, Front, Up} / signs {Negative, Negative, Positive} / XYZ / CW. Only choose a non-UE-native target when animation will be curve-only or the workflow is offline / DCC-bound.
Find the DNA Asset
When you open any existing UE 5.8 project there is no plugin install required. DNA and RigLogic are shipped with the engine in Engine/Plugins/Animation/RigLogic (the same place it lived in 5.7). The legacy UDNAAsset class is preserved and renamed in the editor to "Legacy MetaHuman DNA Data" so existing 5.7 content keeps loading. The new UDNA is what a fresh import produces.
UDNA in Unreal Engine
To find your UDNA assets in Unreal, look in the following places in the engine:
Project Settings > Plugins > RigLogic
A new section for project-wide DNA import defaults.
Content Browser
A new
UDNAasset type (display name: DNA), with right-click actions on bothUSkeletalMesh(import / create from legacy) andUDNA(export).
Asset editor / Details panel
The
UDNAexposesDNAConfig,RigLogicConfiguration,bKeepDNAAfterInitialization,bUseOptimizedCooking,MetaData. Custom property panels render the coordinate-system editor and the per-platform enum dropdowns.
Asset Registry
The
USkeletalMeshrows now expose a "DNA" tag identifying the associated DNA name.
Command line
A new
-run=ConvertLegacyDNAAssetscommandlet.
UDNA User Interface
Specific new UI elements include:
Project Settings > Plugins > RigLogic :
Default DNA ConfigandDefault RigLogic Configurationsections.
Content Browser > right-click on a
USkeletalMesh> MetaHuman DNA submenu :Import DNA Asset, Create DNA Asset (visible only on meshes still carrying a legacy
UDNAAsset).
Content Browser > right-click on a
UDNA> Export DNA.UDNADetails panel > DNA category :The full
FDNAConfig(Layers bitmask, Max/Min LOD per platform, Exact LODs, coordinate-system policy + axes + rotation sign + sequence + face winding).
UDNADetails panel > RigLogic category :Per-platform calculation type, per-platform FP type, per-platform multi-thread ML toggle, layer load flags, joint representation toggles, pruning thresholds.
UDNADetails panel > top-level :bKeepDNAAfterInitialization, bUseOptimizedCooking, MetaData.
Custom property panel: coordinate system :
Three coherent X/Y/Z dropdowns plus an Apply button that gates commit on a valid basis (3 distinct spatial axes, |det(B)|≈1).
Custom property panel: per-platform enums :
Render enum dropdowns instead of integer spinners inside the per-platform widgets for
CalculationTypePerPlatform and FloatingPointTypePerPlatform.
5.8 DNA Workflows
Before you can work directly with the UDNA asset you must do the following:
Install Unreal Engine 5.8.
A project containing (or about to import) MetaHuman DNA content.
For the migration path, have an existing UE 5.7-or-earlier project carrying legacy
UDNAAssetuser-data onUSkeletalMeshassets.For the cook-time benefits, target at least one platform configuration (Mobile, PS5, XSX, Switch, etc.) where you intend to override LODs or FP type.
Configure Project-Wide DNA Import Defaults
Open Project Settings.
Navigate to Plugins > RigLogic.
Expand Default DNA Config:
Set Layers (which layers to load — Descriptor, Definition, Behavior, Geometry, GeometryNoBlendShapes, MLBehavior, RBFBehavior).
Set
Max LODandMin LODper-platform overrides as needed (Mobile, Desktop, Console, and so on).Set Coordinate System Transform Policy (
Preserve/Transform),Coordinate System,Rotation Sign,Rotation Sequence,Face Winding Orderif your studio's source DNAs aren't in UE-native space.
Expand Default RigLogic Configuration:
Set Calculation Type per platform (
Scalar,SSE,AVX,NEON,AnyVector).Set Floating Point Type per platform (
Float,HalfFloat,Auto).Autoresolves toFloaton Desktop,HalfFloatelsewhere at cook time.Set Enable multi-thread ML Compute per platform.
Toggle layer loads (
LoadJoints,LoadBlendShapes,LoadAnimatedMaps,LoadMachineLearnedBehavior,LoadRBFBehavior,LoadTwistSwingBehavior).
Save your project. Defaults apply to every newly imported DNA. Reimports preserve each asset's already-saved settings.
Import a New .dna File
In the content browser, choose Import (or drag the
.dnafile in).The importer auto-detects the source format. Legacy MetaHuman DNAs (DBName
FNorFN_MH_v2) without geometry are loaded underFDNAConfig::Legacy()to remain compatible with already-imported SkeletalMeshes. Other sources start from the project default.A new
UDNAasset is created. The asset carries the project default RigLogicConfiguration.Right-click the target
USkeletalMesh> MetaHuman DNA > Import DNA Asset to attach the newUDNAviaUDNAAssetUserData.
Edit a DNA's Coordinate System After Import
Open a
UDNAasset.On
MaxLODPerPlatform,MinLODPerPlatform,CalculationTypePerPlatform,FloatingPointTypePerPlatform,EnableMultiThreadMLComputePerPlatform, select the +Add icon to add an override for a target platform group (Mobile, Desktop, Console, and more) or a specific platform.Pick the desired enum / value. The Default value is used for any platform without an override.
Save. At cook time,
UDNA::PreSaveflattens the per-platform value for the cook target into theDefaultslot.AutoFP type resolves toFloaton Desktop,HalfFloatelsewhere.
Important — keep DNA LOD count and face SkeletalMesh LOD count in sync.
The DNA's LOD count (after Max/MinLODPerPlatform is applied) and the driven face USkeletalMesh's LOD count must match 1:1 at runtime — FAnimNode_RigLogic feeds the SkelMesh's current LOD index straight to the rig as the DNA LOD index. If you change DNA LODs on a platform, change the face SkelMesh's LOD settings on the same platform to match. If the actor needs a different LOD count than the face SkelMesh exposes, decouple it via ULODSyncComponent::CustomLODMapping rather than reshaping the DNA — see Risks:
DNA LOD count and face USkeletalMesh LOD count must match 1:1 at runtime
Don't conflate the DNA↔SkelMesh 1:1 rule with actor-level LOD remapping
Migrate a 5.7 Project to the 5.8 DNA Layout
Make sure source control is checked in / clean.
Run a dry-run first to preview changes:
Command LineUnrealEditor-Cmd.exe MyProject.uproject ^ -run=ConvertLegacyDNAAssets ^ -PathFilter=/Game/MetaHumans ^ -DryRun -Verbose -UnattendedReview the printed Phase 1 / Phase 2 summary.
Apply (single-step layout migration + version bump):
Command LineUnrealEditor-Cmd.exe MyProject.uproject ^ -run=ConvertLegacyDNAAssets ^ -PathFilter=/Game/MetaHumans ^ -ResaveDNA ^ -AutoCheckOut -AutoCheckIn -Unattended ^ -NoSplash -NullRHI -stdout -FullStdOutLogOutputVerify each
USkeletalMeshnow carries aMetaHuman DNA Data(UDNAAssetUserData) entry pointing to a standaloneUDNAasset.
The full commandlet reference (all switches, behaviour details, examples, output format) lives in the companion technical document UE5.8_DNA_RigLogic_PreDoc.md § Legacy → 5.8 migration.
Known Limitations and Potential Risks
The following are known limitations potential risks of working with UDNA:
Bone-track animations on non-UE-native rigs
A UDNA can be loaded into any target coordinate system, and the resulting SkeletalMesh renders correctly.
However, bone-track animations carry absolute joint transforms baked in UE-native space and will deform a non-UE-native rig incorrectly. Curve-only AnimSequence data is space-agnostic and is the safe choice on non-UE-native rigs. Recommend ship-targeted DNAs stay in UE-native coordinates unless the workflow is curve-only.
DNA LOD count and face USkeletalMesh LOD count must match 1:1 at runtime
FAnimNode_RigLogic calls RigInstance > SetLOD(SkelMesh.GetLODLevel()) — the SkelMesh's current LOD index is fed straight to the DNA as the DNA LOD index. So the DNA's LOD pyramid (driven by FDNAConfig.MaxLODPerPlatform / MinLODPerPlatform / ExactLODs) and the face SkelMesh's LOD list must contain the same number of entries.
Editing one without editing the other (for example, dropping a SkelMesh LOD without adjusting Max/MinLODPerPlatform, or vice versa) will cause RigLogic to evaluate against an LOD index the DNA does not contain, producing missing blend-shape activations or skipped rig evaluation.
The right places to drive both together: at build time edit FMetaHumanLODProperties.FaceLODs / BodyLODs on the MetaHuman Default Editor Pipeline (which selects which DNA LODs are baked into the built MetaHuman); at runtime / per-platform edit FDNAConfig.Max/MinLODPerPlatform on the UDNA and the SkeletalMesh's USkeletalMeshLODSettings for the same platform.
Per-platform mismatches only surface in cooked builds.
Don't conflate the DNA↔SkelMesh 1:1 rule with actor-level LOD remapping
When the actor needs to expose a different LOD count than the underlying face / body SkelMeshes (for example, an actor with 4 perceived LODs driving a face mesh that only has 2 distinct meshes), use ULODSyncComponent::CustomLODMapping (TMap<FName, FLODMappingData>, where FLODMappingData::Mapping is a TArray<int32> from actor-LOD index → component-LOD index).
The MetaHuman Character Editor wires this through IMetaHumanCharacterEditorActorInterface::InitializeMetaHumanCharacterEditorActor, which takes int32 InNumLODs, TArray<int32> InFaceLODMapping, TArray<int32> InBodyLODMapping.
An example from the in-source docs: InNumLODs=4, InFaceLODMapping={0,0,1,1} means actor LODs 0..1 use face LOD 0, actor LODs 2..3 use face LOD 1. This remap sits above the rig-evaluation layer; the DNA-to-face-SkelMesh relationship below it is still 1:1. Reference implementation: AMetaHumanCharacterEditorActor.
FAnimNode_RigLogic.LODThreshold is a perf knob, not a mapping
It is the maximum SkelMesh LOD level at which RigLogic still evaluates (default INDEX_NONE = always evaluate). Above the threshold, the node returns the input pose unchanged. Setting it lower is a performance / quality trade-off; it does not paper over a count mismatch between DNA LODs and SkelMesh LODs.
Project defaults versus reimport
Reimporting an existing asset preserves that asset's already-saved settings. Project defaults only affect newly imported DNAs. Editing Project Settings > Plugins > RigLogic does not retroactively re-tune existing assets.
bUseOptimizedCooking = false reverts to the legacy cooked path. No RigLogic state dump in the archive, larger cooked payloads, and the loss of the ~50× runtime-init speedup. Default is true; only disable for debugging.
ConvertLegacyDNAAssets with -ReimportFromSource and a missing source .dna
If a mesh's original .dna is missing on disk and a <Mesh>_DNA already exists, the commandlet does not fall back to in-place conversion — it skips with Already migrated (intentional, to avoid stomping custom config).
Editing FDNAConfig.Layers invalidates the FDNAIndexMapping cache
The asset handles this automatically. Third-party code holding a long-lived TSharedPtr<FDNAIndexMapping> outside the asset must rebuild after a config change.
Legacy class label confusion
In 5.8, UDNAAssetUserData (the new wrapper) shows in the editor as "MetaHuman DNA Data", while the legacy UDNAAsset shows as "Legacy MetaHuman DNA Data". Tutorial videos / screenshots using the old "MetaHuman DNA Data" label now refer to a different class. Existing screenshots need re-capturing.
Coordinate-system editor commits on Apply, not on each axis change
Editing X/Y/Z dropdowns stages the change; the Apply button is only enabled when the staged basis is valid. Users dragging values around should not expect live updates — this is intentional, to prevent transient invalid bases from triggering full DNA reloads.
DCC export guidance for non-UE-native targets
The Maya and Houdini export tooling has not been updated as part of 5.8. Studios using MetaHuman for Maya and MetaHuman for Houdini should continue to author in the established conventions and let the importer convert at load time.