Integrator is an abstract base class that defines the render() method that must be provided by all integrators.
Ambient Occlusion is most often calculated by casting rays in every direction from the surface. Rays which reach the background or sky increase the brightness of the surface, whereas a ray which hits any other object contributes no illumination. As a result, points surrounded by a large amount of geometry are rendered dark, whereas points with little geometry on the visible hemisphere appear light.
The DirectLightingIntegrator accounts only for direct lighting — light that has traveled directly from a light source to the point being shaded — and ignores indirect illumination from objects that are not themselfes emissive, except for basic specular reflection and transmission effects.
Path tracing incrementally generates paths of scattering events starting at the camera and ending at light sources in the scene.
Bidirectional path tracing is a generalization of the standard pathtracing algorithm that can be much more efficient. It constructs paths that start from the camera on one end, from the light on the other end, and connects in the middle with a visibility ray.
Main function to render a scene mutli-threaded (using all available cores).