The final neat feature I chose to implement was participating media with single scattering, appearing in this scene in the form of fog and steam. The steam emitting from the teapot was simulated using a small open source fluid simulator released by Wenzel Jakob and the fog is a simple volume region with some falloff with height. The renderer also supports physically based materials such as microfacet models, measured BRDF data from the MERL BRDF Database and measured metal properties from PBRT's SPD files, although this was implemented a bit back. Material properties can also be chosen based on a texture allowing for creation of the tile floor here, which is made of rough copper and white diffuse tiles. As an extra bonus the renderer is also lock-free, so performance is ok. The image was rendered using path tracing with adaptive sampling taking 128 to 2048 samples per pixel with a Mitchell-Netravali filter for reconstruction and took 06:30:09 to render.
Render times were measured using
std::chrono::high_resolution_clock and only include time to render,
ie. time to load the scene and write the images to disk is ignored.