FEATURES AND IMPLEMENTATION
Materials
Looking at some marble floors on photographies from art galleries I observed that polished and clean marble can actually reflect light nicely and act as a mirror, thus I decided to add a little mirror effect to marble. Walls
obviously aren't perfectly flat, in order to make wall a bit more rugged i decided to add bump map with high frequency value noise. What is also surprising, sculptures also have textures! But in order to achieve realistic results they are made of approximately 400k triangles each.
Area Light
There are 3 area lights in the scene. I decided to use stools instead of stronger materials to showcase vases and roman bust, since they provide better shadows, and the stool model I have is incredibly good. I decided not to put
lights into the small lamps above images, because it would extend computations too much and extra lights didn't contribute too much to the scene. There was practically no point in using different type of light than Area Light,
since everything else doesn't give such nice smooth blurred shadows.
Speed
Provided CMake doesn't apply link-time optimizations in release build so I had to tweak it a bit. Adding LTO gave me 4-5x speedup! For multithreading I used OpenMP library, but it didn't give any practical performance improvement
from my naive multithreaded implementation. On intel core i5-i3230m it took approximately ~9h to render the image with 200 samples. Note that it has 1.2m objects. For intersections BVH with median splitting was used.
Loading
Since I used Blender to model the scene and object loader implementation didn't support all features I had to add some extra code that modified materials that were necessary for the scene.