FFXIV Modding — Insights to Modding with Blender

DanielBarnes
18 min readJan 29, 2023

--

This is a guide to working with FFXIV models in Blender 3D. I spent, a frankly ridiculous amount of time modding FFXIV, and reached the point where I needed to stop. This is more or less a record of my workflow for anyone getting into modding or looking for some tips.

This will mostly focus on work in blender but I’ll go through the whole process, including importing the finished model. I’d also like to preface this by saying, I am not a Blender expert. I’m sure there’s better ways to do things. I wanted to automate a bunch of things with scripts, but couldn’t see eye-to-eye with Blender’s API.

It goes without saying, but don’t go stealing Mog Station gear!
It’s not nice to SquareEnix(even if I do think most of it is overpriced).

There’s a few tools you’ll need:
-Blender(of course) I used 2.90.1, but any version should work
-FFXIV TexTools, for extracting/importing files
-Anamnesis, for checking gear in game and making custom poses

By way of example, I’ll show the general process for converting a vanilla mesh to use a different body. There’s a number of different body replacers out there, such as Tsar’s TBSE and Thicclander for males and Bibo+, Eve, and Freyja for females(among many, many others). Anatomy aside, the biggest and most important difference is the UVs. Using the wrong texture on a model is an easy way to create a blasphemy. That I found, there were two main layouts for UVs, but there might be others. You can easily use both, as long as you remember which material set to use when importing.

For this example, we’ll convert the vanilla South Seas Talisman to use Tsar’s TBSE. There are some interesting things going on with this model. The process is the same regardless of what body you use.

From TexTools, search for South Seas Talisman and hit export the Hyur Midlander. The default FBX is what we’re after(It helps if you setup TexTools’ Save Directory to someplace you can find).

In Blender goto File > Import > FBX, navigate to the directory where you saved the file and open the file. It’ll have a name like c0101e0194_top.fbx.

A brief aside about FFXIV’s file naming convention. The number following the ‘c’ is the code for which race the file applies to
0101 — Hyur Midlander male
0201 — Hyur Midlander female
0301 — Hyur Hilander male
and so on… There’s some good resources out there that show how inheritance works for the different races. Everything basically stems from the Hyur Midlander.

Once you import your model it’ll look something like this.

Next import the body you want to replace. It’ll pile on top of the existing model, which is what we want.

In the Outliner on the right open up both of the models. You’ll see the TBSE model we imported has an n_root.001 instead of n_root.

Hide all the vanilla skin by clicking the eye icon. This is usually Part 0, but it depends on the model. Sometimes it can be 1.0 or 2.0.

There’s still a lot of geometry here so hide everything but 2.0, the tattoo. This is basically a low poly plane with an opacity map. You can see that it doesn’t fit very well on the new body.

There’s an added challenge here as well because this tattoo is actually in 2 pieces. In this case, it would be fairly easy to adjust the pieces separately and snap the seam together, but this gives an opportunity to show a neat trick in blender.

Because Blender doesn’t care about the modifier stack, we can join the objects together without losing any of the skin weight data. Just to be safe, work with a copy rather than the original, so you have something to refer back to later.

Select both pieces of the tattoo mesh and right-click anywhere in the 3D view. Select Duplicate Objects from the Object Context Menu. Hit enter before moving your mouse. If you move your mouse, it’ll drag the duplicate objects around. Right-click to exit the move tool and they should snap back to their original location.

With the duplicate objects selected, right-click again anywhere and select Join. You now have a single object to work with. Hide the original pieces, these will be needed as reference when you go to split the tattoo back to one object.

With the single tattoo object selected, press ctrl+tab and select Sculpt Mode(or select it from the dropdown in the upper left of the 3D view). I found this to be the easiest way to modify geometry, although older versions of Blender might not have this tool.

Press the G key to switch to the grab tool, or select it from the list of brushes on the left side(you can drag out the edge of the tool box to show the brush names).

Sculpt until the tattoo is sitting on top of the skin. A few useful shortcuts:
F key — to change the size of the brush
Shift+F — to change the strength of the brush
you can also click Tool on the right side of the model window for the rest of the brush settings.

Tattoos on vanilla pieces are always very low poly, which makes it kind of annoying to fit to a higher res body. If you really want you could subdivide to have more geometry, but I never bothered. For the most part the name of the game is get the mesh above the skin. Even on vanilla pieces, If you look really close ingame you’ll see the gap between skin and tattoo.
(How close are you going to get to it anyway?)

If you’re feeling really adventurous, you can remake the tattoo piece by making a duplicate of the body mesh and scaling it up slight, but that’s a topic for another time.

You might be saying to yourself, It’d sure be nice if I could see the tattoo texture… and you’d be right. But Blender doesn’t play nice with FFXIV opacity textures for some reason reason. If you change the Viewport Shading mode to Material Preview in the upper right, you’ll see the problem.

If you really need to see the tattoo, there is a way.

Goto Object Mode and select the tattoo piece, then hit the Shading tab at the top of the window. This will populate the material for the selected object.

Zoom in on the texture node connected to the Base Color. Click the image icon with the down arrow and select the correct Opacity texture in the list.

This will let you see the alpha map for the tattoo in Material Preview mode. Anything black is invisible ingame. It’s far from perfect, but its better than nothing at all. If there’s a way to get Blender to render transparency in Material Preview, I couldn’t figure it out.

Once you have the tattoo covering the skin, its time to separate the pieces.
Go into Edit Mode and turn on the original bottom piece in the outliner(this is why we worked with a copy).

Select the faces that match the original shape. It’s helpful to use Wireframe or X-Ray to see the shape while in Edit mode.

Once you have the correct faces selected, right-click anywhere and chose Separate > Selection. You now have two objects matching the original, but modified for the new body.

What’s awesome about this, is that armature, vertex groups and weights all carried over from the original mesh. I still think this is awesome. Maya or 3DS Max won’t let you do it that easy. You can select the n_root armature, go into pose mode and verify they’re weighted.

The last thing to do here is to rename the copies to the original mesh names. For a vanilla conversion like this, its very important to have the same names, particularly in a model like this. There’s a number of different flags that control visibility for certain pieces. If the part numbers are the same as the original then you don’t need to worry about it. If you change the part numbers then you need to adjust the flags when importing.

Hide the tattoo parts and unhide Part 1.2. This model has a number of different variants, the armband only appears for the Coeurl Talisman, which doesn’t have the the tattoo.

The process here is effectively the same, but there’s a small issue that some vanilla models have. When you begin sculpting you won’t see any change. You’ll see a wireframe move but the geometry stays the same.

This issue is because of the Shape Keys that some models have because… reasons…

To fix it, open up the Properties on the right side and goto Object Data Properties(the green triangle icon). Under Shape Keys, you’ll see Basis and shp_kat. Don’t ask me what these are or why some models have them. Select Basis and you should be able to sculpt again.

Continue going through the parts of the model and Sculpt anything that has interpenetrating geometry. Depending on the geometry, this can be very labor intensive.

Now that the vanilla clothing is adjusted for the new body, it’s time to replace the vanilla body.

Hide all the parts of the vanilla model so that only the replacement body is visible, then select all the geometry(and only the geometry). It’s easiest to do this from the Outliner.

In the Outliner, hold shift and drag the parts down onto the n_root node(the yellow one). The geometry will rotate 90 degrees and lay flat on its back. Don’t panic! This happens because of the local axis for the object vs the world axis(or something along those lines). It easy enough to fix, so I never bothered trying to adjust things to prevent it.

With all the parts still selected press Tab to go into Edit Mode. All the faces should be selected, if they’re not hit the A key to select all. Then Rotate the faces 90 degrees around the origin till its in the correct position again(hold down ctrl while rotating to snap). The easiest way to do this is to set the pivot to 3D cursor at the top of the window

If the cursor isn’t at the origin you can press Shift+S and select Cursor to World Origin.

Now that all the geometry is under the same hierarchy, it’s time to tell the pieces to use the original skeleton. Fortunately, this is very simple in Blender.

Select a piece of the new body and click the wrench icon in the Properties window below the Outliner.

Click in the box where it says Object and select n_root.

That’s it. The mesh is now connected to the vanilla skeleton. Do the same for the rest of the parts. You can select the skeleton and go into Pose Mode to verify it’s attached.

The last step is to go through and copy the names from the vanilla body pieces to the replacement body. As mentioned before, the Part numbers are very important here!

Flags get assigned to different Parts so they can be hidden based on other gear pieces. For example, if you assign the number from the forearm to the main torso, it will disappear when long gloves are equipped. It helps if you hide all the parts except the ones you’re renaming. Delete the vanilla parts before renaming, otherwise rename it to 0.0002 or something.

At this point you can delete the hierarchy for the replacement body since nothing is connected to it. There’s one last step to be done. The weighting.

Weighting isn’t completely horrible(and I’m not just saying that because I’m someone who enjoys weighting). I find Blender’s weighting painting tools to be lacking compared to other programs, but the Transfer Weight Tool works fairly well. Generally, it gets the job done on its own, but if the weights do need adjusting then it does gives you a good place to start from.

Depending on the source of the original mesh and the replacement you’re using, this step can sometimes be skipped. For example, if you have a mesh that was modeled and weighted for TBSE and you want to replace it with a custom TBSE variant modeled with more muscle, then the weights will already match. Where you need to adjust the weights is when you’re changing between different bodies vanilla to Thicclander, Eve to Freyja…

Do respect other modders’ wishes. If they say don’t modify their mods.
Then Don’t.

Start by hiding all the clothing pieces and work them them one at a time.

Select the body Part then shift+click the armor. The last piece selected is the one that will have it’s weights adjusted.

Important Note:
Some pieces of gear cross seams in the body, for instance at the elbow and forearm. For this to work right with the least amount effort you’ll need to combine the pieces where the clothing needs to match the skin weighting.
Duplicate the pieces using the process listed above for the tattoo and join them together, this gives you one mesh with all the weights.

This is especially necessary for things like long dresses where you need leg weights(dresses can be fun to convert if you’re looking for a challenge).

For this necklace, you can make the case to join the torso and neck before transferring weights, but the amount of overlap isn’t that significant.

With both pieces selected, press Ctrl+Tab and select Weight Paint, or select Weight Paint from the dropdown in the upper left corner. If the body turns colors, then go back to Object Mode and select the two pieces in the opposite order.

Once in Weight Paint mode, goto Weights > Transfer Weights

When the tool opens you’ll see the colors(weighting) on the mesh, just ignore this for now. You can select Freeze Operator if you don’t want to see the changes as they happen, but preferred to keep an eye on things.

Update the settings to match below. There are a few important settings to pay attention to.

Create Data
This will add all the vert groups(bones) from the body to the mesh. For instance, this necklace only has 5 bones with weight. If you turn this on, it will add ALL the bones, but only weight to the same 5 bones. Sometimes you need this for clothing joints in dresses.

Vertex Mapping
This controls how the weights are mapped from the body to the mesh. Using an Interpolated method, either Nearest Edge or Nearest Face. This means the tool will take into account neighboring bones to distribute the weights, and generally does a decent job. Sometimes it needs a little extra help, more on that later.

Source Layers Selection
This affects how the tool finds the source bones, set it to By Name. I’ve played with to try to get it to copy only specific bones, but didn’t have much luck.

Destination Layers Matching
Just leave this on All Layers. In theory, you can use it to copy only specific bones, but it never worked for me.

Mix Mode
Leave this on Replace. You can try using other modes, but I found Replace gives the best results.

You can play with the rest of the settings but I found using the above was good enough.

While you have the Transfer Weights tool open, you can check the weighting for the vert groups by clicking the Object Data Properties and selecting different vert groups(when you do change setting it will default back to the same group, which can be annoying). This can be useful if you remember the color of the weights on the skin.

That’s it! …Generally…
You can select the skeleton and go into Pose Mode to verify the mesh deforms uniformly.

In areas where there’s a lot of joints, sometimes the tool has trouble. This particularly happens around the groin between the leg bones and hips, but also can happen in the armpit area.

All you need to do is add a little rotation to the bones in Pose mode
Rotate Y +/- 0.01 away from the center for both legs will do wonders for the transfer weights tool, what’s better is you can forget about the rotation. The bones rotations are zeroed out when they’re imported, so any rotation on any joint will have no affect outside of blender.

This is usually needed for shorts or tights. Even if you delete the underlying skin, you still need the weights to be correct because…

Racial Scaling! This is very important to how adapts gear to different races!
FFXIV generally scales joints for different races(look into inheritance), unless the piece of gear has a specific model for that race. What this means is, when the scaling is applied the model it might look fine for Hyur Midlanders, but for Elezen or Miqote it won’t look right. Roegadyn and Lalafell generally have their own models that aren’t scaled, though Hrothgar do inherit from Roegadyn.

And no. You cannot scale Hyur gear down for a Lalafell. The proportions are too different and no amount of scaling will make it look right. You’re better off modeling something from scratch(TexTools is also likely to crash if you don’t have the same materials loaded for Lalafell).

Follow the same process for the rest of the pieces, you should be able to see a notable change in the weighting.

All that’s left to do is cleanup the scene and export.

Make sure there’s only one hierarchy in the scene and only one skeleton.
I think if there is an n_root.001 in the file TexTools will ignore it on import, but it’s better not to have any extraneous bits.

Make sure all geometry is using the n_root skeleton.
Anything that’s connected to n_root.001 will have no weights once that skeleton is deleted. However, the weights won’t be lost until the scene is closed. In other words, if the skeleton has been deleted, you can still change it to n_root and not have to worry about the weights(I lost count of the number of times I forgot to do this).

Make sure all parts are named correctly.
This helps when importing so the groups show up correct.

Once the scene is cleaned up goto File > Export > FBX. Navigate to the folder where you want to saved your model. Generally, It makes life easier if you use the same <gear>\3D\ folder you extracted the model to.

There are some important settings under Transform that need to set correctly. I don’t remember Blender’s default export settings, but it needs to be -Z forward and Y up.

The other thing I always made sure to turn OFF is Add Leaf Bones, this adds a useless _END bone to ALL the bones in the skeleton. It doesn’t affect anything but is starts to look ugly, and I don’t like having extraneous bones(even if they are ignored).

Open up TexTools and navigate to the Southern Seas Talisman you’re replacing. On the Model tab, hit the Import button.

Press the 3 dots and select your model file(this is where work from the same directory helps). Then select Open Editor.

You might see some warnings about vertices having changes to their weights. That can be ignored, but watch out for messages about no valid skin element! There will also be a ton of warnings about bone weights and animation issues.

That means the Armature didn’t get changed to n_root.

Once the options open up, we need to change the skin material. In the dropdown, the Groups correspond to the Part numbers in Blender. Sometimes these can get wonky if the c and e numbers for the parts don’t match the vanilla model(its best to name everything the same). It’s also good to have the model open in Blender to refer back to just in case.

There can be a maximum of four materials applied to a model for any given race, including the skin. We don’t need to worry about that here, but always keep that in mind.

The importer will remember the materials for each group, so we only need to wory about changing the skin material.

Group 0 in this case is the skin group and has the vanilla Skin material selected by default. Click the dropdown and select Custom.

Lets break down the material name real quick: /mt_c0101b0001_a.mtrl
c0101 — is the racial code for Hyur Midlander
b0001 — is the variant of the body type, this is usually 0001. You can dig through the body textures to see the variations, usually there’s 1 main texture and 1 elderly texture, with the exception of AuRa
a — this is the important one. The letter at the end determines the skin material that will be used. This will need to be changed to b, or possibly d if you’re using multiple body replacers. c is always used as a special material for body hair, because that’s the convention everyone agreed on… apparently…

Change it to /mt_c0101b0001_b.mtrl and click import. That’s it.
Almost…

In the Model tab, if you change the Race to Hyur Highlander, it’s still set to the vanilla model(although it might be hard to tell with this model).
There are a few ways to fix it.

The easiest is to scale it within TexTools. While you have the Midlander model loaded, click the FMV button in the model window to open the Full model Viewer. Here select Hyur Highlander. The model viewer will automatically scale it to the correct proportions. The skin number here refers back to the b number in the material name.

Be careful with the FMV Tool! Its prone to blowing up if it doesn’t materials.
For instance, if you don’t have a body replacer loaded for female characters and you tell it to scale to Female Hyur Midlander, it won’t find a B skin texture and will crash.

Export the model and name it something so you know what it is. Load the Highlander model from the dropdown in the Model tab then import it like you did with the Midlander, changing the material from a to b.

You can do this for Roegadyn as well, but you’ll likely need to open the model up in blender to adjust the mesh before importing. The scale factor for Roegadyn is very intense and sometimes the models need adjusting afterwards(getting the weights right helps minimize this).

There is a bit of a shortcut for this, but it does add unnecessary files.

On the Model tab, copy the file path for the Midlander model then goto Tools > Raw File Operations > Copy Model File.

In the dialogue, paste in the path for the source and destination models. This is where it’s helpful to know racial codes since you only need to change 1 or 2 numbers.

The tool will copy the model and textures and automatically scale it. This does add a copy of the materials and textures for the Highlander, but file size aside, it doesn’t hurt anything. It also really helps if you understand inheritance. The average piece of gear only has models for 5 races, everyone else inherits and scales from those races.

That’s about all there is to it. You’re only limited by your imagination…
and number of materials.

I may write some more articles about FFXIV modding for anyone whoever might be interested. Maybe topics like making tattoos, or invisible armor, that is Metal Gear style stealth camo(that was fun to figure out).

And remember. Don’t go stealing Mog Station gear!
Mod Responsibly.
Until then.
Kupo!

--

--