Skip to content
← Back to Blog 3d-modeling

Texture Painting Directly in Blender: A Game Artist's Complete Workflow

By BitSoul3D6 min read219 views

Most game artists reach for Substance Painter the moment texturing comes up — and for complex multi-layer projects, that makes sense. But for stylized props, hand-painted characters, or rapid prototyping, Blender's built-in Texture Paint mode is faster, costs nothing, and produces game-ready results without leaving the software you're already using. This guide walks you through the complete workflow, from canvas setup to engine export.

Texture Painting Directly in Blender: A Game Artist's Complete Workflow

Setting Up Your Canvas: UV Maps and Image Slots

Texture painting requires a properly unwrapped UV map and at least one image texture node wired into your material before you pick up a brush. Skip this step and you'll paint into nothing.

Start in the UV Editor. With your mesh in Edit Mode, select all faces and run UV > Smart UV Project or a manual Unwrap depending on your mesh's complexity. Smart UV Project works well for hard-surface props; manual unwrapping with seams gives cleaner results for characters. Keep texel density consistent — a pixel-per-unit ratio between 10–20 is typical for game props at 2048×2048 resolution.

Once unwrapped, switch to the Shader Editor. Add an Image Texture node and connect it to the Base Color input of your Principled BSDF. Click New on the image texture node and create a 2048×2048 image (4096 for hero assets). Name it clearly: char_goblin_basecolor_2048. Leave it as a blank white canvas or a flat color base.

Critical: the image texture node must be selected (highlighted in the node editor) before you enter Texture Paint mode. Blender paints to whichever image texture node is active — if none is selected, brushstrokes disappear.

# Quick-check your UV islands aren't overlapping
# In Blender's Python console:
import bpy
obj = bpy.context.active_object
uv_layer = obj.data.uv_layers.active
print(f"UV layer: {uv_layer.name}")
print(f"Loops: {len(uv_layer.data)}")

For PBR workflows, create a separate image texture node and new image for each channel you plan to paint: Base Color, Roughness, and Metallic. You'll switch between them during painting by selecting the relevant node in the Shader Editor.

Setting Up Your Canvas: UV Maps and Image Slots — illustrated

Blender's Texture Paint Tools: Brushes, Masks, and Stencils

Blender's Texture Paint mode (Tab into it from the viewport header dropdown, or press Ctrl+Tab) gives you a surprisingly capable brush engine once you learn its layout.

Essential brushes:

BrushBest Use
DrawBasic color application, opacity-controlled
SoftenBlur transitions between paint regions
SmearPush wet paint, great for organic blends
CloneSample from another part of the mesh or reference image
FillFlood-fill a UV island with a flat color
MaskProtect regions from paint — non-destructive

Set Blend Mode to Mix for standard painting, or switch to Multiply/Screen for darkening/lightening passes. Use Falloff curves to control brush pressure response — a sharp falloff gives you crisp edges for stylized cell-shaded looks; a smooth falloff suits realistic skin.

Stencil projection is underused but powerful. Go to the brush settings, enable Texture, load a grunge or noise image, set Mapping to Stencil, then position and scale it in the viewport with RMB drag. Paint through it to stamp weathering, rust, or damage patterns in a single stroke.

Face masking (toggle in the header with the face icon) lets you isolate a single UV island for painting — indispensable when you have tightly packed UVs and don't want color bleeding across seams.

For hard-surface assets like crates or weapons, combine Fill to block in flat colors per region, then use Draw with a low-opacity speckle texture to add surface variation. Three or four passes in this sequence produces a hand-painted look in under ten minutes per prop.

Painting PBR Channels Directly

Texture painting isn't limited to Base Color. For a full PBR material, you'll paint Roughness and optionally Metallic directly in Blender, giving you control over surface finish without opening a separate app.

Roughness pass: Create a new 2048×2048 image (enable 32-bit float for precision), wire it into Roughness on the Principled BSDF. Select that node in the Shader Editor. In Texture Paint mode, disable color management by setting the Image Editor's view transform to Raw — roughness is a grayscale linear value, not sRGB. White (1.0) = fully rough, black (0.0) = mirror smooth. Paint highlight areas (raised edges, worn metal) lighter; recessed areas darker for cavity-style variation.

Metallic pass: Same process. Most game props are either 0 (non-metal) or 1 (metal) — paint in black-and-white only. Intermediate values represent unusual materials like carbon fiber and are rarely needed.

Layering tip: For complex assets, use Blender's Vertex Color paint as a low-fidelity mask during concepting, then promote to a proper texture once you're happy with the distribution. This non-destructive iteration is much faster than committing to full-resolution paint immediately.

Painting PBR Channels Directly — illustrated

Exporting Painted Textures for Unity, Unreal Engine 5, and Godot 4

Painted textures live inside your .blend file until you save them explicitly. Go to Image Editor > Image > Save As for each texture. Choose PNG for Base Color (sRGB) and 16-bit PNG or EXR for Roughness/Metallic (linear data). Name files with a consistent convention:

asset_name_basecolor.png
asset_name_roughness.png  
asset_name_metallic.png
asset_name_normal.png  ← baked separately via Cycles

Unity: Import textures, set Base Color to sRGB, Roughness and Metallic to Linear (uncheck sRGB in the texture import settings). Use URP's Lit shader or HDRP's Lit. Assign your textures to the matching channels in the material inspector.

Unreal Engine 5: In the texture asset settings, set Roughness and Metallic to TC_Grayscale compression and uncheck sRGB. Base Color stays at TC_Default (sRGB). UE5's M_Basic_Surface material or any PBR master material accepts these directly.

Godot 4: Import textures, set Roughness and Metallic imports to Compress > Lossless and ensure sRGB is unchecked in the import panel. Assign in StandardMaterial3D to their corresponding slots.

For channel packing (combining Roughness into G and Metallic into B of a single texture to cut draw calls), see Blender's compositor or a Python script post-export — this step alone can halve your texture memory on mobile platforms.

Selling Hand-Painted Assets on the BitSoul Marketplace

Hand-painted game assets have a strong buyer base among indie devs who want stylized, low-poly art without licensing restrictions. The workflow you've built here — Blender UV unwrap → Texture Paint → PNG export — produces clean, self-contained assets that are easy for buyers to drop into any engine.

When preparing for the BitSoul marketplace, follow these quality checklist items before upload:

Hand-painted stylized assets typically sell well at the $5-$15 range for individual props and $20-$50 for full environment packs. Consistency in art style across a pack is a bigger sales driver than technical complexity — buyers want cohesion, not just polygon counts.

Browse the BitSoul marketplace to see what's already selling and identify gaps. Categories with high demand and low supply include: stylized food items, cozy interior props, low-poly fantasy creatures, and hand-painted weapon sets.


Blender's texture paint mode won't replace Substance Painter for AAA-complexity assets, but for the majority of indie game props, it delivers everything you need without a subscription or a steep learning curve. Build the UV setup and canvas workflow into muscle memory, learn the stencil and mask tools, and you can produce market-ready hand-painted assets in a single Blender session.

Ready to list your work? Upload your hand-painted assets to BitSoul and reach thousands of game developers looking for exactly what you're making.


Need drop-in assets for this workflow? Grab the 82-model Vehicle Bundle on the BitSoul marketplace and drop them straight into your project.

Tags: vehicles

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)