Rendering Module
This project was carried out as the practical work part of the Rendering module taught during the second year of my engineering studies at ESIR. It was a pair project on which I worked on with Kelig Perigault.
The goal of this project was to understand and implement the main parts of a ray-tracing rendering engine, as well as implementing several extensions to it. Such as normals interpolation, textures handling and implementing an acceleration structure ray-scene intersections.
For this project we were provided with an application framework which was already taking care of the loading of all the 3D models and the setting up of the scenes to be rendered, along with several helper classes (to help with maths and geometry).
We started with a fully diffuse scene, resembling a Cornell Box, and implemented a ray triangle intersection. Then, we handled diffuse lightning, and finally we generated shadow rays to compute shaded areas. After that, we changed scene for one with fully specular walls in order to implement specular reflections, handle the emissive material component, and finally address indirect lightning through specular reflection.
Then, since our ray tracing engine was quite slow (because for each ray sent we checked its intersection with every triangle of the scene), we implemented a bounding volume hierarchy (an axis-aligned bounding box tree) to speed up ray-scene intersection calculations, which gave us a massive performance boost. Finally, we added texture handling for materials along with normals interpolation, to give the rendered surfaces a smoother aspect.
You can check out our results on different test scenes in the following gallery.
Warning : You may notice several artifacts in these renderings which is quite normal since it is a very basic ray-tracing solution with no Monte-Carlo integration.