Skip to main content

Why is the vert count not the real vertex limit? (the basics)

This guide is currently being updated for Dawntrail, however It is being posted as-is for archival purposes until updated. The general concepts are still correct.

This document was originally created by Kora, and was updated by me to account for penumbra's existance, and Dawntrail's graphical update. A lot of the information in this document was adapted from thier document and was edited and posted with Kora's permission.

What's a vert limit and why do I care?

A common question when getting into modding for 14 is what the limits are for your 3d model to be imported into the game. The most often asked limitation is the hard limit/maximum polygon/vertex count a model can have; and it can be pretty confusing because there are lots of answers floating around. Some say you shouldn’t have more than 40k vertices, some say you can’t have more than 20k polys, and others still say the limit is 65k indices (what does that mean?) per mesh group. So which is it?

The FF14 .MDL format

There is no exact vertex or polygon count limit or else there wouldn’t be so many answers floating about. The cause of this is due to the way the 3D model’s data is stored in the game’s files. Final Fantasy XIV uses Square Enix’s MDL file format to store 3D model data. This format can store data of up to 65,535 (the maximum value of an unsigned 16-bit integer) vertices per mesh group. This is where the 65k vertex index limit answer comes from. Ok so that’s easy, the limit per mesh group of my 3D model is then just 65k vertices! Yes, but also no. 

Vertices aren’t the end of the story

The model that you have open in your 3d program can’t just be imported into the game as is and requires some adjustments during import. The main difference becomes apparent (and can be confusing) when you export and look at a model that you previously imported into the game. Vertices that were previously welded are now unwelded and all the vertices along UV seams are now split. But why is that?

 

In 3d software, a single vertex can have two faces with different data attached to it (also known as “per face data”). Most game engines including ff14 cannot handle this type of data. All modern 3d software will “split” your edges/verts in order to accommodate this. This trait occurs across the FBX, OBJ, and GLTF/GLB formats

 

This means that any verts along a hard edge, uv edge/seam, or any verts along a material border will be split into 2 or more verts on export.

Every single vertex must contain a complete (position, mesh/vert normal, vertex color, Uv coordinate, and weights) and unique set of data to be read properly in 14.

 

As an example, look at this square plane. This plane will import into the game without any changes as each vertex only contains one complete set of position, normals, vertex colour, UV coordinate and weight data..

 

image.png

On the other hand, if there were a UV seam on the diagonal edge of this plane the situation would be different. The vertices in the bottom left and top right corner of the plane now have two sets of UV coordinates so this plane will be split into a total of 6 vertices on import even though there might still only be 4 vertices in your 3d software.

image.png

It is important to remember that the vert and polycount that your 3d software lists is not going to be the exact same as the final count after export. You should always keep that in mind, and try to optimize your edge flow and your UV edges/islands to limit the amount of splitting that export will cause, or duplicate the verts manually (in blender, this is referred to as ripping the edge)

 

As a note, when showing counts in maya, while the vertex count will not match the amount after export, the UVs count will properly “split” verts on a UV edge or seam. While this number won’t be exact to the amount of verts post import, if you decide to use maya, use the UV count instead of vertex count to determine how close you are to the hard cap. Unfortunately you cannot do this in 3ds max or blender, as they do not show UV count, only vertex count, poly count, tri count, and edge count, so you will need to be more mindful of your UVs.

 

Image

 

this is a gif of the same plane, but in maya. Watch how the UV count changes as the edge is split to create a new UV seam.

In conclusion...

There is no easily defined vertex/poly limit for a given model. It depends on the complexity of your model and how easily it can be converted to fit the format that the game uses. The better your mesh and the UVs are optimized, the closer the in program vert count will be. The vertex count of the imported 3D model will always be equal or more than the vertex count you see listed in your 3D modelling program. A good rule of thumb is to limit yourself to about ~40-50k vertices or ~15k tris per mesh group. This usually leaves plenty of headroom for any required adjustments to the model while not exceeding the hard vertex index limit of 65,535.

 

If you find that your mesh is too close to the limit, or you have multiple mesh groups at the limit/you have to split your mesh into a bunch of mesh groups to get under the limit, it is recommended that you retopologise your mesh instead of splitting into groups.