Advanced Rendering Techniques

Left Image
Right Image

In the Advanced Rendering Techniques class, I created a 3D rendering framework from scratch using C++ and OpenGL. Throughout the course, we covered a wide range of graphics topics and implemented several advanced techniques. These included Deferred Shading, Cascaded Shadow Maps, Geometry, Tessellation and Compute Shaders, Reverse Depth, Physically Based Rendering (PBR), Ambient Occlusion, Parallax Mapping, Image-Based Lighting, and an introduction to the Vulkan API.

As part of the coursework, I implemented Deferred Shading, Cascaded Shadow Maps, Screen-Space Decals, Alchemy Ambient Occlusion, and, for the final project, a 2D Radiance Cascades system.

Deferred Rendering

Deferred rendering system separates geometry rendering from lighting. Instead of calculating lighting as each object is drawn, the system first stores surface data such as color, position, and normals into special textures known as G-buffers (geometry buffers). In a second pass, lighting is applied using this data, with optimizations to calculate lighting only for visible pixels. This setup made it much easier to handle scenes with many dynamic lights and later proved useful for integrating additional effects like ambient occlusion and decals.

Cascaded shadow maps

To improve shadow quality in large outdoor scenes, I implemented Cascaded Shadow Maps (CSM) for directional lighting. This technique splits the camera’s view frustum into multiple depth ranges (cascades), with each one using its own shadow map. That way, areas closer to the camera get higher-resolution shadows, while more distant ares reduce resolution.

Screen Space Decals

Screen Space Decals bring more detail and realism to scenes like scratches, bullet holes, or dirt. Instead of modifying the actual geometry, decals are projected into screen space based on the camera view, and then blended into the scene using the G-buffer data. This approach is lightweight and dynamic, it has low performance cost.

Alchemy Screen-Space Ambient Obscurance

To add more depth and realism to the scenes, I implemented Alchemy Ambient Occlusion. This algorithmn simulates the way light gets blocked in tight spaces, like corners. It uses the geometry data stored in the G-buffers to darken areas where ambient light would naturally be occluded. The result is subtle but adds a lot to the atmosphere.