A custom 3D graphical engine built in C++, using OpenGL.
March 2022 - April 2022
- Forward and deferred rendering
- Physically based shading
- Basic shadow mapping
- Hot-reloading for GLSL shaders
The environment maps, used for image based lighting, took a large amount of time to load; this became especially problematic when loading during application startup. To remedy this the textures could instead be loaded from disk asynchronously in the background, then loaded into OpenGL on the main thread.
As the codebase grew and new features were being adding without much forethought, some architectural issues and coupling became very apparent. The project was intended as a platform for learning and had a deadline, so did not consider refactoring a viable option.
Having multiple lights with cascading shadow maps was the greatest challenge, and while this worked with multiple textures initially, it was not a longterm solution.
The next attempt was trying to implement shader storage buffer objects and a texture array per light, but had little success in mapping the data between CPU and GPU.
Overall, I am thrilled with the results and have learnt about graphics programming in greater depth.