Let's start our journey into the PBR pipeline by creating a new material and looking at the different attributes that define it:
- Right-click anywhere inside of the Content Browser and select the material option in the Create Basic Asset section. Name it whatever you want—I'll go with M_PBR_Metal for this particular instance. Double-click on the newly created material to open up the material editor.
- With the Material editor now open, we can start taking a look at the PBR workflow. The first material we are going to create is a metallic one, a particular type that uses most of the attributes associated to this pipeline. With that said, let's focus our attention on the following two different places—the Details panel and the main Material node itself:

The settings you see here are the default ones for most materials in Unreal, and they follow the PBR pipeline very closely. The first option, the Material Domain, is currently set to Surface. That tells us that the material we are creating is meant to be used on a 3D model. Blend Mode, which has a value of Opaque, indicates that it is not a translucent material like glass. Finally, the shading model is set to Default Lit, which is the default one for most materials.
This configuration is the default one for most common materials, and the one that we'll need to use to define materials such as metal, plastic, wood, or concrete, to name a few.
- With that bit of theory out of the way, let's create a Constant3Vector node anywhere in the graph and plug it into the Base Color input pin of our material. We've used the Base Color attribute in the previous recipe, and as we saw, this is the node where the overall color of a material should be plugged into.
- The next item we will be creating is a Constant. You can do so by holding the 1 key on your keyboard and clicking anywhere within the material editor graph. Give it a value of 1 and plug it into the Metallic attribute of our material.
The Metallic attribute defines whether we are creating a metal or a non-metal material. We should use a value of 1 to define metallic surfaces and a value of 0 for non-metals—or we can leave this attribute unconnected, which would be the same as using a zero. Values between 0 and 1 should only be used in special circumstances, such as when dealing with metals that have been treated—corroded or painted metals and the like.
- For our next step, let's replicate what we have just done—start by creating another constant and plugging it into the Roughness slot. This time, let's not give it a value of 1, but something like 0.2 instead. The final material graph should look something like this:

The attribute we are controlling through the previous constant defines how rough the surface of a given material should be. Higher values, such as 1, simulate the micro details that make light scatter in all directions—which means we are looking at a matte surface where reflections are not clear. Values closer to zero result in those imperfections being removed, allowing a clear reflection of the incoming light rays and a much clearer reflected image.
Through the previous steps, we have taken a look at some of the most important material attributes used to define a PBR material. We've done so by creating a metal, which can be a good example for some of the previous properties. However, it will be good to create another quick material that is not a metallic one—this is because some of the other properties of the PBR workflow, like the specular material attribute, are meant to be used in such cases.
- Create another material, which we can name M_PBR_Wood, and open the material editor for that asset.
- Let's plug something into the Base Color material attribute—but instead of using a plain value, let's go with an image this time. The Starter Content provides multiple textures that can be used for this very purpose, so let's make use of one of those resources.
Right-click anywhere inside of the main graph for our newly created material and search for TextureSample, like in the next screenshot:

- With that new node on our graph, click on it to access the options in the Details panel. Click again on the drop-down menu found in the Material Expression Texture Base | Texture slot and type wood. Select the T_ Wood_ Floor_ Walnut_ DÂ asset and connect the Texture Sample node into the Base Color material attribute as follows:

If you want to get hold of more textures online, feel free to browse the internet for more of them. A good place where I like to search for these types of resources is
www.textures.com, which allows you to download several samples a day once you create a free account.
With that done, it's time to be looking at another material attribute—the Specular parameter. Unlike roughness, this node controls how much light is being reflected by the material and not how clear those reflections are. We therefore tend to modify the specular level when we have small-scale occlusion or small shadows happening across a surface, similar to what would be happening for the texture that we chose before.
- The seams in between the wood boards are a good place to use a specular map, as those areas will reflect less light. In Unreal, such places are described with values close to 0 (black). Knowing that, drag a pin from the red channel of the previously created Texture Sample node into the Specular attribute of the main material node.
You might be wondering why we are using the red channel of the wood texture to drive the specular parameter. The simple answer is that even though we could create a custom black and white image to achieve the same effect, any of the original textures' channels are black and white values that contain the information that we are after. Because seams are going to contain darker pixels than other areas, the end result we achieve is still very similar if we use the red channel of the original texture. You can see in the next image our source asset and the red channel by its side:

- Copy the Texture Sample node twice, since we are going to use more textures for the roughness and the normal material attribute slots.
- Just as we did previously, select the T_ Wood_ Floor_ Walnut_ MÂ and the T_ Wood_ Floor_ Walnut_ NÂ assets on each of the new nodes. Connect the first one to the Roughness slot and the second one to the Normal node. Save the material and click on the button that says Apply. Your material node graph should look something like this:

- Navigate back to the main level, and select the floor plane. In the Details panel, scroll down to the Materials section and assign the M_PBR_Wood material we have just created. Take a look at what our scene looks like now:

Nice job, right? The new nodes we've used, both the specular and the normal ones, contribute to the added details we can see in the preceding screenshot. The specular node diminishes the light that is being reflected in the seams between the wood planks, and the normal map modifies the direction in which the light bounces from the surface. The combined effect is that our model, a flat plane, looks as if it has much more geometrical detail than it really has.