Creating PBR materials

From Valve Developer Community
Jump to navigation Jump to search
English (en)Translate (Translate)

Physically Based Rendering is an excellent shading technique that gives modders the ability to create amazing photorealistic maps. However, the creation process for PBR materials is much different from that of standard Source Source materials, and many modders new to the PBR workflow may not know how to create them. This article will review the process of creating a PBR material.

Overview

A PBR material consists of 3 main files:

  • A Diffuse (base) texture
  • A Normal map (optionally with a Heightmap embedded in the Alpha channel
  • A MRAO map, containing information on the Metalness and Roughness data as well as Ambient Occlusion

While the Diffuse and Normal map textures may already be part of the standard Source texture workflow, the MRAO map may present some difficulty to create, as standard image editing programs do not have ways to create the textures needed to make an MRAO texture. Modeling programs, such as Blender Blender, and image-to-texture programs, such as Materialize can create such materials.

Creating an MRAO texture

Note.pngNote:If the program you are using utilizes "smoothness" or "glossiness" maps, make sure to invert the colors of the smoothness/glossiness map before proceeding

There are a couple of methods used to port PBR textures to an MRAO texture. Here are two methods known to work for Strata Source Strata Source based games and also with Thexa4's PBR shader.

Confirm:Do these methods work for other PBR-supported games?

GIMP

First, create a new image with the same resolution as your PBR maps. Next, open your PBR maps with the "Open as Layers..." button. This will open your PBR maps as layers to the current image, and not as separate image files.

Note.pngNote:
Click to enlarge
The images you import must be grayscale. Even if they are visibly grayscale, GIMP may still read them as RGB images. If you are unsure if your images are using the grayscale format, navigate to Image→Mode and make sure that the Grayscale option is checked.

Next, navigate to Colors→Components→Compose and set the Red, Green, and Blue channels to the Metalness, Roughness, and AO layers respectively. Once you are done, export the image to a PNG or TGA file, convert it to a VTF, and then place it in the same folder as your diffuse and normalmap textures.

Next, create a blank VMT file. Copy-Paste the following text:

"PBR"

{ $basetexture "<insert path to diffuse texture>" $bumpmap "<insert path to normal map>" $mraotexture "<insert path to MRAO map>"

$envmap "env_cubemap" $normalmapalphaenvmapmask 1

}

Change the parameters to your specified filepaths, and you are done!

PBR-2-Source

Main article:  PBR-2-Source

Open the program and select "PBR(<desired use>)" in the dropdown on the right. Open each texture in their respective box on the left, select which reflections you want and click "Export".

Icon-Important.pngImportant:You must know what normal map style your material creation program used and set the "Flip Normal Y" box appropriately. If the program you use uses the 3DS Max style, uncheck the box. Otherwise, keep it checked.

Substance Painter

If you have made your textures in Substance Painter, you can export an MRAO texture using a custom Output Template.

Create a new template by pressing the '+' next to Presets in the 'Output Presets' tab of the 'Export Textures' window and create a new 'R+G+B' output map.

Drag the Metallic input map to the R slot, the Roughness input map to the G slot, and the Ambient Occlusion Mesh Map to the B slot. When exported, this will automatically create an MRAO map.

While in this window, you may also add 2 more Output maps, one 'RGB' map for 'Normal DirectX' and one 'RGB+A' map for 'Base Color' and 'Opacity'. This way, you can export all the basic maps you'll need to make a PBR texture in one export window.

SubstancePBRExport.png


Embedding the Heightmap

Confirm:What other games support heightmaps?

Strata Source Strata Source games support embedding a Height map into the alpha channel of the Normal map, which is used for parallax mapping, giving more depth to the material. This can be done through GIMP very easily.
First, open both your Normal and Height maps as separate images. Next, click once on the height map and copy (Ctrl+c) the image. Next, go to your Normal map, find the layers box, and right-click on the active layer. Click "Add layer mask", then click OK (the type is not important). Finally, with the layer mask selected, paste ({key|Ctrl}}+v) your Height map. Your Normal map should now appear transparent, this is intended. Export your image as a PNG (so the transparency persists) and convert it into a VTF. Next, add the following to your VMT file:


$parallax "1" $parallaxcenter ".5"

$parallaxdepth "<insert your own value here, 0.5 is a good start>"

This will enable parallax mapping on your PBR material.