top of page
Maya: Cartoony Eye Rig

If you found this tutorial interesting,

please consider a small donation.

PayPal ButtonPayPal Button

In this article I will outline how to create a very flexible cartoony eye rig.  Although I will be using Maya the same techniques can be applied to any software.  I'll be working in centimeters.

1.  In a new Maya scene, create a poly sphere at the origin called "eye_result" (I used a radius of 2 and 20 subdivisions in the axis and height).  Group "eye_result" and call this group "meshes", group "meshes" and call this group "rig".  The "meshes" group will contain all our meshes and "rig" will contain everything and allows us to transform the rig in the scene.

2.  Rotate "eye_result" in the Z axis so it's poles are lying on the X axis, freeze its transforms and delete history.  Duplicate "eye_reult" twice and call these duplicates "eye_pupil" and "eye_ball".  Group the two duplicates and call the group "do_not_display".  If you want to apply a shader to "eye_result" then do it now.  Important: disable "Inherits Transform" on "meshes" group!

This should be the result after steps 1 and 2

3.  Create a poly plane (size doesn't matter, honest) with 1 subdivision in width and height, place it on the centre vertex of the pupil and rotate it 90 degrees in the Z axis, freeze its transforms and delete history, call this mesh "rivet_plane" and parent it to the "do_not_display" group.  Create a joint called "main_skin" at the origin, create a child called "pupil_skin" positioned in X at the centre vertex of the pupil.  Group "main_skin and call the group "joints", parent this group to "rig".  Duplicate "pupil_skin" and rename the duplicate "rivet_plane_skin".

4.  Create a locator positioned at the center of "rivet_plane" named "rivet_locator".  Group "rivet_locator" and call the group "locators", parent this group to "rig".  Create a pointOnPoly constraint from "rivet_plane" to "rivet_locator".  Select the pointOnPoly constraint and change "Rivet Plane U0" and "Rivet Plane V0" to 0.5, this will centre "rivet_locator" on "rivet_plane".  Create a parent constraint from "rivet_locator" to "rivet_plane_skin".

This should be the result after steps 3 and 4

5.  Skin the "main_skin" joint to the "eye_ball" mesh.  Skin the "pupil_skin" joint to the "rivet_plane" mesh.  Skin the "rivet_plane_skin" joint to "eye_pupil" mesh.  Important: in the "Smooth Bind options" make sure "Bind to" is set to "Selected joints"!

 

6.  Create a blendShape from "eye_ball" to "eye_result".   Create another blendShape from "eye_pupil" to "eye_result" and use the paint functionality to edit the deformer weights so that it only effects the pupil and iris then flood smooth the weights a few times to get a nice smooth falloff.  Important: make sure the second blend shape on top of the first blend shape in the "INPUTS" list for "eye_result"

An example of of the smoothed blend shape weights

7.  Select the "eye_ball" and "rivet_plane" meshes and apply a lattice deformer, adjust the lattice shape so that it has 2 divisions in S, T and U.  Group the lattice and its base object and call the group "lattices", group "lattices" and call the new group "deformers" parent this group to "rig".    Important: disable "Inherits Transform" on "deformers" group! 

bottom of page