OpenGL-Engine

OpenGL-Rendering Engine: Physically based renderer with deferred shading, SSAO, HDR, Bloom, IBL, and instancing.

It shows below each stage of feature integrated into the engine


Stage 1 - Foundations

Like many engines, began with the most basic scene: a single triangle on screen and from there gradually built the core abstractions.

To support future features, I built core abstractions:


Stage 2 - Lighting & Shading

Next came Phong and Blinn–Phong shading, with:

(Multiple Lights)
Phong lighting


Stage 3 - Shadows

Lighting without shadows felt incomplete. I implemented:

I added ImGui debug views to inspect light frustums and tweak bias/PCF settings.

(Directional shadows projected into the cathedral)
Shadows

(PointLight shadows)
Shadows2


Stage 4 - Normal & Parallax Mapping

Flat textures weren’t enough so introduced:

(Normal Map)
Normal (Parallax Test) Parallax test


Stage 5 - HDR, Bloom & Post-Processing

The next is through tone mapping and bloom:

(Bloom on emissive lights in Sponza)
Bloom
(High Exposure)
Bloom (Pixelated) Pixel


Stage 6 - Deferred Rendering & SSAO

Switching to Different Rendering Technique:

RenderDoc captures, stepping through G-buffer attachments.

(G-buffer outputs)

Deferred

(SSAO pass)

SSAO


Stage 7 - Physically Based Rendering

I implemented Cook–Torrance BRDF with:

Materials began to look photorealistic.

(Rusty metal sphere)
PBR


Stage 8 - Image-Based Lighting

To further, added IBL (Image-Based Lighting):

Now objects reflected their environment naturally, even without direct lights.

(Spheres under HDR skybox with specular reflections)
IBL


Stage 9 - Instancing & Vegetation

I added GPU instancing to draw thousands of leaves with a single draw call.
This unlocked massive vegetation rendering.

(100.000 Vegetation instancing test grid)
Instancing


Stage 10 - Debugging Tools

Throughout Debug, I leaned on:

(Debug Normals) Normal
(Debug Shadow Aliasing) Shadow Bias


Reflection

This project taught me:


Tech