In short “CDA”, they are content browser assets that can be placed onto the character (apparels, equipment, hairstyles and attachments). They define various info and optionally some asset-specific logic.
The general concept of CDAs is, that all child classes of BP_CustomizationDataAsset define more detailed information describing the actual CDA. They may also have CDA-specific logic in the customization process (like foot transforms for the BP_CDA_Apparel_Feet). Even cooler (why we did not use the alternative “Data Table”) is that each data asset could have its own functionality – almost like normal Blueprints do, which can be used for data validation and other things right in the asset itself.
This is the base class of all CDAs and defines basic variables:
Debug Assets, that are stored in the customization profile that your character is currently wearing in the viewport, will get undressed if you press Play in Editor, as they do not appear in the Apparel Pickers. Also see note of* CDA Apparel Picker *for more information on this behavior.
Besides the direct child classes, here is an overview about all current classes.
This is the abstract base class for skeletal CDAs and inherits from BP_CustomizationDataAsset
.
Coming with V4, this is a new base class for skeletal CDAs like
BP_CDA_Hairstyle
,BP_CDA_Apparel
and the newBP_CDA_Equipment
to unify their update logic. (E.g., see BP_CharacterCustomization > Function: Apply Customization Profile > (3) Update Apparel). As we learned about new techniques to animate modular characters in Unreal Engine, it was a logical consequence to make a skeletal base class and replace the Custom Anim Blueprint property of ourBP_CDA_Hairstyle
with the new animation workflow using Post Process Anim Blueprints. (See Add your own CDA animations)
It comes with these variables:
Mesh > Skeletal Mesh is the visual appearance of the skeletal CDA.
Mesh > Additional Morph Targets define zero or more morph targets that are controlled on all the skeletal meshes the character is composed of. To the left is the morph target name and to the right is the strength as it appears in the skeletal mesh editor’s morph target list, which is usually set to 1.0. By e.g., adding (hair, 1.0) to voluminous hairstyle CDAs like the “afro”, we can control the “hair” morph target in specific hat meshes like the beanie to deform them as it would look like the hairs are stuffed under the hat – so that the hairs to not stick through the hat geometry.
There are several additional morph targets that are already present on one or the other type of CDA:
We have prepared all these morph targets in a 3d modelling software. They cannot be added to your custom meshes directly in engine. We only give you a tool for controlling own morph targets.
This is the abstract base class for apparels and inherits from BP_CDA_Skeletal. It is selectable by the WBP_CDA_ApparelPicker. It comes with these additional variables:
Anatomy Profile
> Basebody Mask Textures for details.)MI_Skin_Male_01_Body
and MI_Skin_Female_01_Body
. By setting up alternative textures like ours, you can make the character naked to support apparels like swimming clothes which might reveal more skin than the painted underwear of the main textures does.The main reason for having multiple apparel child classes – beside the information and logic described above – is that each class represents a possible apparel slot on the character. Each WBP_CDA_ApparelPicker
in the editor can display all data assets of a specific CDA class, which lets you group them visually.
If you want to create e.g., custom backpack assets, then you would create a child blueprint class of BP_CDA_Apparel
called BP_CDA_Apparel_Backpack
and place another WBP_CDA_ApparelPicker
in the editor for that new class.
This is the abstract base class for equipment and inherits from BP_CDA_Skeletal. Currently, it is not selectable in the in-game Character Editor. It has one example child class.
Coming with V4, we have decided to introduce equipment as a completely new sub class to clearly separate it from apparel and attachments, as potential equipment logic might differ from apparel a lot and needs skeletal meshes. Two logical differences to apparel on our side are that the equipment does not support body masks and changing the skin texture set. You are free to add more logic.
The main differences to Attachment Profiles (that are also meant to be for tools etc.) are that equipment uses a skeletal mesh and the new custom animation workflow instead of a static mesh without animations. Thus, if you need interactive items for your character, you should prefer equipment over attachments.
This is the abstract base class for hairstyles and inherits from BP_CDA_Skeletal. It is selectable by the WBP_CDA_HairstylePicker and it comes without additional variables as it only acts as a logically different parent class.
It previously came with this variable:
This is the abstract base class for Groom CDAs and inherits from BP_CustomizationDataAsset
. It is selectable by the WBP_CDA_GroomPicker and comes with these variables:
Groom Asset
and each Head
skeletal mesh that is defined in your MetaHuman Anatomy Profile > Heads
section. Depending on the Head
it may not be necessary to create a separate Binding Asset.
Binding Asset
for the currently selected Basebody Profile > Head
> Index
(or Head Picker index in the UI), the first available Binding Asset
is selected as a fallback.Binding Assets
array is empty or the selected Binding Asset
is referencing a different Groom Asset
than defined in Groom > Groom Asset
, warnings are shown in the Output Log.[V8] In V8 Groom Update the Groom support has been extended after further evaluation since introducing it in V7 Customer Upgrade. It is currently only supported for the Metahuman anatomy and Groom assets are not delivered with this update. See tutorial Third Party Integration: Groom for Metahumans for details to learn how to implement your own Groom assets.
Unfortunately, we are not allowed to deliver ready-to-go Groom assets and CDAs to the Marketplace.
[V7] In the V7 Customer Update this was not an abstract class and the current child classes were not available.
You can create Groom assets an assign them to the Customization Profile and it will be applied to your character like other CDA types. All logical parts are already done.
To colorize Groom assets, currently, we only support the given materials on the Groom material slots as there is now MaterialVariantIndex
inside FGroomProfile
as in other profiles like FApparelProfile
. Thus, we always use an index of -1
, meaning the default route, when applying Dynamic Material Instances.
Since V8 Groom Update, BP_CharacterCustomization > CreateMID_ByMaterialVariant
was updated to handle the coloring correctly across different Groom LODs (Hair, Cards, Helmet). From now on, the function creates Dynamic Material Instances on all material slots instead of only the first slot (before V8 Groom Update), if MaterialVariantIndex is -1
.
Note, that we are using MetaHumans/Common/Materials/M_hair_v4
for the current implementation and have prepared the color controls in the Character Editor for Parameter Names based on that material, thus using other base materials might not working properly out of the box. If there are more than the 3 material slots on your Groom asset, make sure, that all slots which should be colored the same way with the UI controls, must share the same base material or at least parameter names.
By default, in our tests MetaHumans/Common/Materials/M_hair_v4
did not show Ombre and Highlight colorization, since this is an optional feature of that material. If you want to turn it on, we found the following settings sensible. See below the image, that besides in-editor controls we have one parameter that is directly set in the material instance.
Parameter | Default Value | Name in Character Editor | |
---|---|---|---|
1. | Highlights |
1.0 |
Highlight Alpha |
2. | HighlightsBlending |
0.1 |
Highlight Blending |
3. | Ombre |
1.0 |
Ombre Alpha |
4. | OmbreShift |
0.0 |
Ombre Shift |
5. | HighlightsIntensity |
1.0 |
* |
* There is no Float Slider for HighlightsIntensity
in the editor. Setting this parameter directly to 1.0
in the material instances MI_Hair
, MI_Hair_Cards
, and MI_Hair_Helmet
(as shown in the first image above) is like enabling Highlights for the Character Editor, and 0.0
disabling them. Then you can reduce or increase the amount by the Highlights
Float Slider. Depending on your own base material you might want to adjust other parameters.
In WBP_CharacteEditor there are CDA Groom Pickers available for both current head and beard classes inside the Expandable Categories named "Hair (Groom)" and "Beard (Groom)".
Furthermore, there are several Float Sliders and HDR Color Pickers below the CDA pickers in the category "Color (Groom)" to control different values of the Groom Material we tested with, as described above.
The section comes with these parameters:
The Region XXX parameters are also prepared but not fully tested, yet, since we still try to fiddle with test Groom assets and did not get it properly working. We are sure, you do.
All controls are toggled in the WBP_CharacterEditor
> Event Graph > Update Anatomy Specific Controls subgraph.
If you are using a different base material than
MetaHumans/Common/Materials/M_hair_v4
on your Groom assets, adjust the Float Sliders and HDR Color Pickers variousParameter Name
variables as desired. TheirTag
variable has to be set to "GroomGlobal".You may want to set one ore more material parameters to a specific value in the base material by default as described above in Groom Material > Table row 5 for parameter
HighlightsIntensity
.
This is the abstract base class for static CDAs and inherits from BP_CustomizationDataAsset
.
Coming with V4 Animation Update, this is a new base class for static CDAs like
BP_CDA_Attachment
and other potential CDAs to unify their update logic. (E.g., see BP_CharacterCustomization > Function: Apply Customization Profile > (4) Update Attachments)
It comes with these variables:
This is the abstract base class for attachments and inherits from BP_CDA_Static.
Currently, it is not selectable in the in-game Character Editor. It has one example child class.
The main reason for having multiple attachment child classes – besides the information and logic described above – is that each class represents a possible attachment slot on the character or type of attachment. Like for Apparels or Hairstyles you could display all data assets of a specific CDA class in separate attachment pickers, which lets you group them visually.
If you want to create e.g., custom two-handed assets, then you would create a child blueprint class of BP_CDA_Attachment
called BP_CDA_Attachment_TwoHanded
.