Skip to main content

UV Unwrapping and Texture Baking

Although the original cottage model had been UV unwrapped, there was still some work needed to clean up the UV tiles for the low poly asset.

UV Mapping

Unreal Engine relies on good quality UVW mapping and not solely for texturing purposes.  Lightmap coordinates rely on these maps to calculate light accurately and certain effects rely on unwrapped UV maps to work correctly.

As well as reducing the poly count, I had to redo a lot of the UV unwrapping and fit the UVs across 5 tiles being sure to maintain Texel density.  Texel density is the consistent uniform scaling of UV shells across an asset in relation to its 3D world scale which maximizes texture resolution per pixel.

Something to keep in mind is that high poly meshes do not require UV information if they are being used for baking purposes.  System performance can increase greatly when your scene is not full of high poly meshes with UV data.  Therefore, it is a good idea to delete this information before baking to the low poly meshes.  It is important that you do not delete the UVs on the low poly meshes.

In Maya, a combination of planar and auto UV projection was used.  The Unfold and Optimize tools were then employed to unwrap the UV shells.  Layout UVs (Modify > Layout>Options Box) was used to make sure the UVs were sized in proportion to their 3D scale ratios.

Layout UVs options box in Maya

Baking Ambient Occlusion Maps

Ambient Occlusion (AO) maps can be baked out in Maya with the Turtle renderer.  They have traditionally been used in the game industry to fake shadow and lighting details as well as emphasising contact shadows in tight areas.  Alternatively, AO maps can be multiplied on top of the albedo/colour map with adjusted opacity to subtly add dirt or dust in occluded areas.  For Skeletal Meshes it is probably best not to bake in AO but instead to rely on Unreal Engine’s Global Illumination or SSAO (Screen Space Ambient Occlusion) which is calculated in real time.

I will not be using animation on my assets as my level will consist solely of Static Meshes.  I decided to use the Turtle Renderer to bake out AO maps as there does not seem to be the option to bake to texture maps using Maya's default renderer, Arnold.  Also, the Transfer Maps tool used to have an AO bake function, but this relied on the mental ray renderer which Arnold replaced in Maya 2017.


It is a time-consuming process and there are faster alternatives for pre-baking out AO maps.  3D painting software such as Mari and Substance Painter can generate relatively fast AO, but these are rarely useful for getting fine details onto your game ready meshes and are mostly used for creating quick dirt maps.  There’s a speed vs quality decision to be made when it comes to creating textures for game engine assets, but if an Arch Viz studio does have the time and hopefully a dedicated texture artist, it is worth taking that time to bake out good quality utility maps such as Ambient Occlusion, Height and Normal maps.  This extra attention to detail will go a long way to selling the architects idea and production value to clients/stakeholders.



TURTLE bake settings for AO map

Depending on the complexity and number of meshes making up the asset to be baked, this can be a lengthy process.  It would have been nice to set up all my bakes and let Turtle render out multiple maps overnight while I did not need my workstation.  Unfortunately, I could not find a way to set up Turtle to batch render out the baked maps.  There is a Turtle Bake Layer option, but I didn’t have time to investigate this further.

AO map applied to the colour input of a shader to preview the window asset in the viewport


To get good quality AO maps, meshes need to be baked separately and then put together in Photoshop to complete each UV tile.  Sometimes separate meshes can be combined but only one piece of geometry should be baked per render or else errors can and will occur.   I employed Mari’s UDIM multi-tile UV naming convention by adding the .1001 suffix for maps taking up the 0,1 UV space, .1002 for the 1,2 UV space, and so on.  It would be nice to use only one UV tile for all the unwrapped geometry, but the resulting resolution would be too high for Unreal to deal with.  Apparently, there is an 8K maximum resolution limit per tile within Unreal.  Until systems become more powerful, it is good practice to use smaller resolutions of 4K and under per tile as it does not put as much stress on the end user’s system and graphics card.

Looking into this further, it seems that Mighty Bake could be a better and time-saving option for baking out maps.


I also discovered a Python script on earlyworm.org that sets up multi UV tiles for batch bake rendering but this will need modification to work with Turtle.



Baking Normal Maps



Due to time limitations, I have decided not to bake out normal maps for all the geometry making up my asset.  Although, for textures like bricks and the roof tiles I have baked out high quality maps using the 16-bit TIF file format.  I will have to investigate whether TIF files are supported in Unreal but according to Tom Shannon in Unreal Engine 4 for Design Visualization, the TIF format is not on the list of supported file formats.

The process within Turtle is similar to baking out the AO maps, only you have to select the Normal map option and change the save file names accordingly. 

Normal map baked from high poly roof tile geometry onto a lowpoly mesh


Supported File Formats


The TGA file format is the game industry standard for 8-bit images and PNGs are used mainly for utility maps (AO, Roughness, Metallic, etc.)

Other supported formats include .bmp, .float, .pcx, .psd, .jpg, .exr, .dds, .hdr

Comments