<p><strong>Ambient occlusion</strong> isn't a technique, but rather a concept. It can be implemented (and approximated) as a post-processing effect such as SSAO, SSDO, HBAO+, etc. @trichoplax gave a good answer, I just wanted to elaborate on the comments.</p>

<blockquote>
  <p>Is there a reason why it's considered post-processing and deferred lighting/shading isn't?</p>
</blockquote>

<p>I personally would consider deferred rendering to be a post-processing effect, but it depends on your definition of a post-processing effect. For this answer, I will assume it's anything that doesn't require geometry other than a screen-space quad or (<a href="https://www.saschawillems.de/?p=2148" rel="noreferrer">triangle</a>) to be rendered.</p>

<h1>Post-Process Techniques</h1>

<p>Screen space AO techniques involve reading the depth and/or normal buffers to determine if light should be occluded. There are expansions on these techniques that deal with temporal aliasing as well as <a href="http://graphics.cs.williams.edu/papers/DeepGBuffer14/" rel="noreferrer">occlusions by objects in the scene</a>. Some people also apply AO to separate parts of the scene (dynamic and static objects for instance). This is where the definition of post-processing might become ambiguous.</p>

<p>Some renderers do post-process AO before the lighting pass however. Usually these renderers either do a Z-prepass or are light-prepass renderers. This can be used on devices with lower VRAM or eDRAM to preserve memory since you can also do tonemapping during your lighting pass.</p>

<h1>World-Space Static Techniques</h1>

<p>Lightmaps can be used particularly for static environments AO can be easily computed offline. Similarly, art assets can have AO textures.</p>

<h1>World-Space Partially Dynamic Techniques</h1>

<p>Some objects just need rough AO and are largely rigid. For instance, <a href="http://reedbeta.com/talks/ao-fields/" rel="noreferrer">AO fields and decals</a> can be used with or without SSAO to improve AO for some objects (by Nathan Reed). Another example includes placing a circle around a character's feet.</p>

<h1>World-Space Dynamic Techniques</h1>

<p>NVidia came up with <a href="https://developer.nvidia.com/vxao-voxel-ambient-occlusion" rel="noreferrer">VXAO</a>, which is a voxel-based ambient occlusion effect that helps simulate AO in places that aren't visible of screen. This has been one of the downsides to SSAO. Another issue with SSAO is that it must be computed each frame and is subject to temporal aliasing (bad for VR, although some people have developed improvements for this). VXAO can also reduce the memory/production costs of having many AO textures. Also, VXAO can have considerable latency with updates (if the application wants this). However, VXAO has a high performance cost.</p>

<p>Other applications, such as voxel-based games, can approximate AO very easily by using algorithms based on neighborhood information. This is kind of similar to VXAO, but without the rasterization (voxelization) steps, and they may have much rougher approximations.</p>

<p>As you can see, there are many implementations of AO, many of which aren't post-processing effects.</p>

CC BY-SA 3.0
2017-06-05T01:48:38.677Z
2017-06-05T01:48:38.677Z
aces
<p>This is a potentially confusing re-use of terminology. <a href="https://en.wikipedia.org/wiki/Ambient_occlusion" rel="noreferrer">Ambient Occlusion</a> is not in itself a post processing effect. <a href="https://en.wikipedia.org/wiki/Screen_space_ambient_occlusion" rel="noreferrer">Screen Space Ambient Occlusion</a> is a post processing effect using the depth buffer to approximate the effects produced by Ambient Occlusion.</p>

<p>Ambient Occlusion is a relatively expensive global method, while Screen Space Ambient Occlusion is the cheaper alternative for real time animation. Only the latter is considered post processing.</p>

CC BY-SA 3.0
2017-06-01T18:41:24.950Z
Another possible reason for the confusion is that Ambient Occlusion is most of the times rendered out into a separate pass and added in later. Making it seem like it could be a post processing effect.
bram0101
CC BY-SA 3.0
2017-06-01T19:48:27.437Z
@bram0101 does that apply to Ambient Occlusion that is not using the Screen Space Ambient Occlusion approximation?
trichoplax is on Codidact now
CC BY-SA 3.0
2017-06-01T22:10:59.830Z
@trichoplax Yes, for example with Voxel-Cone Traced AO. In that method, the AO is added as a separate pass
RichieSams
CC BY-SA 3.0
2017-06-02T05:46:31.273Z
@trichoplax with offline render engines it is done a lot, especially with VFX or general 3d animation. There could be a few reasons for rendering it out separately. 1. Most shaders and lights do not have a button to turn on ao meaning you have to create a render pass for it. 2. Passes can be faster to render or easier to set up. 3. In VFX or some animation productions, they render out in a bunch of different passes to then add them together in post for more control.  I am talking about ao from offline render engines so it is ray traced ao.
bram0101
CC BY-SA 3.0
2017-06-02T09:35:01.070Z
These comments suggest it is not as simple as I described, and there is a much better answer waiting to be posted...
trichoplax is on Codidact now
CC BY-SA 3.0
2017-06-01T15:43:53.170Z
2017-06-01T15:43:53.170Z
trichoplax is on Codidact now
<p>Ambient Occlusion is a physical approximation to occlude ambient light. If ambient light is not considered post-processing, why is AO? Ambient occlusion has the same inputs as regular deferred lighting, plus kernels and a noise map, but essentially, it can be handled the same way. Is there a reason why it's considered post-processing and deferred lighting/shading isn't?</p>

<ambient-occlusion><post-processing>
Why is AO considered Post-Processing?
Karim Abdel Hamid
# Why is AO considered Post-Processing?

(Asked by: username_0 on 2017-06-01)

Ambient Occlusion is a physical approximation to occlude ambient light. If ambient light is not considered post-processing, why is AO? Ambient occlusion has the same inputs as regular deferred lighting, plus kernels and a noise map, but essentially, it can be handled the same way. Is there a reason why it's considered post-processing and deferred lighting/shading isn't?

**Tags:** ambient-occlusion, post-processing


---

## 2 answers

### Answer by username_2 on 2017-06-01. Score: 10 | Accepted answer

This is a potentially confusing re-use of terminology. [Ambient Occlusion](https://en.wikipedia.org/wiki/Ambient_occlusion) is not in itself a post processing effect. [Screen Space Ambient Occlusion](https://en.wikipedia.org/wiki/Screen_space_ambient_occlusion) is a post processing effect using the depth buffer to approximate the effects produced by Ambient Occlusion.

Ambient Occlusion is a relatively expensive global method, while Screen Space Ambient Occlusion is the cheaper alternative for real time animation. Only the latter is considered post processing.

> **Comments:**
> **username_3**: Another possible reason for the confusion is that Ambient Occlusion is most of the times rendered out into a separate pass and added in later. Making it seem like it could be a post processing effect.  
> **username_2**: @username_3 does that apply to Ambient Occlusion that is not using the Screen Space Ambient Occlusion approximation?  
> **username_4**: @username_2 Yes, for example with Voxel-Cone Traced AO. In that method, the AO is added as a separate pass  
> **username_3**: @username_2 with offline render engines it is done a lot, especially with VFX or general 3d animation. There could be a few reasons for rendering it out separately. 1. Most shaders and lights do not have a button to turn on ao meaning you have to create a render pass for it. 2. Passes can be faster to render or easier to set up. 3. In VFX or some animation productions, they render out in a bunch of different passes to then add them together in post for more control.  I am talking about ao from offline render engines so it is ray traced ao.  
> **username_2**: These comments suggest it is not as simple as I described, and there is a much better answer waiting to be posted...  

---

### Answer by username_1 on 2017-06-05. Score: 4

**Ambient occlusion** isn't a technique, but rather a concept. It can be implemented (and approximated) as a post-processing effect such as SSAO, SSDO, HBAO+, etc. @username_2 gave a good answer, I just wanted to elaborate on the comments.

> Is there a reason why it's considered post-processing and deferred lighting/shading isn't?

I personally would consider deferred rendering to be a post-processing effect, but it depends on your definition of a post-processing effect. For this answer, I will assume it's anything that doesn't require geometry other than a screen-space quad or ([triangle](https://www.saschawillems.de/?p=2148)) to be rendered.

# Post-Process Techniques

Screen space AO techniques involve reading the depth and/or normal buffers to determine if light should be occluded. There are expansions on these techniques that deal with temporal aliasing as well as [occlusions by objects in the scene](http://graphics.cs.williams.edu/papers/DeepGBuffer14/). Some people also apply AO to separate parts of the scene (dynamic and static objects for instance). This is where the definition of post-processing might become ambiguous.

Some renderers do post-process AO before the lighting pass however. Usually these renderers either do a Z-prepass or are light-prepass renderers. This can be used on devices with lower VRAM or eDRAM to preserve memory since you can also do tonemapping during your lighting pass.

# World-Space Static Techniques

Lightmaps can be used particularly for static environments AO can be easily computed offline. Similarly, art assets can have AO textures.

# World-Space Partially Dynamic Techniques

Some objects just need rough AO and are largely rigid. For instance, [AO fields and decals](http://reedbeta.com/talks/ao-fields/) can be used with or without SSAO to improve AO for some objects (by Nathan Reed). Another example includes placing a circle around a character's feet.

# World-Space Dynamic Techniques

NVidia came up with [VXAO](https://developer.nvidia.com/vxao-voxel-ambient-occlusion), which is a voxel-based ambient occlusion effect that helps simulate AO in places that aren't visible of screen. This has been one of the downsides to SSAO. Another issue with SSAO is that it must be computed each frame and is subject to temporal aliasing (bad for VR, although some people have developed improvements for this). VXAO can also reduce the memory/production costs of having many AO textures. Also, VXAO can have considerable latency with updates (if the application wants this). However, VXAO has a high performance cost.

Other applications, such as voxel-based games, can approximate AO very easily by using algorithms based on neighborhood information. This is kind of similar to VXAO, but without the rasterization (voxelization) steps, and they may have much rougher approximations.

As you can see, there are many implementations of AO, many of which aren't post-processing effects.


---

