Skip to content
← Back to Blog 3d-modeling

Vertex Color Painting in Blender: The Complete Game Artist Workflow for Unity, Unreal Engine 5, and Godot 4

By BitSoul3D7 min read267 views

Vertex colors are one of the most underused tools in a game artist's kit. While PBR texture sets dominate most workflows, vertex color data travels inside the mesh itself — no extra texture slot, no UV space, no sample cost. Whether you're blending terrain materials, driving ambient occlusion, or masking procedural effects, vertex colors give you per-vertex control at virtually zero runtime overhead.

Vertex Color Painting in Blender: The Complete Game Artist Workflow for Unity, Unreal Engine 5, and Godot 4

This guide covers the full pipeline: painting vertex colors in Blender, exporting correctly via GLB or FBX, and wiring them up as masks and blend inputs in Unity URP, Unreal Engine 5, and Godot 4.

What Are Vertex Colors and Why Game Artists Use Them

Vertex colors store RGBA values directly on each vertex of a mesh. Unlike textures, they don't require UV unwrapping and they scale with geometry density rather than texture resolution. A high-poly mesh has finer vertex color detail; a low-poly mesh has coarser transitions — which is exactly the tradeoff you want for LODs.

Common game art use cases include:

For marketplace assets at BitSoul Marketplace, vertex color masks are a powerful way to add material flexibility without increasing texture count — a major selling point for environment and prop assets.

Setting Up Vertex Color Painting in Blender

Setting Up Vertex Color Painting in Blender — illustrated

Blender's vertex color system changed significantly in version 3.2 with the introduction of Color Attributes. In Blender 3.2+, you work with Color Attributes instead of the old Vertex Color layer system, which aligns better with modern engine expectations.

Create a Color Attribute

  1. Select your mesh and enter Object Data Properties (green triangle icon).
  2. Under Color Attributes, click + to add a new attribute.
  3. Set Domain to Face Corner for the smoothest painting experience (interpolated per vertex across faces). Use Point (Vertex) domain if you want hard per-vertex values.
  4. Set Data Type to Byte Color for standard RGBA (0–255 per channel, compact). Use Float Color only if you need HDR vertex colors — most game engines don't support this and will clamp on import.
  5. Name the attribute descriptively: BlendMask, WindWeight, or AOLayer.

Enter Vertex Paint Mode

Switch to Vertex Paint mode from the mode dropdown (top-left of the 3D viewport, or Ctrl+Tab). Your mesh will display the current vertex colors immediately.

Key settings in the Tool panel (N sidebar → Tool tab):

Painting Tips for Clean Results

# Blender Python snippet: fill entire mesh with a base color via script
import bpy

obj = bpy.context.active_object
mesh = obj.data

# Get or create the Color Attribute
if "BlendMask" not in mesh.color_attributes:
    mesh.color_attributes.new(name="BlendMask", type='BYTE_COLOR', domain='CORNER')

attr = mesh.color_attributes["BlendMask"]

# Fill all corners with white (1, 1, 1, 1)
for data in attr.data:
    data.color = (1.0, 1.0, 1.0, 1.0)

print(f"Filled {len(attr.data)} face corners.")

Use the Fill tool (Shift+K in Vertex Paint mode) to flood-fill a selection with a flat color before detail painting. This gives you a clean baseline to paint on top of. For gradient transitions, reduce brush strength to 0.1–0.2 and build up coverage gradually — vertex color edges can look harsh at low poly counts if you paint too hard.

Using Vertex Colors for Terrain Blend Materials

The most powerful application for game environments is using vertex color channels to blend between tiling detail textures. Each channel (R, G, B, A) acts as a weight for a different material layer.

ChannelTypical Use
R (Red)Grass / base ground
G (Green)Dirt / path
B (Blue)Rock / cliff
A (Alpha)Snow / wetness

In practice, keep your masks single-channel and inverted if your engine expects 0 = no influence, 1 = full influence. Avoid using all four channels simultaneously on low-poly meshes — transitions become muddy at vertex density below 1 vertex per 50 cm.

Blending Rules

Blending Rules — illustrated

Exporting Vertex Colors: GLB, FBX, and Engine Import Settings

Vertex colors are exported differently depending on format and destination engine.

GLB / GLTF Export (Recommended)

GLB is the cleanest format for vertex color preservation. In Blender's GLTF exporter:

  1. File → Export → glTF 2.0 (.glb/.gltf)
  2. Under Mesh, ensure Colors is checked
  3. Vertex Color attribute named COLOR_0 exports as the primary color; COLOR_1 as secondary (if present)
  4. Note: glTF vertex colors are encoded as linear RGBA floats (0.0–1.0). Blender handles the sRGB→linear conversion on export automatically for Byte Color attributes.

Godot 4 imports COLOR_0 directly as COLOR in the vertex shader. Unity 2021+ reads it as mesh.colors. UE5 reads it from the Vertex Color node in Material Editor.

FBX Export

FBX vertex color export is reliable but watch for this: Blender exports vertex colors in sRGB space by default in FBX. If your engine applies gamma correction twice, your blend masks will look washed out. The fix:

Export FBX → Geometry tab → uncheck "Apply Modifiers" if you have subdivision
In UE5 import settings → enable "Import Vertex Colors" explicitly
In Unity, vertex colors in FBX are read automatically; no extra step needed

Engine Shader Setup Cheatsheet

EngineNode / Method
Unity URPShader Graph → Vertex Color node → connect to Lerp/blend
Unreal Engine 5Vertex Color node in Material Editor → mask individual channels
Godot 4COLOR built-in in VisualShader or shader code → COLOR.r / .g

For Unity, apply the vertex color to a Lerp node between two texture samples — the vertex color R channel becomes the blend weight. In UE5, multiply the vertex color channel by each texture's BaseColor output before summing them. In Godot 4, use a mix() function in a custom shader:

// Godot 4 spatial shader snippet
void fragment() {
    vec4 grass = texture(grass_tex, UV);
    vec4 dirt = texture(dirt_tex, UV);
    float blend = COLOR.r; // red channel from vertex paint
    ALBEDO = mix(dirt.rgb, grass.rgb, blend);
}

Vertex Color Tips for Marketplace-Ready Assets

If you're publishing assets on BitSoul Marketplace or other 3D asset platforms, well-documented vertex color data significantly increases asset value and usability. Follow these conventions to make your vertex color layers immediately useful to buyers:

Naming conventions:

Data hygiene:

Performance notes:

Combine with texture baking strategically. Vertex color ambient occlusion works well for large environment meshes where baked AO texture would be too low-resolution or not worth the texture slot. For hero props and characters, baked AO textures remain sharper — use vertex color AO only as a fallback or for background assets.

Vertex colors are a mature, broadly supported feature with zero texture overhead. Used deliberately, they let you ship more flexible, engine-agnostic assets with fewer textures and cleaner shader graphs. Start with a single blend mask channel, verify it in your target engine, and build from there.

Browse vertex-color-ready environment and prop assets at BitSoul Marketplace to see these techniques applied to production-ready packs.


Build with real assets: grab game-ready nature 3D models on the BitSoul marketplace and drop them straight into your project.

Tags: nature

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)