Substance Painter Baking Issues: Mesh Map Errors, Cage Setup, and High-to-Low Poly Workflow
Substance Painter baking produces artifacts, missing maps, or incorrect normals due to mismatched high/low poly geometry, incorrect cage settings, or naming convention errors. I cover the baking workflow, naming conventions, and the cage calibration that produces clean bakes.
Substance Painter Baking Issues: Mesh Map Errors, Cage Setup, and High-to-Low Poly Workflow
Baking is the foundation of every Substance Painter project — if the mesh maps (ambient occlusion, curvature, normal, position, thickness) are wrong, every texture you paint on top of them will look wrong. I've debugged baking issues for game studios and product visualization teams, and the problems almost always come down to three things: naming conventions, cage configuration, and high/low poly mesh preparation.
Understanding the Baking Pipeline
Substance Painter bakes mesh maps by casting rays from a low-poly mesh to a high-poly mesh. The high-poly mesh provides the detail, and the low-poly mesh provides the UV coordinates. The result is a set of 2D texture maps that capture the high-poly detail in the low-poly mesh's UV space.
Required inputs:
- Low-poly mesh: With clean UVs and proper naming
- High-poly mesh: Detailed geometry, no UVs required
- Cage (optional but recommended): Controls the ray casting distance
Output maps:
- Normal map: Surface detail from high-poly to low-poly
- Ambient Occlusion (AO): Contact shadows
- Curvature: Convex/concave surface information
- Position: World-space position data
- Thickness: Surface thickness data
Issue 1: Naming Convention Errors
Substance Painter uses naming conventions to match high-poly meshes to low-poly meshes. If the names don't follow the convention, Painter can't match them and the bake fails or produces incorrect results.
The naming convention:
- Low-poly mesh:
mesh_name - High-poly mesh:
mesh_name_high(ormesh_name_hp) - Example:
barrel(low) andbarrel_high(high)
For multiple high-poly meshes per low-poly mesh:
barrel_high→ matches tobarrelbarrel_handle_high→ also matches tobarrel(Painter matches by prefix before_high)
Common naming mistakes:
- Different base names: Low-poly is
barrelbut high-poly isbarrel_v2_high— Painter can't match them - Missing _high suffix: High-poly mesh is just named
barrel_detail— Painter doesn't recognize it as a high-poly mesh - Extra spaces or special characters:
barrel _high(space before _high) — Painter's matching is exact - Case sensitivity:
Barrel_highvsbarrel— Painter is case-sensitive on some systems
The fix: Before importing into Substance Painter, verify the naming in your 3D application (Blender, Maya, 3ds Max). Rename meshes to follow the convention exactly. I use a checklist:
- Every low-poly mesh has a clean name (no suffix)
- Every high-poly mesh has the same name +
_highsuffix - No spaces, no special characters, consistent case
Issue 2: Cage Configuration
The cage controls how far rays travel from the low-poly mesh to find the high-poly mesh. If the cage is too small, rays don't reach the high-poly and you get missing detail. If the cage is too large, rays overshoot and pick up detail from adjacent surfaces, creating artifacts.
Symptoms of incorrect cage:
- Cage too small: Normal map has gaps or missing detail in concave areas
- Cage too large: Normal map shows detail from adjacent surfaces bleeding across UV seams
- Cage uneven: Some areas bake correctly while others have artifacts
The fix — use Painter's cage settings:
- In the Baking dialog, go to Cage settings
- Enable Use cage
- Set the Cage distance — start with 0.05 (5% of the model's bounding box) and adjust
- Use the Visualize cage option to see the cage in the viewport
- The cage should be just large enough to encompass the high-poly mesh
For complex models: Use per-mesh cage settings instead of a global cage. Each mesh pair can have its own cage distance, which is essential when different parts of the model have different detail densities.
My approach: I start with a global cage distance of 0.02, render a test bake, and inspect the results. If I see missing detail, I increase the cage. If I see bleeding, I decrease it. I iterate until the bake is clean.
Issue 3: High-Poly Mesh Not Found
Substance Painter reports "No high poly mesh found" during baking.
Causes and fixes:
- Naming convention not followed: Fix the names (see Issue 1)
- High-poly mesh not imported: Import the high-poly mesh into the same Substance Painter project
- High-poly mesh in a different scene: Export both low and high poly from the same 3D application file, or import them separately into Painter
- High-poly mesh is too far from low-poly: The meshes need to be in the same world-space position — if the high-poly is offset, the rays won't find it
Issue 4: Normal Map Artifacts at UV Seams
The baked normal map shows visible lines or steps at UV seam boundaries.
Causes and fixes:
-
Insufficient UV padding: The UV islands need padding (empty space around them) so the normal map has data to interpolate across seams. In your UV editor, set padding to at least 4-8 pixels at the target resolution.
-
UV islands too close together: If UV islands are nearly touching, the bake can bleed between them. Leave at least 4-8 pixels of space between UV islands.
-
Different UV island scales: If one island is much larger than another, the normal map detail appears at different scales. Normalize UV island sizes in your UV editor.
-
Smoothing groups / hard edges: The low-poly mesh needs correct smoothing groups. Hard edges should align with UV seams. If a hard edge is in the middle of a UV island, the normal map will have a visible seam.
The fix for smoothing groups: In your 3D application, set hard edges to align with UV island boundaries. This ensures the normal map compensates for the hard edge correctly. In Maya, use Soften/Harden Edges. In Blender, use Edge Split modifier or Shade Smooth/Flat.
Issue 5: AO Map Too Dark or Too Light
The ambient occlusion map is either completely black or completely white.
Fix for completely black AO:
- The cage is too small — rays can't escape the low-poly mesh's surface
- Increase the cage distance
- Check that the high-poly mesh is properly positioned around the low-poly
Fix for completely white AO:
- The cage is too large — rays travel past the high-poly mesh
- Decrease the cage distance
- Check that the high-poly mesh actually has detail (concave areas, crevices)
Fix for noisy AO:
- Increase Anti-aliasing in the baking settings from 2x to 4x
- Increase AO rays — more rays produce smoother AO but take longer to bake
Issue 6: Baking Takes Too Long
Baking a single mesh takes 10+ minutes.
Fixes:
- Reduce anti-aliasing: Set to 2x instead of 4x or 8x — 2x is sufficient for most assets
- Reduce map resolution: Bake at 2048 instead of 4096 — you can always re-bake at higher resolution for the final asset
- Disable unused maps: If you don't need position or thickness maps, disable them
- Bake per texture set: Don't bake all texture sets simultaneously — bake one at a time
- Close other applications: Baking is GPU-intensive — close other GPU applications
- Check polygon count: If the high-poly mesh has 10M+ polygons, baking will be slow regardless of settings. Consider decimating the high-poly mesh while preserving silhouette detail.
Issue 7: Incorrect Curvature Map
The curvature map doesn't show the expected convex/concave information — edges are missing or areas are incorrectly marked.
Fix:
- Increase the curvature radius: In baking settings, increase the curvature search radius — this controls how far the curvature calculation looks for convex/concave changes
- Check the high-poly mesh: The curvature is calculated from the high-poly mesh's surface — if the high-poly doesn't have clear edge definition, the curvature map will be weak
- Use the low-poly mesh for curvature: Some artists bake curvature from the low-poly mesh instead of the high-poly — this gives less detail but more consistent edge detection
Best Practices for Clean Bakes
- Prepare meshes in the 3D application: Clean UVs, correct naming, proper smoothing groups
- Position high and low poly in the same location: They must overlap in world space
- Use a cage: Always enable the cage and visualize it before baking
- Test bake at low resolution: Bake at 1024 first to verify correctness, then re-bake at the target resolution
- Inspect all maps after baking: Check normal, AO, and curvature for artifacts before starting to paint
- Keep the high-poly mesh accessible: If you need to re-bake, you'll need the high-poly mesh — don't delete it from your 3D application project
Summary
Substance Painter baking issues are most often caused by naming convention errors, incorrect cage settings, or UV/smoothing group misalignment. My fix order: verify naming convention (low: name, high: name_high) → configure cage distance with visualization → ensure UV padding of 4-8 pixels → align smoothing groups with UV seams → test bake at 1024 → inspect all maps → re-bake at target resolution. The naming convention and cage configuration together fix about 70% of baking issues I encounter.
Source Verification
More Substance Painter Guides
troubleshooting
Substance Painter Export Crashes: 4K/8K Resolution, Virtual Memory, and TDR Timeout Fixes
9 min
performance
Substance Painter Performance: Document Resolution, Layer Management, and Export Optimization
10 min
troubleshooting
Substance Painter VRAM Out of Memory: TDR Fix, Sparse Virtual Textures, and Resolution Management
11 min
deployment
Substance Painter GPU Selection: Wrong GPU, Intel Override, and NVIDIA Control Panel Configuration
9 min
Related Troubleshooting Guides
Similar troubleshooting content for other CAD tools
3ds Max
•troubleshooting
3ds Max FBX and OBJ Import: Missing Materials, Broken UVs, and Texture Path Recovery
11 min
3ds Max
•troubleshooting
3ds Max Plugin DLL Errors: Missing Files, Load Failures, and plugin.ini Repair
9 min
3ds Max
•troubleshooting
3ds Max Random Crashes: Memory, Driver, and Crash Log Analysis Guide
10 min
Altium Designer
•troubleshooting
Fixing Altium Designer DRC Errors: Common Clearance and Routing Violations
9 min