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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMzAwMjgwOTUzLTJjYmYwMjFkLTliMmQtNDJmOC1hZmIyLTk2NWE1MzhkMTY0MC5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02NjgwYThjNTE3OTg3YTFjMzVkMmRmZjE4Y2QzYTAxOTc4ZjUxYmVhNTI1YjBjOGNiOWNiMGI1Yzc5ZjliMGIxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.LmUXj8rHrBjNi5jYJZjM73LhHDG8bMw4-UV-_kWTp2M)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMjg3NDczODU1LWE1YTlhZTllLWE1NDQtNDY5Yy1iMTU5LTkwYTNiZDk0Y2EyNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xYjE2NjkxMTM3ZDViMDMxNjJmNDljMjBiZTU4MDU0M2EwMjIxM2Y2OTZiYTBjNmQ3YjNkNjQzNWQ2MTc1OWQxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.U2uLNzDfOXuCFl458osL9rKymkHEFSS8t64by5cPPXY)
![image](https://private-user-images.githubusercontent.com/790432/288561198-a801c747-985a-429b-a087-8e5fc304a95f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMjg4NTYxMTk4LWE4MDFjNzQ3LTk4NWEtNDI5Yi1hMDg3LThlNWZjMzA0YTk1Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wZjJlOTAwZWZkYjJkMzU0YTcxZTM2NzNmNWI2NWM1ODc3NTE4ZWE0ZThjMGY0NDNkNjYwMDNkYjg5YjdlZGUzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.9vUmZRnjupeJufzQ6NSoDnEIPNvfvxPKX6xDit8kWPw)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMjkwNjc1MDk2LWNhYTUwMDZmLWYzMWQtNDE3NC05NDFmLWNlNTMwNzg1YjUyZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMzY0ZWMwNjhhNjgwMzdjMmNkNTI0ZTY1YzkyMzMxOGM5YzQ5NDVhNjBmYzA1MTllMWY4MDU5YThiNmQ2ODAwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.GIjXfgEaav6cDdj6sowXFcGzQvrBrJeSPE1H4fIVaFc)
![image](https://private-user-images.githubusercontent.com/790432/290333041-da456381-d72f-481f-8c70-2592a98e1c3d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMjkwMzMzMDQxLWRhNDU2MzgxLWQ3MmYtNDgxZi04YzcwLTI1OTJhOThlMWMzZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mYTBiNGYwM2YzMzZmYWM0ZWRjZmEwYmY0NGE1MDg0ZDM4NGJhYjNhZDhhNTI4NDkxOTJjODE2ZjM0NTJjYTAyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.8msVGXLd28KIa43598duCtEugAcuKU6AOIYn_QnLXR0)
pbr_armor.mp4
pbr_helmet.mp4
![image](https://private-user-images.githubusercontent.com/790432/287380929-9d3efcf9-bea8-4562-a200-db6ace329e85.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ1MzYwNTgsIm5iZiI6MTcyNDUzNTc1OCwicGF0aCI6Ii83OTA0MzIvMjg3MzgwOTI5LTlkM2VmY2Y5LWJlYTgtNDU2Mi1hMjAwLWRiNmFjZTMyOWU4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwODI0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDgyNFQyMTQyMzhaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02OTZhNWU4YzVkODNiOTJkNWVjOTkxODBlY2ZkOGU0ZWQ3Y2UxYjA2MGVlYTRlZjgyOTM1ODNiYWRlMTIwMDNlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.PBMFuIQFqJhAdNbssmyO4yghgk1Djp3uDLv4G3FyxTw)
- 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: