All posts by Andy Goralczyk

Interactive Eye Highlighting


To make characters appealing, it’s important to get the eyes right; and one of the most important aspects of appealing eyes is the right amount of specular highlight. In most cases the best position for a highlight is within the area of the iris, but not right in the pupil.


The best way to get this effect is of course by tweaking the actual lighting in the scene so it results in nice lively eyes. However this can lead to continuity issues, shadows start pointing into the wrong direction, etc. To solve this, the eye spec has to be separated from the scene light.

Since we’re making a cartoon we can bend reality a bit further, the specular reflection doesn’t have to be 100% in the same place as the scene lighting… BUT it still has to be believable.

In Big Buck Bunny for example, the highlight was a separate – specular only – light (often one for each of the characters) which enabled us to put it exactly in the right spot. This technique is still very fiddly and it takes a while (and a lot of re-rendering) to position the spec exactly where you want it.  Another challenge: Since we render in Cycles there is no easy way to use light-groups, AND all our characters are linked into the shot files as groups – which means we cannot tweak material properties on a per-shot basis and per object, this gets a bit more tricky. But only a bit.

For Caminandes we chose a more flexible solution that allows us to control the highlight interactively in the compositor using normal passes (and for each shot).


  1. In the character library file, define a material/object ID for the eye
  2. In the shot file, render a Normal Pass for the entire image
  3. Enable ID passes for objects/materials to isolate the eye from the rest of the image
  4. Using the compositor, apply a color ramp on the dot product of the normal pass using the Normal node.
  5. The Normal node is used to control the direction of the specular reflection, it needs a slight tweak to shift the vector around and make it more user-friendly.
  6. Add the fake spec to the image by using the ID pass as a mask (or multiply the spec with the ID mask, and then add)

Sounds confusing? it’s actually a pretty simple once you get the concept. here is the setup:


and a simple blender file with the node setup in a group: eyelighting.blend

Of course, the position of the specular has to match the general light direction. The eyes still get reflections from the scene, but the specular highlight adds to the appeal.