Curvature, not ray tracing
This tool samples the local height field around each pixel. It is fast and useful for texture detail, but it is not a replacement for mesh-space ambient occlusion baking where full geometry can block light.
- Keep AO subtle in physically based workflows
- Do not multiply AO into albedo permanently
- Pack AO into ORM red for supported engines
Choose radius and strength
Radius determines the scale of neighboring height features used for the ambient occlusion estimate. A small radius emphasizes narrow cracks and pores; a larger radius responds to broader depressions. Match the radius to the texture resolution and intended texel density rather than choosing it from the preview at maximum zoom.
Strength controls how dark the inferred occlusion becomes. Begin subtly and compare the AO-enabled and AO-disabled material under neutral lighting. Crushed black crevices often make a material look dirty or baked rather than physically plausible. If broad areas darken together, reduce the radius, strength or contrast in the source height field.
Use AO in a PBR material
Ambient occlusion is a data texture and should be imported without sRGB conversion. Many real-time shaders use it to reduce indirect light in small cavities while leaving direct lighting intact. Avoid permanently multiplying AO into albedo because that bakes one lighting assumption into the color texture and can double-darken the material.
The exported ORM texture stores AO in red, roughness in green and metallic in blue. This layout is common but not universal, so check the destination shader before connecting a packed map. Blender can separate the channels, while engine materials may expose a packed input or require custom wiring.
When to bake AO from geometry
Use a mesh-space bake when large forms, overlapping parts or deep cavities need to occlude one another. A texture-derived estimate sees only the local height field and cannot know about nearby geometry outside the image. For a production asset, combine or replace the local texture AO with a bake made from the final high- and low-poly meshes.
Prepare height data for an AO map
The ambient occlusion estimate begins with the derived height field, so inspect that map before adjusting AO. Black and white should represent believable relative depth rather than photographic lighting. Remove cast shadows, broad exposure gradients and glossy highlights from the source because they can create false cavities. If the material is intended to tile, make the height edges continuous and use Repeat sampling so the AO calculation can compare pixels across the boundary.
Choose a resolution appropriate to the smallest cavity that must remain visible. A low-resolution source cannot produce stable pore-level occlusion, while a noisy high-resolution photo may generate dark speckles that disappear badly through mipmaps. Apply enough blur to remove capture noise without erasing actual cracks. The goal is a coherent height field whose depressions correspond to surface structure, not a dramatic monochrome image.
Generate ambient occlusion step by step
Load the source, inspect the height tab and set its broad response first. Open the AO controls with a modest Radius and low Strength. Increase Radius until the generator responds to the intended feature scale, then raise Strength only enough to separate the cavities. Reversing that order often produces crushed black areas before the correct neighborhood size has been found. Toggle AO in the 3D preview to compare the material with and without the effect.
Test the plane at the final UV scale because radius is measured in texture pixels and its apparent physical size changes with texel density. A setting that works for a close-up wall may be too broad when the same texture covers a large landscape. Check curved preview objects as well; useful AO remains subordinate to real lighting and should not look like a fixed dark outline around every detail.
Texture AO versus baked mesh AO
Texture-derived AO estimates occlusion from local height relationships inside one image. It can emphasize cracks, grout, engraved marks and other small material features. It cannot see a separate object hovering above the surface, the gap between assembled parts or a cavity defined by the full mesh. Those relationships require a geometry bake, a renderer or a real-time screen-space or ray-traced technique.
For a production asset, decide which scale belongs to each method. Keep micro-occlusion in the tiling material, bake object-specific contact and large cavities from the final geometry, and let the renderer handle scene-level contact. Combining all three at full strength can darken the asset repeatedly. Compare each contribution separately and use the lightest combination that preserves form in the intended environment.
How ambient occlusion fits PBR shading
AO is not a shadow painted into the base color. It is a data mask that can reduce indirect environmental lighting where nearby surfaces limit incoming directions. Direct light should generally remain capable of illuminating a cavity when the light can reach it. The exact material input varies by renderer, so use the engine's occlusion connection or documented material channel rather than multiplying the texture into albedo permanently.
Keep the values conservative. Pure white means no additional occlusion, while darker values increase the reduction. Large pure-black regions remove lighting information and often look dirty under bright conditions. AO can improve readability in a game scene with limited indirect lighting, but a physically richer renderer may need much less. Author the map so its strength can remain adjustable in the material.
Correct halos, seams and dark patches
A dark halo around raised features usually means Radius is too large or the height transition is too abrupt. Reduce the neighborhood scale, soften the height edge or lower Strength. Speckled AO comes from noise and overemphasized microdetail; blur the input slightly and check the result with mipmapping. Broad dark patches often trace an unwanted lighting gradient in the original photograph rather than a real depression.
Seams require attention at both the source and sampling stages. Repair mismatched height values along opposite borders and use Repeat edge mode for tileable materials. Clamp is more appropriate for decals, but it can hold border values outward and produce an edge response. If an engine shows different values from the browser, confirm that sRGB conversion is disabled and that compression has not removed the near-white range.
Pack AO into an ORM texture
Normal Map Maker packs ambient occlusion into the red channel of ORM, roughness into green and metallic into blue. Packing reduces the number of sampled textures in compatible shaders, but it does not make the three maps color data. Import the packed image as Linear or Non-Color and connect each channel according to the destination material. If a pipeline expects a different mask layout, repack the source channels instead of wiring them by filename alone.
Compression affects each packed channel together, so inspect AO after the final platform settings are applied. A format optimized for color may introduce cross-channel or block artifacts around narrow cracks. When a project needs maximum control or a renderer has no packed input, export separate maps. Packing is a delivery choice, not an improvement to the underlying occlusion estimate.
Validate AO in the target scene
Preview the material in neutral daylight, a darker indirect environment and the actual gameplay or render lighting. Toggle the AO input off and on. The map should clarify small cavities without changing the identity of the base color or overpowering direct shadows. Check from the normal camera distance, because tiny dark features that look attractive at full texture zoom can shimmer or collapse into noise at runtime.
Also inspect different mesh shapes and UV scales. A tiling AO map that looks balanced on a plane can appear too strong around a curved asset when combined with baked geometry AO. Keep the material control adjustable, document whether red-channel ORM or a separate file is used and retain the uncompressed source for later tuning.
- Use AO for local indirect-light reduction, not permanent albedo shading
- Match Radius to feature size and final texel density
- Import separate AO and packed ORM as linear data
- Prefer a mesh bake for object-level cavities and contact
