Intermediate Baking

How to Bake AO Maps Without Artifacts

A good ambient occlusion bake adds immediate depth and realism to even the simplest material. A bad one — grainy, too dark, full of seam artifacts — is immediately noticeable and hard to fix after the fact. This guide walks through the settings that matter and the fixes for every common AO baking problem.

⏱ ~8 min read · 6 sections · Intermediate

Section 01

What AO Baking Does

AO baking fires a hemisphere of rays from each surface point on the mesh and measures how many of those rays hit other geometry before escaping to the sky. A point surrounded by other geometry — a crevice, a corner, the underside of an overhang — has many ray hits and gets a dark value. An exposed, open surface has few hits and gets a bright value.

The result is a greyscale "soft shadow" map. White means open and exposed to ambient light. Dark means occluded and sheltered. Applied over the albedo, this adds a sense of depth and grounding that makes even a plain grey material read as three-dimensional.

AO is the highest effort-to-quality-ratio bake. A normal map bake needs a high-poly source and careful setup. An AO bake needs neither — it bakes directly from the low poly in minutes and immediately makes the asset look significantly better. Always bake AO, even on simple props.
Section 02

Key Bake Settings

These are the settings that have the most impact on AO bake quality. Getting them right before baking saves you from having to rebake.

Setting What It Does Recommended Starting Point
Ray count / Samples Number of rays fired per texel. More rays = cleaner result, longer bake time. 64 for preview, 128–256 for production quality
Max ray distance How far rays travel before counting as unoccluded. Controls how broad the shadowing is. Start at 0.1–0.5m for a typical prop, adjust based on asset size
Bias / Self-intersection offset Prevents the surface from occluding itself at the ray origin point. Small value — increase until self-shadow artifacts disappear at flat surfaces
Bake space Object space bakes self-occlusion only. World space includes nearby scene objects. Object space for portable assets; world space only for environment-specific bakes
Output resolution Texture resolution of the baked result. Match your normal and albedo resolution — typically 2048×2048
Start with a preview bake. Run a low sample count (16–32 rays) bake first to check for obvious problems — dark patches from nearby objects, seam lines, overall darkness level. Fix any issues before committing to a full quality bake at 128–256 samples.
Section 03

Common Artifacts and How to Fix Them

Artifact Grainy or noisy AO — looks like static
Fix Increase ray count. At 16 samples the result will always be noisy — 128 samples produces a clean result on most assets. Alternatively, apply a very slight Gaussian blur to the baked AO in your image editor — AO is a soft shadow map and tolerates subtle blurring without visible quality loss.
Artifact Dark patches from nearby scene objects
Fix Bake in isolation. Hide all other scene objects before baking, or use object-space baking mode so only the mesh itself contributes to occlusion. Nearby objects casting AO onto your asset looks incorrect when the asset is placed in a different context in-engine.
Artifact UV seam visible as a line in the AO map
Fix Same fix as normal maps — increase UV island padding and ensure edge dilation is enabled in the baker. AO is particularly prone to visible seam artifacts because the soft gradient makes any boundary misalignment visible as a distinct line. Aim for at least 8–16px padding at 2048 resolution.
Artifact AO is too dark overall — everything looks shadowed
Fix Lower the max ray distance. If rays travel too far, they pick up occlusion from distant surfaces that shouldn't contribute to local shadow — darkening the entire map. Reduce max distance until only nearby, genuinely occluded geometry darkens. Open, flat surfaces should remain near-white.
Artifact Self-shadow artifacts on flat faces
Fix Increase the bias / self-intersection offset. Without sufficient bias, rays fired from a flat surface immediately intersect that same surface and register as occluded — producing dark splotches on faces that should be fully white. Increase bias in small increments until the flat surface clears up.
Section 04

Baking AO from High Poly vs Low Poly

Unlike normal maps — which almost always need a high-poly source — AO can be baked from the low-poly mesh alone and still look excellent. The choice between the two approaches depends on how much fine surface detail you need captured in the AO.

Low poly AO only

Fast and simple. Captures all the broad occlusion from the mesh's geometry — corners, gaps, recesses. Doesn't capture fine sculpted details like pores, stitching, or engraved text. Right choice for most hard-surface game props.

High poly AO bake

Includes all the micro-occlusion from sculpted features — pores darken, rivets cast shadow, text has depth. Produces richer, more detailed AO. Slower to bake and requires the high-poly source. Right choice for organic characters and detailed hero props.

For most game assets, low-poly AO is the right call. It's fast, requires no extra mesh, and the result is clean and artifact-free. Reserve high-poly AO bakes for assets where fine surface detail genuinely needs to show occlusion — characters, weapons with engraving, and detailed hero props viewed up close.

Section 05

Using AO in Your Material

A baked AO map is most commonly used in one of two ways in-engine: packed into a texture channel, or connected directly to a material input.

Option 1

Channel packed — ORM texture

In Unreal and Godot, AO is packed into the Red channel of the ORM texture alongside Roughness (Green) and Metallic (Blue). The engine's standard material reads it automatically from the Ambient Occlusion input slot. This is the most common and most efficient approach.

Option 2

Standalone AO texture — multiply over albedo

If not using channel packing, connect the AO map directly to the Ambient Occlusion slot in your material (Unreal, Unity, Godot all have one). Alternatively, multiply it over the Albedo in the material graph to darken occluded areas manually. The visual result is the same either way.

Option 3

Unity HDRP Mask Map — Green channel

Unity HDRP packs AO into the Green channel of the Mask Map texture (alongside Metallic in Red, Detail Mask in Blue, and Smoothness in Alpha). Trumble's Unity export preset handles this packing automatically.

AO intensity in-engine. Most engines expose an AO intensity parameter in the material or post-processing settings. If baked AO looks too heavy in your scene, don't rebake at a lighter level — reduce the intensity parameter instead. This lets you tune the effect without touching the texture.
Section 06

Baking AO in Trumble

Trumble's Bake tool includes AO as a standard pass alongside normal, curvature, height, and thickness maps. Import your mesh, set the ray count and max distance, and run the bake. AO bakes from the low-poly mesh by default — if you want high-poly AO, import both meshes and enable the high-poly source in the bake settings.

After baking, inspect the AO result in isolation. Open, flat areas should be near-white. Tight corners, recesses, and underside surfaces should be dark grey or black. If flat surfaces appear grey or dark, your max ray distance is too high — reduce it and rebake. The AO is automatically packed into the correct channel for your target engine at export time.

One-click bake

AO bakes alongside all other maps in a single pass. No separate bake session required — one run produces normal, AO, curvature, height, and thickness together.

Adjustable settings

Ray count, max distance, and bias are all configurable before baking. Preview at low quality first, then switch to production settings for the final bake.

Auto channel packing

AO is packed into the correct channel at export — Red channel of ORM for Unreal and Godot, Green channel of Mask Map for Unity HDRP.

Quality check before export: After baking, view your AO map in isolation in Trumble's channel viewer. Flat, open surfaces should be near white (0.9–1.0). Recesses and corners should be dark grey to black (0.0–0.3). A flat surface reading at 0.6 or lower signals that max ray distance is too high — reduce it and rebake before exporting.