Introduction
This project is a 3D interactive scene created to learn and explore the fundamentals of graphics programming with OpenGL. This scene was created over a span of two months during the second year of my Bachelor’s program at SAE Geneva.
Preview
More Information
- HDR Texture: High Dynamic Range (HDR) textures store a wide range of luminosity values. Their data is written as floats and tone-mapped to fit standard monitors (0.0 to 1.0). Tone mapping is applied during post-processing to ensure proper rendering.
- OBJ Model: 3D models in .OBJ format, containing vertices, normals, and more, are loaded using the Assimp library. The data is translated for OpenGL rendering.
- Shadow Map: Shadows are based on a depth map, which calculates the distance of objects from a directional light source. This texture is applied to objects to create realistic shadows.
- Deferred Shading and SSAO: G-Buffer: Stores geometry data (positions, normals, colors) in textures for efficient lighting passes. SSAO: Adds ambient shadowing for depth realism, using a noise texture and blur for smoother results.
- PBR: Physically Based Rendering, Simulates realistic light interaction with textures for roughness, metallicity, and ambient occlusion (AO).
- IBL: Image-Based Lighting, Uses HDR skyboxes and BRDF lookup tables for dynamic reflections and ambient lighting.
- Instancing: Optimizes rendering by batching multiple objects, here grass, in a single draw call. Instanced grass also includes wind effects implemented through vertex manipulation.
- Cubemap: A skybox is created by mapping six textures to simulate a 360° environment.
- Post-Processing: Bloom Effect: Highlights bright areas (values >1.0), downscaling and upscaling for a glowing effect. Color Filter: Applies a grayscale filter for a cinematic, black-and-white aesthetic.
If you want to learn more about the technical implementation in this 3d scene you can read my blogpost.
🌿 Download 🫖
You can download the Scene here.