A real-time rendering demo built from scratch using OpenGL and C++.
- Physically Based Rendering (PBR)
- Image-Based Lighting (IBL)
- Deferred shading
- Screen Space Ambient occlusion (SSAO)
- Sobel edge detection
- Shadow mapping
- Bloom postprocessing
- Minor features: Geometry shader, Blinn-Phong shading, Skybox, glTF model loading.
pbr_tachikoma.mp4
![image](https://private-user-images.githubusercontent.com/790432/300280953-2cbf021d-9b2d-42f8-afb2-965a538d1640.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMzAwMjgwOTUzLTJjYmYwMjFkLTliMmQtNDJmOC1hZmIyLTk2NWE1MzhkMTY0MC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMzI5NzVhYzIzNjI0OWQ3OWM5ODFhODkxNDkwMjRkNjczZTIxMjAxYmE5MmNmMDhmYTZiYmMzYmRhNTgxZDdmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.mbecXIDFzyDdmw-THVnkLvj1aEEJ7b_JjStjAcpx9bQ)
A Sponza scene with 300 light sources.
deferred_shading.mp4
This Gundam model looks great with ambient occlusion.
![image](https://private-user-images.githubusercontent.com/790432/287473855-a5a9ae9e-a544-469c-b159-90a3bd94ca25.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMjg3NDczODU1LWE1YTlhZTllLWE1NDQtNDY5Yy1iMTU5LTkwYTNiZDk0Y2EyNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MDdmZWQxNjZmYzY1MTY5YThjNmVmMGVjYzg0YWFlZjc4MWQ0OWJjY2QxODE2Y2MzMzdlM2JjODU5OTE3Y2ZmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.hTxznFS55VnRz6cbPAsOXyTKg4lT3yJZzTr8LZBqi2w)
![image](https://private-user-images.githubusercontent.com/790432/288561198-a801c747-985a-429b-a087-8e5fc304a95f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMjg4NTYxMTk4LWE4MDFjNzQ3LTk4NWEtNDI5Yi1hMDg3LThlNWZjMzA0YTk1Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zZGU5ZmYwNGJkZGVjZWQwMmI4NTU5OGMwNTI0ZDUwYTlkY2YxZmY0YTJiMjUyN2QyYzFhMGMxZTA1M2QyYTMyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ZyiKS71UkHZ7Y7IDF-OO7Z0W3QZykuVCIfSYBV4Z6Ik)
The sahdow edges are blurred using PCF.
shadow_mapping.mp4
![image](https://private-user-images.githubusercontent.com/790432/290675096-caa5006f-f31d-4174-941f-ce530785b52d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMjkwNjc1MDk2LWNhYTUwMDZmLWYzMWQtNDE3NC05NDFmLWNlNTMwNzg1YjUyZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMDQ1ZjExNzg1OWIwNDc4ZmVjNTg4NzdjMDEwZThjZGJjNzllODU4ZWJiMDQxZDM4NTVhZDFiYWVjMTU2MTc5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JD3IH36ZEE5BDaRmZuHcEYATj4erJIisrmAEROKyXeQ)
![image](https://private-user-images.githubusercontent.com/790432/290333041-da456381-d72f-481f-8c70-2592a98e1c3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMjkwMzMzMDQxLWRhNDU2MzgxLWQ3MmYtNDgxZi04YzcwLTI1OTJhOThlMWMzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00MTg2NThkMDMzNmIyZjg3OWM2YTdjY2FkNTMwZjQxZWRhMDA0ZGI5MDhjODRhMjk2YTdiMDU4ZjBmNzEyMzNhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.p5peOnnF3tCJyCwnCZ6ru5rkZqMq5MM_xAQ2dFe2QEY)
pbr_armor.mp4
pbr_helmet.mp4
![image](https://private-user-images.githubusercontent.com/790432/287380929-9d3efcf9-bea8-4562-a200-db6ace329e85.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5ODk3NzIsIm5iZiI6MTczODk4OTQ3MiwicGF0aCI6Ii83OTA0MzIvMjg3MzgwOTI5LTlkM2VmY2Y5LWJlYTgtNDU2Mi1hMjAwLWRiNmFjZTMyOWU4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNDM3NTJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xOGIyNmFjYjZjMGU4YTZjZmNkMWJkYmEyZTBhYTBjNDQ5ZTE5ODYwZTcwOWUxMjc1MDA1ODQyOThlNTY1NmZkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.1Go9JAvrMgXUesi4s7RMwusqqkgeArWtEKo6N9ZEPaY)
- OpenGL 4.6 / Direct State Access
- Visual Studio 2022 x64 and C++20
- Libraries: Assimp, glad, glfw, glm, assimp, ImGui, and stb.
Technical Resources:
Assets:
3D Models: