[UE5] Material Basics: The Four PBR Pins and Material Instances

Created: 2025-12-12Last updated: 2026-07-20

You applied a texture and it still looks cheap, because every pin except Base Color is empty. This article explains what Metallic, Roughness, and Normal do, then walks through parameterizing a material and mass-producing color variants with Material Instances.

You've applied a texture to a 3D model and it displays fine. But it still looks cheap. Like a plastic toy, nothing like the surfaces in the examples you've seen. Nearly everyone who starts working with materials passes through this.

The cause is usually that every pin except Base Color is empty. A UE material isn't a "paint the surface" feature, it's a system for defining how light bounces off this surface, so color is only one ingredient. This article organizes the four pins you need first, then goes all the way to parameterizing a material and mass-producing color variants with Material Instances.

Illustration comparing a flat Base-Color-only sphere with a sphere that has Roughness and Normal configured

What You'll Learn

  • A material decides how light bounces, not just color
  • Roughness decides surface character (leave it empty and things look cheap)
  • Metallic is 0 or 1, values in between are almost never used
  • Five nodes are enough to get started
  • Hands-on: parameterize a material and build color variants with Material Instances

Sponsored

A Material Is "How Light Bounces"

UE materials are built around PBR (physically based rendering). It sounds intimidating, but the meaning is simple: imitate how real-world materials bounce light. That's all.

Diagram showing identically shaped spheres looking mirror-like or matte depending on their Roughness value

Why can you tell iron, wood, and cloth apart in the real world? Not by color alone. It's because they bounce light differently. Iron reflects sharply enough to show a reflection; cloth scatters light into a blur. Expressing that difference numerically is the material's job.

So putting brown in Base Color won't make something look like wood. You haven't told it how wood bounces light.

There's another payoff: a properly built PBR material holds up under any lighting. Outdoors at noon, indoors at night, the same settings look natural. Not having to retune per lighting setup is PBR's biggest advantage.

The Four Pins to Learn First

The material output node has plenty of pins, but four are what you learn first.

Diagram of the four pins Base Color, Metallic, Roughness, and Normal, showing what each one decides
PinWhat It DecidesWhat Goes In
Base ColorThe raw colorColor (RGB)
MetallicIs it metal?0 or 1 (values in between are almost never used)
RoughnessSurface roughnessThe full 0–1 range
NormalApparent surface detailA Normal Map texture

Metallic is 0 or 1. There's almost no such thing as a "50% metallic" substance in reality. Wood, stone, plastic, cloth, and skin are all 0; iron, gold, and copper are 1. For mixed cases like rusted iron, paint the split with a mask texture: "1 here, 0 there."

Roughness is the star of surface character. Adjusting it is most of what material work actually is.

ValueAppearanceExamples
0.0Mirror-sharp reflectionA polished mirror, still water
0.2–0.4GlossyPainted cars, a wet floor
0.5–0.7Settled, ordinary surfacesMost things live here
1.0Fully matteChalk, coarse fabric

Materials that feel "cheap" usually have Roughness left unset (at its default) or pushed to an extreme. Try putting something around 0.5 in there first. That alone changes the impression.

Normal is the pin that shows detail without changing geometry. Brick mortar lines, screw threads, all without adding polygons. You just connect a Normal Map texture, so there's not much to get wrong.

Connected a Normal Map and the detail looks inverted? UE expects the DirectX convention. Blender and others sometimes export in the OpenGL convention, where the green channel is flipped. Open the texture asset and check Flip Green Channel to fix it.

Five Nodes Are Enough

The material editor has hundreds of nodes, but five kinds will do at the start.

Diagram showing the five nodes Constant, Texture Sample, Texture Coordinate, Multiply, and Lerp side by side
NodeWhat It DoesShortcut
ConstantA single number (Roughness, etc.)1 + click
Constant3VectorA color (RGB)3 + click
Texture SampleReads a textureT + click
Texture CoordinateAdjusts tiling (repetition)U + click
MultiplyMultiplication (brightness, masking)M + click

Holding a key and clicking the graph places the node instantly, and learning these genuinely changes how fast you work.

A word on where Multiply comes in. Multiply a texture by 0.5 and it darkens; by 2.0 and it brightens. That's the basic use. Going further, multiplying a color by a mask lets you express things like "only this part is rusted."

One more you'll definitely reach for eventually is Lerp (Linear Interpolate). It blends A and B by the ratio in Alpha.

  • Alpha = 0A comes through unchanged
  • Alpha = 1B comes through unchanged
  • Plug a mask texture into Alpha and only the white areas become B

Blending dry ground with wet ground using a puddle mask? That's Lerp.

Sponsored

Hands-On: A Metal Material With Changeable Color

Equipment color variants in an RPG, car paint in a racing game, weapon skins in an FPS. "Same material, different color" shows up in huge quantities in every genre. Doing it by duplicating materials falls apart, so let's learn the right way.

Setup: no textures needed. We'll start with a solid-color metal and make its color changeable afterward.

TypeNameContents
MaterialM_Metal_BaseThe parent material we're about to build
Material InstanceMI_Metal_Gold / MI_Metal_SteelColor variants (created later)
For checkingThree SpheresLined up in the level

Step 1: Create the material. Right-click in the Content Browser → Material. Name it M_Metal_Base and open it.

Step 2: Build the surface with fixed values first. Place and connect the following in the graph.

  • 3 + click to place a Constant3Vector, double-click to pick a color (gold for now: R=1.0 / G=0.77 / B=0.34) → into Base Color
  • 1 + click to place a Constant, set it to 1.0 → into Metallic
  • Place another Constant, set it to 0.25 → into Roughness

Hit Apply and look at the preview sphere. You should have a gold sphere reflecting the environment like a mirror.

Now move only Roughness to get a feel for it. At 0.05 it's mirror-like; at 0.6 it's a dull metal. You can see with your own eyes that Roughness is what decides surface character.

Step 3: Parameterize it. Here's the real point of the exercise.

Right-click the Constant3Vector (the color) node → Convert to Parameter, and name it BaseColor. Do the same for the Roughness Constant and name it Roughness.

Diagram showing fixed-value nodes turning into named parameter nodes

The nodes change appearance and now carry names. That means their values can be swapped from outside. Hit Apply and Save.

Step 4: Create a Material Instance. Right-click M_Metal_Base in the Content Browser → Create Material Instance. Name it MI_Metal_Gold and open it.

The Details panel lists BaseColor and Roughness. Tick the checkbox on the left to make one editable, then change the value. The preview updates instantly.

Follow the same steps for MI_Metal_Steel, setting BaseColor to gray (R=0.56 / G=0.57 / B=0.58) and Roughness to 0.35.

Step 5: Line them up and compare. Assign M_Metal_Base, MI_Metal_Gold, and MI_Metal_Steel to the three Spheres in your level.

All three should keep the same "metal" character while differing only in color and gloss. If you see that, it worked.

Diagram showing three Material Instances branching from one parent material, producing spheres with the same character but different color and gloss

The real benefit of Instances starts here. Open M_Metal_Base and add a subtle scratch texture into Roughness. The moment you save, both the gold and the steel pick it up. Had you duplicated materials instead, you'd be repeating that edit on every copy.

If something's off, here's how to narrow it down.

  • Looks pure black → Metallic is 1 but Base Color is too dark. Metal is visible through reflections, so with no light around it turns black
  • Looks like plastic → Metallic is still 0
  • Changing a value in the Instance does nothing → You haven't ticked the checkbox on the left of Details
  • The parameters don't appear → You forgot Convert to Parameter in the parent material, or didn't save

Two things to take away.

  • Don't duplicate materials, create Instances: Visual differences go in Instances, structural changes go in the parent. Keep that split and you can fix everything at once later
  • Instances are cheap: Duplicating a material compiles a new shader per copy, while an Instance only swaps parameters, so nothing compiles. The gap widens as the count grows

When you move on to textured materials, running Convert to Parameter on a Texture Sample lets Instances swap the texture too. Drive those parameterized values at runtime and you get effects like a flash of red the moment a character takes a hit (→ Changing Colors at Runtime with Dynamic Material Instances). If you want to adjust the color of the whole screen instead, Post Process Volume is a different angle on the problem.

Sponsored

Bonus: Good to Know for Later

Don't put pure black or pure white in Base Color. Real materials never absorb or reflect light completely. Keeping values roughly in the 30–240 range in RGB terms looks natural. Pure black leaves you with a black blob under any lighting.

Emissive isn't only "looks like it's glowing." With Lumen in UE5, an emissive surface actually lights its surroundings. That said, it needs enough area and enough intensity to matter, and small, weak emissives contribute almost nothing. To light a scene with a neon sign, you need Emissive values in the tens or higher.

Adjust tiling with Texture Coordinate. When a texture looks stretched, press U + click to place a Texture Coordinate, raise UTiling / VTiling, and connect it to Texture Sample's UVs. Parameterizing this too is handy, since you can then tune it per Instance.

There's also a newer material framework called Substrate. UE5 offers Substrate, which lets you layer multiple material behaviors together (the clear coat on car paint, oiled leather, blood and sweat on skin). Conventional materials are still what you get by default, so the four ideas you learned here — Base Color, Metallic, Roughness, Normal — remain the foundation. Enabling it changes how materials are authored, so get comfortable with the conventional form first.

Don't judge from the preview sphere alone. The material editor preview uses its own lighting environment. It isn't finished until you've placed it in the actual level and viewed it under your game's lighting. Dark scenes in particular change the impression dramatically.


Summary

When a material isn't working, check in this order.

SymptomPin to Check
Cheap-looking, flatRoughness (if unset, try around 0.5)
Looks like plasticMetallic (set to 1 for metals)
Flat with no surface detailNormal (connect a Normal Map)
Detail looks invertedThe texture's Flip Green Channel
Pure blackBase Color too dark / no light around it

And one workflow rule: build color variants as Instances. The moment you duplicate a material, the number of places you'll have to fix later grows by one.

The material you're using right now, is its Roughness pin connected?