Update changes are tagged with their corresponding version numbers throughout the wiki.
Introduction
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.
With that being said, let's kick off the news!
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.[Added] Added FAnatomyBodyProfile_V10
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 DT_AnatomyProfiles_V10
data table
[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
GetCurrentSkinTextureSets
gets the texture sets that are currently selected.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.SetSkinTextureSets
sets the currently selected texture sets.SetSkinTextureSetsByKey (Replicable)
sets a single texture set with a given key, e.g. "Tattoo", "Scar", etc. Calls event SetSkinTextureSets (Replicable)
.UpdateSkinTextureSets
removes old textures and applies the currently selected textures onto skin body and skin head MIDs.SetSkinTextureSets (Replicable)
and corresponding to replicate function SetSkinTextureSets
.OnSet_SkinTextureSets
returns the applied texture sets. It is called by SetSkinTextureSets
.OnUpdated_SkinTextureSets
returns the applied texture sets. It is called by UpdateSkinTextureSets
.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
.[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.
GetCurrentAnatomyHeadAnimInstanceClass
(pure)
GetCurrentAnatomyHeadAnimInstanceClass (SelectedHead)
(impure)
GetCurrentAnatomyHeadMesh
(pure)
GetCurrentAnatomyHeadMesh (SelectedHead)
(impure)
GetCurrentAnatomyHeadProfile (Selected)
(pure)
GetCurrentAnatomyHeadProfile (SelectedHead)
(impure)
GetCurrentAnatomyBodyAnimInstanceClass
(pure)
GetCurrentAnatomyBodyAnimInstanceClass (SelectedHead)
(impure)
GetCurrentFaceVariants
(pure)
GetCurrentAnatomyFaceVariants (BodyOrSelectedHead)
(impure)
GetCurrentAnatomyBodyAnimInstanceClass
(pure)
GetCurrentAnatomyEyesMaterialSets (BodyAndSelectedHead)
(impure)
GetCurrentAnatomyBodyAnimInstanceClass
(pure)
GetCurrentAnatomySkinMaterialSets (BodyAndSelectedHead)
(impure)
GetCurrentAnatomyBodyAnimInstanceClass
(pure)
GetCurrentAnatomySkinTextureSets (BodyAndSelectedHead)
(impure)
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
.
[Updated] Table Version Validation for data table DT_AnatomyProfiles
with new library functions
[Updated] Updated the debug print nodes and removed them from localization.
[Updated] Updated all sorts of functions to use the new profile structures.
[Fixed] Call UpdateBasebodyAnimInstanceAlpha
from UpdateBasebody
to load those settings correctly during first setup.
[Fixed] Debug macros were not showing their warnings and errors correctly, in some engine versions.
[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
GetSkinTextureSetsByKey (Map)
GetSkinTextureSetDefaultTexture
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
=> V10GetLatestAnatomyProfileVersion
=> V10GetLatestCustomizationProfileVersion
=> V10GetLatestSaveGameVersion
=> 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.
[Updated] Renamed widget function to match the new function FindParentWidgetRecursively
.
FindWidgetRecursively
FindChildWidgetRecursively
FindAllWidgetsRecursively
FindAllChildWidgetsRecursively
[Updated] MakeAnatomy
and BreakAnatomy
to return all default enum values.
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
RefreshCharacterEditor
RandomizeAll
RandomizeApparel
RandomizeAttachments
RandomizeEquipment
RandomizeGroom
RandomizeHairstyle
RandomizeAll
SetAnatomy
ToggleControls
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.Introduction
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!
DT_AnatomyProfiles
BP_CharacterCustomization
> GetCurrentAnatomyBodyAnimInstanceClass
BP_CharacterCustomization
> GetCurrentAnatomyHeadAnimInstanceClass
Weight
and Muscles
!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).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.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 Customization Profile V9 > Basebody > Anim Instance Alphas
[Added] Added Table Version Validation for data table DT_PresetCustomizationProfiles
[Added] Added Age
, Size
, Weight
and Muscles
Control Rigs to ABP_Manny
[Added] Added Age
and Size
Control Rigs to ABP_ma_CharacterEditor
[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:
Morph
calls SetBasebodyMorphTarget (Replicable)
Anim
calls SetBasebodyAnimInstanceAlpha (Replicable)
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.[Added] RemoveCDA...(Replicable)
events remove one CDA with input Class
and Index
. Index = -1
removes all CDAs of the given class.
RemoveCDA_ApparelProfile (Replicable)
(replaces [V7 removed] RemoveApparel
)RemoveCDA_AttachmentProfile (Replicable)
RemoveCDA_EquipmentProfile (Replicable)
RemoveCDA_GroomProfile (Replicable)
RemoveCDA_HairstyleProfile (Replicable)
(replaces [V7 removed] RemoveHairstyle
)RemoveCDA_Profile (Replicable)
BP_CustomizationDataAsset
itself)[Added] RemoveAllCDA...(Replicable)
functions call RemoveCDA...(Replicable)
events with fixed values for Class
and Index = -1
.
RemoveAllCDA_ApparelProfiles (Replicable)
(former RemoveAllApparels
)RemoveAllCDA_AttachmentProfiles (Replicable)
RemoveAllCDA_EquipmentProfiles (Replicable)
RemoveAllCDA_GroomProfiles (Replicable)
RemoveAllCDA_HairstyleProfiles (Replicable)
RemoveAllCDA_Profiles (Replicable)
[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 ofSetCDA...
functions for replication support.
SetCDA_ApparelProfiles
SetCDA_AttachmentProfiles
SetCDA_EquipmentProfiles
SetCDA_GroomProfiles
SetCDA_HairstyleProfiles
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.
[Added] SetRandomCDA...(Replicable)
randomize one CDA with input Class
, Index
, Collection
, and AcceptDebugAssets
.
SetRandomCDA_ApparelProfile (Replicable)
(replaces [V7 removed] SetRandomCDA_ApparelProfile
)SetRandomCDA_AttachmentProfile (Replicable)
SetRandomCDA_EquipmentProfile (Replicable)
SetRandomCDA_GroomProfile (Replicable)
SetRandomCDA_HairstyleProfile (Replicable)
(replaces [V7 removed] SetRandomCDA_HairstyleProfile
)SetRandomCDA_Profile (Replicable)
BP_CustomizationDataAsset
itself)[Added] Randomize...(Replicable)
helper functions call SetRandomCDA...(Replicable)
functions for every available class with input Class
, Index
, Collection
, and AcceptDebugAssets
.
RandomizeApparel (Replicable)
(replaces [V7 removed] RandomizeApparel
)RandomizeAttachments (Replicable)
RandomizeEquipment (Replicable)
RandomizeGroom (Replicable)
RandomizeHairstyle (Replicable)
(replaces [V7 removed] RandomizeHairstyle
)RandomizeCDAs (Replicable)
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.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.[Updated] Replaced, renamed and added functions:
GetCurrentApparelProfile
GetCurrentCDA_ApparelProfiles
GetCurrentAttachmentsProfile
GetCurrentCDA_AttachmentsProfiles
GetCurrentEquipmentProfile
GetCurrentCDA_EquipmentProfiles
GetCurrentGroomProfile
GetCurrentCDA_GroomProfiles
GetCurrentHairstyleProfile
GetCurrentCDA_HairstyleProfiles
GetCurrentCDA_Profiles_LastIndex
(new)GetCurrentCDA_Profiles_Length
(new)GetCurrentBodyProfile
(new)GetCurrentHeadProfile
GetCurrentMorphTargets
GetCurrentMorphTargetGroups
(former Get Current Morph Groups
)GetCurrentSkinProfile
GetCurrentSkinMaterialSets
GetCurrentEyesProfile
GetCurrentFaceVariants
GetCurrentBasebodyAnimInstanceAlphas
(new)GetCurrentBasebodyProfile
GetCurrentCustomizationProfile
GetCurrentCustomizationProfileMetaData
(new)GetCurrentAnatomy
GetCurrentAnatomyBodyAnimInstanceClass
(new)GetCurrentAnatomyBodyMesh
(former GetCurrentBodyMesh
)GetCurrentAnatomyBodyProfile
(new)GetCurrentAnatomyHeadAnimInstanceClass
(new)GetCurrentAnatomyHeadMesh
(former GetCurrentHeadMesh
)GetCurrentAnatomyHeadProfile (Selected)
GetCurrentAnatomyHeadProfiles
(new)GetCurrentAnatomyProfile
We introduced a lot of event dispatchers to hopefully support you with integrating the Character Editor with other systems.
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
.BP_CharacterCustomization
OnInitialized
UpdateApparel
to BP_Character
:
Cleanup Foot Transforms
to BP_Character
> ClearApparelSpcificSettings
, which is bound to BP_CharacterCustomization > OnBeforeUpdate_Apparel
Apparel-specific settings
to BP_Character > ApplyApparelSpcificSettings
, which is bound to BP_CharacterCustomization > OnUpdated_Apparel
BP_CharacterCustomization > UpdateEquipment > Equipment-specific attachments
to BP_CharacterCustomization > AddCDA_Skeletal
, which now natively supports attachments via pins SocketName
and RelativeTransform
.BP_CharacterEditor
. OnOpened
and OnClosed
were previously called OnOpen
and OnClose
.OnInitialized
, OnOpen
and OnClose
OpenEditor
and CloseEditor
(as shown above)EquipmentGlobal
bindings to HDR Color Pickers and Float Sliders, in case you want to add Global HDR Color Pickers or Global Scalar pickers for themTo 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.
[Updated] BP_CharacterCustomization > Functions
AddCDA_Groom
(former AddGroomCDA
)AddCDA_Skeletal
(former AddSkeletalCDA
)AddCDA_Static
(former AddStaticCDA
)CleanupCDAs
SetRandomCDA_Profile (Replicable)
(new)RemoveAllCDA_Profiles (Replicable)
(new)RemoveCDA_Profile (Replicable)
(new)UpdateAdvancedCDA_Options
GetCurrentApparelProfile
GetCurrentCDA_ApparelProfiles
RemoveAllCDA_ApparelProfiles (Replicable)
(replaces [V7 removed] RemoveAllApparels
)RemoveCDA_ApparelProfile
(former RemoveApparel
)RemoveDuplicateCDA_ApparelProfiles
SetCDA_ApparelProfile
SetApparelGlobalHDR_VectorParameter
SetApparelGlobalScalarParameter
SetRandomCDA_ApparelProfile (Replicable)
(replaces [V7 removed] SetRandomCDA_ApparelProfile
)UpdateApparel
UpdateApparelBasebodyMasks
GetCurrentAttachmentProfile
GetCurrentCDA_AttachmentProfiles
RemoveAllCDA_AttachmentProfiles (Replicable)
(new)RemoveCDA_AttachmentProfile
(new)RemoveDuplicateCDA_AttachmentProfiles
SetCDA_AttachmentProfile
SetAttachmentGlobalHDR_VectorParameter
SetAttachmentGlobalScalarParameter
SetRandomCDA_AttachmentProfile (Replicable)
(new)UpdateAttachments
GetCurrentEquipmentProfile
GetCurrentCDA_EquipmentProfiles
RemoveAllCDA_EquipmentProfiles (Replicable)
(new)RemoveCDA_EquipmentProfile
(new)RemoveDuplicateCDA_EquipmentProfiles
SetCDA_EquipmentProfile
SetEquipmentGlobalHDR_VectorParameter
SetEquipmentGlobalScalarParameter
SetRandomCDA_EquipmentProfile (Replicable)
(new)UpdateEquipment
GetCurrentGroomProfile
GetCurrentCDA_GroomProfiles
RemoveAllCDA_GroomProfiles (Replicable)
(new)RemoveCDA_GroomProfile
(new)RemoveDuplicateCDA_GroomProfiles
SetCDA_GroomProfile
SetGroomGlobalHDR_VectorParameter
SetGroomGlobalScalarParameter
SetRandomCDA_GroomProfile (Replicable)
(new)UpdateGroom
GetCurrentHairstyleProfile
GetCurrentCDA_HairstyleProfiles
RemoveAllCDA_HairstyleProfiles (Replicable)
(new)RemoveCDA_HairstyleProfile
(replaces [V7 removed] RemoveHairstyle
)RemoveDuplicateCDA_HairstyleProfiles
SetCDA_HairstyleProfile
SetHairstyleGlobalHDR_VectorParameter
SetHairstyleGlobalScalarParameter
SetRandomCDA_HairstyleProfile (Replicable)
(replaces [V7 removed] SetRandomCDA_HairstyleProfile
)UpdateHairstyle
[Updated] BP_CharacterCustomization > Macros
Is CDA Visible
[Updated] BP_CharacterCustomization > Variables
HiddenCDA_Classes
PackageRegistry
ActiveAdditionalMorphTargets_Apparel
ApparelMeshComponents
MID_ApparelGlobals
UseAlternativeSkinTextures
AttachmentMeshComponents
MID_AttachmentsGlobals
ActiveAdditionalMorphTargets_Equipment
EquipmentMeshComponents
MID_EquipmentGlobals
GroomComponents
MID_GroomGlobals
ActiveAdditionalMorphTargets_Hairstyle
HairstyleMeshComponents
MID_HairstyleGlobals
[Updated] CharacterEditorFunctionLibrary > Utilties > Customization
DoesCDA_PassesFilterSettings
GetCDA_AssetData
GetCDA_FromAssetRegistry
GetAdvancedCDA_Options
GetFriendlyCDA_Name
FilterLoadCDA_FromAssetData
ApparelClassToMaterialParameterName
FilterCDA_ApparelProfilesByClass
FindCDA_ApparelProfile
GetAdvancedApparelOptions
FilterCDA_AttachmentProfilesByClass
FindCDA_AttachmentProfile
FilterCDA_EquipmentProfilesByClass
FindCDA_EquipmentlProfile
FilterCDA_GroomProfilesByClass
Find CDA Groom Profile
FilterCDA_HairstyleProfilesByClass
FindCDA_HairstyleProfile
BP_CDA_Groom_Head
and BP_CDA_Groom_Beard
.BindingAssets
replaces BindingAsset
to support multiple head meshes.HiddenClasses
support has been added.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).
CharacterParts
folder. This can reduce Prims (primitives count) up to less than 10% of the original asset quality, resulting in better FPS.CharacterEditor_Showcase_Performance
map with 128 characters in the scene.BP_CharacterCustomization
> GetCurrentFaceVariants
to pass face variants to Character Editor.BP_Character
> AnatomyDataTable
default set to DT_AnatomyProfiles_V8
.BP_CharacterCustomization
> AnatomyDataTable
default set to DT_AnatomyProfiles_V8
.BP_CharacterCustomization
> UpdateSkinMaterialsBP_CharacterCustomization
> UpdateEyesMaterialsBP_CharacterCustomization
> SetHeadIndex
to update skin and eyes according to the new logic.WBP_CharacterEditor
> Event Graph
> Initialize - Face Heads And Variants
.WBP_CDA_CollectionPicker
.Base/Tutorial/
folder with dedicated assets for a first tutorial with example content.Weight
and Muscles
float sliders in MetaHuman anatomy.Skin
color picker in MetaHuman anatomy.Beta Features
in MetaHuman anatomy and toggle them if they were open.BP_Character_simple_no_editor_usage
morph target application.DT_CustomizationProfiles_V7
was missing Basebody settings (morphs, skin, etc.).Outline Settings
with a default Corner Radius
of 4.0
, which did not match our style guide.BP_CharacterCustomization
> Function: Apply Customization Profile structure and content.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.
Watch on YouTube: Character Editor Update
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.
Note for returning customers:
See Tutorial: Upgrade Character Editor from Version 2 to Version 4.