Adding Armour

From Baldur's Gate 3 Modding

This guide covers the process of importing new armour and setting it up for in-game use. This requires you to already have the model, materials, and textures already created and in the correct formats for import. Please refer to Creating Armour for details on how to prepare these.

Importing the Assets

To import a model, it must be in the .gr2 file format, and already be placed inside the Source Asset Data Path of your mod.

The file can contain several meshes, and should already contain skinning.

In the Editor, open your mod project, then open the Resource Manager via the crayon box icon on the main toolbar.

Opening the Resource Manager.

You will need locate the folder and package where you would like to add your armour. You can add the armour to any package in your mod – including the base package. If you’d like to add some structure and organisation, however, you’re welcome to create folders and additional packages at this time.

The folder icons and their functions in the Resource Manager.

For the purposes of this guide, we’ll go with the following structure:

A basic folder structure.

Model

With the NewArmors package selected, click on the Add resource... button.

Adding a resource to the NewArmors package.

In the Add Resource Wizard window, select Model. Navigate to where you exported your armour models – remember that these must be .gr2 files, and located inside your mod's Source Asset Data Path. You can select multiple files here, and they will all import.

Adding a Model resource using the Add Resource Wizard.

You will now get a pop-up window where you can double-check which project each model is being imported into, the target package location, and name of the asset you are importing. You can change the name of the asset at this time if you’d like.

After confirming the information, click OK.

Confirming details in the Rename/Move pop-up.

The model will now appear in your Resource Manager in the target package. When you click on it, you will see the mesh preview in the right-hand side panel, with many different settings underneath.

The model as it now appears within the target package in the Resource Manager.

For armour, you mainly need to look at 4 settings: Slot ID, Supports Vertex Color Masking, Tags, and Vertex Color Mask Slots.

The four settings important for armour.

1. Slot ID determines which tab this mesh will be placed in inside the Character Editor and in the Equipment data editor.

Slot ID Options
Slot Name Uses
Unassigned Default value – this should not actually be used.
Test Test meshes.
Head Head meshes. Not to be confused with items that are attached to heads! These are the heads themselves.
Private Parts Genital meshes.
ModestyLeaf The leaf mesh that covers the genital meshes when you have nudity turned off.
Hair Default version of hairstyle meshes and their accessories. This is the version that gets snapped to most races.
HelmetHair Hair meshes that are meant for the HelmetHair system – the hairstyles that you swap to with specific equipment, depending on your hair type and length.
Hair DWR Hair meshes for non-default versions. You can read more about these in the guide on Helmet Hair.
Beard Beard meshes and their accessories.
Body Any equipment on the main body (trousers, shirts, belts, shoulder pads, scarves, etc.).
Headwear Items you’d want in the “Headwear“ slot of your equipment in-game (collars, circlets, hats, hoods, masks, etc.).
Gloves Items you'd want in the “Glove“ slot of your equipment in-game (bracers, gloves, bracelets, rings, etc.).
Cloak Capes, or potential back attachments you’d like to have instead of capes.
Footwear Boots, shoes, foot jewellery. If you want Crusher’s toe ring as gear, for example, you’d put it here.
Underwear Underwear meshes or anything that should go in that slot, like body jewellery.
Piercing Piercing meshes.
Horns Horns for Tieflings only.
DragonbornTop Top attachments (horns) for Dragonborn heads.
DragonbornJaw Jaw attachments for Dragonborn heads.
DragonbornChin Chin attachments for Dragonborn heads.

In our example, we have two meshes – a top and trousers. Both fall into the Body category, so that's what we'll set as the Slot ID on both.

2. Supports Vertex Color Masking is needed for the hiding system we use on equipment. Since we want the sleeves to be hidden when the player equips gloves on top of them, and to hide the trousers when boots are equipped, we’ll need to enable the checkbox on both items.

Note that if this checkbox is enabled, you’ll need to make sure the shader you select later on supports this system. The shader will have VertCut in the name.

3. Tags are mainly used on hair and headwear meshes. For hair and helmet hair meshes, apply the Hair tag so that it shows correctly.

Editing the tags in the Resource Manager.

On Headwear meshes, you can add the other tags to specify whether the hair, ears, and/or horns should be hidden. Hair will automatically get hidden by items in the Headwear slot, so if you are adding a collar, mask, circlet or anything similar and don't want your character to rock the bald cut whenever it's equipped, make sure to add the Never Hide Hair tag.

We do not need any tags for our example in this guide, as we’re not adding hair or headwear.

4. Vertex Color Mask Slots are another type of tag that we can add to meshes so the system understands what it needs to hide on other meshes. Tag the ones that should be hidden by your armour. In the example here, for the shirt, we would check the following boxes:

  • Shoulders
  • Upperarm
  • Torso
  • Underwear_bra
  • Nipple covers

And check these boxes for the trousers:

  • Underwear_bra
  • Underwear_panties
  • Underwear_panties_tail
  • Private parts
  • Modesty leaf
  • Thighs
  • Knees
  • Shins
  • Pants

Below is an overview of the different Vertex Color Mask Slots and what they affect. These vary slightly across genders and races so make sure to always double-check in the Editor.

Vertex Color Mask Slots, reference 1.
Vertex Color Mask Slots, reference 2.
Vertex Color Mask Slots, reference 3.

Material

Reusing an Existing Material

We recommend reusing an existing material. You can browse through the various existing materials inside the /All/ folder at the top of the Resource Manager’s sidebar.

The "All" folder in the Resource Manager.

To view only the materials, right-click on the globe icon.

Filtering for materials (globe icon) in the Resource Manager.

You can right-click on it again to remove the filter and view all asset types.

Once you find a material that has the shader you want to base yours on, right-click on it in the Resource Manager and select Create New from Selected...

Selecting an existing material to base ours on.

For our example, we’ll go with HUM_M_ARM_Astarion_Shirt for the shirt, and HUM_M_ARM_Astarion_Pants for the trousers.

Give it the same Resource Package as where you placed the mesh, and a name. If your model consists of different meshes, you will need multiple materials for this armour. If you are re-using existing pieces of armour, you can simply re-use those materials instead of creating copies.

Giving the new material the same Resource Package as the mesh and naming it.

Textures

Depending on if you’re making an entirely new armour or adjusting an existing one, you might have custom textures for it. These should be exported as .dds files, and need to be inside /<YourMod>/Assets/Public/. They can be further organised into subfolders, if you like.

We’ll use the Add Resource Wizard to import these too.

Importing textures via the Add Resource Wizard.

BM, NM, and PM

The BM, NM, and PM should be imported as Virtual Textures. Select all three files at once.

If you’ve named your textures with _BM, _NM, and _PM suffixes, these should already have sorted correctly, but you can still adjust the import path in the Virtual Texture Importer window.

You’re also welcome to adjust the Scale at this time, if necessary.

Importing the BM (Albedo), NM (Normal), and PM (Physical) via the Virtual Texture Importer.

When ready, press the Import All button at the top. The bottom bar of the Virtual Texture Importer will change to show that it’s converting.

Once the conversion is complete, you’ll see a single new VirtualTextureResource (containing all three maps) appear in your target package.

GM, MSK, or CLOTH

Any additional textures like GM, MSK or CLOTH can be imported as default Textures. When importing these, you will be asked if they’re sRGB.

Once the textures are imported, we need to plug these into the material. Double-click on a material in the Resource Manager to open it. You will see default colours that you can set. Scroll down in this view to see the texture settings.

In the Resource Manager, with this window still open, select the texture you want to assign, and in the material settings window, click on the arrow to assign the selected texture. Make sure the checkbox is checked. Do this for all textures in the material.

Plugging textures into a material.

Then, select your mesh (VisualResource), and double-click to open the Edit Visual window. Here, assign the the new material to the mesh using the same workflow as above.

A material assigned to a mesh.

You should now have an implemented asset in the Resource Manager!

Success! An implemented asset in the Resource Manager.

Equipment System

To actually use this as equipment, it needs to have a root template. A root template holds a description of how an item looks in the world, what it says in the tooltip, how it looks when a character equips it, and so on.

The easiest option when creating a new root template is to inherit from an existing root template. This way, all of its parameters will be inherited, and you can just modify the visuals.

Open the Root Templates Manager via the building block icon on the main toolbar.

Opening the Root Templates Manager.

ⓘ To use the Root Templates Manager, you must have a level loaded. If the icon is greyed out, check to see if you already have the Root Templates Manager open!

Switch to Inheritance View (the green outline in the screenshot below) and navigate to item > [WIP] BASE_ARMOR > [WIP] BASE_ARMOR_Body to find body armour to inherit from.

Switching to Inheritance View in the Root Templates Manager.

You can narrow it down further from here. For example, if you were making a robe, you might want to go to: items > [WIP] BASE_ARMOR > [WIP] BASE_ARMOR_Body > [WIP] ARM_Cloth > [WIP] ARM_Robe.

In our case, we’ll select [WIP] ARM_Civilian_Body from under [WIP] ARM_Cloth.

Right-click on the desired root, and select Create inherited from selected.

The CreateObjectWizard will appear.

Filling in a name in the CreateObjectWizard.

First, fill in a new name for the root template (the yellow outline in the screenshot above). We’ll go with ARM_Leather_StylishPants. You can already adjust some of the other settings now, but these will also be available after creation, so we’ll skip them for now.

Press the Create button.

After creation, your new root template will be visible in the hierarchy:

The newly created root template in the Inheritance View hierarchy.

The Sidebar should also have opened. If not, click on your new template to open it. In this sidebar, fill in the Display Name. This is the item name that will show up in-game.

Filling in the item's Display Name in the sidebar.

ⓘ You can search for a particular field by typing it into the search bar at the top:

The search bar at the top of the sidebar.

Here, you can also adjust which model will be visible when you drop the item in the world. By default, a basic folded model should be filled in, but if you do decide to make a custom mesh for it, you can fill in the model and physics files in Physics Resource ID and Visual Resource ID.

Where to adjust the model and physics files.

The most important part visually is the Equipment Data. This is where you assign the actual visuals on the various races. Scroll down or filter for Equipment Data and click on the to open the Equipment Composer (or Equipment Data Editor).

Opening the Equipment Composer.

In the Equipment Composer, the different races will still be wearing their assigned robes from the root template you copied. You can click on the different tabs to see:

The races wearing the assigned robes from the copied root template.

Here, you can assign the correct visual and colour presets for all races. If you do not make your custom armour available for all of the races, you can still assign fallback armour from something pre-existing – there is no hard requirement that the armour must all visually match.

You can also use the + to add other race/gender combinations. For example, if you’d like female drow to wear something else, select that from the dropdown.

ⓘ If they don’t have their own outfits assigned here, elves, half-elves, and tieflings default to whatever is assigned to the humans.

The Equipment Composer.

The yellow area of the Equipment Composer shows what’s currently assigned. The red is a browser for all the available items. You can filter the items shown in this part by using the search bar (the green outline in the screenshot above). Double-click on items to assign or unassign them.

Once you’re done assigning, go to File > Save All. Close the Equipment Composer.

Assigning Stats

Now you have a new item that can be used as loot!

It still has same statistics as the root template you copied. If you want it to provide magic benefits or have custom gameplay effects, you’ll need to change the Stats parameter on the root to an existing magical item, or make a new one.

This is done with an Armor table in the Stats Editor. Open the Stats Editor via the bar chart icon on the main toolbar, and look for your mod (in our case, NewArmor).

Locating our mod in the Stats Editor.

Click on the + by Stats, and select Armor from the dropdown. It’ll be created under Stats. Double-click on this new file to open it.

Adding an "Armor" file under Stats.

Finally, fill in three fields in the Armor file: RootTemplate, Name, and Parent.

  • RootTemplate: Fill in this field with the name of the root template you created. In our case, that’s ARM_Leather_StylishPants.
  • Name: You can use the same name as the root template.
  • Parent: You can fill in the name of a pre-existing armour. Your new armour will then use the same properties. To see stats for existing armour, along with their names, feel free to browse the GustavDev Armor table.
Where to find existing stats in GustavDev to use for the Parent.

Once you’ve filled in these three fields, make sure to save your work!