Foreword

UV mapping is a somewhat complex subject, as not only the placement of seams and unwrapping plays a role, but also other things like smoothing splits and texel density. I’ll assume that the model is going to be baked and used in a real-time engine; if it’s just for rendering, that’s fine too.

Software and Tools

UV mapping can be done in all kinds of software like Blender and Maya, or dedicated UV mapping software like Rizom UV, Headus UVLayout and Ultimate Unwrap 3D. More on dedicated UV mapping software in this video.

While most AAA studios like Capcom, Blizzard and Riot Games use Rizom UV, I’ll focus on Blender, as it has all the tools dedicated UV mapping software have when paired with add-ons. In addition to that, the choice in software won’t play that much of a role in the final output, but more so influence the workflow.

The essential add-ons for UV mapping in Blender are UV Pack Master, Texel Density Checker and UV Squares. Other add-ons worth looking into are Zen UV, UV Toolkit, Texel Tools and Dream UV. More on these tools at the bottom of this page.

Another helpful tool for UV mapping is UV checker maps or software built in distortion heat maps. They help identify stretching and distortions. UV checker maps also help visualize texel density differences between UV shells (islands), but more on that later. My favorite collection of UV checker maps can be found here.

Placing Seams & Smoothing Splits

Smoothing splits are a vital part of UV mapping. There are many different workflows, but mostly one places seams and creates smoothing splits at the same time. This is because a smoothing split always needs to be accompanied by a UV split, otherwise undesired sharp edges and artifacts will start appearing in the Normal and AO maps.

The ultimate rule of thumb

A smoothing split always needs a UV split, but a UV split doesn’t always need a smoothing split.

One can also use smoothing splits wherever UV splits are without increasing the vertex count, as the vertices are split regardless. More on that in this video:

One can freely use smoothing splits wherever UV splits occur without increasing the vertex count, as the vertices are split regardless. Smoothing splits also won’t cause any shading artifacts when accompanied by a UV split; so, one can simply add smoothing splits wherever UV splits are. With proper software or add-ons / scripts, this process can be fully automated. (Do check the result, however, because there are some rare situations where this won’t work; for example, it can have problems with complex partial mirroring). Here a video covering this:

Lastly, one should try to make UV shells as big as possible, to free up UV space, as every shell needs its own padding. For very long shells, it still makes sense to split them into smaller shells, for better packing results. Two other advantages of bigger shells are that there are fewer shells in total, so fewer potentially visible seams, and the vertex count in the game engine is reduced.

Helpful knowledge for placing seams and sharp edges in Blender:

FeatureNotesHotkey / Location
Mark Seams and Sharp EdgesThis unlike the right click menu works in vertex, edge and face mode.Ctrl + E
Mark Seams and Sharp Edges via Edge TagIn Edge select mode Ctrl select edges and in the pop-up menu add the desired tagging type
Select Edges Marked Sharp or with a SeamShift + G or Select > Select Similar
Select Sharp EdgesUse to place seams and sharp edges at edges that surpass an angle threshold.Select > Select Sharp Edges
Smart UV UnwrapSmart UV unwrap can often do the job for hard surface objects.U or
Place Seams Based on UV ShellsSeams can be recreated on the model based on the UV shell, helpful for when seams are lost or extracting smart UV unwrap seamsUV > Seams from Islands
Live UnwrapRemoves the need to have to constantly press unwrap.UV > Live Unwrap & 3D View > Options > Live Unwrap (Both options have to be toggled separately)
UV Sync SelectionNice overview and help for placing seams. But has to be turned off for some things.Two opposite pointing arrows button in UV view.
Create Multiple UV MapsOne can cycle through different UV maps for one model, helpful for comparing UV maps to get the best possible result.Properties view > Data Tab > UV Maps
Select Entire UV ShellSwitch to Face select mode or disable UV Sync Selection, then press L
  • Make sure to apply transform scale of all low objects to prevent UV shells size ratio differences
  • Modifiers like SubDiv and Shrinkwrap should be applied on the low before unwrapping

Rotating UVs

Most UV pack algorithms will only rotate the UV shells by 90°. This is done, to reduce the visibility of jagged lines. The reason for the jagged lines has to do with the fact that a monitor pixel has four sides (rasterisation). Having the UV shell follow the flow of one of the these sides, that being 90°, 180°, 270°, 360° reduces the effect of jagged edges. Anti-aliasing can also help reduce this issue, but it’s best to combine both of these methods.

90° snap texture result example (without the help of anti-aliasing)

45° snap texture result example (without the help of anti-aliasing)

With higher resolution textures, this is less of an issue, and in rare situations there can be reasons why one would want to rotate UV shells by more or less than 90°, but in most cases one should stick to 90° rotations.

Keeping UV shells at 90° angles can also make texturing easier.

Mirroring UVs

Before UV unwrapping, one has to decide how to proceed with mirrors. One can apply mirrors before UV mapping or at the end right before export.

Applying the mirror at export will double the available texture space for UV mapping, as only the right / left side of the model needs to be mapped and the other side is then stacked on top of those shells at export. This then in return means that one can use less or smaller resolution textures, or simply have a better texture resolution.

There is one mayor issue with mirroring UVs though, both sides will look the same, which can make the textures look less interesting. Procedural textures especially stand out in a bad way, when mirrored.

For this reason, applying the mirror beforehand is often needed for specific designs or to make textures look more natural around the midline. For example, one wouldn’t mirror the UVs of a character’s shirt if it has some text on it, or when the character’s face has a scar. A disadvantage of applying the mirror before UV mapping, is that it’s a lot harder to do changes on the model from that point on and making a backup before applying mirrors is essential.

The solution is quite simple, one has to mix it up. Objects that connect at the middle and mirror from left to right should generally not have stacked UVs, but when the mesh is farther away from the middle, stacked UVs are more ok. This obviously depends on the texture map budget and if it’s important to have only a few and lower resolution textures, then one should probably mirror as much as possible. Another interesting option is to only stack the UVs of parts of the mesh of an object. One could run UV splits around the shoulder joint of a jacket, apply the mirror, and then unwrap the center part and the right arm. One would then use some stacking tool to stack the UV shells of the left arm onto the right arm. (This method however comes with its own set of problems and should only be used if UV space optimization is key.)

Just don’t get too paranoid about mirroring, as when looking at characters in game from normal viewing distances, it’s hardly noticeable that the UVs were mirrored, so saving the texture space is mostly the better option. And for the film industry, there is absolutely no reason to ever stack UVs.

Tip

It’s good practice to try to keep an edge loop running down the center line, even if one doesn’t want to mirror the UVs, so one can later on change one’s mind on it (this matters less for hard surface objects and is more important for deformation objects that have complex topology).

Some Helpful Things for Mirroring UVs :

  • A good workflow is to apply mirrors for all objects and then to stack UVs with tools that search for same UVs and stack them
  • Don’t place seams for both sides. Either place them before mirroring or symmetrize the topology, so both sides have the same seam

Video about mirrored UVs

Margin & Padding

Edge Padding Polycount wiki

Padding is an important component of UV mapping, it prevents texture bleeding, which will be visible as seams on the model. Proper padding is also important for getting nice bevels when baking.

When one refers to margin, one is talking about the distance between every UV shell, while padding refers to the distance between all the shells and the texture borders.

The amount of padding depends on the texture resolution. It also depends on how much downresing will happen. If the highest resolution of the texture is 4k and there is a low setting which downreses / mips the texture to 256px, then more padding is needed. The way the texture will be viewed also important, if it’s a roof tile on an atlas environment sheet, that’s viewed from extremely intense angles and will be mipped / filtered to hell, then more padding is generally good.

Recommended paddings & margins

Padding is per shell, so a padding of 2px will result in a 4px distance between 2 shells.

Texture Map SizeRecommended Padding
4096px16px - 32px
2048px8px - 16px
1024px4px - 8px
512px2px - 4px
256px1px - 2px
128px0.5px - 1px

It’s totally fine to have a margin of 1px as there can’t be any bleeding onto other UV shells at the edge of the texture. The only reason one would want more margin, is to make texturing easier, or to make the UV unwrap look better.

Baking software often adds a margin of its own, if your baking software does this, disable it.

Straightening UV Shells

There are three reasons why one would want to straighten UV shells; to optimize texture space because straightened shells can be fitted together more tightly, to make texturing easier (like specific texture patterns or hand painting methods) and to make the UV unwrap look more beautiful.

Straightening UVs comes at a cost though, a small distortion. This distortion really isn’t that bad, but is why straightening shells is very popular in the game industry, and less needed in the film industry, as texture space isn’t a problem there.

A simple Blender add-on that can do this is UV Squares (it needs quad topology to work). Here’s a video by Josh showing it in action:

Texel Density

Texel density describes the amount of texture resolution on a mesh. In the same way that pixels are the smallest unit of a screen, texels (short for texture elements) are the smallest unit of a texture. The bigger the UV shell, the more texel density it has and the more texel density, the higher the resolution of that area.

In general, the texel density should be consistent across the entire model. Different meshes with varying texel densities next to each other, will be very noticeable. That said, there are times, where one can break this rule.

Different meshes with varying texel densities next to each other

For example, let’s say we make a character like Samus, and we know, that there will be many close up shots of the face in addition to the face being an area where the eye often gravitates to, then it can make sense to increase the texel density for that area. And because Samus (suit) only shows skin down to the neckline, the shift in texel density won’t be too noticeable. One could quite literally add in some sort of neck choker just to hide the texel density shift.

Different texel densities across multiple UV shells that are on the same mesh, can cause problems while texturing with procedural materials, for example.

Here’s a chart of different texel densities, how they are calculated and what they are used for:

Texture
Resolution
Divided by Standard UDIM Unit
(Project dependent)
normally 100cm (1m)
Texel Density
in
px/cm or px/unit
Used ForDensity Category
128px➗ 100cm 🟰1,28Strategic Camera🟥 Low
256px➗ 100cm 🟰2,56Strategic Camera🟥 Low
512px➗ 100cm 🟰5,12Third-Person Camera🟨 Medium
1024px➗ 100cm 🟰10,24First-Person Camera🟩 High
2058px➗ 100cm 🟰20,48First-Person Weapon and Arms🟩 High
4096px➗ 100cm 🟰40,48First-Person Weapon and Arms🟩 Very High
8192px➗ 100cm 🟰80,96🟩 Ultra High

Texel density consistency between different artists and models in the scope of a project or game is key. The trick to staying consistent but also varying the texel density is to split up the environment into different priority / density groups, as seen in these images: images by Leonardo Iezzi and Nicky Cry

Priority / Density GroupDescription
🟩 High 🟩Places the player can easily get close to
🟨 Medium 🟨
🟥 Low 🟥Background + Far away assets

This concept doesn’t only apply to environments, but can also be used for characters, where areas like face, hands and weapons have an increased texel density.

All the things that affect the choice in texel density are :

  • Camera perspective
  • Distance from camera to asset
  • Hardware goal
  • Art style

As discussed before, the size of the UV shell affects the texel density, so scaling up or down a UV shell, will increase or decrease the texel density for that UV shell. Of course, in an actual pipeline, this isn’t done by hand but by tools.

If you’re using Blender, you should first make sure that all the low objects have their scale transform applied, as that will mess with the texel density.

After UV unwrapping, all the objects will have the same texel density. The next step is adjusting the texel density, for that the add-on Texel Density Checker is used. For information on how to use that add-on, look at the videos at the top of this Texel Density section, or take a look at their short GitHub documentation

**Some more things worth mentioning: **

  • It’s also very important to always scale UV shells evenly along all axes, not doing so will result in distorted textures.
  • The simplest way to see texel density inconsistencies, is with the help of UV checker maps.
  • If you notice, that you screwed up the scaling of some of your shells, then there are some easy ways to fix it. Firstly, re unwrapping the affected UVs will give them the same scale again. A much better way of doing it, that doesn’t require re unwrapping, is by selecting the affected UV shells in the UV editor and clicking UV > Average Islands Scale.
  • If you notice that you simply can’t get things to look crisp with your texture budget, even after optimizing everything, then as a last resort one can start sacrificing the detail of some UV shells to have more space in return to scale up those UV shells that really need it. This is not a very professional way of doing things and should be used as a last resort

UV Packing

UV packing is the last step of the UV process, but occasionally packing beforehand can be helpful, to get a feel of what still has to be done. The goal with packing is to fit all UV shells as densely together as possible, so all shells can use more of the UV space and have more texture resolution.

In the game industry, UV packing is done with packing algorithms. For the film industry this is not always the case though, here’s a video by Flipped Normals explaining the benefit of packing by hand.

Blender has a built-in packing algorithm, but its functionality is quite lackluster (UV > Pack Islands). Clicking on it will open a menu with some packing customization options.

What I recommend using, instead, is UV Pack Master. It’s able to pack much more efficiently and has many more vital packing options. It has a free and paid version, but I think the paid version is well worth it. More on how to use UV Pack Master here.

Good UV Unwrap Examples

To-Do

UV Pack Master

UV Pack Master has quite a lot of settings that help to achieve the perfect pack. The official documentation is here.

Zen UV

Zen UV is a wonderful UV unwrapping tool, I’ll cover it at some point. Here’s the channel of the add-on’s creator.