The final set of controls left for me to build were the face controllers. Unlike the rest of the controllers these needed to be placed very close to the mesh. I felt that the thin lines of the curves I had used for everything else would not be very obvious or easy to select for the animator. Instead, I used the top of a NURBS cylinder as this provided a small filled in circle which was much easier to select.
I wanted the mouth shape to be really flexible for the animator, so I placed a controller for each corner of the mouth as well as three along the top lip and three along the bottom lip.
I also wanted the animator to be able to easily move the position of the entire mouth, so I created a simple curve shape that I placed a small distance away from the mesh.
The nose was slightly simpler. I created two controllers that would allow the animator to flare the nostrils. I then created another simple curve that would allow the animator to move the nose about the face.
Finally I created three controllers for each eyebrow and a simple position controller for each eyebrow. I also decided to change the circles from the yellow as I felt it was too bright and distracting when looking at the face. I changed them to a dark blue instead.
Once I had built all the controllers I needed to start parenting them to the correct things. The nose and eyebrows were extremely simple, as the heirarchy was fairly obvious. However I had a lot of trouble finding something that would work for the mouth. I obviously wanted the controls on the bottom lip to move when the jaw was rotated. However I also wanted them to move dependent on where the mouth position controller was. Eventually I came up with the idea of creating two locators that were aligned with the jaw bone pivot point. I parent constrained one to the head and one to the jaw. I then point constrained the locators to the mouth controller. I could then parent constrain my individual mouth controllers to the relevant locators.
Unfortunately, the parent constraint on the locators clashed with the point constraint, so that when the jaw rotated the locators moved slightly and the mouth controllers disappeared into the mesh. It took me a little while to track down the problem, but once I had found it I decided to just replace the parent constraint to the jaw with an orient constraint and this fixed it.