Ambient occlusion is an approximation of global illumination that emulates the complex interactions between the diffuse inter-reflections of objects. While not physically accurate (for that use full global illumination), this shader is fast and produces a realistic effect.
The ambient occlusion shader essentially fires a number of rays in the upper hemisphere defined by the tangent plane of the shading point and returns the ratio of the hits divided by the total rays as a color. When the ratio of the ray hits/total rays = 0, the output is considered fully unoccluded or 'Bright' (with white color by default). When the ratio of the ray hits / total rays = 1, the output is considered fully occluded or 'Dark' (with black color by default). In between, there is a linear interpolation of the two values.
Controls the number of rays that will be fired to compute the ray hits/total ratio. Increasing the number of samples will reduce noise and give a better quality result.
Angular spread around the normal vector N, in the range [0,1], where 1 maps to 90 degrees (the full hemisphere). 1.0 is the most common value. Other values may produce results that are not useful.
The minimum occlusion distance that is sampled.
The maximum occlusion distance that is sampled.
An exponential falloff rate for the occlusion along the ray distance. It is not compatible with semi-opaque surfaces hit by the occlusion rays.
The output color when the ratio of the ray hits/total rays is one (fully occluded). It is possible to change the black attribute to colors other than black for specific looks. This can be useful for tinting the color of a floor shadow for example:
The output color when the ratio of the ray hits/total rays is zero (fully unoccluded).
It is possible to change the white attribute to a color other than white to achieve a specific look:
This attribute changes the direction of the rays being traced. When it is off the rays are traced outside of the surface. When it is on the rays are traced inside the surface.
The most common use for this is to simulate dirt or erosion, as corners and cracks will become darker.
The example below shows a brick road with an ambient_occlesion pass (with invert_normals enabled) multiplied on top of the beauty render to add 'dirt' in-between the bricks.
Only gathers occlusion against the same object.
Outputs a normal vector that can be linked to normal parameters in