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.