The 3D Handbook
Topic

Vertex painting and blending

Painting vertex colours onto meshes to blend tileable materials (clean to dirty, brick to plaster, dry to wet) directly in the level; tools in Unreal, Unity, Godot and Blender, how vertex density limits the result, and per-instance painting.

texturingmaterialsengineset-dressing

Vertex painting stores colour values on a mesh's vertices and uses them as masks in a material, usually to blend between two or more tileable materials. You paint brick into plaster, clean metal into rust, or dry stone into wet stone, directly on the mesh in the level. The material does the blending; the vertex colours only say where.

It is one of the cheapest ways to make large, tiling surfaces look unique, and it is a core skill for anyone doing set dressing and art passes or terrain-like meshes.

Two wall strips: the left shows raw vertex colours, red at the bottom fading to black at the top; the right uses that red channel to blend grey stone into green moss.
Left: the raw vertex colours, painted per vertex, so the red channel is strongest at the bottom with a ragged edge. Right: the same wall where a material uses that red channel as a mask to blend from stone grey to moss green. The colours blend smoothly between vertices, so the blend can only be as detailed as the mesh is dense: compare the 16 × 8 grid here with how soft the edge is.Rendered in Blender 5.2 (Cycles) by the handbook author

#How it works

Every vertex can carry a colour with four channels, red, green, blue and alpha; see vertex colours. The GPU interpolates these values across each triangle, so a vertex painted fully red next to one with no red produces a smooth gradient between them.

A blend material reads those channels as weights. In Unreal you add a VertexColor node and feed its channels into the Alpha input of Lerp (linear interpolate) nodes, one Lerp per extra material (Unreal Engine documentation: Setting Up a Texture Blended Material for…). In Godot, the COLOR built-in carries "color from vertices", limited to 0 to 1 per channel with 8 bits of precision (256 levels) (Godot Engine documentation: Spatial shaders).

Channels used Materials blended Unreal's Texture Weight Type
Alpha 2 Alpha (Two Textures) (Unreal Engine documentation)
R, G, B 3 RGB (Three Textures) (Unreal Engine documentation)
A, R, G, B 4 ARGB (Four Textures) (Unreal Engine documentation)
A, R, G, B, and 1 − A 5 ARGB − 1 (Five Textures), using a one-minus on alpha for the fifth (Unreal Engine documentation; Unreal Engine documentation)

Each blended layer usually means another set of texture samples, so more layers cost more. Two or three layers per surface is common; five is the practical ceiling with one colour set.

Two identical wall strips are painted with the same brush stroke. The top wall has only six vertices, so the painted orange value spreads into a long, soft linear gradient across the whole quad. The bottom wall has extra vertical edge loops; the same stroke stays where it was painted and makes a shorter, more controlled transition. Dots mark the vertices, filled in orange where painted.
Vertex colour lives on vertices and is interpolated between them. Fewer vertices mean broader, blurrier masks; extra edge loops give you control where you need it.Diagram by the handbook author

#Vertex density

Vertex colours have exactly as much resolution as the mesh has vertices. A 4 m wall made of one quad can only fade from one corner to another. If you want a dirty strip along the base, you need an edge loop near the base.

Artists plan for this when they model. Matthew Trevelyan Johns, a texture and shader artist at Naughty Dog, described working with the layout artist's "vertex painting suggestions" and adding "additional edge loops to support my vertex blending" (80 Level: Building Environments for Uncharted: The Lost…).

Practical rules:

  • Add loops where blends will happen: along the base of walls, around door frames, along the top of a wall where rain stains would start.
  • Keep spacing even on surfaces you will paint freely, such as floors and large rock faces. Uneven spacing gives uneven brush response.
  • Check the triangulation. The diagonal of each quad changes how a gradient interpolates, which can show as zigzags in the mask.
  • Mind the budget. Extra loops are cheap on walls, but they still count; see polygon and triangle budgets.

Unreal's newer Texture Color mode avoids the problem by painting into a per-instance "mesh paint texture" instead of vertices (Unreal Engine documentation: Activating and Using Mesh Paint Mode in…). It requires virtual textures to be enabled, and Epic recommends it for Nanite meshes (Unreal Engine documentation: Activating and Using Mesh Paint Mode in…). Its default resolution is derived from a project-wide "texels per vertex" ratio (Unreal Engine documentation: Mesh Paint Tool Reference in Unreal Engine).

#Making blends look natural

A plain linear blend looks like one material fading through the other, like two photos cross-dissolved. Real materials do not mix that way: mud fills the gaps between stones first, and paint flakes off the high points last.

Height blending addresses this: it uses a height and displacement maps (or any greyscale mask) to decide which material wins as the vertex weight changes. In Unreal, the HeightLerp material function does this, with a Transition Phase and a Contrast input (Unreal Engine documentation: Texturing Material Functions in Unreal Engine). Ryan Manning's community series builds "a Height Blended Material with four distinct material variations" painted with vertex colours (Epic Developer Community: UE4 Height Blended Materials 3-Part Series).

Other techniques combine well with vertex masks:

  • Multiply by a noise or grunge texture so the painted edge is broken up.
  • World-aligned masks, for example dust only on upward-facing surfaces; see triplanar and world-aligned mapping.
  • Use different channels for different jobs: red for a second material, green for wetness, blue for moss.

#Per-instance painting

Painting is most useful when each placed copy of a mesh can look different. A modular wall placed fifty times can have fifty different dirt patterns while still sharing one mesh asset.

Per-instance paint is stored in the level rather than in the asset. If an artist changes the mesh's vertex count later, painted instances may break or need repainting. Agree on final topology before heavy painting, and use Unreal's Fix tool when it is needed (Unreal Engine documentation: Mesh Paint Tool Reference in Unreal Engine).

#In different tools

#Further reading and watching

A beginner-friendly setup of a vertex paint blend material and Mesh Paint mode in UE5; do the "Try it yourself" brief afterwards. Watch on YouTube

References

  1. Epic Games · Setting Up a Texture Blended Material for Vertex Weights Painting in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  2. Godot Engine contributors · Spatial shaders · Godot Engine documentation (source on GitHub) · docs · accessed 2026-10-21
  3. Epic Games · Mesh Paint Tool Reference in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  4. Matthew Trevelyan Johns (interviewed by Kirill Tokarev) · Building Environments for Uncharted: The Lost Legacy · 80 Level, 2017 · article · accessed 2026-10-21
  5. Epic Games · Activating and Using Mesh Paint Mode in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  6. Epic Games · Texturing Material Functions in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-21
  7. Ryan Manning · UE4 Height Blended Materials 3-Part Series · Epic Developer Community, 2022 · video · accessed 2026-10-21
  8. Harry Gray · Technical Tips for Environment Artists: Part 2 · 80 Level, 2019 · article · accessed 2026-10-21
  9. Jared Sobotta · Brick and Concrete Generator · ArtStation, 2023 · web · accessed 2026-10-21
  10. Unity Technologies · Polybrush (package manual 1.1) · Unity documentation · docs · accessed 2026-10-21
  11. Godot Engine contributors · Import configuration (3D scenes) · Godot Engine documentation (source on GitHub) · docs · accessed 2026-10-21
  12. Godot Engine contributors · BaseMaterial3D (class reference) · Godot Engine source on GitHub · docs · accessed 2026-10-21
  13. Godot Engine contributors · Standard Material 3D and ORM Material 3D · Godot Engine documentation (source on GitHub) · docs · accessed 2026-10-21
  14. Blender Foundation · Vertex Paint: Introduction · Blender Manual (2.93), 2021 · docs · accessed 2026-10-21

Also consulted

Last updated 2026-10-22