twirl

Ambient Occlusion Map in Blender: Where Does AO Actually Go?

September 16, 2026·twirl

How to use an ambient occlusion map in Blender, why Principled BSDF has no AO input, when to multiply AO with base color, and when to leave it out.

If you download a PBR texture set with an ambient occlusion map and open Blender's Principled BSDF, there is an obvious problem: there is no Ambient Occlusion input. Base color, roughness, metallic, normal, and several other material properties have dedicated sockets, but AO does not.

That is not an import mistake. An ambient occlusion map describes how exposed parts of a surface are to indirect ambient light. It is different from a normal map, which changes the direction used for shading, and different from a roughness map, which controls the spread of reflections. In Blender, whether you should use a supplied AO texture depends on the renderer, the material, and what the map was made to represent.

What an ambient occlusion map stores

An AO map is usually a grayscale texture. White represents areas that are relatively exposed, while darker values represent creases, cavities, gaps, and other regions that are less accessible to ambient light. The glTF 2.0 specification defines occlusion in the same general way: lower values reduce indirect ambient lighting while direct lighting is not affected.

That last part is important. AO is not supposed to be a painted shadow from a particular lamp. It represents local occlusion around the surface. A crack can be occluded even if the key light moves to the other side of the object.

For a tileable material, an AO texture may describe small-scale cavities inside the texture itself, such as grout between tiles or gaps between bricks. For a unique model, AO can instead be baked from the actual geometry. Those maps may look similar as grayscale images, but they come from different sources and should not automatically be treated as interchangeable.

Why Principled BSDF has no AO input

Principled BSDF describes surface properties used by the renderer to calculate how light interacts with a material. Ambient occlusion is closer to a lighting term than an intrinsic surface property, which is why Blender does not give it a dedicated Principled BSDF socket.

Blender can calculate ambient occlusion from scene geometry. The current Ambient Occlusion node documentation describes a shader node that computes how much of the hemisphere above a shading point is occluded. Blender also provides an AO render pass, and Cycles can bake ambient occlusion to a texture.

A downloaded AO texture is already a stored approximation of that information. Plugging it into a shader does not cause Blender to calculate new occlusion. You are deciding how that stored mask should influence the material.

How to connect an AO map in Blender

The common Blender setup is to combine the AO texture with the base color before it reaches the Principled BSDF. Add the AO as an Image Texture, set it to Non-Color, then use a Mix Color node in Multiply mode with the base-color texture. Feed the result into Base Color.

You do not have to apply the AO at full strength. If the material starts to look dirty or the cavities become permanently black, reduce the mix factor or remap the AO before the multiply. The goal is not to recreate every shadow in the material graph. It is to retain useful local cavity information when the render or target workflow benefits from it.

Keep the AO texture on the same UV coordinates and scale as the rest of the PBR set. If the base color repeats four times across a surface while AO repeats once, the dark cavities will no longer line up with the material features they are supposed to describe. Our Blender PBR tiling guide covers how to drive a full map set from shared mapping coordinates.

AO should be Non-Color data

An ambient occlusion texture stores numerical occlusion values, not display color. In Blender, it should therefore be loaded as Non-Color rather than sRGB when it is being used as material data.

This is the same distinction that applies to roughness, metallic, normal, and height maps. Base color is interpreted as color. The other maps describe values the shader uses for a calculation. Our PBR texture color space guide explains why treating data maps as sRGB can change the values the shader receives.

If the AO is packed into another texture rather than supplied as a standalone grayscale image, check the packing convention before connecting it. glTF, for example, reads occlusion from the red channel of its occlusion texture. Other pipelines use packed ORM or RMA textures with several material masks stored in RGB. Our ORM texture guide covers the common channel orders and why the filename should not be your only source of truth.

Deep grout makes it easy to see what AO contributes and what should still come from the material's normal and height maps.

Example prompt

aged white subway tile, dark grout, chipped glaze, subtle surface grime

Albedo
Normal
Roughness
Metallic
Height

Albedo, normal, roughness, metallic, and height — tileable PNGs.

Generate a PBR material

What to do when a PBR material does not include AO

twirl currently generates separate albedo, normal, roughness, metallic, and height maps. AO is not part of that five-map output. In Blender, that does not leave an empty Principled BSDF input because there is no dedicated AO socket to fill.

For a tileable surface, the normal and height maps still describe the local relief, while the renderer handles lighting from the scene. If a particular workflow needs a baked AO texture, that can be created as a separate step from geometry or derived for the target pipeline. We would not substitute the roughness, height, or normal map for AO because those maps describe different properties.

The AI PBR material generator produces the coordinated five-map set, and twirl Connect for Blender can import completed twirl materials from the browser. If you are deciding what the normal and height maps should each handle after import, our normal map vs height map Blender guide goes through that split in more detail.

Do you need an AO map in Cycles?

Not necessarily. Cycles already traces light through the scene, so geometry can naturally receive less indirect light in enclosed areas. Multiplying a strong baked AO texture into base color on top of that can darken the same cavities twice.

This does not make AO textures useless in Cycles. A material AO map may contain small cavity information that is not present in the actual mesh, especially on a flat tileable surface where brick joints, pores, or grout exist only in textures. A subtle multiply can preserve some of that local structure. The decision is visual and depends on what information the map contains.

For geometry that already has the relevant recesses modeled, we would first look at the render without the texture AO. If the indirect lighting already describes those forms correctly, there may be no reason to bake the darkness into Base Color as well.

Blender's own Ambient Occlusion node documentation also notes that calculating AO inside a Cycles shader can be expensive and suggests baking AO when render time is a concern. That is a different choice from whether a downloaded PBR material needs an AO texture multiplied into its color.

Texture AO and Blender's Ambient Occlusion node are not the same thing

The naming makes this easy to confuse. An AO image texture is a fixed set of values stored in an image. Blender's Ambient Occlusion node calculates occlusion from the geometry at the shading point.

If you load material_ao.png, you do not need to pass it through Blender's Ambient Occlusion node. The image already contains the mask. The AO node is useful when you want Blender to calculate occlusion procedurally, including workflows where the result becomes a mask for dirt, weathering, or another material effect.

The Blender manual specifically calls out procedural texturing as a use for the node. That can be useful because geometry-based occlusion follows the model rather than repeating with a tileable image.

When baked AO is useful

Baking AO makes sense when you need the occlusion of a particular mesh stored in a texture. Blender's Cycles baking documentation lists ambient occlusion as a bake type and notes that baking can move expensive lighting or procedural calculations into textures for later use.

This is common when preparing an asset for another renderer or real-time engine. The baked texture can preserve local occlusion without asking the target application to reproduce the same calculation at runtime. It can also be used as a mask rather than being permanently multiplied into color.

A baked mesh AO map should use the UV layout of that mesh. A tileable material AO map usually repeats with the material. If you are working on a unique prop with both kinds of information, keeping them separate gives you more control than combining them into one image early in the workflow.

Why multiplying AO into base color is only an approximation

Multiplying AO into Base Color is convenient because Principled BSDF has no AO input, but it changes the surface color itself. That means the darkening remains even when the lighting conditions would otherwise brighten the cavity.

In a physically based description, occlusion is meant to affect indirect lighting rather than repaint the material. The glTF specification makes that separation explicit by defining occlusion as an influence on indirect ambient light while leaving direct lighting unaffected. A simple base-color multiply cannot preserve that distinction inside a standard Principled BSDF setup.

For many asset and visualization workflows, the approximation is still useful when kept restrained. It is especially understandable for texture-only relief that the renderer cannot see as geometry. The important part is knowing what the multiply is doing so you can remove it when it starts fighting the lighting.

AO is not a replacement for a normal or height map

A dark crevice in an AO map does not tell Blender which direction that surface faces, and it does not create depth. If you use AO without a normal or height map, the cavity can look darker while the lighting still behaves as though the surface is flat.

Normal maps handle directional shading detail. Height maps can drive bump or displacement. AO describes local exposure to ambient light. The three maps can reinforce the same physical feature, but they encode different information.

This matters most at grazing angles and under moving light. A normal map can change the highlight as the light moves. True displacement can change the silhouette. An AO texture stays the same grayscale mask until the shader chooses how to use it.

When should you use an ambient occlusion map in Blender?

Use a supplied AO map when it contains useful cavity information that your Blender scene does not otherwise reproduce, and keep the effect restrained enough that it does not become permanent painted shadow. For a conventional Principled material, a Non-Color AO texture multiplied with base color is the practical setup when you need that effect.

Leave it out when the geometry and lighting already produce the occlusion you want, particularly in a Cycles render where a strong baked multiply only makes recesses too dark. If the map belongs to a packed texture, separate the correct channel first. If you need AO tied to a unique mesh rather than a repeating material, bake or calculate it from that geometry instead.

There is no missing AO socket to solve in Principled BSDF. The choice is whether the stored occlusion information adds something useful to the render, and where in the pipeline it makes the most sense to apply it.

What to do next

Try it

Generate a PBR material

Type a surface and get tileable albedo, normal, roughness, metallic, and height maps. Five free generations a day.

Open twirl
Read next

How to tile PBR textures in Blender without breaking the maps

Learn how to tile PBR textures in Blender with one shared Mapping node, correct UV scale, Repeat extension, and aligned albedo, roughness, normal, metallic, and height maps.

Continue reading

Sources

Blender Manual: Ambient Occlusion Node

Blender Manual: Render Baking

Khronos: glTF 2.0 Specification

twirl

© 2026 twirlTerms·Privacy