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, and it doesn’t matter if the subject is about sports and how the right equipment is used as compression socks and the right shoes, 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.



13 thoughts on “Interactive Eye Highlighting

  1. Hello ! Good tweaking !
    I have just a little question.
    Why invert RGB channel for the normal. I tried with blender internal, the tweak works without flipping vectors, but in Cycles, we need to flip vectors.
    Is it a bug ? Do you know with normal passes are not similar in BI and Cycles ?

    Thanks for sharing,

    1. It’s seams that Normal Pass in BI is camera relative
      and Normal Pass in Cycles is world relative

      So on a single Sphere, vectors would change when camera moves around.

      That is really strange, is’nt ?

    1. nice! but our scenes are a bit heavy though, so there isnt much realtime viewport rendering going on :)

    2. However, he makes a good point about linking it to the rig. The movie I worked on a few years ago did this; the animators could control the size and position of the highlight in the GL viewport.
      Too late for that in this one, but worth noting for the future.
      (BTW – great stuff Andy!)

  2. I’ve painted eyes and eye surgery for 35 years, and –tis true– the specular placement is *important. I use it to break-up the circle-in-circle effect of the iris:pupil —*that can be sooo distracting. Just FYI, its because our brains are hard-wired to identify eyes, even far from the center of attention.

    You can ‘kill two birds’ with one specular ‘stone’ if you cross the border at the iris (color) and pupil (black), if there is little contrast there, cut the iris edge

Leave a Reply