Anatomies define the look of your character’s body. The profiles hold all information about anatomies that are possibly selectable by the BP_CharacterCustomization component and the in-game Character Editor.
The anatomies should be as flexible as possible while already restricting to most generic visual differences of living beings. We have looked at games, books, and other sources where various living beings other than “humans” are introduces.
We wanted to prepare the Character Editor for your own extensions, without the need of any further logic regarding those visuals, hence we broke those living beings down to Race, Gender and Generation.
Of course, the logic behind the Anatomy Profiles does not restrict to always have all possible combinations of a new race you would implement into the pack. This is rather a guideline you can follow.
The anatomies are maintained in two asset types:
This enum defines which anatomy is selectable in the Customization Profile. Its display names can be written with spaces, but apart from that they have to match the row names of DT_AnatomyProfiles
.
This data table stores all the information for the anatomies. Each table row must be named like the corresponding enum value of EAnatomy
, but without spaces, as this is how data tables work.
It can be assigned to BP_Character > AnatomyDataTable
, which is then passed to BP_CharacterCustomization > AnatomyDataTable
in BP_Character
> Construction Script
.
An anatomy consists of the following properties.
[V8] Body
contains the Mesh property for a valid anatomy. The head-related properties in this section are intended to be used as defaults or for combined body and head meshes.
Mesh
(replaces [V7 removed] Body Mesh
) defines the mandatory skeletal mesh for the body. It can optionally have a combined mesh including a head (like our child anatomy).
[V9] Anim Instance Class
(replaces [V8 removed] Anim Instance Class
on root level) contains the Anim Blueprint that is applied to the Mesh component (Body mesh).
See Anim Instance Classes below for details.
Skin Material Sets
(replaces [V7 removed] Skin Material Sets on root level) contains possible skin material sets.
See Skin Material Sets below for details.
Body
contains material slot names and materials affected by editor changes (skin color, aging, etc.) and basebody masks.
Head
contains material slot names and materials affected by editor changes (skin color, aging, etc.). If your mesh has no head material slot (like our combined child mesh), this material is optional.
Eyes Material Sets
contains possible eyes material sets.
See Eyes Material Sets below for details.
Eyes
contains material slot names and materials affected by editor changes (eyes color).Face Variants
contains possible face variants.
See Face Variants below for details.
Group Name
is the prefix for the final morph target.
IDs
contains possible suffixes for the final morph target.
[V8] Heads
(replaces [V7 removed] Heads
; replaces [V6 removed] Head Mesh
) contains optional heads that you can switch between in the Character Editor.
Mesh
contains the skeletal mesh for the head.
[V9] Anim Instance Class (Override)
See Anim Instance Classes below for details.
Skin Material Sets (Overrides)
See Skin Material Sets below for details.
Head
(there is no Body
in the overrides)Eyes Material Sets (Overrides)
See Eyes Material Sets below for details.
Eyes
Face Variants (Overrides)
(replaces [V7 removed] Face Variants
array)
See Face Variants below for details.
Group Name
IDs
Default Customization Profile
is used in the in-game Character Editor to setup the character if you choose this anatomy in the editor for the first time after Begin Play. (See BP_CharacterCustomization component > SetAnatomy
)
Since the Utility Update, the BP_CharacterCustomization > AnatomyDataTable
is superficially validated to make sure the correct table is assigned. "Superficially" means, that we only check for its name and assume it has been created correctly in the first place, since we cannot check for the underlying table structure in Blueprints.
Our default data table is DT_AnatomyProfiles_V9
, where you can add anatomies as you desire, but when creating your own table, make sure you either copy our latest table or use the latest structure FAnatomyProfile_V9
for creating a new table and have the latest version "V9" in its name, e.g. DT_MyCustomName_V9_MyCustomSuffix
.
If the name does not contain "V9" and you would assign it to BP_CharacterCustomization >
AnatomyDataTable
, the logic assumes that you did assign one of the older data tables from previous versions.In this case the following error is thrown:
Error: Invalid Anatomy Data Table version.
Please use an Anatomy Data Table based on 'FAnatomyProfile_V9'. The name of a custom table must also contain "V9" to be valid. Check your Blueprint defaults or the current instance overrides in the Details panel for the currently assigned table and change them to a valid table.
The properties Body
> Mesh
and Body
> Anim Instance Class
are mandatory for a valid profile. If one of them or both not being set, throws a warning in the BP_CharacterCustomization > Function: Initialize > Update Available Anatomy Profiles
and makes the profile unavailable for being selected.
If you want to add your own custom meshes, then you can choose between two setups.
Body
> Mesh
and the Heads[]
> Mesh
separately, similar to our HumanFemaleAdult
.Body
> Mesh
, where the head is combined with the body, similar to our HumanFemaleChild
.See Skin Material Sets and Eyes Material Sets below for details on how you have to setup the materials.
Anim Instance Classes animate your Character.
While Body
> Anim Instance Class
is mandatory for a valid profile, Heads
> Anim Instance Class (Override)
are optional for each head.
Body
> Anim Instance Class
requires an Anim Blueprint, that is compatible with the skeleton assigned to the Body
> Mesh
. Both the mesh and this Anim Instance Class are set to the Character Blueprints' default Mesh
component.
Heads
> Anim Instance Class
require an Anim Blueprint, that are compatible with the one used for the body.
Make sure, that this Anim Blueprint uses the Unreal built-in node Copy Pose From Mesh
as shown below. This node will automatically copy the current animation from the Characters' Mesh
component. You can use the pose by calling Use cached pose 'BodyPose'
(also multiple times) in your head Anim Blueprint to layer-blend body and head animations.
Copy Pose From Mesh
details have to be configured this way:
This screenshot shows you that the [V8] Anim Instance Class
has been moved into [V9] Body
> Anim Instance Class
section. Additionally, there are Anim Instance Class (Override)
in each element of the Heads
section.
Skin Material Sets are used to choose between different skin variants.
For Body
> Skin Material Sets
each array element contains a Body
and Head
array where you can add one or more material slots and materials. For Heads
> Skin Material Sets (Overrides)
however, each array element contains only a Head
array to override one or more head-specific materials.
Each array element can be chosen by an index in the skin variant Index Picker in the Character Editor and by the Basebody (Profile) > Skin > Material Index property in the Customization Profile
.
The currently selected Skin Material Set is updated by BP_CharacterCustomization
> Update Skin Materials.
Use the Body sets, if you want to define different default skin types, as in our Human examples.
In the screenshot below, the left side shows the HumanMaleAdult
anatomy's first Body > Skin Material Sets
element. The Body
array contains an element for the "Body" slot with a predefined material. The Head
array contains an element for the "Head" slot with a predefined material. BP_CharacterCustomization > UpdateSkinMaterials
then applies the given materials as Material Instance Dynamics.
On the right side of the screenshot however, you can see the MetahumanMaleTalNRW
anatomy's first element with two differences: The Body
and Head
arrays contain different slot names, matching the MetaHuman skeletal mesh and the materials are set to None. Setting materials to None creates material instances based on the currently assigned materials in the given slot. This is useful, if you just want to make the slots controllable but don't worry about specific materials.
Here you can see the corresponding skeletal meshes and their matching slot names.
Use the Head override sets, if you want to keep your Body
material always the same, but want to define different Head
materials, like normal skin, freckles, coffee stains, wounds etc. for each of your head variants.
For Heads > Skin Material Sets (Overrides)
each element takes Head
array elements that follow the same rules as in the Body section.
Though, the Body
section defines how many skin variants can be chosen in the Character Editor. Thus if there should be 2 head overrides, as well there must be at least 2 Body Skin Material Sets. In these body skin material sets you can then ignore the Head
array. If you have less overrides than Body Skin Material Sets, it will use the Body element.
Below is an example of having 4 Body Skin Material Sets and 2 Skin Material Sets (Overrides). As you can see, body set index 0
and 1
are overriden by the -Special
and -Fancy
head material sets, but body set index 2
and 3
with -03_Head
and -04_Head
are still used.
Body > Skin Material Sets
Set Index | Slot | Slot Index | Material |
---|---|---|---|
0 |
Body | 0 |
MI_Skin_Male_01_Body |
0 |
Head | 0 |
MI_Skin_Male_01_Head |
1 |
Body | 0 |
MI_Skin_Male_02_Body |
1 |
Head | 0 |
MI_Skin_Male_02_Head |
2 |
Body | 0 |
MI_Skin_Male_03_Body |
2 |
Head | 0 |
MI_Skin_Male_03_Head |
3 |
Body | 0 |
MI_Skin_Male_04_Body |
3 |
Head | 0 |
MI_Skin_Male_04_Head |
Heads > Skin Material Sets (Overrides)
Set Index | Slot | Slot Index | Material |
---|---|---|---|
0 |
Head | 0 |
MI_Skin_Male_Head_Special |
1 |
Head | 0 |
MI_Skin_Male_Head_Fancy |
To hide parts of the Body
> Mesh
and avoid clipping with tighter Apparel CDAs, we use basebody mask textures.
Materials in the Body > Skin Material Sets > Body
and Heads > Skin Material Sets (Overrides) > Body
slots are used in BP_CharacterCustomization
> Update Apparel Basebody Masks to pass those textures to the material(s).
If you have a custom material for your body that matches your own skeletal mesh, you can copy the righthand nodes from the M_Skin
material, plug them into the Opacity Mask
output and set your materials Blend Mode
to Masked
.
If you have custom UVs, you may want to create similar textures to ours in your favorite third party tool and apply assign them to your Apparel CDAs > Basebody Mask
.
This screenshot shows you that the [V7] Skin Material Sets have been moved into the new [V8] Body section.
The red boxes above show you that the fixed material slots "Body" and "Head" have been changed to slot name inputs that replace the hardcoded logic from BP_CharacterCustomization > UpdateSkinMaterials
As shown on the right side, you can use different slot names, to match your skeletal mesh, in this example the MetaHuman body and head skeletal meshes.
As explained in the implementation details above, you can set the materials to None, if you want to make the material controllable that is currently assigned to the corresponding skeletal mesh.
Additionally, there are Skin Material Sets (Overrides) in the Heads section.
Eyes Material Sets can be used to choose between different eye variants.
For Body > Eyes Material Sets
each array element contains an Eyes
array where you can add one or more material slots and materials. For Heads > Eyes Material Sets (Overrides)
it also has an Eyes
array to override one or more head-specific materials.
The currently selected Eyes Material Set is updated by BP_CharacterCustomization
> Update Eyes Materials.
Currently, index
0
is hardcoded, since we have no eyes variants picker.
Though, we wanted to prepare the logic the same way as for skin material sets.
This works similar to the Body > Skin Material Sets, explained above.
It is up to you to implement logic to change the index.
This works similar to the Heads > Skin Material Sets (Overrides), explained above.
It is up to you to implement logic to change the index.
This screenshot shows you the new [V8] Eyes Material Sets that replace the hardcoded logic from BP_CharacterCustomization > UpdateEyesMaterials
. Like with Skin Material Sets, use material None to make the material controllable that is currently assigned to the skeletal mesh.
Additionally, there are Eyes Material Sets (Overrides) in the Heads section.
[V7] Since the V7 Customer Update, each Anatomy Profile can have multiple head meshes in addition to the morph target face variants from previous versions. This way, you can decide on your own to import separate meshes or morph targets (or combine both approaches like in our HumanFemaleAdult
example). To control this new setup, there is a new Customization Profile > Basebody > Head Profile and a new Index Picker for the head in the in-game editor.
[V8] Since the V8 Groom Update, the Body section got the Face Variant
defaults and each Heads element the Face Variants (Overrides)
.
The currently selected Face Variant can be received by BP_CharacterCustomization > Get Current Face Variant
.
Use the Group Name
for your morph target prefix and the IDs
array to define possible suffixes. With the setup shown on the right side you could toggle between the morph targets face_None
, face_02
, face_03
, and face_04
. Use "None" or something else that is not existing, to have one face variant that deactivates all the others. The Group Name
is mandatory to store the selected face variant in the current customization profile.
The Heads > Face Variants (Overrides)
logic works similar to the Heads > Skin Material Sets (Overrides), explained above.
The currently selected face variant information is applied to the Character Editor in WBP_CharacterEditor > Event Graph
> Initialize - Face Heads and Variants
.
This screenshot shows you that the [V7] Face Variants have been moved to [V8] Heads > Face Variants (Overrides).
The red box shows you that a new [V8] Group Name has been introduced that replaces the hardcoded logic from WBP_CharacterEditor > Event Graph
> Initialize - Face Heads and Variants
.
Additionally, there are default Face Variants in the Body section.
After all the setup you can assign your Customization Data Assets to specific anatomies by modifying their Anatomies list. E.g., “Human Female Adult” can wear other apparels than “Human Male Adult” because of their different anatomy, but “Human Female Child” and “Human Male Child” could share most of the child CDAs because of their similar anatomy.
(See BP_CustomizationDataAsset > General > Anatomies for details)
To use our default Humans anatomies, nothing needs to be changed. The Character Editor uses the base skeleton by default. With the release of V5 MetaHuman Update we merged male and female skeletons back to UE4 Mannequin.
If creating a new Human anatomy profile in DT_AnatomyProfiles_V8
, choose a body and head mesh based on CharacterEditor/Base/Animations/UE4_Mannequin_Skeleton
.
With our shipped CDAs, the Human race can be selected in-game in the Profile Manager. It is selected when the "H" is displayed.
We added MetaHuman TAL NRW
body type support besides the UE4 Mannequin. You can easily integrate your own skeleton with the same workflow.
Every CDA can only be linked to one skeleton, therefore we added new CDAs & Meshes subfolders for all the MetaHuman apparels.
See the tutorial Third Party Integration: MetaHumans for details.
With our shipped CDAs, the MetaHuman race can be selected in-game in the Profile Manager. It is selected when the "M" is displayed.
[V8] When changing to the MetaHuman anatomy, the Character Editor will toggle several controls to allow you to change MetaHuman specific material parameters as also described in BP_CDA_Groom.