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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMzAwMjgwOTUzLTJjYmYwMjFkLTliMmQtNDJmOC1hZmIyLTk2NWE1MzhkMTY0MC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00ZjFhNWYzOGExMTFkY2RmZWQ0ODkxY2U3MjRmMWY0ZGM1NTkzMTE1ODgwY2RiMWVjODkwMzdkODVhYWI3Njc4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.6iC_8qXZeOHhJ6YCqfaS5zPB6yAJS7nqtbUfFmYugJo)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMjg3NDczODU1LWE1YTlhZTllLWE1NDQtNDY5Yy1iMTU5LTkwYTNiZDk0Y2EyNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xNGM0MmM0ZTU3N2JjMDNhNWYyZjUyMjJkZTk2NDZjYzEwZDEzZjIwMGY2NTYzOGQ2MDBhM2Y3ODc2M2M4YTdhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.BXXHhwQEA7Dlo4KN16kDGyQnMW5cJKei7lm-M2tdir8)
![image](https://private-user-images.githubusercontent.com/790432/288561198-a801c747-985a-429b-a087-8e5fc304a95f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMjg4NTYxMTk4LWE4MDFjNzQ3LTk4NWEtNDI5Yi1hMDg3LThlNWZjMzA0YTk1Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yY2ZjNzQ5MWJhMmJlNzczOWFlNTU3NGJlODNjYmNlODc4YjQ3ZDk3MDllMTQ0MDM3OTk3NGEyMWEyY2Y3MWM3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.iImBM301kSqF3BkasWsqZ1OvFsSQaflxa-fbtwsUu64)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMjkwNjc1MDk2LWNhYTUwMDZmLWYzMWQtNDE3NC05NDFmLWNlNTMwNzg1YjUyZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hOWExZjc0ODgxZmNhYTg3MzI5YmZkMDdlODc3NDQ5Y2IxZGVkNWJhMWMzZGY5ZmQ4YjIxOWNlZThkMjBhMjMwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.4Nd5zIUu0gADnCRTAkvIW-r1PUY8v21rAHbNa566K7I)
![image](https://private-user-images.githubusercontent.com/790432/290333041-da456381-d72f-481f-8c70-2592a98e1c3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMjkwMzMzMDQxLWRhNDU2MzgxLWQ3MmYtNDgxZi04YzcwLTI1OTJhOThlMWMzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NWEyY2JlMzcwN2ViNmVhNjBkZTZjZGE4MzlkMmJiMmUwNmFmYTAyMDE5MGU1OTY2ZTA0YTAyZTU4ZjNmOTQ2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.h-FN0eZarqHWZhlrMT0pnucQjjLbkxYAAietNOy9-5A)
pbr_armor.mp4
pbr_helmet.mp4
![image](https://private-user-images.githubusercontent.com/790432/287380929-9d3efcf9-bea8-4562-a200-db6ace329e85.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MTMwMzEsIm5iZiI6MTczODkxMjczMSwicGF0aCI6Ii83OTA0MzIvMjg3MzgwOTI5LTlkM2VmY2Y5LWJlYTgtNDU2Mi1hMjAwLWRiNmFjZTMyOWU4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QwNzE4NTFaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xNjNlOWY2NTUyNDNhOWI1NDdjYWExNWYxMThiMGU4NWYwNjA1MmQwZGQ0MzZiMjBmMzhjMjIzYjYxMjY5MThhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.q6cO7LiYCOmlytCqL8D4h5fONf6xKUD54XHt9B5i2Pw)
- 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: