Independent Study (Advanced Dynamic Light and Shadow Rendering)

This project formed the final dissertation for my degree. It was an investigation into (what was at the time) modern real-time lighting and shadow rendering techniques. As part of this investigation, I developed a device-independent rendererer architecture that supported rendering meshes using one of three per-pixel lighting models:

  • Blinn-Phong
  • Cook-Torrance
  • Oren-Nayar

In addition, there is support for normal mapping, point lights, directional lights and spot lights, with varying support for shadow rendering from these lights - point lights use SSM and spot lights can use either SSM or LiSPSM.

A quick rundown of some of the other big features that were developed:

  • Renderer is a standalone DLL that can be linked to by applications wishing to use it.
  • External API is entirely independent from a particular graphics API (such as OpenGL or Direct3D).
  • Renderer is designed to manage all aspects of rendering objects in the scene, including resource management, shadow map generation and shader selection.
  • The client application simply has to implement methods for responding to renderer requests for "renderables"

The end result is that the sample applications - that range from simple examples of different lighting and shadow models to flying through a Quake 3 BSP or geomipmapped landscape could be built with minimum concern as to how the rendering would be performed.

Try It!

Download my Independent Study


A screenshot of the demo launcher.
The demo launcher.

A screenshot comparing the different light models with differing parameters.
A collage of the different light models supported, Blinn-Phong in the top row, Cook-Torrance in the second, and Oren-Nayar in the third.

A screenshot demonstrating the Cook-Torrance lighting model.
A shot of the Cook-Torrance lighting model demo, demonstrating the Cook-Torrance model, normal mapping, and multiple light sources.

A screenshot compared SSM and LISPSM.
A side-by-side comparison of SSM and LiSPSM.

A screenshot demonstrating the use of a BSP with the renderer architecture.
A shot of a Quake 3 BSP tree being used with the renderer architecture.