How-To Create Detail Maps in Lumberyard

While working on a material, have you ever noticed the
checkbox for Detail mapping and
wondered what it was for? It’s the first
item in the long list of parameters found under the group Shader Generation Params. Detail maps are 32bit images and are a mix of a diffuse texture and a
normal map with a gloss channel.

To get started, you will need to have two textures. A diffuse texture and a normal map. Make certain to choose a normal map that also
has a gloss channel. Both textures
should also be tileable. This is
important to remember, because detail maps are typically tiled many times
across the object that they are applied to. We don’t want to have any unsightly seems appear on our objects!

To successfully create a detail map, we must first understand
how the two source textures are combined into one. The channels in the detail map are mapped to
the following:

  • Red channel = Any channel from your source diffuse texture
  • Green channel = The red channel from your source
    normal map
  • Blue channel = The alpha channel from your
    source normal map
  • Alpha channel = The green channel from your
    source normal map
    Once you understand this, the following process can be used
    to combine the two textures:

Photoshop Process

  1. Open source images in Photoshop
  2. Create a new 32 bit PSD file
  3. Open the channels window
  4. Copy any channel from the source diffuse texture
    and paste it into the red channel of the detail texture
  5. Copy the red channel from the source normal map
    and paste it into the green channel of the detail texture
  6. Copy the alpha channel from the source normal
    map and paste it into the blue channel of the detail texture
  7. Copy the green channel from the source normal
    map and paste it into the alpha channel of the detail texture
  8. You will know that all the channels are correct
    because now the combined RGB will look like a funky green normal map!
  9. Save your file, and right-click on it in windows
    explorer. Choose RC Open Image and
    choose the Detail_MergedAlbedoNormalsSmoothness
    preset. Click OK.
  10. Note: This will create a text file
    (imagename.exportsettings) for each image that contains information Lumberyard
    will use to compile the image correctly. If you are using source control, do not forget
    to check these files in! If you do not
    have the option RC Compile Image, you need to install the RC Shell Commands
    using the SetupAssistant.exe.
    5810-detailmaps-002.png

Lumberyard

In Lumberyard, open the Material Editor. Choose a material that you want to add a
detail map too, and under the group Texture
Maps
, add the detail map to the Detail
parameter. At first you might not notice
any changes. Don’t worry! We will fix this next.

Under the group Shader Generation Params, check the
box for Detail mapping. This will
add 3 new Shader Params:

  1. Detail bump scale - This controls the blending
    of the normal map (green and alpha channels) in the detail texture
  2. Detail diffuse scale - This controls the
    blending of the diffuse map (red channel) in the detail texture
  3. Detail gloss scale - This controls the blending
    of the gloss map (blue channel) in the detail texture
  4. For all of these parameters 0 is no blending. Adjust these sliders to get the effect you
    desire.
    As a final step, let’s adjust the tiling of our detail
    map. This can be controlled by returning
    to the Detail parameter in the group Texture Maps and then drilling down to Advanced / Tiling and setting the TileU and TileV parameters to a value that gets you the desired effect!

I hope this information is useful to our community and I am
excited to see what you create using this technique! If you are interested in other topics, please let me know. Environments are my specialty :slight_smile:

Here is what I ended up with (left no detail map, right with detial map):

1 Like

I used detail map so far always without export settings exporting them from substance designer as tif. What’s actually the difference in processing the export settings triggers?

Interesting, I just use it in few cases as hdr textures to not get them converted to ldr.Probably I tool to edit export settings that don’t require photoshop would be very useful.

@Gamely

By generating the .exportsettings file, you are explicitly telling Lumberyard how to ingest your file. If you open this file up, in your favorite text editor, you will see that we have set parameters for autooptimize, mipgentype, reduce, and a few others.

You are correct, that it will work without this step but ideally all textures in your project should go through the process of generating the .exportsettings file. There are benefits to having this on a large team.

One use case would be to create a script that reduces the size of the textures in your project. The script could change the value of reduce=0 to reduce=2. This would make a 1024x1024 texture reduce by a factor two. Resulting in a file that is now 256x256. The original texture is not changed, but the asset processer will see the change to the .exportsettings file and generate a new .dds file at the reduced size.

BigMonetsGhost, excellent article thanks.

I have enabled the RC Shell Commands, but don’t see the options when I right click in windows explorer. Not sure why. The following seems to work though and may be a useful tip for some:

  1. Create a desktop icon for rc.exe (the file is in the “\dev\Bin64vc\140\rc” directory).

  2. Right click on the icon to open its properties and in the “target” window add the switch “/Detail_MergedAlbedoNormalsSmoothness” (without quotes).

Can then process your detailed image file by dragging it onto the desktop icon. It will automatically run and produce the detail .dds file.

This is great information. Thank you for putting it together and sharing!

TY for the information, but not alot of people , unless they get creative in finding it, can affford PS, some can’t even afford $10 but are worthy and talented. It looks like it should port directly , but in the future making a point to note it works in free ** might be nice.