Cook-Torrance
This is a more advanced model that takes surface roughness into account. Consequently if we map roughness as a texture then we can have different areas of a surface appearing as smooth/rough. A classic example seems to be rusty metal - you have some shiny bits and then you have the rough/matt rusty parts.
The equation is somewhat less pleasant than before:
Inputs:
Vertex Data:
With regards to creating a generic base for these lighting models it's worth noting:
All of the above fitting into yet another lovely Visio diagram (Visio rocks!):