Giving a surface its character
These CIS-5610 studies explore how roughness, metalness, lighting and reflection work together. Built on the course's OpenGL framework, they move from point-lit PBR to environment lighting and a deferred screen-space reflection pipeline.
My work includes the shader implementations, integration work required by the assignments, and additional procedural-material and reflection experiments. Test models and environment maps are input assets, not claims of original asset creation.
Rust and scratches
The first shader combines diffuse and Cook–Torrance specular response. An additional procedural layer uses noise to vary albedo, metalness and roughness, creating patches of rust and directional scratches rather than treating the surface as one uniform material.
Lighting from an environment
The next stage adds diffuse irradiance, a prefiltered specular environment and a BRDF lookup texture. The same material can then respond to a surrounding lighting environment, not just a fixed arrangement of point lights.
Reflections from the current scene
The deferred renderer stores surface information in a G-buffer and traces reflection queries against screen-space scene data. I explored world-space and screen-space marching, along with a Monte Carlo glossy-reflection extension inspired by the Frostbite approach discussed in the coursework.
The opening image shows the rough-reflection experiment. The implementation also blends reflection coverage with the environment-map fallback. This remains a screen-space technique: it cannot recover arbitrary geometry that the camera has not captured.
A different view of light transport
Alongside Tracing Light, this series explores a useful contrast: tracing more of the light path versus choosing approximations that can be evaluated interactively.
Built with: C++, Qt, OpenGL and GLSL. CIS-5610 coursework with personal extensions.

