The concept of our rendering is motivated by a few sci-fi video games, including, FreeSpace and Homeworld. The scene shows a spaceship being shot at from the distance by a big laser weapon which impacts the comet, missing the fighter and giving it the chance to flee towards the asteroid field for cover.
We used the BVH with full-sweep SAH, which allowed us to use a big amount of triangles in our scene without big performance hits (rt/groups/sah.cpp) Additionally, we parallelized the implementation of our renderer to get better performance (rt/renderer.cpp). This and a lot of code optimization gets us to render the image in about 2 hours on a fast machine (R5 1600) or 10 hours on a slower machine (i3 5005U).
We implemented volume rendering beyond the scope of having a global volume but also allowed to have volumes constrained by primitives. For this, we implemented a new integrator (rt/integrators/marchtrace.cpp) as well as new material types (rt/materials/explosion.cpp etc.). This allowed us to model both the explosion and the engine exhaust.
We extended the set of available materials with a transparent material (rt/materials/alpha.h). This material is also shadow-less and is treated differently in our intersection logic when intersecting with shadow rays and primary rays (this also currently breaks the build pipe-line on the server).
To give the fighter a metal-like appearance we built a Cook-Torrance material with Beckmann BRDF (rt/materials/cooktorrance.cpp).
We used the motion blur, which we implemented as part of the bonus assignments for the explosion fragments (rt/primmod/mobinstance.cpp).
To allow bump mapping of the asteroid field we implemented a kind of bump-mapper that does not take any uv coordinates but instead works on global coordinates with a 3d texture (rt/primmod/dumbmap.cpp)