Tutorial: UDK MipMaps for the Environment Artist.
Often times when importing a static mesh into an environment using the Unreal Development Kit, its easy to glaze over a setting that makes a real impact, especially in large scale environments.
What are Mipmaps?
As a texture becomes distanced from the player, the engine will swap out smaller version to better optimize the scene. Mips are calculated in steps, meaning a power of 2 resize of your imported texture from the textures original size to a very small thumbnail. This is done by default for every texture imported and set to the default of From Texture Group, which will use recommended settings from the LOD group you selected when importing the texture. While this is fine for a default, its hardly optimal for every situation. Take the following:
This dumpster looks good close up.
Yet from a distance we can see that it loses a lot of that detail.
While we can’t help the fact that the dumpsters texture resolution will go down in texture quality over distance, we can change the mipmaps settings so it degrades differently. Here is the same shot with a sharpen setting used over the default.
Notice the way the metals have more contrast to them instead of blending together. Since metals keep their contrast over distances, this will help us in making the mesh look more true to life over looking fuzzy and muddy.
Settings
Double clicking on a texture will bring up a list of settings. Down at the bottom, the mipmap settings can be found. I usually use one of three settings depending on the situation.
Sharpen – These are my most used settings. I generally use either Sharpen 5 or Sharpen 8 for many of my textures. The major difference between the sharpen values the is how they affect the dark areas of your texture. In many cases using a value above 8 can look weird or unnatural, however consider the case below:
This wall looks fuzzy when viewed from a distance. This is unfortunate because i’d like to show off all the dirt I painted into the texture. Changing the mip settings to sharpen 10 brought out a lot more of the ware.
No Mipmaps – This will disable mips all together, meaning your texture will show at the highest resolution no matter the distance. This is generally not recommended for general use, as it is an abuse of the texture pool. However, I’ve found that for portfolio uses it can be a useful kluge fix. Take the following example.
I built grass cards on low-poly planes using a 512 x 512 resolution. This means my mips blur and destroy my alpha and don’t give me a silhouette that works for what it is I needed to do. Since this piece was for show, I disabled the mips.
For what it is that I needed to do, this will work. However, this is not to be used on every texture. If you are trying to get better quality textures in your renders, use the –maxqualitymode startup parameter when launching the UDK game. To do this, right click on the UDK game icon and add -maxqualitymode at the end of the target line. (…\UDK.exe -MAXQUALITYMODE)
Blur – The only case I’ve found to use the blur settings is in image reflections for non real time reflections. Depending on the shader you have setup to do this, the difference may or may not make a dramatic impact.
LODGroup and LODBias settings
Setting the LOD group isn’t noticeable in game, but tells the engine some specific information about how to degrade the texture on more limited systems like consoles or mobile. Furthermore, each texture group has a max texture display setting reflected in the texture info section.
The max displayed in game can be adjusted using the LODbias setting. This can be used to step through the mips to display lower resolutions of a texture by default. These changes however, won’t be noticed until the package file is baked.
In closing, using sharpeing mip settings in some places can improve the contrast of your scene over greater distances and add some additional details to your overall renders. If you are looking for more information on Mips and there settings, I recommend looking in the following places on the UDN:
Pingback: UDK MipMaps » lolwithtims blog