This framework I developed during the course CS562 - Advanced Rendering Techniques that I attended at Digipen - Bilbao during the Fall 2020 semester. In it I implemented the following rendering techniques: Ambient Occlusion, Anti-Aliasing, Bloom, Decals, Phong Tessellation, Screen-Space Lines For Conveying Shape.
Click here to download the executable.
I wrote the framework entirely in c++ with OpenGL and using the following libraries: GLFW, Assimp, Dear ImGui, Glad, GLM, JsonCpp, stb_image.
All the rendering is done in a separate thread, leaving the main thread free for other uses. As this framework was only used for rendering, the main thread does almost nothing. The rendering takes the differed shading approach. I implemented some lighting optimizations which enable having hundreds of lights with minimal time cost. Most of the scenes use a g-buffer with depth, normals, for most of the scenes.
I implemented my loose interpretation of the technique as described in the paper Image-Space Horizon-Based Ambient Occlusion.
Screen-Space Anti-Aliasing is a post processing effect that detects the edges with a Sobel filter and blurs them. This way the aliasing artifacts are less visible.
In my Super-Sampling Anti-Aliasing I render the whole scene at twice the resolution and then downscale it using bilinear filtering. This is quite expensive as 4x more pixels have to be processed throughout the whole graphics pipeline
This post processing technique makes high luminance pixels 'spill' into their neighboring pixels, thus creating a halo effect.
This technique projects a texture on top of other objects wherever the projection box is placed.
This technique creates additional geometry on flat faces of a mesh to make the mesh look more roundish. It takes into account the distance to the camera and the facing of the faces to avoid creating geometry where it is not needed.
I implemented the technique as described in the paper Phong Tessellation.
As my final project for the course, I adapted the techniques described in the papers Suggestive contours for conveying shape and Highlight lines for conveying shape to work in screen-space as a post processing effect.
You can read the details of my implementation here.