Yesterday I have started to add the Ward BRDF as a shader model. I have finished the part I have to do in the model and even found a stupid bug which didn't occur until now as I only had one model and so didn't notice that I couldn't switch models.
The next thing to do is to add a simple representation to the OpenGL part. Currently the program stops with an assert when I try to switch to the model as the OpenGL part has no clue of how to handle it. I intend to write a version for the GPU later, but first I will just use a simple Phong variant. For now it has to be enough to define it, I first want to see it in the raytracer.
The results should be interesting, as this model has some advantages compared to Phong I am currently using. The first is, that it is a true BRDF(Bidirectional reflectance distribution function), that means it is physically plausible (I am careful to call something physically correct) as it is easy to make sure it never returns more light than is reached at a point. It also means that it is symmetric, a very important property for lighting (if you switch the light and the camera the material appears the same). The second is, that it contains glossy reflection and calculates those properties from the parameters it gets (diffuse and specular reflection and two factors for the distribution of normal). So I hope the results look much better than Phong I have been using to date.