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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMzAwMjgwOTUzLTJjYmYwMjFkLTliMmQtNDJmOC1hZmIyLTk2NWE1MzhkMTY0MC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xNWRhZjc3ZDEyZmRlNzFhY2UyNTY2ZDQzYzE0YmZjZWMwY2IzN2RkYWZlM2Q0ZDhhMTUyODA3ZWM5YTYxMmQzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.ctParr1f2jTs_ndqUsrMl6aerBe6PS1lypmLVP6cZb4)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMjg3NDczODU1LWE1YTlhZTllLWE1NDQtNDY5Yy1iMTU5LTkwYTNiZDk0Y2EyNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03ZDlhODM3MDQ0OWFlZmEzYmM1YzQzZjc4ZGM0M2I4MWExNTY4YTRjMmUzMTBiMTI4MTAxNDFiZTc2NjAxYzc4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-2wZ3UsIkigCaCi7FF2RUGlE1jTZaWMvzBDgjH5FuDM)
![image](https://private-user-images.githubusercontent.com/790432/288561198-a801c747-985a-429b-a087-8e5fc304a95f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMjg4NTYxMTk4LWE4MDFjNzQ3LTk4NWEtNDI5Yi1hMDg3LThlNWZjMzA0YTk1Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iOTExNTI5MDI5YjllY2U1Nzc2MjlmYWU5Y2EwODQ5YmFmMjJiMDRiYzg4MGMzMjhmOTA3MDBlYmVjMWRkNzRhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.6WoPuUP6AzGKa1xyBmDqAnCrkkE4s_BfsOduXUcm4QA)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMjkwNjc1MDk2LWNhYTUwMDZmLWYzMWQtNDE3NC05NDFmLWNlNTMwNzg1YjUyZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMTAwMzkwZGRiNGNiOTYwMGMzYTRkY2U0NGQyNmU0N2I3YzhmN2FlNGQ1YWI5ZjcyNTM3ZTUwZTMwZTlhNmVjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.5DRjagoe-OjCFz_oibsotIrEWy9gnBLAp8UYNB2xis0)
![image](https://private-user-images.githubusercontent.com/790432/290333041-da456381-d72f-481f-8c70-2592a98e1c3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMjkwMzMzMDQxLWRhNDU2MzgxLWQ3MmYtNDgxZi04YzcwLTI1OTJhOThlMWMzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMGFiYzZjZDUzNjNlNTBiMmM3YWMxOTUxNmU3MjhjMDMyZTczNmU2NThhOTJjMDY5ZDVmYzkxYjUxNzJjZGU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.eNwWB0GhIOOX_EKtaWQnrVM_V3CPfUeI7Y6nhG0s81c)
pbr_armor.mp4
pbr_helmet.mp4
![image](https://private-user-images.githubusercontent.com/790432/287380929-9d3efcf9-bea8-4562-a200-db6ace329e85.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5OTg5NDgsIm5iZiI6MTczODk5ODY0OCwicGF0aCI6Ii83OTA0MzIvMjg3MzgwOTI5LTlkM2VmY2Y5LWJlYTgtNDU2Mi1hMjAwLWRiNmFjZTMyOWU4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQwNzEwNDhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MGE0Nzk5OGU3NWJkOWM4YjM5MmMyOGYzMDM4Y2QyZWJjOWUxNTY4MjU0YzNjYjNmNWVjYTA5ZWY2NjdlNzU0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.F3hGtQGNmvae61KU8zNncL4zdx0RzE2ap5TUVeen5fg)
- 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: