Stretchy eyes in Maya

Something I’ve been trying to figure out for a while (and I know I’m not alone), is how some studios get their characters’ eyes to stretch, while the pupils remain circular. Now I think I’ve found a solution.

To start out, we need two meshes – the eye model, and a polygon sphere of roughly the same size. The construction options for the poly sphere will need to to be adjusted, so that we have a face directly in front of the nurbs eye’s pupil. For this example, I’ve set the subdivisions for the axis to 10, and the height to 11 –

stretch_eyes01.jpg

For this next part you’ll need the rivet script installed. On the poly sphere, select two parallel edges in front of the nurbs pupil, and create a rivet –

stretch_eyes02.jpg

Now you should have a locator that will stick to that polygon, no matter how the sphere moves or deforms –

stretch_eyes03.jpg

Now, select the eye and the poly sphere, and apply a lattice deformer. (Any deformer can be used, this is just an example)

stretch_eyes04.jpg

Next, select the CVs for the pupil, and create another lattice –

stretch_eyes06.jpg stretch_eyes06a.jpg

This second lattice will then be parented to the rivet locator. But if we select and rotate both models, we run into a problem –

stretch_eyes07.jpg

This is easily fixed. Undo the rotation, open the second lattice’s attribute editor, and check the ‘Freeze Geometry’ option –

stretch_eyes08.jpg

And rotate the models again, just to make sure everything’s behaving –

stretch_eyes09.jpg

Now to see the full effect, change the shape of the first lattice, and rotate the spheres –

stretch_eyes10.jpg

From here, it’s just a matter of tidying things up. Rather than having to animate both spheres, it’d be much easier to orient-constrain one to the other, or connect their rotation values directly.

Here’s the finished scene, to play around with – stretcheye.zip