Good news! The long-awaited Gameplay Tag Update is finally here! 🚀
It took quite a while to get it done, as it brings fundamental changes to many Blueprints and Widget Blueprints by adding and updating several features, providing quality of life and fixes, as well as doing lots of chores along the way.
Many thanks to our customers for all the ideas and input for this update.
If the video did not cover your questions, you find more info here and in the linked pages.
As its core feature, the Gamaplay Tag Update replaces Anatomy and Collection enumerations with gameplay tags for a more flexible approach to maintain, filter and use Customization Data Assets. To help you out with this change and the management of CDAs, the Character Editor Tools have been overhauled, accordingly.
Not less important, the CDA Picker, CDA Collection Picker, CDA Loader, Profile Manager, and Expandable Category got large and small changes to working with the new Gameplay Tag system and giving you far easier times implementing custom behavior into them. And the default Character Editor makes use of all those changes, besides adding new example controls for Meta Humans makeup!
Furthermore, the Character Editor product can finally be used with Pawn-based, instead of just Character-based Blueprints! As an extra to that, it once more got a few improvements to its multiplayer functionality.
And last but not least, this Wiki received several content changes to reflect the change log. Futhermore, a new shiny look & feel has been added to make it easier for you to spot connections between text and logic.
You'll find the features' main descriptions below each heading marked with the highlight star.
This update replaces EAnatomy and E_CDA_Collection enumerations with Anatomy and Collection gameplay tags. This affects numerous Blueprints that deal with Customization Data Assets.
The BP_CharacterCustomization component and function libraries have been updated intensively to support the new Gameplay Tag system and provide additional features which were not possible or hard to achieve with the old Enumeration system.
The BP_CharacterEditor component does no longer handle CDA loading on its own, but waits for the results of the Package Registry. This gives you a single source of truth for CDA loading and avoids unnecessary widget creation and loops over already loaded CDA assets.
Added Unique CDA Classes e.g., for the CDA Manager filter settings.
Added Add Empty CDA input to Get CDAs by Class to support deselection.
Updates
Updated Event Graph:
Overhauled the loading flow to prevent unnecessary loading cycles.
Use Loader Widget when triggering Initialize After Begin Play.
This minimizes overhead when multiple characters loading in the level, by replacing the old individual loading widgets of BP_CharacterEditor. This loading method uses Update Each N CDAs to optionally adjust UI udpate frequency (see property description in engine).
Added validation for empty packages (that you may be just creating).
The Character Editor Tools have been redesigned with a new CDA Manager and improved Randomization.
The CDA Manager validates and migrates Customization Data Assets. It provides various filters and settings to navigate your CDAs at a centralized place and find potential issues with their most important settings, easily.
The Randomization feature got a more dynamic approach to initialize its UI, allowing to randomize only available CDAs based on the selected pawn's anatomy and collections for each CDA base class.
The CDA Picker uses a new abstraction layer that provides you with all the functionality to easily inherit your custom CDA pickers. This improves rendering performance and makes it more streamlined to initialize CDA pickers, as well.
The CDA Loader also uses a new abstraction layer similar to the CDA Picker for custom CDA Loader widgets. By default, they are used by Package Registry and Character Editor Tools.
The Profile Manager got a new abstraction layer as well, to inherit custom Profile Managers. By default, they are used by WBP_CharacterEditor and WBP_CharacterEditor_ForProfileSelection.
The CDA Collection Picker now uses the new WBP_GameplayTagComboBox to select actual gameplay tags rather than enum values. Furthermore, it stores selected collections per anatomy by itself - previously WBP_CharacterEditor did it. This makes it more streamlined to re-initialize collection pickers when the character anatomy changes.
The Expandable Category was slightly refactored to perform its randomization setup internally instead of inside WBP_CharacterEditor.
And finally, the different Character Editor widgets use the changes mentioned above.
Added the updated Widget Blueprints and logic changes to the different existing character editors.
WBP_CharacterEditor
WBP_CE_Demo_CharacterEditor_ForProfileSelection
WBP_CE_Demo_CharacterEditor_ForGenderSelection
WBP_CE_Demo_CharacterEditor_ForCustomization
Updates
Replaced the deprecated CDA pickers with WBP_CDA_Picker_DefaultStyle
Renamed Initialize CDA Pickers to Initialize - CDA Pickers And CDA Collection Pickers and added changes required by WBP_CDA_PickerBase and WBP_CDA_CollectionPicker.
Renamed Bind on Randomize... to Initialize - Randomization ... and cleaned up its content by using the new Initialize Randomization of WBP_ExpandableCategory.
Improved Initialize - Profile Manager ... by adding changes required by WBP_ProfileManagerBase.
Removals
Made the unsupported facial morph widgets hidden when using Meta Humans.
The Meta Humans finally received our general support for makeup1 and optional support for skin tint and tattoos2, which previously had to be implemented completely by yourself! Besides that, we made face morphs hidden, while using Meta Humans, as they are not supported, which caused confusion.
Meta Humans are not part of this product due to Fab seller guidelines. You can manually add them by following the Third Party Integration: Meta Humans tutorial.
1) The makeup widgets only work in UE 5.4 and UE 5.5, because Meta Human materials do not include makeup parameters since UE 5.6.0, anymore. We hope, this will change in future releases.
2) Optional support means, that the required materials for skin tint and tattoos can be downloaded for free from the link above due to the same restrictions, as for the whole Meta Humans themselves. Unfortunately, providing them to you as "demo content" would result in broken references. Skin Tint and Tattoos work in all Engine versions. See V11 Gameplay Tag Update: Skin Tint, Tattoos & Makeup for details.
The Character Editor can finally be used with Pawn-based, instead of just Character-based Blueprints.
To use it in your Blueprint, there is a new Get Basebody Body Component in the Character Customization Interface for your character Blueprint which must return your desired main skeletal mesh component on Pawn-based Blueprints or Mesh (CharacterMesh0) on Character-based Blueprints.
See BP_PawnSample as a demo reference, it is quite similar to BP_Character.
Added validation functions and macros for the new Owning Pawn.
Get Validated Owning Pawn in favor of Get Validated Character
Get Validated Owning Player Id in favor of Get Validated Player Id
Validate Owning Pawn Dependencies in favor of Validate Character
Added functions for the improved customization profile fallback logic.
Get Fallback Customization Profile
Get Current Anatomy Default Customization Profile
Added BP_PawnSample as a demo reference.
Updates
Updated Get Basebody Body Component to get the component from the Owning Pawn via the Character Customization Interface instead of the static Character ➝ Mesh.
Removals
Removed old validation functions.
Removed Get Validated Basebody Body Component in favor of Get Basebody Body Component.
There has already been a feature that replicates Customization Profiles in Dedicated Server or Listen Server scenarios to synchronize joining clients with pawns, using BP_CharacterCustomization, that have already been initialized and applied their Customization Profile, before the client joined.
Since the feature did not work for joining pawns, which did not use the BP_CharacterCustomization component themselves, the feature has been moved to the new BP_CharacterCustomization_Controller component, that can be added pawn-independently to any Controller-based Blueprint that is your pawns' player controller class. It simply handles that feature: requesting Customiztion Profiles.
The screenshot above shows a default SpectatorPawn without any customization component, as an example pawn joining as Client 1 that get all ohter customizations replicated as it should be.
Besides that, we fixed a few minor replication bugs with NPCs and apparel settings.
To complement the before-mentioned content features, more validation and debug info has been added. Besides that, Blueprints and functions got more descriptions, and some fixes & cleanup happened.
Fixed Validated Get to return a proper default value, if the index is not valid. Before this fix, it always returned the last valid value, if the index has been valid at least once.
The Wiki received several content changes to reflect the change log information from above as mentioned below.
Futhermore, a new shiny look & feel has been added to make it easier for you to spot connections between text and logic - mostly the same pages are updated that received content changes, the rest will follow, gradually.
This update brings the assets of our latest demo application, new skin texture sets (e.g. for tattoos), a more customizable BP_CharacterEditor component, a networking adjustment for slower client connections, and a few bug fixes.
As a friendly reminder: Since [V6] Replication Update, please prefer using events and functions with (Replicable) in their names over their similar events and functions without that name extension to use network replication, correctly, unless you build some very custom logic.
[Highlight] We have created a standalone demo! Feel free to evaluate the major aspects of the Character Editor before hopefully joining our community!
The demo application is devided into 3 different singleplayer sub-demos, that showcase basic and advanced implementations. When purchasing the Character Editor, you get the full content of demo 1 and demo 2. Though, demo 3 is for showcasing only and not available through the marketplace.
[Added] Added a new folder CharacterEditor\StandaloneDemo containing the logic of sub-demo 2 and 3. See more details on how to use the logic on the Standalone Demo page.
[Highlight] With this version of the data table and its structures, you can manage Skin Texture Sets to display UV-space tattoos, scars, freckles, dirt, and other skin additions you may need. As an example, we have implemented tattoos.
Skin Texture Sets stores a named list of skin texture sets, where the name is referenced in FSkinProfile_V10. The Body and Head texture sets can contain an arbitrary set of named textures, where the name is used to apply a texture parameter in the currently active basebody skin material. The material must contain the texture parameters with the identical names, spaces included. The actual look of the tattoo and other parameters like color are up to the material implementation.
[Added] Added FAnatomyHeadProfile_V10
Skin Texture Sets (Overrides) stores a similar list as above, but only for the head. The texture sets are merged, e.g. if FAnatomyBodyProfile_V10 defines the sets Tattoo_01 to Tattoo_05, the overrides could only override Tattoo_03 and Tattoo_04.
[Added] Added FSkinProfile_V10 and corresponding structures.
Skin > Texture Sets stores names of the selected texture sets. It is meant to store one type ("Tattoo", "Scar", etc.) at a time, thus there cannot be both Tattoo_01 and Tattoo_02. Since the material on the basebody has to support that texture set anyways, you could use different keys for multiple tattoos, e.g. Tattoo_A_01, Tattoo_B_01.
[Added] Added DT_CustomizationProfiles_V10 data table
[Added] Function GetCurrentSkinTextureSets gets the texture sets that are currently selected.
[Added] Function GetCurrentAnatomySkinTextureSets (BodyAndSelectedHead) gets all texture sets defined in the anatomy data table for the currently selected anatomy. This includes body and head textures by default, possibly overridden by head textures if defined in DT_AnatomyProfiles.
[Added] Function SetSkinTextureSets sets the currently selected texture sets.
[Added] Function SetSkinTextureSetsByKey (Replicable) sets a single texture set with a given key, e.g. "Tattoo", "Scar", etc. Calls event SetSkinTextureSets (Replicable).
[Added] Function UpdateSkinTextureSets removes old textures and applies the currently selected textures onto skin body and skin head MIDs.
[Added] Event SetSkinTextureSets (Replicable) and corresponding to replicate function SetSkinTextureSets.
[Added] Dispatcher OnSet_SkinTextureSets returns the applied texture sets. It is called by SetSkinTextureSets.
[Added] Dispatcher OnUpdated_SkinTextureSets returns the applied texture sets. It is called by UpdateSkinTextureSets.
[Added] Event ApplyCustomizationProfile (NextTickActions) executes UpdateGroom one tick delays, as we noticed heavily broken Groom visuals after loading into a level with streaming levels included. This event is called from function ApplyCustomizationProfile.
Updates
[Updated] Refactored some functions. Some functions got renamed to better declare the expected return value. (SelectedHead) returns selected head info from DT_AnatomyProfiles, (BodyOrSelectedHead) returns either body or head info, and (BodyAndSelectedHead) merges data partially. Some functions have been made impure, so they do not have to run their more complex filter logic repeatedly if their output is accessed multiple times. Some functions have different logic.
GetCurrentSkinMaterialSets (pure) GetCurrentSkinMaterialSet (impure)
This function does not simply get all anatomy body skin material sets anymore, but the currently selected set (body and head) based on GetCurrentAnatomySkinMaterialSets (BodyAndSelectedHead) and the current Skin Profile > Material Index
GetCurrentEyesMaterialSet (impure)
This function gets the eyes material set based on GetCurrentAnatomyEyesMaterialSets (BodyAndSelectedHead) and the current Skin Profile > Material Index, similar to GetCurrentSkinMaterialSet
[Updated] Use new impure getter functions to clean up update functions.
GetCurrentSkinMaterialSet (cleans up UpdateSkinMaterials)
GetCurrentEyeMaterialSet (cleans up UpdateEyesMaterials)
[Updated] Moved logic from GetSaveGame to CharacterEditorFunctionLibrary > LoadSaveGame.
[Added] Upgrade Save Game from V9 to V10
Upgrades the save game to the latest version, by adding an empty texture set and eyes material index.
[Added] Skin Texture Set helper functions.
GetSkinTextureSetsByKey
Gets a subset from the a skin texture set names array, filtered by a key. E.g. the array ("Tattoo_01", "Tattoo_02", "Tattoo_03", "Scar_01", "Scar_02") can be filtered for "Tattoo", returning array ("Tattoo_01", "Tattoo_02", "Tattoo_03")
GetSkinTextureSetsByKey (Map)
Gets the same as the non-map version, but with names and texture set structures.
GetSkinTextureSetDefaultTexture
Gets a texture from DT_SkinTextureSetDefaultTextures to use as a default if an texture set is none. The row name must be contained in the texture set parameter name. E.g. row "Mask" is used for any parameters like "Tattoo Mask", "Scar Mask", "Freckles Mask" etc. and row "Normal" is used for "Tattoo Normal" etc.
[Added] LoadSaveGame
Contains the original and slightly updated save game loading logic from BP_CharacterCustomization.
[Added] Helper functions to make the save game loading process more easily maintainable.
GetLatestSaveGameVersionDetails
GetSaveGameSlotNameBeforeUpgrade
GetSaveGameVersionDetailsAfterUpgrade
[Added] Helper functions to keep track of different latest pack and asset versions at one place.
GetCharacterEditorVersion => V10
GetLatestAnatomyProfileVersion => V10
GetLatestCustomizationProfileVersion => V10
GetLatestSaveGameVersion => V10
[Added] CustomizationProfileMetaDataEqualsCustomizationProfileMetaData
Compares two profile meta data.
[Added] FindParentWidgetRecursively
Finds a given parent widget class. Is used in the new demo customization widget to hide parent expandable categories if their containing apparel pickers have no children.
Updates
[Updated] Renamed widget function to match the new function FindParentWidgetRecursively.
[Highlight] New class variables allow you to define the spawning of custom Camera Studio and Light Studio actors and the creation of custom Idle and Character Editor widgets, individually for each character that uses the BP_CharacterEditor component. The Character Editor widget class is mandatory, all others can be set to None if no actor or widget shall be used. The initialization flow has been enhannced with more debug logging.
[Added] Added functions to create the named actors or widgets
CreateWidget
Creates a widget based on a given class, which is validated for a given interface. A mandatory boolean controls the kind of debug information.
FindOrSpawnAndInitializeCameraStudio
Does what the name describes. A camera studio may already be palced in the level for camera calibration and the function will take over that actor when called.
FindOrSpawnAndInitializeLightStudio
Is similar to the camera studio function, but for the light studio.
[Added] Added new interfaces to call logic on the custom actors and widgets, with the listed functions.
CameraStudioInterface
Initialize
Enable
Disable
GetFocusedCharacter
SetDisableBlend
SetEnableBlend
SetFocusedCharacterBodySocket
SetViewTargetWhenDisabled
LightStudioInterface
Initialize
GetFocusedCharacter
RelocateToCharacter
SetProfile
IdleWidgetInterface
Initialize
CharacterEditorWidgetInterface
Initialize
RefreshCharacterEditor
RandomizeAll
RandomizeApparel
RandomizeAttachments
RandomizeEquipment
RandomizeGroom
RandomizeHairstyle
RandomizeAll
SetAnatomy
ToggleControls
[Added] Added several events to trigger interface functions on the custom Character Editor widget
[Added] Replaced the BP_CharacterCustomization > Server_Initialize 2-seconds-delay with a Wait Until Player Is Fully Connected logic to use a more sophisticated approach to support slower network conditions. The previous implementation caused clients with bad network conditions to keep their characters invisible after joing the server, since the 2-seconds-delay was insufficient.
This update brings some new core features, alongside a vast amount of supporting functionality for using the Character Editor in your existing project. They shall help you better integrate the Character Editor with your work. If you have feedback, requests or are missing something, feel free to contact us as usual.
More Wiki page updates for the topics below may follow in the next weeks.
As a friendly reminder: Since [V6] Replication Update, please prefer using events and functions with (Replicable) in their names over their similar events and functions without that name extension to use network replication, correctly, unless you build some very custom logic.
With that being said, let's kick off the news!
¶ Anatomy Profile V9 (Individual Head Anim Blueprints)
[Highlight] With this version of the data table and its structures, you can manage Heads > Anim Instance Class (Override) to use individual Anim Blueprints for each head. Modern development approaches may split animation behavior and logic into separate Blueprints, especially when they tend to get more complex. Thus, we wanted to give that support to you.
¶ Customization Profile V9 (Weight and Muscles for Meta Humans)
[Highlight] Meta Human anatomy supports Weight and Muscles!
Since Morph Targets are not natively available on Meta Human meshes, ABP_Manny/ABP_Quinn got a new Control Rigs approach to transform the skeleton instead of morphing the mesh. To streamline the implementation, we have also converted Age and Size transforms to Control Rigs for ABP_Manny/ABP_Quinn (UE5 skeleton) and ABP_ma_CharacterEditor/ABP_fe_CharacterEditor (UE4 skeleton).
With the new Customization Profile V9 that data is now stored in the new Basebody > Anim Instance Alphas as named float values rather than fixed values (like the old Age and Size). All those "alphas" are passed to the basebody anim instance similar to how HDR color and scalar parameters are passed to materials, thus you can use them for custom functionality as well.
Furthermore, we refactored ABP_fe_CharacterEditor (female) to be a Child Blueprint of ABP_ma_CharacterEditor (male), like ABP_Quinn (female) is one of ABP_Manny (male). This way you only need to modify one Anim Blueprint to develop features on both male and female.
[Added] Added Age, Size, Weight and Muscles Control Rigs to ABP_Manny
[Added] Added Age and Size Control Rigs to ABP_ma_CharacterEditor
Updates
[Updated] Replaced CharacterAnimInstanceInterface > SetAge, SetSize, and SetFootTransforms with new generic SetBasebodyAnimInstanceAlpha, using the same function to pass new Weight and Muscles.
[Updated] Updated WBP_CharacterEditor shape sliders to use the new Anim Instance Alphas. Human and Meta Human sliders got distinct names, which describe how they control the shape:
Multi is a custom example that calls SetBasebodyAnimInstanceAlpha (Replicable), SetBasebodyMorphTarget (Replicable), and SetSkinScalarParameter (Replicable), where the morph target and skin parameter are only available on our Human skin material.
[Updated] Replaced BP_CharacterCustomization > OnSizeChanged with OnSet_AnimInstanceAlphas (see New Event Dispatchers below for more details).
BP_CameraStudio listens for the new event and updates the camera location if names Age or Size got changed.
[Highlight] We improved the removal feature by introducing events and functions that properly remove profiles instead of setting empty profiles, also allowing to bind to dedicated removal event dispatchers (explained below). The set function can now properly be used to remove as well. Additionally, the functions have clearer names than before.
RemoveAllCDA_Profiles (Replicable)
(can be used to clear all CDAs from the character)
Updates
[Updated] SetCDA... functions are now calling RemoveCDA... functions to properly clear the CDA instead of setting the CDA to None if an empty profile (with Data Asset = None) is passed to the function.
Still, keep calling SetCDA...(Replicable) events instead of SetCDA... functions for replication support.
[Highlight] Added new randomization functions and renamed old ones. The new helper functions replace the hard-coded implementation of RandomizeApparel and RandomizeHairstyle by using the Package Registry to get available classes dynamically, allowing you to also randomize any created custom CDA subclasses of Apparel, Attachments, Equipments, Groom, and Hairstyle.
This feature is Blueprint-only and not implemented in WBP_CharacterEditor widgets. Currently, the editor has its own randomization functionality based on the CDA pickers' content.
Additions
[Added] SetRandomCDA...(Replicable) randomize one CDA with input Class, Index, Collection, and AcceptDebugAssets.
SetRandomCDA_Profile (Replicable)
(can be used for any of the above, except for BP_CustomizationDataAsset itself)
[Added] Randomize...(Replicable) helper functions call SetRandomCDA...(Replicable) functions for every available class with input Class, Index, Collection, and AcceptDebugAssets.
[Highlight] To improve the communication between BP_CharacterCustomization and other Blueprints, we replaced all getter macros from BP_CharacterCustomization and WBP_CharacterEditor with getter functions from BP_CharacterCustomization. Besides that we added new ones to access all properties of the Customization Profile and renamed a few for consistency.
By having this "single source of truth" we remove duplicated code in other Blueprints. This also very useful when working with the new event dispatchers, outlined below. This way you may handle the customization in your custom Blueprints easier.
Except from the functions ones mentioned in the additions below, other new ones are simple quick accesses to the corresponding properties without any special logic.
Additions
[Added] Added GetCurrentCDA_Profiles_LastIndex and GetCurrentCDA_Profiles_Length to get the last index or length of the CDA profiles array associated to the given class. E.g. class BP_CDA_Apparel_C or any of its child classes would return the last index or length of the current CDA_ApparelProfiles array.
Updates
[Updated] Replaced, renamed and added functions:
Customization Data Assets
Apparel
GetCurrentApparelProfile
GetCurrentCDA_ApparelProfiles
Attachments
GetCurrentAttachmentsProfile
GetCurrentCDA_AttachmentsProfiles
Equipment
GetCurrentEquipmentProfile
GetCurrentCDA_EquipmentProfiles
Groom
GetCurrentGroomProfile
GetCurrentCDA_GroomProfiles
Hairstyle
GetCurrentHairstyleProfile
GetCurrentCDA_HairstyleProfiles
GetCurrentCDA_Profiles_LastIndex (new)
GetCurrentCDA_Profiles_Length (new)
Basebody
Body
GetCurrentBodyProfile (new)
Head
GetCurrentHeadProfile
Morph Targets
GetCurrentMorphTargets
GetCurrentMorphTargetGroups (former Get Current Morph Groups)
[Highlight] All major Set... and Update... functionality got corresponding event dispatchers OnSet_... and OnUpdated_... allow you to hook into BP_CharacterCustomization logic, without needing you to modify the actual component. Functionality, that rebuilds mesh components also got OnBefore_... event dispatchers. CDA-related functionalty got OnAdded_... and OnSkipped_... event dispatchers. All dispatchers pass a reference to the calling BP_CharacterCustomization.
Additions
[Added] Added event dispatchers to BP_CharacterCustomization
Updates
[Updated] Pass self reference on event OnInitialized
[Updated] To demonstrate a first use-case, we have moved the apparel-specific settings from UpdateApparel to BP_Character:
Moved Cleanup Foot Transforms to BP_Character > ClearApparelSpcificSettings, which is bound to BP_CharacterCustomization > OnBeforeUpdate_Apparel
Moved Apparel-specific settings to BP_Character > ApplyApparelSpcificSettings, which is bound to BP_CharacterCustomization > OnUpdated_Apparel
[Updated] Moved BP_CharacterCustomization > UpdateEquipment > Equipment-specific attachments to BP_CharacterCustomization > AddCDA_Skeletal, which now natively supports attachments via pins SocketName and RelativeTransform.
[Highlight] New event dispatchers before and after opening, closing, showing and hiding that are called as explained in the schema below. (Events are displayed in red, dispatchers in blue and general logic in grey.) All dispatchers pass a reference to the calling BP_CharacterEditor. OnOpened and OnClosed were previously called OnOpen and OnClose.
Updates
[Updated] Pass self reference on event OnInitialized, OnOpen and OnClose
[Updated] Handle multiple local Character Editors: extracted visual events from OpenEditor and CloseEditor (as shown above)
[Added] Added EquipmentGlobal bindings to HDR Color Pickers and Float Sliders, in case you want to add Global HDR Color Pickers or Global Scalar pickers for them
To test and see when the event dispatchers are called, you can use the scene Blueprint BP_EventDispatcherTester, while using the in-game editor. Place the actor in the level and assign the Character that you are about to control. The Character Customization reference will be set automatically, if it is a suiting character. We recommnd you to set the character's debug mode to Show Errors, Warnings and Verbose Information.
Afterwards, press play and take a look at the Output Log. Alongside the usual debug log, you will see all the called events in the form of warnings to make them visiually different. Besides their name, they print out the most relevant passed properties, you can use. If you can see something like x Morph Targets, x BodyMIDs or x HeadMIDs this refers to an array.
Take a look at BP_EventDispatcherTester on how you could use the different inputs. E.g. function PrintEventDispatcherInfo_AddedCDA_Profile shows you how to incorporate the CharacterCustomization input to call one of the Get Current ... helpers.
[Highlight] In general, we moved several functions from different categories under one main category, so you can find them better by searching for "Data Assets" or "Customization Data Assets". Some functions got renamed along the way. Some functions are new and got explained in the previous chapters, already.
[Highlight] Groom support has been extended after further evaluation! It is currently only supported for the MetaHuman anatomy and Groom assets are not delivered with this update. See further release notes and tutorial Third Party Integration: Groom for MetaHumans for details to learn how to implement your own Groom assets.
Additions
[Added] BP_CDA_Groom got new child classes BP_CDA_Groom_Head and BP_CDA_Groom_Beard.
[Added] BP_CDA_Groom > BindingAssets replaces BindingAsset to support multiple head meshes.
[Added] BP_CDA_Groom > HiddenClasses support has been added.
[Added] CDA Groom Pickers have been added for both head and beard classes.
[Updated] BP_CharacterCustomization > CreateMID_ByMaterialVariant now creates Dynamic Material Instances on all material slots instead of only the first slot, if MaterialVariantIndex of -1 is given. This is necessary to support Groom coloring across different quality materials (Hair, Cards, Helmet).
[Highlight] LODSync component support has been introduced for all default Character Editor skeletal meshes from the CharacterParts folder. This can reduce Prims (primitives count) up to less than 10% of the original asset quality, resulting in better FPS.
[Highlight] With this version of the data table and its structures, you can manage the Skin Material Sets, Eyes Material Sets, and Face Variants more straightforward on custom skeletal meshes like MetaHumans that can be adjusted with Character Editor controls. With these changes you are no longer tied to hardcoded material slot and face variant names as well as pre-defined materials on your different Anatomy skeletal meshes. Combined meshes (like our children) also benefit from the optional overrides approach on individual head entries which had been introdocued in V7 Customer Update.
[Fixed] Deleting Customization Profiles in the Profile Manager was not properly saved to the save game file.
[Fixed] Restored square button styles in Character Editor widgets that got removed when Unreal Engine 5.0 introduced button Outline Settings with a default Corner Radius of 4.0, which did not match our style guide.
This time we mainly focused on the direct needs and wishes of you, the customers.
Additionally, we launched this Wiki to support you in a more contemporary way.
Note for returning customers:
You should read the updated BP_Character, BP_CharacterCustomization component and BP_CharacterEditor component sections from start to end, even if you already know the old ones by heart. They changed quite a lot.
[Highlight] Replication support for the Character Customization and Editor.
[Added] New map CharacterEditor_Showcase_Replication.
[Added] BP_Character > “Preset Profile Names” variable, which lists all customization profiles of the currently assigned “Preset Data Table”.
[Added] BP_Character > “Load Random Profile on Begin Play” variable, which is useful for testing replication and chooses a random profile from saved and preset profiles. Saved profiles overrule presets if they have the same name.
[Added] BP_Character > “Anatomy Data Table”, which let you select a different set of anatomy profiles (e.g., for easily testing different body meshes on same anatomy profiles – had to be used by us because we were not allowed to submit MetaHuman meshes.)
[Added] BP_CharacterEditorGameMode and assigned it as default in our showcase maps to test replication with BP_Character as default pawn.
[Updated] Adult male and female mesh to both use the UE4 Mannequin.
[Updated] BP_CharacterCustomization debug output, added a new debug level “detailed information” and updated BP_Character to show errors, warnings, and information by default.
[Updated] Texture settings on all ID masks to use Default compression, because some of them were configured differently.
[Updated] SetBasebodyMorphTarget functions to set morph targets on all meshes instead of just on the master pose mesh, as upgrading to UE4.27 made it necessary to do so.
[Updated] Profile Manager to always load the current Anatomy Profile of the character even if the Manager was initialized with a closed Character Editor.
[Removed] The necessity to load customization profiles from within the WBP_ProfileManager initialization if Character Editor shall open on initialization. Now, BP_CharacterCustomization handles all loading on its own.
[Removed] Unused variant pickers from “Face > Nose”, “Face > Mouth” and “Face > Eyes” sections.
[Removed] Deprecated map CharacterEditor_Showcase__LightStudio (with two underscores in the name).
[Added] Skeletal meshes ported to the MetaHuman TAL NRW body type. Some editor logic is not yet supported on MetaHumans like weight and eye variations.
[Added] Pattern Blend known from apparel patterns to default skin material to support tattoos, paintings etc. originally used in the Barbarian asset pack.
[Added] Dispatchers OnOpen and OnClose to BP_CharacterEditor.
[Added] Support for inverted ranges in Float Sliders (Min greater than Max) as Lips Roughness had to be inverted, because of the “Lips Gloss” naming.
[Updated] BP_Character to only initialize Character Editor component if controlled by a player to avoid spawning widgets for NPCs in your view.
[Fixed] Hair color got reset on updating other CDAs.
[Fixed] Children eye material could not be modified (color, iris & pupil scale).
[Fixed] Material channel names on a few body and head meshes.
[Added] Various more detailed information throughout the documentation.
[Added] Many blue cross references to quickly navigate the documentation.
[Added] Colored badges for you, who already know the pack from the initial release, to quickly find out where additions and updates happened throughout the documentation.