The thing is: The rendering equation says that "I want to know the incident light coming from any direction in the hemisphere." And that is summed over all possible directions via the integral.

However, what we have to break it down to in order to actually implement it is:

"Yeah, we know that we have to get the incident light coming from that direction somehow. And if we were to do it correctly we'd have to actually shoot a ray into that direction and gather the incident light that this ray would contribute."

With SSAO however, we are not really interested in the actual incident light coming from any direction, but we are interested in the direction this light _would not come from_, since that direction is blocked somewhere by other geometry. And since we also don't want to shoot actual rays and intersect them with the geometry, we sample. So we have to just decide where we would like to sample. The simplest approach is just define _some_ distance and sample there. Another solution could be sample multiple times with some stepping interval/strategy.

Ahhh, I see what you mean. So the "hemisphere radius" we define is just something we do because we can't have an indefinite radius, since we need a bound for our samples, and the "hemispherically-bounded" sampling kernel in SSAO isn't the hemisphere that the rendering equation involves.

What about the first part of my main post?:

From what I understand, the rendering equation can be considered in two ways:

1) as a double integral with respect to the horizontal and vertical angles in a hemisphere, in spherical coordinates

2) as a (single) integral where the differential is *dw*, a differential solid angle.

The rendering equation is recursive, because the incoming light can be thought of as the outgoing light from a different surface, thus, the rendering equation accounts for indirect illumination as well.

Due to the continuous nature of the equation, in order to solve it in realtime, one has to discretize it by breaking it up into a bunch of samples (e.g. SSAO) or by voxelizing the scene (e.g. GI with Voxel Cone Tracing).

^Is my understanding of the rendering equation correct?