To make a material in Unreal Engine 5, import your textures into the Content Browser, click Add and choose Material, then double-click it to open the Material Editor. Hold T and left-click to add a Texture Sample node for each map, connect them to Base Color, Roughness, Metallic, and Normal on the main material node, click Apply, and save. Then assign the material to a mesh in the Details panel.
That gets you a working material. The rest of this guide covers the parts beginners usually hit next: texture settings, tiling, Material Instances, and why a material can compile but still look wrong. We checked the steps against the Unreal Engine 5.8 documentation. Labels can differ slightly in older 5.x versions.
What you need before you start
You need a mesh in your level and a PBR texture set. A typical set has base color, normal, roughness, and metallic maps, and sometimes height and ambient occlusion. If you are not sure what each one does, read what PBR maps actually are first.
If you need a set to practice with, our list of free PBR texture sites covers where to get them and what each license allows. twirl's public brick, concrete, and wood materials also download for free without an account, as separate albedo, normal, roughness, metallic, and height maps.
How to make a material in Unreal Engine 5
- Import the textures. In the Content Browser, open the folder you want to use and click Import. Select your image files and click Open. In Epic's artist quick start, importing a normal map brings up a settings confirmation. Click OK, then Save All.
- Check each texture's settings. Double-click each texture to open it. Base color should keep sRGB on. Roughness, metallic, height, and AO are data, so turn sRGB off. The normal map should use the normal map compression setting. Our guide to Unreal Engine PBR texture import settings covers each flag in detail.
- Create the material. In the Content Browser, click Add and choose Material, or right-click an empty area and choose Material. The Material Editor guide covers both. Name it, for example
M_Brick. - Open the Material Editor. Double-click the new material.
- Add Texture Sample nodes. Hold T and left-click in the graph to place a Texture Sample. You can also right-click the graph and search, or drag one in from the Palette panel. The Material Editor UI reference lists these hotkeys. Add one node per map.
- Assign a texture to each node. Select a node. In the Details panel, use the texture dropdown, which reads None by default, to pick the texture.
- Connect the maps. Drag from each node's white RGB output to the matching input on the main material node. The table below shows where each map goes.
- Apply and save. Click Apply to compile the material and push the change to everything that uses it. Then click Save.
Which texture connects to which input?
| Map | Texture setting | Connect to |
|---|---|---|
| Base color or albedo | sRGB on | Base Color |
| Roughness | sRGB off | Roughness |
| Metallic | sRGB off | Metallic |
| Normal | Normal map compression | Normal |
| Ambient occlusion | sRGB off | Ambient Occlusion |
| Height | sRGB off | Not connected in a basic material |
| Packed ORM | sRGB off | R to AO, G to Roughness, B to Metallic |
Use the single-channel outputs for grayscale maps if you prefer. The R output of a roughness texture gives the same value as the white output and makes the intent clearer in the graph.
A few notes from Epic's Physically Based Materials page:
- Leave Specular alone. The default of 0.5 is accurate for most materials. Epic says to make very diffuse surfaces with high roughness, not by setting Specular to zero.
- Metallic is mostly 0 or 1. Use partial values only when you have a reason, such as a blend between metal and paint.
- Roughness runs from 0 to 1. At 0 reflections are mirror-like. At 1 the surface is matte.
If your texture set uses a packed ORM file, check the channel order before you wire it up. Our ORM texture guide explains why. Height maps need a displacement or parallax setup, which is a separate job. For Nanite meshes, see using a height map with Nanite tessellation.
How to apply a material to a mesh in Unreal Engine 5
There are two ways, and they do different things. Both are in Epic's Using Materials with Static Meshes page.
- For one placed object: select the mesh in the viewport or Outliner. In the Details panel, open the dropdown in the Materials section and pick your material. This changes only that instance in the level.
- For every copy of the mesh: double-click the Static Mesh in the Content Browser to open the Static Mesh Editor. In the Details panel, set the material in the Material Slots section, then click Save. Every placed copy now uses it by default.
We use the first method while testing and the second once the material is final.
How to change texture tiling in Unreal Engine 5
If the texture looks too big or too small on the mesh, change its UV tiling.
- Hold U and left-click to add a TexCoord node.
- Select it and set UTiling and VTiling in the Details panel. These scale the mesh UVs horizontally and vertically. Higher values repeat the texture more often.
- Connect the TexCoord output to the UVs input on every Texture Sample in the material, so all the maps stay lined up.
- Click Apply.
A mesh still needs sensible UVs for this to work. If the texture is stretched on one face, the problem is the UV layout, not the material. Repeating also only looks clean on a seamless texture. Our guide to making a texture seamless covers what to do when the repeat shows.
How to make a Material Instance in Unreal Engine 5
Once you have one material that works, make it reusable. A Material Instance inherits everything from its parent material but lets you swap textures and values without recompiling. That is how most projects handle many similar surfaces.
- In the parent material, right-click each Texture Sample and choose Convert to Parameter. Give each one a clear name in the Details panel, such as
BaseColororRoughness. - Do the same for any value you want to tweak, such as the TexCoord tiling. A Scalar Parameter (hold S and click) works well for a single tiling value.
- Click Apply and Save.
- In the Content Browser, right-click the parent material and choose Create Material Instance.
- Open the instance. Check the box next to a parameter to override it, then change the texture or value.
- Save the instance and apply it to your mesh like any other material.
Epic's step-by-step instance guide has more detail. One catch from the Material Instance Editor reference: an unchecked parameter keeps the parent's value even if you typed something into the field.
In practice, we build one parent material per type of surface, such as a basic opaque PBR material, and make an instance for each texture set. Changing brick to concrete then takes seconds.
Why does my Unreal material look wrong?
| Problem | Likely cause | Fix |
|---|---|---|
| Sampler type error after changing a texture | The node still expects color data | Set the node's Sampler Type to match, such as Linear Color |
| Surface looks too glossy or too flat | Roughness imported with sRGB on | Turn sRGB off on the roughness texture |
| Bumps look inverted | Normal map uses OpenGL orientation | Flip the green channel |
| Everything looks metallic | Metallic map has gray values, or a map is wired wrongly | Check the map and the connections |
| AO input has no effect | Lights are Movable | See the AO and Lumen notes below |
| Main node has no Base Color pin | Project may use Substrate | Use Epic's Substrate docs |
The sampler type fix comes from Epic's texture masks documentation. Turning sRGB off on a texture does not update existing nodes, and the material will not compile until the Sampler Type changes from Color to Linear Color.
For inverted normals, Unreal expects DirectX orientation. See Unreal Engine normal map green channel for how to flip it, and OpenGL vs DirectX normals for the background.
The AO input is easy to over-trust. Epic's Material Inputs page says it relies on Static or Stationary lights and is silently ignored with Movable lights. Our post on AO maps with Lumen covers what to do instead.
Substrate is Unreal's newer material framework, and Epic moved it to production in 5.7. If your main material node does not show the classic Base Color, Metallic, and Roughness inputs, check whether your project uses Substrate and follow the Substrate documentation. The steps in this guide use the classic inputs shown in Epic's quick start.
Getting twirl materials into Unreal
twirl exports separate albedo, normal, roughness, metallic, and height maps, which fit the table above directly. There is no Unreal plugin yet, so you import the PNG files by hand. twirl does not create an ORM file, so pack channels yourself if your project needs one. The twirl Unreal Engine page summarizes the setup.
If the surface you need is not in a library, the AI material generator can create a five-map set from a text prompt.
FAQ: making materials in Unreal Engine 5
What is the difference between a material and a Material Instance?
A material is the shader graph and needs to compile when you change it. A Material Instance inherits that graph and only changes the parameters you exposed, so edits preview right away. Use materials for structure and instances for variations.
Can I put a texture straight on a mesh in Unreal Engine?
No. A mesh's material slots take materials, and the material samples the texture. Make a material first, then assign it to the mesh.
Do I need a roughness map in Unreal Engine?
No. You can drive Roughness with a single Constant (hold 1 and click) instead. A roughness map adds variation such as scratches, smudges, and wear, which usually reads as more realistic.
Why is my material black in Unreal Engine?
Check that the base color texture is connected to Base Color and assigned in the node's Details panel. Also check the Metallic input. A fully metallic surface with a dark base color can look nearly black under weak lighting.
Can I use Blender textures in Unreal Engine?
Yes. The image files are the same. The usual differences are normal map orientation and channel packing. Blender uses OpenGL normals and Unreal uses DirectX, so you may need to flip the green channel. If you are coming from Blender, our Blender texture guide shows the equivalent node setup.
