I've seen several questions on here about what Ambient Occlusion is, on a high level, but not much getting into the mathematics. I am including links to the relevant links I've found on the subject, but I would very much appreciate someone filling in the gaps, and tying it all together.

[ Updated: I am aware that Ambient Occlusion, as it was used in Blender's internal render engine for global illumination has long been passé. I'm talking about something I'll call "local Ambient Occlusion". While I'm mostly interested in procedural textures, it's easier to explain my intent with a high-poly and low-poly model pair. Imagine baking both models AO into separate textures on the low-poly model. Now divide the AO texture from the high-poly model by the AO texture from the low-poly model. What you should get is the AO texture details from surface of the low-poly model without the global AO from the low-poly model itself. You can think of this as similar in purpose to a normal map or a bump map. In this question I am referring to this "local Ambient Occlusion" map to give additional detail not found in the geometry, rather than anything to do with global illumination.]

Firstly, on a non-Blender specific but mathematical level, what are Ambient Occlusion maps, Directed Ambient Occlusion Maps and Cavity Maps, and how are they different from each other numerically and computationally? Here is the most detailed article I found on distinguishing AO maps from cavity maps, but it seems a bit muddy on details. This article did a bit more to differentiate AO maps from Directional AO maps but doesn't mention cavity maps. I know that AO Maps are used with Cavity Maps, and Directed AO Maps replace conventional AO Maps, but beyond that things seem a bit fuzzy.

Secondly, how would I go about baking each of these from a high poly to a low poly model in Blender (in Cycles)? Several questions ask about baking AO Maps, but I haven't seen Directional AO maps or Cavity maps addressed at all.

Lastly, computationally, how would I go about incorporating support for AO maps, Directional AO maps and Cavity maps into a PBR Uber-shader (such as one similar to what Andrew Price describes in his two part "Making Realistic PBR Materials" series)... Bonus points if you can include support for (parallax) distortion maps too.... My understanding is that the cavity map can be easily supported by using it to mix the diffuse shader color with black, but I'm unsure of the other two, nor the distortion map.

Thanks in advanced for all your help.


1 Answer 1


Your question is really multiple questing so should probably be split up, but I'll answer what I can anyway.

Ambient Occlusion is mostly a hangover for old rendering methods where there was a a global 'ambient' light/colour which was used to brighten the scene in lieu of more proper global illumination techniques such as pathtracing (see https://en.wikipedia.org/wiki/Shading#Ambient_lighting). This ambient lighting method is used by blender render for example. Ambient occlusion is a way of improving on this by re-introducing dark shadows in cavities. Because of this, unless you are using a very low number of bounces, this should not be necessary at all in cycles. If you do need to, ambient occlusion maps are usually used to multiply the diffuse texture (often this is actually merged into the one texture).

parallax mapping is just an advanced form of bump mapping which accounts for view angle and is really for realtime engines. When rendering with cycles you are better of just trying proper displacement mapping either through the modifier or the experimental rendertime feature

In my understanding, cavity maps are just textures that allow you to distinguish cavities in your model, they can be calculated in any number of ways. I imagine various software calculates them differently, and ambient occlusion maps can certainly be used as cavity maps. They are largely used for masking and effects in various texturing tools.

I haven heard of directed AO maps, but your article suggests that the directed part comes from the light source, so this would easily be doable the same way as a normal AO map assuming that the light and the object the map is for are both static. I guess it might be possible to do something clever with normal + light direction to control the strength of normal AO to get a similar effect.

  • $\begingroup$ Thank you for your prompt and detailed response. Reading it I realize that I was unclear in what I meant to ask and will update it to be more clear. I agree these are multiple questions, and should be split up, but unsure how to do that. $\endgroup$ Commented Sep 1, 2016 at 14:44
  • $\begingroup$ @LorenOsborn also, if you want a more detailed mathematical look at how ambient occlusion works, you are probably better off asking in computergraphics.stackexchange.com (it looks like they have a bit of good info there already). $\endgroup$
    – Sazerac
    Commented Sep 1, 2016 at 23:58

Not the answer you're looking for? Browse other questions tagged .