Sign in to follow this  
toby23

GUIDE - Mipmapping and Optimising Textures

Recommended Posts

Guide to mipmapping textures for flight simulation


By Toby Rayfield 27/06/2015

 

 

Updated 02/07/2015

- Flipping Section added for BMP to DDS conversion

 

 

CONTENTS

I. Texture Compression

II. Texture Formats

III. Tools you will need

IV. Why would I want mipmaps anyway?

V. How to check if a texture needs converting

VI. How to add mipmaps using Imagetool

VII. Resizing and converting textures using Photoshop

VIII. Texture Dimensions and File Size

IX. Saving a DDS in Photoshop

X. Filesizes as an indicator of optimisation

XI. Which textures can I convert?

XII. Naming Conventions

XIII. Saving a Bitmap as DDS in Imagetool

XIV. Batch Commands

 

 

Texture compression

There are two types of texture compression that should be used, which will allow you to balance file size with function.

 

DXT1 textures are for textures with no alpha channel, or a pure black or white alpha channel.

DXT5 textures are for textures with greyscale Alpha layers

 

DXT3 textures should not be used as they show compression artifacts in the final image.

 

Texture Formats

Textures come in various formats, the two most common found in flight simulator add-ons  are BMP and DDS format. Both formats can use DXT1 or DXT5 compression.

 

More information about these formats is available here (http://www.prepar3d.com/SDKv2/LearningCenter/modeling/texturing_aircraft_%20models.html). 

 

BMP's were used in older versions of Microsoft Flight Simulator but with the introduction of FSX, Microsoft changed to the more efficient DDS format. BMP files still work in Prepar3d but are not recommended.

Quote P3D SDK: The DDS format allows images to be compressed with greater efficiency and flexibility than formats such as BMPs

 

If you are interested to learn more about how textures work, I highly recommend the SDK link above as a starting point.

 

Tools you will need

1. ACES Imagetool - included with the FSX/P3D SDK, more information about this essential tool here


2. Adobe Photoshop

3. Nvidia Texture Tools for Adobe Photoshop (https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop)

 

While there are many other tools out there, these are the ones I will discuss and recommend.

 

 

 

Why would I want mipmaps anyway?

In the image below, you can see unmipped and uncompressed gauge textures. Do you see how the lines appear unclear? In motion, it is much worse as the lines appear to vibrate and distract from the flight. This is because there are no mipmaps, so the computer displays the original raw and uncompressed image. As I am not sitting at exactly the correct distance from this texture, it cannot display the texture correctly, hence the unclear image.

 

 no-mip.jpg

 

In this second image, the gauge textures have been mipmapped. While they appear blurry in this cropped image, in the sim, they are clear and easily readable. If I had to choose between the two, I would choose the mipmapped version. As the texture now has mipmaps, the computer can choose which version is the optimal one for my distance from the texture.

 

mip.jpg

 

!! Before you start editing textures, always create a backup of the textures that you want to edit !!

 

How to check if a texture needs converting

1. Open Imagetool

2. Open the folder containing the textures you would like to optimise

3. Drag the texture onto the open window of Imagetool

One of the following things will happen:

 

imagetoolerror.png

 

imagetoolsuccess.png

 

If the image won't open in the official texture tool, imagine the problems that this could cause for your simulator. While the textures might display without crashing the sim, who knows what this might cause to happen behind the scenes.

 

All of my textures open in Imagetool. So I see no reason why anyone should provide textures that don't.

 

Textures can be saved, compressed and converted in a way that they appear correctly in the sim and do not open in Imagetool but if a texture opens in Imagetool, then it is correctly formatted and adheres to the official SDK format guidelines, which is what we're aiming for.

 

6. In the second image above, you can see on the right, under the information tab, that the image is 4096x4096 pixels large, has DXT5 compression, it is unknown if the image has an alpha channel and the image contains no mipmaps (1 Mip Level is the texture).

 

7. If I now open this texture in Photoshop, using the options selected below for opening DDS files, I can see that it does have an alpha channel, so I know that DXT5 is the correct format for this texture.

 

NVIDIAtoolopendialogue.png    alphachannel.png

 

8. As this image is already in the correct DDS format, I now have two options, I can resize and save this file using Photoshop or I can convert it and add mipmaps using Imagetool. I will explain both methods below. It depends on personal preference, normally it is easier to batch convert multiple files with Imagetool but if you need to resize as well, then you will need to use Photoshop. Note that batch methods can be used in both programs effectively. I find it easier to create batch tools in Photoshop to automatically process large amounts of textures.

 

!! Before you start editing textures, always create a backup of the textures that you want to edit !!

 

How to add mipmaps using Imagetool

- Open the image in Imagetool

- Select 'Image > Create Mipmaps' from the menu bar

 

imagetool-create.jpg

 

Congratulations, you have now added mipmaps to the texture

 

imagetoolmippeddda45.png

 

Close Imagetool and save the image when prompted.

 

The ideal size for textures in the FSX/P3D engine is 1024x1024 pixels. As this image is 4096x4096, it has not been fully optimised. As shown in the image below, the mipped version is 5mb larger than the non-mipped version, so we still need to resize this texture to fully optimise it.

 

mippedbutnotresized.png

 

Resizing and converting textures using Photoshop

1. Open the original .dds image that you want to optimise in Photoshop, using the options as shown in the image below, when asked.

 

NVIDIAtoolopendialogue.png

 

2. Select 'Image > Image Size' in the Photoshop menu bar.

 

 resize.png

 

3. Enter your preferred size in the entry field, choose between 1024 or 2048, and select a resample method.

I use 'smooth gradients' as 'sharpen' adds halos around lines, as shown in the zoomed in images below.

 

smoother.png

 

sharper.png

 

Texture Dimensions and File Size

Textures should be 1024x1024 pixels. As the examples above show an external aircraft texture and I am prepared to spend a bit more VAS having nicer looking textures on my aircraft, I chose 2048x2048 pixels. 4096x4096 is uneccesarily large for these kind of external livery files and it will also take a long time to save the DDS file.

 

Normally an aircraft will not contain more than 2 main texture sheets, which is why I can justify using 2048x2048 for these two textures. An airport is a different matter as that has many textures, maybe as many as 50 and if half of them are 4096x4096, you shouldn't be surprised when you run out of VAS and the sim crashes.

 

2048x2048 should always be enough for your favourite textures, use 1024x1024 for everything else, unless the original file is smaller, then leave it as it is.

 

Saving a DDS in Photoshop

Now, all we need to do is save this texture as a DXT5 DDS file.

 

1. Choose 'File > Save As' from the Photoshop Menu Bar

2. Select the format D3D/DDS (*.DDS;*.DDS), check that Alpha Channels is checked and click Save.

 

savemenu.png

 

Next, another window will open, from the NVIDIA plug-in. Set up the options as below and click 'Save'. Do not change any of the other options.

 

savedxt5dds.png

 

Congratulations, you now have an optimised texture.

 

If you were saving a texture without a greyscale Alpha Channel, then you would select DXT1 format from the drop down menu.

 

In the image below, you can see the results of various resizing and compression on file size and, hopefully, can understand why I chose the 2048x2048 DXT5 DDS option for this external texture.

 

optmisedsizes.png

 

Filesizes as an indicator of optimisation

You can use Windows Explorer to filter a folder of textures by size to quickly see if your newly purchased add on uses mipmapped textures or not. The following file sizes will normally indicate correctly mipmapped files.

 

43 kb

86 kb

171 kb

342 kb

683 kb

1366 kb

2731 kb

5462 kb

 

Anything else is either incorrectly optimised or a special texture, which we will come to in a minute.

 

The following image shows correctly optimised texture file sizes.

 

correctlymippedfolder.png

 

The next image shows incorrectly optimised texture file sizes. You will get the idea quickly enough but basically anything that you see with a filesize of 1025 kb, 4097 kb or 16,385 kb is incorrect and needs optimising. 

 

incorrectlymippedfolder.png

 

Which textures can I convert?

As mentioned previously, certain kinds of textures should not be converted or optimised. Environment maps (reflections), fresnel_ramps, bump maps, specular layers and prop textures should be left alone. While these textures can be optimised, it is beyond the scope of this document, to teach the techniques involved.

 

If you want to try converting bump maps, which are often delivered in 4096x4096 and therefore VAS consumers, you need to convert the file to 32 bit, if not already, then resave as DXT5 DDS. To avoid any artifacts or loss of quality, you would normally create a new bump map from the optimised texture that you have created instead. Read more about bump maps in the P3D SDK Documentation in the link at the very top of this document.

 

Naming Conventions

The SDK recommends  the following naming convention for textures:

ModelName_TextureNumber_Suffix.Extension

 

The Suffix _T is normally used to indicate an external texture.

Most developers use a version of the following suffixes but many don't. It is up to you to check each texture before you convert it.

 

The suffixes for each type of texture are as follows:

Diffuse Map: '_T'

Specular Map: '_T_Specular'

Bump Map: '_T_Bump'

Emmisive Map: '_T_LM'

 

A diffuse map is a regular texture, for example, the outside livery of an aircraft.

A Specular map is used to define how and where a model reflects light, e.g. the shininess of metal.

A Bump Map defines the 3d elements of a texture, for example, rivets and panel lines.

An Emmisive Map displays flat textured lighting effects, as seen on the tail of an aircraft at night.

 

Below is an image showing these types of files and how they might be named.

 

donttouch.png

 

Saving a Bitmap as DDS in Imagetool

Bitmaps in DXT1, DXT3 or DXT5 format have already been compressed. If you convert them to DDS format, you will compress them more and create visual artifacts, which can be seen as pixelated blocks in the textures. In this case, you only need to select the 'Create MipMaps' option and save the file.

 

If the Bitmaps are uncompressed and in 32 bit format, then you can convert them to DDS format without worrying about losing quality.

 

You will see a wide variety of incorrectly formatted textures. In the screenshot below, you can see a 32 bit BMP with 3 mip layers and an alpha layer open in Imagetool.

 

imagetooluncompressedbmp.png

 

If I select 'View > Alpha Channel' from the menu, I see this. An alpha channel with black, white and shades of grey. The correct format for this texture is DDS and it should be compressed using the DXT5 method.

 

imagetool-alpha.jpg

 



BMP textures need to be manually flipped by the CPU before they can be displayed in the simulator. DDS textures are already flipped, which reduces the work that your CPU needs to do before it can display the texture.


 

If we save a BMP in DDS format, the image will be flipped and will appear upside down in the simulator, as the developer mapped the texture to the model the other way round. To compensate for this, we need to flip the texture, before optimising it, so that it will display correctly.

 

!! Before you start editing textures, always create a backup of the textures that you want to edit !!

 

As Imagetool does not have a menu option for flipping textures, we will use the freeware DXTBMP tool from Martin Wright.

 

Flipping Images in DXTBMP

Open DXTBMP and drag the BMP that you want to convert to DDS onto the open DXTBMP window, as in the image below.

 


dxtbmp1.png

 

From the menu bar, select 'Image > Flip Image and Alpha', as shown in the image below.

 

dxtbmp2.jpg

 

From the menu bar, select 'File > Save' and, in the window that pops up, check that Save as Type is 'Extended 32 bit 888-8' as in the screenshot below, add the appendix '_flipped' to the filename and click Save.

 

dxtbmp3.png

 

Close DXTBmp, we have now finished using this tool.

 

You should now have two files, the original and the flipped version, as below.

 

dxtbmp4.png

 

Open Imagetool and drag the _flipped.bmp file onto the open window, as shown below.

 

dxtbmpimagetool5.png

 

In Imagetool, select 'Image > Format > DXT 5and then 'Image > Create MipMaps'.

 

imagetool-dxt5.jpg

 

Which gives the following result..

 

dxtbmpimagetool6e80cd.png

 

Now Save this new texture with the extension .dds and close Imagetool. This texture is now optimised.

 

Do not forget to remove the _flipped suffix before copying this file back to the specific texture folder.

 

The simulator looks first for DDS files, then for BMP files, so there shouldn't be any problems with conflicting files but as we want to do this correctly, you should remove the original BMP file from the specific texture folder as well.

 

If I compare the filesizes of these textures in Windows Explorer, I see this..

 

dxtbmpimagetool7.png

 

This texture was for a windsock. A relatively small part of an airport but one of 300 textures provided in a 'general texture' folder for an airport. If we work out how much VAS these textures would consume if loaded into memory...

 

The original uncompressed textures require 300 x 5.3mb = 1.6 Gigabytes of VAS to display

The optimised compressed textures require 300 x 1.3mb = 409 Megabytes of VAS to display

 

I know which ones I want to use.

 

Batch Commands

You can automate the conversion process by using so-called batch files in either Photoshop or Imagetool.

This next section will explain how to create and use batch files.

 

Imagetool

1. Create a new folder on your desktop called MIP IN

2. Create a copy of Imagetool.exe in this folder

3. Open Notepad++ and paste the following text into a new document:

ImageTool -nobeep -brief -DXT5 -mip -e BMP *.bmp

4. Save this file in your new MIP IN folder and call it 'mip BMP as DXT5.bat'

5. Copy the BMP texture that you want to convert to DXT5 to the MIP IN folder and double click on the .bat file.

6. The window below will briefly pop up, indicating that the process was successful

7. Congratulations, you have optimised a texture with a batch file

8. Check the file size for confirmation that the file has been optimised.

 

imagetool_batch.jpg

 

9. In the future, all you need to do is copy all of the BMP textures, with Alpha channels, that you want to convert to DXT5 format to the MIP IN folder and double click the .bat file.

 

Below is another example that can be used to create mipped DXT1 BMP files.

 

I. mip BMP as DXT1 No Alpha.bat

ImageTool -nobeep -brief -DXT1 -mip -e BMP *.bmp

 

I do not recommend trying to use Imagetool to convert .dds or .psd files as the files are not viewable in Imagetool afterwards. Imagetool can generate DDS files from 8 bit .psd files but why would you do this if you have Photoshop. 

 

Photoshop

1. Open Photoshop and in the 'Actions' tab, click on the drop down menu and select 'New Set...'

2. Name this Set 'Texture Conversion'

3. With this Set highlighted, click on the drop down menu and select 'New Action'

4. Name this Action 'Resave DDS as DXT5 mipped'

5. Press the record button on the bottom of the Actions tab

6. In the menu bar, select 'File > Open' and select the .dds file that you want to convert in Photoshop using the options shown below.

 

NVIDIAtoolopendialogue.png

 

7. In the menu bar, select 'File > Save As' and choose D3D/DDS format, as shown previously in the section Saving a DDS in Photoshop.

8. Close the image and press the Stop button on the bottom of the Actions tab

9. To test this batch file, or Action, create a new folder on your desktop called 'MIP IN PSD' and copy a couple of unoptimised DDS files to this folder.

10. Create a new folder called 'MIP OUT PSD' on your desktop.

11. In Photoshop, in the menu bar, select 'File > Automate > Batch' and set up the folders and options as below. Click the Choose button and set your 'MIP IN PSD' folder in the top part and select you 'MIP OUT PSD' folder in the bottom part.

 

batchpsd.png

 

12. When you click OK, the batch will run and automatically Open and Convert any files that it finds in your 'MIP IN PSD' folder. We created a 'MIP IN PSD' folder to avoid any conflicts with BMP files in your MIP IN folder.

 

Using these very powerful tools, you should find it easy to create your own Actions to carry out the following automated processes for you. Just apply a logical step by step process and learn from your mistakes and experiments.

 

Actions.png

 

The biggest tip I can give you is to backup your texture folders before you start any kind of optimisation.

Good Luck and happy mipping..

 

Toby

 

This document is dedicated to all of you..

 

Share this post


Link to post
Share on other sites
Help AVSIM continue to serve you!
Please donate today!

While I agree with your guide, I don't agree that it's worth spending time converting .bmp textures to .dds for any additional performance. The performance difference between the two is negligible with today's equipment. Also, if it were to make that much difference, ACES would have used them exclusively in FSX, but they didnt. There are many .bmp format files being used by default and aftermarket, like ground textures for example. Even ORBX and GEX in their ground tile replacement packages use .bmp.

 

If I remember correctly, I think the only reason any .dds format files are used in FSX is for models that have speculars/bump maps which .bmp format doesn't support.

 

For people to spend a lot of extra time to go covering all their AI textures to .dds or other .bmp files, they aren't going to notice any performance increases. Mip mapping yes, but .bmp to .dds no.

Share this post


Link to post
Share on other sites

Applaud the author's hard work in putting together this guide.

 

I agree that just looking at the file specs, I can't see any reason for dds format DXT1 and DXT5 texture maps to be any different than bmp format, other than of course the pixel ordering.  Now I guess the dds header provides more info than the bmp header, so may be more useful in decompressing but like you say I think the real benefit of dds headers is in dealing with things other than texture maps, like cube maps or environment maps.

 

Another observation is that DXT compression relies on the algorithm used to pick the color values in a texel-block.  I don't know if there is any way to tune the algorithm used in the NVidia plug-in, or how one would determine which method is "better".  Same thing with mip-mapping which is a sub-sampling and sensitive to the algorithm used.  Author seems to have determined Bicubic/smooth gradient is optimum.

 

scott s.

.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this