I have finished the material settings for the first object, I still have to create a scene to show it. There was one more bug I already found and fixed, it was only a small oversight, I passed the wrong object in one place. All in all the current solution is workable, although still a bit tedious. I think I will add the ability to pass the group down to the components to aid linking. It should make the whole process fast and easy.
While working with this thing I considered my next steps. I think my materials overall are still quite bad. I plan to add some more things in the next time. I have two more shaders (BRDFs) I will add, the first is very simple, a pure Lambertian BRDF (no specular reflection, only diffuse reflection) although the Phong and Ward shader can both do that (I only have to set the specular coefficients to 0). But I still think it makes sense and if it is only for documentation purposes. The second shader I have found in a paper some time ago, I hope I can find it again. It is a shader for rough diffuse surfaces like walls, it also doesn't have specular reflection and is hopefully easy to implement, but has the nice property of also including back scattering which is quite important in materials like clay and plaster.
The other thing I want to add is a new noise function. I have found one which looks promising and I would like to add it to my program. It seemed quite nice and easy to control. And finally I want to add another general material component. Currently I can combine a color shader, a bump mapping shader and a shader model to form a complete shader. This model is simple, but it has big limits. I want to add something which is like the shader design used by PBRT, that is defining channels and linking them to the material properties. I would like to be able to use an image or procedural shader and for example define, that the bright areas should use a different shader. E.g. to create a rendering of a brick wall I need something which creates the general layout, something which defines the color component of the bricks and the mortar, need to define the depth of the surface (e.g. for bump mapping or displacement mapping) and finally define the BRDF to use for brick and mortar.