In rendering we only need to compute lighting that reaches the eye/camera. To achieve real-time requirements (> ~25fps), we accept approximations to get faster rendering. On the other hand we have the luxury to be able to create non realistic, more controllable lighting.
The need for the latter can be seen in the movie industry where big effort is made to adjust the lighting to meet the artistic vision. The quality and the control of our methods is constantly rising as more sophisticated methods are discovered and hardware becomes faster and expectations rise.
Direct Lighting comes from some light emitters such as point lights and the sun. As direct light has some direction (directional or from some point), the occlusion problem can be efficiently solved by using shadow maps.
Indirect Lighting is the light that bounces from some geometry or atmospherics. In reality the number of bounces is not bound but for performance and control a single bounce is is quite a good approximation for real-time games. As indirect light does not have a clear direction, the shadow map techniques don't work well here. This is where ambient occlusion provides better results.
The sky hemisphere can be considered part of the indirect lighting (bounce from the atmosphere, not very directional, AO instead of shadow maps).
Ambient is a common solution to approximate the effect of indirect lighting very efficiently and simply. This approximation works well with small diffuse objects in dull environments (same lighting from every direction). Classical ambient is not affected by the normal and objects often look flat if solely lit by ambient.
This is where light probes can produce a nicer ambient lighting. They can be locally blended and are based on Image Based Lighting.
After we have computed the amount of light that reaches the camera for each pixel on the screen, we have three values (red, green, blue) that we could display. The values are >=0 but not generally bound and as the display device has a limited range, we need to transform the high dynamic range values to some format that the output device supports.
- "Finding Next Gen - CryENGINE 2" - Mittring, M.