MP-APS
A modern OpenGL 3D rendering engine. The idea behind it is to be very simple to use: no weird abstraction layers, janky variable names, or massive 2000+ line classes. It's primarily a playground for me to implement (or at least try :P) different graphics programming techniques. Progress has been slow since I'm juggling full-time Univesity studies, work, and trying to be physically active. Eventually, I want to create a "scene-based" engine, where you can load up some model(s), add some fancy lights, and virtually explore it.
Compiling
Ubuntu (and similar)
bash install-deps-ubuntu.sh
make
cd build/
./MP-APS
Screenshots
Anti-aliased wireframe rendering:
(OLD VERSION) CPU-based terrain generation using Perlin noise:
Features
- Assimp model loading.
- Post processing (HDR, vibrance, bloom).
- Parallel AABB frustum culling.
- XML engine configuration.
- Support for
#include
directives in shaders. - Shader-based wireframe overlay.
- Physically-based rendering.
WIP
- Variance shadow mapping (soft shadows).
- Depth-buffer optimization (https://outerra.blogspot.ca/2012/11/maximizing-depth-buffer-range-and.html).
Roadmap
- Shadow volumes (http://www.alexandre-pestana.com/volumetric-lights/, https://www.slideshare.net/BenjaminGlatzel/volumetric-lighting-for-many-lights-in-lords-of-the-fallen).
- Per-material array textures:
- Re-implementing Forward+.
- More post-processing effects:
- FXAA (http://blog.simonrodriguez.fr/articles/30-07-2016_implementing_fxaa.html).
- Chromatic aberration (https://gamedev.stackexchange.com/a/58412/74957).
- Switch to sampler objects.
- Some kind of GUI.
- Atmospheric scattering: (https://github.com/korgan00/TFG-Atmospheric-Scattering) or (https://ebruneton.github.io/precomputed_atmospheric_scattering/)
Pipe-dreaming
- CDLOD Terrain.
- Planetary rendering.
- Global illumination (Cascaded Light Propagation Volumes).
Third Party Code
- Assimp.
- GLM.
- GLAD.
- GLFW.
- stb_image.
- pugixml.
- GLM AABB wrapper: (https://github.com/iauns/cpm-glm-aabb).
Research Used
- Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix (http://www.cs.otago.ac.nz/postgrads/alexis/planeExtraction.pdf). Gribb, Hartman (2001).
- Forward+: Bringing Deferred Lighting to the Next Level (https://takahiroharada.files.wordpress.com/2015/04/forward_plus.pdf). Harada, McKee, Yang (2012).
- Solid Wireframe (http://developer.download.nvidia.com/SDK/10/direct3d/Source/SolidWireframe/Doc/SolidWireframe.pdf). Nvidia (2007).
- Physically Based Rendering (https://learnopengl.com/#!PBR/IBL/Specular-IBL)
- Variance Shadow Mapping (http://developer.download.nvidia.com/SDK/10.5/direct3d/Source/VarianceShadowMapping/Doc/VarianceShadowMapping.pdf)
- Tessellated Terrain Rendering with Dynamic LOD (http://victorbush.com/2015/01/tessellated-terrain/)