Microsoft ESP 1.0

Texturing Aircraft Models

This document provides detailed information on the creation of textures for aircraft in ESP.  It is recommended that this document be read in full before starting on a new aircraft project. A high level of expertise with Adobe Photoshop is required to author the textures, and a high level of expertise with 3ds Max to apply those textures to a 3d model.

See Also

Table of Contents

Texture File Formats


The DDS format is required for aircraft textures. DDS (Direct Draw Surface) images are generally created using an NVIDIA plug-in for Adobe Photoshop, which can be freely downloaded from the NVIDIA website. The DDS format allows images to be compressed with greater efficiency and flexibility than formats such as BMPs. It is also more universally accepted across the real time 3D gaming industry and is supported and recognized by many more image modification and creation packages. It is hoped that users will have an easier and more flexible experience using DDS images than the previous BMP format. The DDS format allows for the use of Alpha channels and for mipping.


Using the DDS format, a user will be able to save images using several different compression schemes. These will allow the user to balance file size with function. The supported DXT(n) options, available using the NVIDIA DDS plug-in, are as follows:

DXT1 DXT1 is recommended if the image in question employs a 1 bit Alpha channel (only Pure Black and Pure White)
DXT3 DXT3 and DXT5 should be used for images which employ 4 or 8 bit Alpha channels (16 or 256 grayscale levels). DXT3 and DXT5 both end up using the same amount of disk space when compressed, however the DXT5 compression scheme employs a better algorithm to compress the Alpha channel. DXT3 images can include some rather unsightly compression artifacts in the Alpha channel.
DXT5 Use the DXT5 option for any image where the Alpha channels bit depth needs to be 8 bit.

DXT2 and DXT4 do exist, however they are not supported.

PSD (Layered)

PSD files are layered image files which are native to Adobe Photoshop. This is the format used to originate all the textures for the simulation. PSD files cannot be read by ESP, so they need to be saved as non-layered DDS files before being used. Alpha channels (used for Reflection maps, Specular falloff maps and for Opacity maps) included in PSD files are retained when saved as DDS files.

Note that it is possible for PSD files to include more than one Alpha channel, however the use of only one Alpha channel is supported. If more than one Alpha channel is present in a PSD when it is processed, the image processor will choose one of the Alpha channels and discard the others. The only sure way to control which Alpha channel is used is to remove the ones you do not want, before saving the file.

PSD files are very flexible and enable the application of a broad array of functions to be carried out on them within Adobe Photoshop. We recommend that painters use them as the original source format for their textures. We also recommend that these source files be retained in their original, layered form so that variations of the original texture can be created from them more easily.

3ds max and Adobe Photoshop plug-ins

The 3ds max and Adobe Photoshop tools used in the production process are enhanced by the addition of a few plug-ins. In order to apply textures to a model at all, first lay out the UV’s. This process is greatly helped by the inclusion of a plug-in for 3ds max called Texporter. This plug-in is freely available on the web through various sites and is version-matched to each version of 3ds max. In order to output Normal maps from Adobe Photoshop, we use the NVIDIA Normal Map Filter plug-in. This and a host of other ingenious (and very helpful) texture related plug-ins and utilities can be found on the NVIDIA developer site here:


Texture Map Types

For Aircraft, texture maps cannot currently exceed 1024x1024 pixels in size. However they can be smaller, as long as the dimensions remain a power of 2. It is also possible to make more than one of each map type for a single model. All textures should be created (and retained) as PSD files and then exported in DDS format for use in the simulation. To avoid performance degradation, it is recommended that all textures include mip-maps. Every texture will look better if mipping is disabled, however this will mean the full resolution texture will be displayed at all times and at all distances from the camera or viewpoint. This will seriously tax the rendering engine.

Diffuse Map and Alpha channel (reflection map)

The Diffuse map is the base RGBA texture. If Reflection, Specular and Bump maps are all disabled in the Display options dialogue in ESP, this texture will still be visible. For aircraft the Alpha channel in the Diffuse texture is used as the Reflection map. For a Reflection map, grayscale values in the Alpha channel define how reflective a surface will be. ESP uses the same grayscale range as previous versions; in other words in the Reflection map, white would be defined as completely unreflective and black would be defined as completely reflective.

There are two ways Reflection map values can be displayed. The material settings in 3ds max allow users to define whether those Alpha channel values are used to generate either a “gloss” or a “chrome” effect. The “gloss” algorithm takes the per-pixel values of the diffuse and environment maps and adds them to generate an end result pixel value which always ends up being lighter than the original value. This is useful for painted surfaces which would look less like chrome and more like a shiny surface.

The “chrome” algorithm takes the value from the Alpha channel and, depending on how reflective that pixel should be (defined by the grayscale value in the Alpha channel at that pixel), replaces the diffuse value with the environment map value. So, for a black area on the Alpha channel (fully reflective), the display engine would completely replace what is painted in the diffuse texture with what is in the environment map. This is not the same as adding the two values. The result will not move towards the white end of the spectrum; it will move towards a replacement of the Diffuse texture with what is in the environment map.

It is also possible to change the Material settings in 3ds max to define the Diffuse texture Alpha channel as an Opacity map. This setting is best used if the Alpha channel is a 1 bit grayscale image (pure Black and pure White only). Results using levels of grey (levels of Opacity) in the Opacity map are not always the best. If the Diffuse map Alpha is used for Opacity, the Specular Alpha is then used as the Reflection map. The Falloff map function is consequently disabled altogether.

Not e that this map will need to be specified in the map slot referred to in the 3ds max Material Editor as the Diffuse Color slot. Click the slot and define the path for the map.

Size:   1024x1024 pixels (or smaller power of 2)
Source Format:   8 bits per channel RGBA PSD
Build Format:   DXT5 DDS (or DXT1 DDS if Alpha channel is used as a 1 bit Opacity map)
Name:   Model name followed by “_T”; EG: Beech_Baron_58_T. PSD / DDS
Alpha Channel:   8 bit grayscale if for Reflection map, 1 bit grayscale if for Opacity map.

Specular Map and Specular Alpha channel (Falloff map)

The specular map controls the specular characteristics on a model’s surface. There are two components to the map; the RGB and the Alpha. The RGB component defines the color and brightness of the specular highlights and the Alpha channel defines the falloff for those specular highlights.

Falloff refers to the sharpness of the highlight. A light value in the specular Alpha channel will result in a sharper highlight, where a dark value results in a broader, softer-edged highlight. Combining the RGB and Alpha values in various ways will result in a wide range of surface specular characteristics.

Being able to control the specular characteristics in a texture allows for much more freedom and control when defining the differing specular qualities of various types of surfaces. Before the inclusion of Specular maps, one would have had to define specular characteristics on a per-material basis; the increased flexibility of being able to define values in a texture should allow painters to create some very exciting effects.

Note that this map will need to be specified in the map slot referred to in the 3ds max Material Editor as the Specular Color slot. Click the slot and define the path for the map.

Size:   1024x1024 pixels (or smaller power of 2)
Source Format:   8 bits per channel RGBA PSD
Build Format:   DXT5 DDS
Name:   Model name followed by “_T_Specular”; EG: Beech_Baron_58_T_Specular.PSD / DDS
Alpha Channel:   8 bit grayscale (Light values = sharp highlights, Dark values = broad highlights)

Normal Map / Height Map / Bump Map

Normal maps are RGB textures which are generated from grayscale height maps. Once generated, the Normal map cannot be edited (with much success anyway). The display engine uses the component color channels to define bumpiness on a surface. Ordinarily, each component color value (R, G and B) is designated as an X, Y and Z vector for the display engine to interpret and then render. In ESP, this has been changed somewhat and as a result Normal maps are not the same as those output by the NVIDIA plug-in. Most Normal maps tend to be 32 bit images in order to reduce compression artifacts. The Normal maps used in the rendering engine reassign the Red channel as an Alpha channel and leave the Green and Blue components unchanged. This saves disk space and aids performance.

For the purposes of texture creation, painters will make their maps as grayscale images which define height in terms of light and dark values. Lighter values represent higher points and darker values represent lower points. When a painter is ready to generate a Normal map from their height map, it should be flattened and any Alpha channels should be removed. There are several different settings which can be chosen in the Plug-in interface. We have found the best results usually come from leaving the settings at default and if anything, reducing the number in the Scale field to 1. See image below for the recommended settings.

Differences in relative height are best achieved by painting them into the grayscale rather than depending upon the Filter to exaggerate them. The Scale field mentioned above is a multiplier which affects all values in the image; much like a Contrast multiplier. When higher values are chosen in the Scale field, the results tend to become very strong, very quickly. Painting your grayscale map with care is always preferable, as is a healthy respect for subtlety.

Normal maps should be saved as standard, 32 bit (8 bits per channel) RGBA PSD files. After this, they need to be run through Imagetool and output using the following command line:

imagetool -nobeep -nomip -dxt5 -RedInAlpha -dds -nodither <path/filename>

Imagetool is available in the Environment Kit\Terrain SDK. The full list of switches is listed in Appendix I. If the tool is being used in a batch mode, add the -nogui switch. Note that this tool has been updated and ensure that you are using the latest version.

This map will need to be specified in the map slot referred to in the 3ds max Material Editor as the Bump slot. Click the slot and define the path for the map.

Size:   1024x1024 pixels (or smaller power of 2)
Source Format:   32 bit (8 bits per channel) RGBA PSD
Build Format:   DXT5 DDS file
Name:   Model name followed by “_T_Bump”; EG: Beech_Baron_58_T_Bump.PSD / DDS
Alpha Channel:   Remove from source file (PSD). Red channel used in build DDS file.

Emissive Map / Self-Illumination Map

The emissive map is a light map in the sense that it adds light to areas on an object’s surface which have been defined in the emissive map. Objects (including aircraft) are also affected by the lighting values in the rendering engine. When those lighting values become dark (at night), objects are darkened accordingly. In order to add the effect of light sources on surfaces, a painter will create and include an emissive map with the other textures for a given object.

Emissive maps generally take the form of mostly black images with specific areas of light painted in where the painter wishes light to be splashed on the model surface. Details (such as panel lines, rivets, etc) do not need to be included. If the base color is not pure black, the entire model will end up being slightly lightened. This is because the display engine employs an additive algorithm and any value lighter than 0,0,0 (black) will brighten the model when the map is engaged.

As with the other per-pixel maps, the emissive map uses the same UV’s as the diffuse map. It can be the same resolution, but it is recommended that it be smaller. Halving or even quartering the resolution of the original diffuse map is very effective since the emissive map displays mostly pools of light, which can actually benefit from blurring which results from a smaller texture resolution. A lower resolution also helps to bolster performance.

The emissive map effect includes color values as well as grayscale values. Any color values in the map will affect the model. This can be useful for colored lights, or anything else a painter may wish to explore. The Alpha channel is not employed in an emissive map.

If there is no need for an emissive map to be used, it does not need to be added. Some aircraft do not need areas to be lit since there may be no lights, or the lights may be located at points on the airframe where light splash will not occur. In these cases it is not necessary to include an emissive map at all. An emissive map which is all black would be the same as not having a map at all, since it would have no effect at all. There are four main choices in 3ds max which set the way the emissive map is employed:

Additive, AdditiveNightOnly, Blend and MultiplyBlend. There are the same four options with the postfix UserControlled.

  • The Additive option employs the emissive map in such a way that all values in the map brighten the object it is applied to. When Additive mode is chosen, the emissive map should be enabled all of the time, regardless of the ambient lighting values. Black on an emissive map set to Additive will have no effect.
  • Additive applies all the time, AdditiveNightOnly obviously only applies at night.
  • Blend is the third option for the emissive map mode. Here the map is displayed as per the other options, but is tied to the ambient lighting value. As that lighting value darkens, the emissive map effect is blended from a fully disengaged state (day) to a fully engaged one (night).
  • The Multiply Blend option is usually used to add colored tints to light colored, or white, gauge elements, and is progressively applied as it gets darker.
  • The Additive User Controlled option is usually chosen to enable light-splash on the aircraft’s surface so it can be engaged and disengaged as the lights are switched on and off. All the UserControlled options apply only when the Panel switch is turned on.

Note that this map will need to be specified in the map slot referred to in the 3ds max Material Editor as the Self Illumination slot. Click the slot and define the path for the map.

Map size:   Can be 1024x1024, but smaller resolutions are notably effective.
Source Format:   24 bit (8 bits per channel) RGB PSD
Build Format:   DXT1 DDS file
Name:   Model name followed by “_T_LM”; EG: Beech_Baron_58_T_LM.PSD / DDS
Alpha Channel:   Remove from source file (PSD); it is not supported.

Fresnel Ramp

The Fresnel ramp is a small RGB texture which is used to define both how opaque a reflection will be and what color that reflection will be across a range of incident angles relative to the viewpoint. The map itself is 256x4 pixels in size. The long dimension is the important one; it has a height of 4 pixels to offset the effects of mipping. Grayscale values in the ramp define the opacity of the reflection and the color information is used to color that reflection. Reflection in this case refers to any reflected light from a surface. The Fresnel ramp can be set to affect the Diffuse, Specular and Reflection on a surface, or any of them in any combination thereof. This setting is defined in the 3ds max Material Editor. See below.

The Fresnel ramp is created or edited in Adobe Photoshop and saved as a PSD with no Alpha channel. This map is then specified by clicking the button (circled above at top) and by defining the path to the map. The Fresnel ramp texture should be clearly named for file management and clarity, such as: Fresnel_Ramp.PSD / DDS for each aircraft.

Paths and Filenames

Texture filenames

Textures are named to match the model name and then given a number (if there is more than one) and a suffix to define each type of map. The general filename format for all map types is:



  • ModelName refers to the name of the model.
  • TextureNumber refers to the number chosen for the texture. This only needs to be used if there is more than one texture for a model.
  • Suffix refers to the map type (EG: Diffuse, Specular, Bump, etc).
  • Extension refers to the image file type (EG: PSD or DDS)

The suffixes for each map type are as follows:

  • Diffuse Map:  “ _T “
  • Specular Map:  “ _T_Specular “
  • Bump Map:  “ _T_Bump “
  • Emissive Map:  “ _T_LM “

By way of example, included below is a list of texture names associated with the exterior model of the Boeing 737-800. These are examples of the source files.

Diffuse Maps B737_800_1_T.psd
Specular Maps B737_800_1_T_Specular.psd
Bump Maps B737_800_1_T_Bump.psd
Emissive Maps B737_800_1_T_LM.psd

Texture Naming Duplication

Aircraft liveries all use the same model, but different textures. Since there is only one set of materials defined for a model (there is only one model file with the materials defined in it) the only way to allow for multiple textures to be displayed on that model is to give all of the textures the same set of names for each aircraft. In other words each texture folder for a given aircraft contains a set of textures which are named exactly the same way as the textures in other texture folders for that aircraft. If one were to browse the filenames of the texture folders for an aircraft, the texture files inside those folders would all look to be the same files, since their names are all identical to those in other texture folders for the same aircraft.

There is some potential for file overwriting in this scenario and care must be taken when livery textures are being saved. Protection against file overwriting is achieved by using different file locations. This is why there are several Texture.n folders for each aircraft.

Texture Folders

Aircraft textures all need to be placed into folders at the same level as the model folder. If multiple liveries are being included, then a separate folder will be required for each livery. These folders all follow a similar naming convention.

The base livery and all of the textures required for the model to display as desired should be placed in a folder named Texture.
All subsequent livery texture folders should be named Texture.n, where “n” refers to the designator used for each livery being added. It is not required for “n” to be a number; a text string may be used as well. These folders should be placed at the same level as the base texture folder. Below is an example of a typical aircraft file folder structure.

CFG file (Aircraft.cfg)

The Aircraft CFG file allows users to modify many parameters affecting aircraft performance and appearance. Among these are parameters which refer to liveries and how (or whether) they will be presented to users when the simulation is running. The top sections of each Aircraft.CFG include information which should be edited whenever a user wishes to add a new aircraft or edit an existing one. These changes indicate the location of the texture files, and how (or whether) to display information about the aircraft (or livery) in the Aircraft Selection dialog when running the simulation.

Below is an example of one of these sections in a typical Aircraft.CFG.

The lines highlighted in color all pertain to livery textures. They will not be color-coded in an actual Aircraft.CFG.

The top line (in blue) heads the section and so could be considered the “title” of sorts for the livery (for the purposes of this document anyway). Each livery will require another section such as this to be added and the “title” should have its own number appended after it. Adding another section can be a simple matter of cutting and pasting a previous section and putting it below the existing sections. The “title” will then need to be changed so that the number (in the case above it’s a “ 1 “) is changed to the next number available. In other words if there are already four sections like the one above and a user wishes to add another, they should make this number a “ 4 “ in their newly added section (4 is referred to here because the first of these sections in all Aircraft.CFG ’s is always headed with: [fltsim.0]. The fourth section would then be headed: [fltsim.3] and the fifth: [fltsim.4]).

The lines in red also need to be changed whenever a new livery is added. They will likewise need to be changed to match the information required whenever a new aircraft is added from scratch. The first two of the three red lines contain information which refers specifically to the folder where the livery textures are located. Without changing these lines, or if the information is not correct, the livery will not be displayed.

In the example above, In each case the number at the end of the line is a “ 1 “. This number will need to be changed to correspond to the Texture.n folder where the desired textures are located. So, if a user adds a new livery texture folder called: Texture.7, the number at the end of each of these two red lines will need to be changed to a “ 7 “.

The last red line refers to the basic description in the Aircraft Selection interface for each livery. The text included between the quotation marks will be displayed in the interface to designate the livery (“Variation” in this case is the same as “livery”).

Path independence in 3ds max

If the CFG is edited properly, the correct textures will be located. As such, it is not necessary to define the path or location of textures when they are specified in the 3ds max Material Editor. What is important is that the names be correct. See the section on Texture Filenames for more information.

Texture Configuration File

The Texture.CFG file defines a path to follow to look for missing textures. In the case of aircraft, there are some textures that are shared across liveries to avoid duplicating data. When a texture cannot be found in the default location, the Texture.CFG is scanned for a series of paths to search.

Below is an example of a typical Texture.CFG for aircraft.

The lines in the Texture.CFG specify texture paths in descending priority order. Using standard DOS syntax, Fallback.1 defines the path (for missing textures) as being up one folder level and in a folder there called Texture. Fallback.2 defines a path that is up four folder levels and in a folder path there specified as: \Scenery\Global\Texture. Fallback.3 defines a path which is up six folder levels and in a folder path there specified as: \Scenery\Global\Texture. Note that the above example does not include a path to the root texture folder, which would be ..\..\..\..\..\..\Texture. This folder does contain the default environment map (envmap.bmp), so adding this path might be helpful if this default texture is required.

The fallback texture folders do not have to exist.

The next section describes the three texture map types referenced in Texture.CFG files.


To receive warnings when one or more aircraft textures are missing, add the following line to the [Scenery] section of the ESP.cfg file. This file is in the Documents and Settings\<username>\Application Data\Microsoft\ESP folder:



Texture Maps and Layout

Common and Custom Textures

Some aircraft are too large to for one texture, and need another base texture sheet to improve apparent texture resolution. For efficiency, parts which were normally painted as part of a livery would be assigned to one texture sheet (Custom) and parts which would normally be left as the factory painted them, regardless of livery, would be assigned to the other sheet (Common). In this way we could minimize the impact of the second base texture on the display engine by only using one Common sheet for a single aircraft type.

For example; all liveried versions of the B737-800 use the same Common sheet, but the Custom sheet would change for each livery. So, in an airport environment, where there could be several different liveried versions of the B737-800; each one would call a separate Custom texture sheet, but all of them (in the entire simulated world- not just that airport) would only call a single Common sheet.

It was further decided that in an effort not only to help performance, but also to minimize disk space, we would only add a single version of the Common sheet to the Texture folders for the aircraft. As such, the Common sheets only exist in the base Texture folder for an aircraft. There are no Common sheets in any of the livery folders. Instead, the Texture.CFG was placed into each livery folder and indicates where to find the Common sheet for that aircraft.

Normal map

As with the Common texture sheet, the Normal map is something which does not ordinarily need to exist in each livery folder. This only exists in the base Texture folder and is then specified in the Texture.CFG file in each livery folder. There might be times when a Normal map for a livery may differ from the base livery’s texture. In these cases the Normal map should be placed into that livery folder. The Texture.CFG does not need to be changed in this case, since the texture will be found and there is no need to look in the Texture.CFG to find it elsewhere.

Emissive map

The Emissive map is another example of a map type which does not need to be included in each livery folder. It is also only placed in the base Texture folder and specified in the Texture.CFG in each livery folder. As with the Normal map, the Emissive map may need to be customized for a specific livery. In this case it would be best to include the map in the livery texture folder. The Texture.CFG will not need to be edited.

Texture space use and UV layout

Given the number of texture types there is the potential for the number of textures to multiply excessively. For example, it is not uncommon for some aircraft to require six base textures, each with a resolution of 1024 x 1024 pixels. If a new texture for each of the new map types were added to correspond to each of the base textures, the possibility would be there for the number of textures to climb from six to 18 or 24 individual textures, some with attendant Alpha channels. If all of these were 1024 x 1024 pixels in resolution, the hit on performance could be pretty hard. It is for this reason that we recommend added content be UV’ed as efficiently as possible.

To achieve efficient UV layouts, consider the following:

  • It is not always necessary to give equal texture resolution to all parts of an aircraft. Some parts do not require the same UV scale as the high priority parts. Prioritizing UV resolution for parts on the basis of their probable visibility helps to mitigate overuse of UV space and any subsequent need for the addition of further textures. Examples of prime candidates for UV resolution reduction include the gear struts, gear wells, flap wells and some interior spaces. These are not visible a lot of the time and when they are, they are often darkened or shaded or partially obscured by other parts.
  • Some objects can be UV’ed over other versions of the same object. Duplicating UV’s is not always a problem. Parts which are identical, such as some of the gear struts, or other small and commonplace objects (of which there are many on some aircraft) can be UV’ed right on top of each other. The downside to this is obviously that they will all look the same, but if they are not overly obvious parts, that can be a negligible detraction. Taking UV space away from small and inconspicuous parts in order to give it to more obvious ones is an effort worth making.
  • Laying out the UV’s for the priority parts first and then fitting the other parts into the remaining spaces in descending priority order is very helpful. The high-priority parts (such as fuselage sections and wings, etc) then act as a skeleton of sorts for the whole UV layout.
  • Try to pack as many parts as intelligently possible into the space available before resorting to adding another texture sheet. Keep in mind however that there must be a minimum of space between parts in order to offset the effects of mipping. Mipping will reduce a space which is 2 pixels wide to a space which is 1 pixel wide with each mip-switch. In order to offset this issue, it is best to leave a space of at least 8 to 10 pixels between parts on a UV layout.
  • Orientation of parts on a UV layout is important and taking the time to think through this orientation is a worthwhile effort. Some aircraft parts are difficult to orient well and present problems when an effort to fit many parts on a single sheet is being made. Wings can present problems due to their sometimes steep rake angle. It might be helpful to orient wings so that panel lines running from the leading edge to the trailing edge (parallel to the centerline of the fuselage) are oriented either horizontally or vertically on the sheet. The following image is an example of this.

It might help with painting to keep some of the more prominent panel lines on the wings clear and sharp by virtue of the fact that they are aligned horizontally or vertically. The drawback to this is that the wings in this orientation take up a lot of space on the sheet.

  • Efficient use of UV space can sometimes be a goal in and of itself. In cases where there is an extreme need to minimize the number of textures, parts can be laid-out and oriented in ways which are not always immediately obvious. Parts can be divided into several subsets of parts to better fit within the space, or oriented at right-angles to the way they might ordinarily be oriented, or even flipped through either axis in order to fit together on the UV sheet more efficiently. It’s not always necessary for parts to be right-side-up and in one piece. This method is certainly more efficient in terms of space used, but it does take longer to paint a texture laid-out in such a fashion.
  • Taking the time to design the UV layout before actually creating it is well worth it. Sketching the layout beforehand and trying to get the mind to think in terms of available space, UV / part scale and orientation is a very helpful exercise. This becomes even more important if there are to be two or more sheets which need to be laid-out. The decisions about which parts will be included on which sheet need to be figured into the prep time and the layout itself. This is an important part of the process of creating a finished model and one which will be permanent once done. It ought to be given thorough consideration before being attempted.

Unrestrained use of texture space will degrade performance. The challenge is to see how well something can be made to look while keeping an eye on efficiency.

Editing Existing Textures

The base textures for the new aircraft added for ESP were designed from the start to be editable. As such, the base texture for each new aircraft was painted to be a simple white, unadorned version which included only the details which would appear on any livery of that aircraft (see the section on Repainting Aircraft Samples).

The Piper Cub and Douglas DC-3 were also worked upon to try to generate a base version of these along the same lines as the new aircraft. These were already partially flattened textures, so they cannot be as flexible as the new aircraft, but we hope they are better presented for painters to modify them. In the case of the DC-3, rather than using white as a base color, an all-over bare metal was used.

All of the base textures are to be found in the Texture folder for each aircraft. The Texture.n folders contain the livery textures.

UV mapping

The UV’s for all of the new aircraft were also laid out with an eye to flexibility. All exterior surfaces which would normally be painted were UV’ed so that there was no mirroring. We tried to minimize any UV duplication (parts UV’ed over other parts). We also tried to keep the UV’s straight, especially on fuselage sections.

Texture resolution

The texture resolution for aircraft textures was left at 1024x1024 pixels for a standard texture for most aircraft. We felt that it would be possible to lay out UV mapping and to paint the textures in such a way that we could still do the aircraft justice with this resolution. Some of the aircraft were given another base texture and in most cases this was an additional 1024x1024 pixel image. A few aircraft did not need a full resolution extra texture and so were given only 512x512 or 256x256 textures for this purpose. Texture resolution cannot currently exceed 1024x1024 pixels for a single map.

Using Adobe Photoshop to customize existing textures

The DDS files can be imported into Adobe Photoshop for editing there and this is the method we recommend.

Repainting Aircraft Samples

A number of sample files are included to help demonstrate the process of repainting an aircraft, and are in the Modeling SDK\SampleTextures folder. White textures are the base textures for aircraft. These represent an aircraft as it might be delivered from the factory. Quite a number of surfaces of an aircraft are not repainted when an airline paints its livery, so the white textures can be re-used each time a new livery is required, thus reducing the job of repainting to just the areas that require it. Sample white textures are provided for the B737_800 and B747, for example for the B737_800:

  • The Diffuse Texture: B737_800_1_T.psd
  • The Specular Texture: B737_800_1_T_Specular.psd

Each aircraft requires two sets of Diffuse and Specular textures: the custom and common textures. The custom texture includes an airlines' livery, and these files are designated by the use of:”_1” in the filename. The common texture is used for the surfaces and parts of an aircraft which would normally not be painted by an airline, and are designated by the use of "_2" in the filename.

Common textures are included as they can be modified if a different factory coloring is required. However, there is a performance advantage to having one common texture for all the aircraft of one type in the simulated world, as then only one of these textures needs to be loaded to support all those aircraft. If a common texture is edited for a particular livery, then it will have to be loaded along with the custom sheet for just that livery.

Repainting Diffuse Textures

In general, livery designs are painted on layers which are at or near to the bottom of the layers palette. Defining the shapes of painted areas with a selection helps as this selection can then be used on the layers above for color-correction, darkening, lightening or any process that matches the color and value of the base paint in the livery design. Selections can be defined as channels (which avoids the need to maintain the selection as active all the time), though it is important to delete these selection channels after using them, as diffuse textures can only have one alpha channel and anything which is not a red, green or blue channel in a PSD file will be interpreted as an alpha channel.

Although many of the pertinent layers are set to multiply or lighten or some other blending mode, this does not always mean they will match color. Changing the hue of the pertinent areas of these layers to match the base paint of the livery might be helpful. This is especially true for rivets, which typically include both light and dark aspects (and layers). Sometimes layers may also appear either too light or too dark when new painted livery designs are added.

The diffuse alpha channel is used to define reflection strength on a surface. This is a greyscale image with black set as highly reflective and with white as not at all reflective. However, this can be counter-intuitive, so white can be used as the most reflective of colors, but then the image must be inverted before completion. This channel is generated by duplicating the whole texture, editing the values per layer, then editing parts of each layer by selection. It is helpful to de-saturate the layers as you go, to avoid confusing your eye with color. After the values have been edited, the image must be flattened and then inverted (if necessary). There can only be one alpha channel per texture.

Repainting Specular Textures

Specular textures are more difficult to comprehend than their diffuse counterparts. Basically the specular map defines two properties, how bright and how spread-out the highlights on a surface will be. For aircraft textures these two components are defined separately. The diffuse values and hues (everything which is not alpha) in the specular texture define the brightness and color of the highlight. The alpha values define how spread-out the highlight will be (often referred to as falloff). In general, a highlight will only be as bright as is defined in the specular texture. For example; a light blue color in the specular texture will result in a highlight which is blue in hue and should not ever be brighter than the color in the texture. A lighter color in the specular texture will result in a lighter (brighter and stronger) highlight. More saturation in the specular texture will result in a more colorized highlight. A dark value in the specular alpha will generally result in a wider, less sharp highlight. Bright values will sharpen and consequently reduce the size of the highlight.

There is some flexibility associated with specular map values and their effect on the highlight, because the Specular Power Term in the Material Dialog also affects highlights on a model. The Material Dialog values are set when creating an aircraft using an appropriate 3D modeling tool (such as 3ds max) , and will apply to your repainted livery.

Creating New Bump Maps

These maps are flattened images which define, through color values, how a surface will be contoured. The maps are generated as greyscale images, and are flattened and then processed by a Photoshop plug-in available from NVIDIA (the Normal Map Filter plug-in, refer to Normal Maps). The result is run through Imagetool (provided with this SDK) to format it appropriately.

Whereas the sample diffuse and specular maps provided here can be used as the basis for repainting the two aircraft (the B737_800 and B747), the sample bump maps are provided only for the B747 and only for reference. These maps show the range of values that have been used for the aircraft, but to create a new bump map you will need to start from scratch and create an appropriate multi-layered PSD file.

To replace a default bump map, start with a greyscale version of the base texture and define height as a function of greyscale value (white being high and black being low). Bumpiness in the map is defined not by any set of absolute values, but by the delta between light and dark values. An overall coefficient is applied to the range to accentuate the delta when the image is being processed through the NVIDIA plug-in. Typically too much contrast (that is, high delta values) produces undesirable results.

Creating New Light Maps

Aircraft will become dark at night. In order to simulate light cast onto the surface of an aircraft from light sources such as landing lights, create a light map to define the spill areas on the surface. Light maps act like an additive mask in that anywhere on the texture where the map value is higher than pure black, the surface will be lightened above the ambient lighting value by an amount relative to the value provided. Pure black (RGB 0,0,0) must be used in the light map if no lightening is to occur. Light map values can include color to cast a colored light onto the surface.

Authoring New Textures

Separating detail classes by Layer

The presence of layers in PSD files is a tremendous potential benefit to painters. It allows for details to be separated out into layers and thereby grants the freedom to modify these details independent of each other with ease. Obviously it is possible to edit textures when they are flattened, but much time and effort is required to pick out details which one would wish to exclude from any edits made. The clear example here is the generation of liveries from base textures or the creation of new liveries from existing ones. In order to do a livery justice, a painter will wish to exclude many details in a texture from the job of painting a new base color or the addition of stripes and logos. It is for this reason that it is recommended that details be thought of in terms of “classes” and kept separate from other parts of the texture. If a painter were to keep all panel lines, rivets, or caution decals separate from the base paint and each other, they would then be able to generate livery textures much more fluidly by being freed from the need to exclude these things. This can be achieved by keeping all of these details on their own individual or sets of layers.

Examples of details which could be kept to their own layers or layer sets include:

  • Panel lines
  • Rivets
  • Equipment details (electrical connector points, vents, hand-holds, latches, hinges, etc)
  • Decals (manufacturer applied safety/caution stickers and equipment parameter stickers etc)
  • Windows (and window surrounds – these are often bare metal)
  • Doors (and door surrounds – also often bare metal)
  • Major bare metal sections (like parts of the fuselage, engines and empennage)
  • Primed grey surfaces (found throughout, but often around wing-roots, and on sections of the wings and tail
  • Shadows / Highlights
  • Gear wells
  • Gear struts
  • Interior parts

An additional benefit to maintaining separation between these classes of details is the ease with which other textures such as Reflection, Specular and Bump maps can be generated. For example on most Bump maps, panel lines will be slightly (slightly!) indented with respect to the rest of the surface, defining this and controlling subtlety is a snap if all of the panel lines are on a single layer. All one would have to do is change the value of the entire layer at once to define how it is presented on the Bump map. If the panel lines were a part of the base paint layer, or otherwise flattened into a single image, doing this would not be quite so simple. This is just as pertinent for the creation of Specular and Reflection maps as well.

Layer Order

Adobe Photoshop files are generally layered files. This means they are comprised of several (sometimes many) separate layers which all rest in a stack on top of one another. Each layer may only contain a few pixels of actual “paint” (you may only wish to repaint a part of the texture, but do it on a separate layer to keep the original untouched), but it will still be the same size as the whole image. What most painters do when adding detail, is start by creating another layer and then paint on that. It is then possible to merge that new layer with the one below. Merging layers is done to keep not only the file size down, but also to keep the file manageable. Layers can multiply very quickly and without management can become dizzyingly complicated.

Efficient ordering of layers is therefore not only smart, but eventually it can become necessary. When setting up a new texture, beginning with the same basic set of layers and then expanding from there helps to keep the painter focused on painting the texture rather than organizing it. Keeping in mind that layers act much like plates of glass, in that those above affect those below, it helps to start at the “bottom” and add detail with each new layer added above. For example, the bottom layer is the base paint, then panel lines are added above that, then grime above that, etc. There will be exceptions to be sure, but if one thinks of the whole file like this, it becomes a lot easier to manage and plan.

In order to get the most out of Adobe Photoshop, painters should try to take advantage of layers and the various things which can be done with them. These include, but are certainly not limited to: layer blending modes (see below), layer opacity and the use of adjustment layers. These necessitate using layer order properly or they won’t work at all as expected.

Layers should be named intuitively, so they can easily be relocated.

Color Coding Layer Thumbnails

Layer thumbnails can be color coded so that they stand out more obviously in the layer palette. This is another option which makes it easier to manage your layers. The color chosen has no effect on the contents of a layer; only the thumbnail in the layer palette is affected. There are countless criteria one may use to color code layers; examples could include: making the thumbnails for all panel line layers gray, or all shading layers red, or all highlight layers yellow or using color to tag all of your different livery layers. It ought to be obvious that while scrolling up and down through your layer thumbnails, colors which define certain layer functions within the texture would be helpful. It’s an oft overlooked helper and one we recommend painters try to get used to employing.

Layer Sets

It is possible to nest layers within layer sets in Adobe Photoshop and it’s something that can be very helpful for layer management. In a layer set, all of the layers are nested under a single top layer. This top layer is then the only one seen in the layers palette. When one wishes to access any of the sub-layers, one can do so easily by clicking the little triangle/arrow icon in the layer palette. This expands the set and all the layers within it become accessible. Below is an example of some layer sets (which are also color-coded), we used for liveries. The “Global Freightways” layer is the top layer in the set which has been expanded, the others are still collapsed.

Layer sets do not change the layers within the set at all, it is purely a file management issue. Any set can be deleted and the layers within reverted to individual layers in the list.

Layer Blending Modes

Layer blending modes define the way a layer (and everything painted on it) will interact with the rest of the content below it. By default, layers are set to Normal blending mode. Some of the many choices available are very helpful when painting textures for aircraft. Among these are: Darken, Lighten, Multiply and Screen. These and most of the others present the painter with specific and oftentimes very helpful options.

Layer palette with the Blending options for the selected layer expanded.

Setting the blending mode of a Panel Line layer to Multiply gives rise to lines which will appear dark against any color background (except black of course;  black is as dark as any image can get). This blending mode multiplies any color value on the blending layer with that on the layer(s) below. The result is always darker. Painting black on a Multiply layer will result in black. Painting with white on a Multiply layer will give no result.

Screen is the inverse of Multiply. Here the end result will always be lighter. So, if black is painted on a layer set to Screen blending, there will be no change. Using white on a Screen layer will result in white.

Darken and lighten are similar to Multiply and Screen in that they generally affect layers below them as one would imagine. However Darken and Lighten layers use a different algorithm than Multiply and Screen. On a Darken layer, any value on it which is darker than on the layer below will appear to replace that value on the layer below, anything on it which is lighter than on the layer below will have no effect. Lighten operates in the same way but inversely.

Experimentation with these blending modes is very important, along with reading the documentation for Adobe Photoshop.

Other blending algorithms are also quite useful, although not as much for aircraft texture authoring as the above. Color, Overlay, Dodge and Burn along with the range of “Light” modes (Hard Light, Soft Light, etc) are among the more useful of the other modes.

Layer Opacity

The opacity for an entire layer can be adjusted. Sometimes, as when an effect ends up being stronger than desired, it is helpful for a painter to reduce layer opacity and thereby control how a chosen layer affects the layers below. That little opacity field can be very helpful at times.

Painting Approaches

Base-Color choices

Most aircraft are white in color, so it would seem white would make the best choice. However if a pure white (255, 255, 255) is used, there is no room left in the spectrum to paint highlights, if they are desired. A base color which is several increments on the 0 – 255 scale below pure white should be considered.

A deliberate attempt was made to maintain consistency across the default aircraft and to allow for room to paint highlights, so, for the base white aircraft, colors which were slightly warm and also well below pure white were used as base colors. The base colors used were in the 230-240 range, so a typical color would be: R:233, G: 233, B: 226 (where the Blue value is somewhat lower than the Green and Red values). Other base color choices do not present the same problem as white since they almost always have room on the scale to brighten the texture where so desired.

Scaling Color

In the world of landscape painting and more recently in the world of model building, it is well recognized that color becomes less saturated and somewhat lighter with distance. When it comes to models, most tend to be smaller than their real counterparts and so in effect look like the real thing, but set at a distance from the viewer. In order that the model give a better representative impression of the real thing, modelers lighten and de-saturate the colors they use to paint their models.

So if, for example, an aircraft is painted bright red in real life, a modeler making a model of said aircraft would de-saturate and lighten the red they use to paint their model. This gives the model a more realistic appearance since it helps to trick the eye into the assumption that the model is actually the real thing seen at a distance.

Tips and tricks used by modelers and landscape painters apply to 3d models in a simulated real time environment. Even when zoomed all the way in to a model on-screen, that model’s size remains small relative to the eye’s whole field of view and the distance effect still comes into play. Of course texture mipping does something quite similar to the distance effect, but not in entirely the same way. Take a look at the colors used on the aircraft models supplied. Using an exact match for a color from a photograph may seem like it’s the height of correctness, but it may not always be the best choice.

There are several different “formulae’ for distance-color ratios available on the web, which can help with one’s one determinations, but it is recommended that you experiment to find your preferred approach. In general, color is usually scaled by reducing its saturation value and by lightening it a bit.

Colors from Photographs

Care should be taken when using photographs to choose colors for texture painting. Due to inconsistencies related to the various media sources for photographic imagery, most photographic images represent colors in different ways, so what you see is not always what you get. Digital images are not always the most reliable. Digital cameras sometimes shift the color ranges output by a camera in order to attempt to make the images more appealing to users. The one way a digital image may be treated as reliable is when the RAW digital image information is used. RAW files contain the original digital information taken directly from the camera’s sensor before the camera’s filters or image processing (either manufacturer or user defined) settings are applied to it.

Traditional photographic images obviously trend towards unreliability because there are several ways the end result can be affected; the film stock and processing used being the primary variables. Colors chosen from traditional film images should be chosen with care.

Printed media uses the CMYK spectrum and as a result, the output can tend to be shifted to the blue end of the spectrum if the images are not properly color corrected before printing. Using a printed source should also be approached with care for this reason.

Scanned images are usually taken from printed media so they ought to be used with as much and more caution as the original printed imagery. Scanning an image introduces another step in a duplication process and as such may include some image degradation. There may also be scanner manufacturer’s settings which will affect color representation differently from one to another brand or even from one to another model within the same brand.

Any image which is printed (either CMYK or printed digital RGB) is perceived as reflected light from the surface the image is attached to. Any image on a screen or monitor is perceived as projected light. The two methods of presentation will include significant differences and present considerable difficulties for anyone attempting to ascertain accuracy. Be aware that the sources and methods used in this pursuit will almost always produce inconsistent information and that color choices are pretty tough to get universally correct.

Painted Shadows and Highlights

Shadows and highlights on objects help them to look more realistic since real objects in the real world generate them as a function of being lit. However, shadows and highlights move across the surface of an object as that object moves through its environment. If these details are burned-in to the texture, they become fixed artifacts on the surface and therefore look wrong when the object moves (or spins/rotates) in a lit environment. Additionally, since the rendering engine automatically generates shadows, if they exist both in the texture and as a function of being lit in the rendering engine, there are two sets of shadows and highlights on an object; one set which moves as expected and another which does not.

Using captured images directly for textures can lead to the inclusion of shadows and highlights as burned-in artifacts in those images. In order to avoid the discontinuity this situation will create, they might need to be removed by hand and this can be difficult and time-consuming. When using captured source images to make textures from, try to think about these artifacts and how they will make the object look when it moves. By the same token, some care could be taken when painting shadows and highlights into textures by hand. It is recommended that the painter make an effort to reduce the strength and definition of painted shadows and highlights.

Including some painted shadows and highlights is certainly advisable since it gives an object a more realistic appearance especially when it is sitting still in its environment. Painting highlights and shadows on separate layers is one of the best methods for controlling how they end up interacting with the finished texture. Opacity and blurring levels can be changed independently and if the layers are set to blend with the rest of the texture (such as setting the blending mode of highlight layers to Dodge or Lighten and the shadow layers to Multiply or Darken) the effect these layers have on the rest of the texture can be modified in extremely subtle and effective ways.

Shadows and highlights may not be burned-in to photographic (or otherwise captured) source if the correct lighting is present when the images were originally captured. Directional lighting (from specific sources such as the sun, or artificial lights) is the main culprit here. Burned-in shadows and highlights will usually be considerably moderated if directional lighting is minimized when the source images are recorded. If the images in question are recorded under mostly ambient lighting conditions (such as overcast days) the effect of burned-in shadows and highlights is greatly reduced. It is of course, very difficult to arrange perfect lighting conditions and this almost by itself is a compelling enough argument for painting textures from scratch.

Blending Modes for Brushes

Blending modes can also be used with brushes when the need for added flexibility or subtlety is required. It is sometimes preferable to restrict the effect of a blending mode to a brush since setting the mode of an entire Layer can have quite an extensive effect.

1 Blending modes for Brushes, expanded

These modes are very useful for painting, in particular: Dodge, Burn, Darken, Lighten, Screen and Multiply are very helpful. Examples of different blending modes for brushes include: Dodge and Multiply for painting various metallic surfaces; Darken / Multiply and Lighten / Screen for painting shading and highlights on surfaces (rivet dents and rivet dent highlights, and similar parts) and any number of other variations which a painter may come up with.

Brush Opacity

Using a brush at full opacity is not always optimal. For finer control or for more subtle effects, it is sometimes better to set opacity rather lower than 100%. This way a painter can build up a desired effect gradually.  Using an opacity level in the 20% to 40% ranges (and sometimes far lower) is very useful for painting shading, and other gradated or otherwise subtle effects.

Cubic Environment Maps

A cubic environment map is used to generate reflective surface qualities on objects. The cube map itself is a virtual cube, comprised of six individual textures which are all arranged to form the six faces of a cube. This cube is not visible as a separate object in a scene since it exists solely in the texture buffer, but represents a cube with the object at its center and its faces directed inwards. As such it acts as a stand-in for the real environment surrounding the object.

The screen shot shows the Negative Z direction cube map face, of the GlobalEnvTest cubic environment map. This is the global map most often used.
For some very reflective materials the GlobalEnv_AC_Chrome cube map is used by aircraft.

The advantage of a cube map is its relatively small file size. It is certainly possible to generate real-time updating cubic maps, but this would require processor cycles and a constantly updating texture buffer; both of which would have detrimental effects on performance. The major disadvantage of a cube map is that the map is fixed. In other words, the cube map, once generated is always the same. So in all cases and in all environments within the simulation, the reflection on the object will always be the same since the map is the same. In an attempt to offset this static quality of the cube map, is it updated with both lighting and color values which are taken from the sky at that specific location and time during the simulation. For example an evening scene, with a red-orange sky will affect the cube map by darkening the values and colorizing them to a more red-orange hue set. The result is often highly effective.

The default cubic environment maps should not be edited, as many objects use materials which reference them. Settings and values used in Reflection and Specular maps were designed specifically to be used in coordination with the values in the default cubic environment maps. If these values are changed, almost all of the objects will display incorrectly in a permanent and universal way.

If a user wishes to make changes to the way the cube maps look, they should create new ones and be sure to save them with different file names than the default cube maps. It is recommended that the new files be placed in the same directory as the existing files (the C:\Program Files\Microsoft ESP\1.0\Texture folder in a default installation). New cubic environment maps can be referenced when materials are defined in a model scene in 3ds max. Refer also to the Modeling Materials documentation.

Opening and Editing Cubic Environment Maps

Cube maps exist as a specific set of six separate textures embedded within a single file along with information about where each of the six textures should be arranged in order for it to be displayed properly. These cube map files are not ordinarily editable as a standard, single texture file would be. They need to be opened and edited using tools designed specifically for the purpose of editing cube maps. Below are two links where examples of these tools may be found.

1. Microsoft SDK tools, including the DirectX Texture Editor

This link will take you to the DirectX SDK Tools site where information about an application called DirectX Texture Editor (DxTex) may be found. This tool allows a user to (among several other highly useful functions) edit existing cube maps or arrange six separate files to create new cube maps. The DxTex tool allows you to open, view, manipulate, and save textures in various formats, and use various texture features. DxTex uses a traditional document-based UI. Each texture map is a document, and several documents can be open at one time. It is not a painting tool; the separate files to be used as cubic faces will need to be created using a painting tool such as Adobe Photoshop.

DxTex is automatically installed as part of the DirectX SDK. See the DxTex documentation for more details.

2. NVIDIA Photoshop plug-in tools

This link takes you to the NVIDIA developer’s page where Adobe Photoshop plug-ins may be found. Among these tools is a script which can be used to rearrange cube map faces for use with different editing applications. The plug-in itself may be found and downloaded using the link at the bottom of the page.

Fresnel Ramps and Cubic Environment Maps

When assigned and engaged in a material, the Fresnel Ramp defines incident-angle opacity and colorization for a given channel on an object. The reflection characteristics of a material will be affected by any Fresnel Ramp assigned to that channel in the material. As a general rule, any Fresnel Ramp assigned to a channel on a material will mitigate that channel’s opacity. Channels (Reflection, Specular and Diffuse) will almost always appear stronger and more opaque if a Fresnel Ramp is not present as an adjunct to that channel. Unmitigated channels can appear overly forceful, so it is not recommended for most applications that Fresnel Ramps be removed altogether. If a user wishes to reduce the effect of a Fresnel Ramp on most materials it is recommend that they edit it rather than attempt to remove or disable it.

However, for some very specific materials, it is useful to remove the Fresnel Ramps from certain channels (the Glass and Chrome materials used for aircraft, for example). Fresnel Ramps generally reduce the effect of a channel which they are assigned to, but if you are looking to maximize the reflective qualities of such materials as glass and chrome, then remove the Fresnel Ramps. For most materials, those that are not highly reflective, this is not recommended.

As cubic environment maps are what is displayed as the reflections on an object and reflection channels are affected by Fresnel Ramps, developers should remain aware of them and their effect.

For some examples of Fresnel Ramps, see the Modeling Materials document.

Appendix I: Imagetool Switches

Imagetool is a utility for converting image files from one format to another. Note that the tool requires the latest version of the DirectX 9 runtime -- if necessary install this from the Microsoft DirectX website.

The use of Imagetool is described in this document in the section on Normal Maps. It is also referred to in the following documentation:

Typing Imagetool -? will present the following image of options.