As part of my 3D Graphics and Rendering course at the University of Southern California, I built a renderer from the ground up in C++, working through the entire rendering pipeline that modern game engines utilize.
Techniques incorporated include LEE, edge pixel exclusion, and hidden surface removal using the Z-buffer. Necessary transformations of vertex data from model space to screen space was also performed. Additionally, object transformations such as scaling, rotating, and translating are supported.
The renderer supports multiple lights, with ambient, diffuse, and specular lighting. Shading methods supported include flat, Phong and Gouraud shading.
UV texture maps with appropriate transformations and bilinear interpolation, procedural texturing, bump mapping and environment mapping supported.
Multi-sampling anti-aliasing is incorporated in the current renderer. Additionally, as part of a group project, my teammates Prateek Marathe, Handa Zhang, and I added a screen-space depth of field implementation to the current renderer with dynamic bokeh generation utilizing ray tracing. (Paper)