How to Make a Leather Material in UE5

Leather reads through its pore pattern and its history — creases, stretch marks and polished wear where hands touch it. New leather is even; loved leather is a map of use, and the roughness channel tells that story.

Channel by channel

Base color

Rich browns (or the target dye color) with warm variation concentrated in creases and edges — slightly darker in recesses, slightly lightened on worn high points.

Roughness

Mid-range base (0.4–0.6) with strong variation: creases rougher, handled/polished areas glossier (down to 0.25). This wear-map is the difference between leather and brown plastic.

Metallic

0.0.

Normal

The pore grain (fine pebbled texture) plus larger crease lines. Pore scale must match the object size — giant pores on a wallet read as elephant hide.

The hand-building tip that matters

Layer two normal maps: a tiling micro-pore detail normal blended over unique macro creases. Unreal’s BlendAngleCorrectedNormals node combines them without flattening either.

New to the four channels? Read the PBR basics first.

Or start with a material brief

MaterialForge generates a UE5 material recipe, with seamless textures and derived PBR maps where needed. Preview the result, then apply it through the desktop app. This link prefills your prompt:

Try “leather” in MaterialForge

Prompt variations to try

Applying into your editor happens through the free Cosindra desktop app (Windows & macOS).

Want alternatives or a set of different surfaces? Follow the MaterialForge workflow →

Common questions

Why does my leather material look like brown plastic?

Uniform roughness is the giveaway. Real leather carries a wear story: keep a 0.4–0.6 base but push creases rougher and pull handled areas down to about 0.25 where polish builds up. Drive that variation with a crease or cavity mask so it lands where hands and folds actually touch — a flat roughness constant erases everything that identifies leather.

How do I combine fine pore detail with large crease normals in UE5?

Blend two normal maps at different scales: a tiling micro-pore detail normal over unique macro creases, joined with the BlendAngleCorrectedNormals node so neither map flattens the other. The DetailTexturing material function packages the same idea with distance-based fade built in. Tile the pore map several times denser than the crease map so the two scales stay distinct.

What pore scale should leather use so it doesn’t look like elephant hide?

Match pore size to the object’s real-world dimensions: on a wallet or belt the pebble grain should be barely individually visible at gameplay distance, which means tiling the detail normal densely. Expose that detail tiling as a scalar parameter in a Material Instance and calibrate per asset against a mannequin, rather than recompiling the master material each time.

More materials