Hair and Beards: Character Creation

From Baldur's Gate 3 Modding

In this guide, we'll cover how to set up hair and beards in the engine so they show up in Character Creation, how to set shared visual resources or exceptions, and how to add new hair colours.

This guide assumes you have already imported all of the necessary resources as outlined in Hair and Beards: Assets.

Hairstyle Versions and Exceptions

Hair in Baldur's Gate 3 gets automatically snapped to most races, with the exception of Male Half-Orcs and the Male Strong body shape for tall races. Please refer back to Hair and Beards: Assets for a refresher on tall race versions, short race versions, and the exceptions.

Adding hair for the exceptions can get tedious, so it's recommended to first go the “Shared” route (see the CharacterCreationSharedVisuals section below). Then, load Character Creation and check your hairstyle on these body shapes. If there are visual problems, only then address them.

We'll go into further detail about how to add these exceptions later in the guide.

CharacterCreationSharedVisuals Table

To make sure your hairstyle shows up in Character Creation, you'll need to create and populate a CharacterCreationSharedVisuals table.

Open the UUID Object Editor (the spreadsheet icon) via the toolbar.

Opening the UUID Object Editor.

Create a new CharacterCreationSharedVisuals table in your mod, under CharacterCreation. Once made, double-click to open it.

Creating a new CharacterCreationSharedVisuals table under CharacterCreation.

ⓘ You can consult the existing tables in Shared if you'd like to see examples of how they've been done.

Start by filling in the SlotName. This describes the type of asset you're adding and determines where in Character Creation it will be displayed. In our case, we'll fill in Hair.

As soon as you've filled in a field on an empty row, a UUID will automatically be generated.

For the VisualResource, find the UUID of your asset in the Resource Manager. Right-click on your VisualResource, and select Copy GUID to Clipboard.

Copying the GUID of the VisualResource.

Paste it into the VisualResource field in the UUID Object Editor.

DisplayName is what the hair will be called in Character Creation. Creatively, we'll call ours New Hairstyle.

Fill in the Name field with the name of your VisualResource. In our example, that's HAIR_HUM_F_Test_A. Just as for the UUID (GUID), you can copy this from the asset in the Resource Manager.

The BoneName and Tags fields have no relevance to hair, so leave them blank. Your filled-in table should look something like this:

The filled-in CharacterCreationSharedVisuals tabls.

Don't forget to Save.

Races Table

Now, we'll need to define which races can choose the new hairstyle we added in CharacterCreationSharedVisuals. This is done via a Races table.

Create a new Races table in your mod, again using the UUID Object Editor. Open the empty new table.

A new, empty Races table.

To add a hairstyle to an existing race, you'll need to override the race's existing Races entry. To make this hairstyle available for humans, also open the existing Races table under Shared.

The existing Races table under Shared.

Find the row for Human, and right-click on a cell in that row. Select Override in > <YourMod>. Our example mod is called NewHair, so we'll override it there.

Overriding the Human entry in the existing Races table (Shared) in the new mod (NewHair).

Once you've done this, you should see the new row appear in your mod's Races table:

The Human row now appearing in the new mod.

ⓘ If you leave the cells as is, the subraces will inherit the visuals of their race parents. If you fill in the cells, the subraces will overwrite the visuals of their race parents.

Scroll over to the Visuals column.

The Visuals column in the Races table.

Clicking to edit this cell will open a dropdown menu that shows two lists. The top part (red) is a list of all hairstyles and beards already added to this race in Character Creation. The bottom part (green) is a list of hairstyles and beards not currently used by this race.

The Visuals dropdown.

In the search field at the top of this menu, type in your new hair's DisplayName. In our case, our creatively named New Hairstyle will appear in the bottom list. Double-click on it to add it to the list.

Finding the new mod in the Visuals dropdown.

Repeat this process for every race that you want the hairstyle to be available for. When you're done, make sure to save your work.

ⓘ Only assets from the CharacterCreationSharedVisuals need to be added to the Races table as described here. Anything defined in CharacterCreationAppearanceVisuals (detailed below) will be automatically included in Character Creation for the specified race/body shape/body type.

Adding Male Half-Orc and Male Strong Hairstyles to Character Creation

ⓘ Technically, as is the case with small race hairstyle versions, you can add just one hairstyle that will be shared among – and automatically snapped across – all the races with no exceptions. However, there is a very high chance that for Male Strong body shapes and Male Half-Orcs, the hairstyle will have a lot of clipping issues.

In order to add Male Strong (Human, Githyanki, Tiefling, Elf, Half-Elf, Drow) and Male Half-Orc hairstyles, you need to follow a different route. Due to high clipping potential, they don't rely on automatic snapping, and instead have their own manually snapped versions of a given hairstyle.

Because of this, these hairstyles need to be added in a different section of the UUID tables, and they need to be added for each race and body shape separately.

Open the UUID Object Editor and create a CharacterCreationAppearanceVisuals table in your mod. Open it.

Here, the most relevant columns are…

Column Name Note
UUID The table entry's unique identifier.
RaceUUID The UUID of the race you're assigning this hairstyle (or beard) to.
BodyType Male or Female.
BodyShape Standard or Strong.
SlotName The type of asset you're adding: Hair or Beard.
VisualResource The UUID of the relevant VisualResource.
DisplayName The name of the asset that will appear in Character Creation.
Name The filename of your VisualResource.

Let's say that we noticed clipping on the Male Half-Orc, so we want to define an exception.

Since we're adding hair in this case, set the SlotName fields to Hair.

For the VisualResource column, go to the Resource Manager and right-click on the hair's VisualResource to Copy GUID to Clipboard. Paste the copied GUID into the VisualResource cell.

Give the hair a DisplayName in each row. This should ideally be the same name across all race, body shape, and body type combinations. We will again use New Hairstyle.

Fill in the Name column with the name of the VisualResource used (in our case, HAIR_HUM_F_Test_A).

Most importantly, you'll need to fill in the RaceUUID with the UUID of the race, from the relevant Races table.

The filled-in CharacterCreationAppearanceVisuals table.

ⓘ For quick reference, here are the RaceUUIDs for the exception races:

  • Human: 0eb594cb-8820-4be6-a58d-8be7a1a98fba
  • Githyanki: bdf9b779-002c-4077-b377-8ea7c1faa795
  • Tiefling: b6dccbed-30f3-424b-a181-c4540cf38197
  • Elf: 6c038dcb-7eb5-431d-84f8-cecfaf1c0c5a
  • Half-Elf: 45f4ac10-3c89-4fb2-b37d-f973bb9110c0
  • Drow: 4f5d1434-5175-4fa9-b7dc-ab24fba37929
  • Half-Orc: 5c39a726-71c8-4748-ba8d-f768b3c11a91

You can always check for the UUIDs of existing races in the Races tables inside Shared or SharedDev.

Now we have one exception assigned.

However, if the same hairstyle is in CharacterCreationAppearanceVisuals and CharacterCreationSharedVisuals for a combination of body type, body shape, and race, it'll appear twice in the Character Creation list. This means we need to remove this hairstyle from the Half-Orc data in our Races table.

That, in turn, means that the hair will no longer be available for other Half-Orc body type and shape combinations – namely, Female Half-Orcs.

To give the Female Half-Orc this hairstyle, we'll need to also add it to CharacterCreationAppearanceVisuals for that combination, like so:

Making sure Female Half-Orcs have access to the hairstyle.

In short, whenever you define an exception for a specific body type and body shape combination within a race, you need to remove that asset from the CharacterCreationSharedVisuals table, and instead define it individually for each body type and body shape combination in CharacterCreationAppearanceVisuals.

Once you've done this, save the sheet.

The hairstyle should now correctly appear in Character Creation. You can confirm this by loading the SYS_CC_I (Character Creation) level.

Adding Beards to Character Creation

The process for beards is exactly the same as for hairstyles, except that there's no need to worry about exceptions – beards work for everyone in the same way.

Add your beards to your CharacterCreationSharedVisuals table, but this time only select Beard for the SlotName.

You will also need to add those beards to the relevant races as you did with the hairstyles, also via the Visuals field.

Summary: Adding New Hair

If you created a hairstyle and you want it to appear correctly for every single race and gender:

  • You will need the following assets:
    • A shared tall version
    • (Optional) A shared small version mesh
    • (Optional) A version for each Male Strong tall race
    • (Optional) A version for Male Half-Orc
  • Import the assets, create the materials, and set up material presets.
  • If there are no exceptions for the race:
    • Add the tall version and small version to a CharacterCreationSharedVisuals table.
  • If there are exceptions:
    • Add every single body type and body shape combination for that race individually to the CharacterCreationAppearanceVisuals table.
    • The non-exception combinations can share the same VisualResource, while the exceptions (Male Strong, for example) will have their own VisualResource. For example:
The exceptions, each with with their own VisualResource.
    • The Male Strong version uses a custom VisualResource, while the others use the same general “tall version” of that hairstyle.

Adding Hair Colours to Character Creation

Hair colours are created as MaterialPresetResources. To make our own, we're going to start by copying an existing asset: find HAIR_Color_Aqua_0 in the Resource Manager in the All folder by searching for it and filtering for Material Presets only.

Right-click on the asset and select Create New From Selected. Give your new Material Preset a name. We’ll go with HAIR_Color_NewColor for this example.

Naming the new Material Preset.

Find your newly created Material Preset and double-click to open it. You’ll see a variety of values:

The values in the new Material Preset.

For a single hair colour selected by the player, there are actually a number of different settings, so different “parts” of the hair can be adjusted independently to achieve a balanced result:

  • Eyebrows
  • Eyelashes
  • Body Hair Colour
  • Hair Colour
  • Hair Scalp Colour

You’ll need to create a MaterialPresetResource for each new hair colour you want to add. Once you’re done fine-tuning the colours to your liking, make sure all of your work is saved.

Then, go to the UUID Object Editor and create a new CharacterCreationHairColors table. Open it.

ⓘ You can consult the existing CharacterCreationHairColors table in Shared, if you like.

In your new table, first fill in the Name field with the name of the MaterialPresetResource from the Resource Manager. A UUID will be automatically generated afterwards.

The CharacterCreationHairColors table with the name of the MaterialPresetResource and the automatically-generated UUID.

The DisplayName is the name the colour will have in Character Creation. For tutorial purposes, we’ll call this one New Hair Color.

For the MaterialPresetUUID, get the GUID of your MaterialPresetResource (right-click on it in the Resource Manager and select Copy GUID) and paste it into this field.

In the UIColor field, select a colour to represent this new hair colour in the coloured icon in Character Creation.

Your new row of stats in the table should look something like this:

The filled-in stats.

Repeat this process as many times as needed to add all the colour presets you’ve made.

Make sure to save your work afterwards!