Interactive OpenGL based render engine and application framework, written from scratch in C++:
Physically based shading uses a microfacet BRDF model (Cook-Torrance, Schlick/Smith GGX).
Image Based Lighting with Radiance and Irradiance Cube Maps.
Directional Lights with orthographic Directional Shadow Maps.
Point Lights and Spot Lighs with Omni-Directional Shadow Maps (Cube Maps).
SkyBox and Reflection Cube Maps.
Normal Maps.
Scene objects can be transformed using a unified manipulator that uses ray-casting against the selected object's bounding box.
Keyboard and mouse navigation supports both FPS-style navigation and DCC-style for panning zooming and orbiting the camera.
Image Based Lighting:
Cube Maps are sampled with a normal direction:
A radiance cube map for specular lighting
An irradiance cube map for diffuse lighting
Spot Lights:
Omni directional shadow maps are generated with perspective projection into a Cube Map that is used for shadowing.
The direction is then tested against the cone of the spotlight to determine lighting and shadowing.
Point Lights:
Omni directional shadow maps are generated with perspective projection into a Cube Map that is used for shadowing.
Directional Lights:
Orthographically projected Shadow Map is generated and used for shadowing.
Interactively controllable with visualization of the bounds of the projection where shadows can apply.