Squash & Stretch
Cartoon Eyes
by Adam Sale
________________________________________________________________________
Objective: To create traditional cartoon-like squash and stretch eyeballs.
Synopsis: The Branch Lattice is a perfect method for the creation of these very cliché eyeballs. As is the case in many of these tutorials, a solid understanding of parent - child relationships and rotational axes is essential for this method to work. After we have finished off the creation of the eyes, we will use directional constraints to control the movement of the eyes.
________________________________________________________________________
The Eyes
Get a primitive sphere, making it an 8 step B-Spline Patch object in both the U and V directions. Name this sphere Eyeball.
Duplicate the sphere. You'll need to cut the sphere to construct a pupil. To do this, select the pupil and click on Draw à Cut. This will allow you to cut an object in either the U or V direction, depending on which curve you click on. In our case, click on a horizontal portion near the top of the cube. If you look in your schematic, you'll notice that two more objects have been created. The original sphere is still present, but the two portions of the sphere have been created. Their names are pcut1 and pcut2. Delete the original sphere and the lower cut portion of the two new objects.
Select the upper portion, and name it Pupil.
With the pupil still selected, scale it up slightly in UNI mode so it sits a little off the surface of the Eyeball. When you're satisfied, freeze the scaling of the pupil.
You'll need to rotate the pupil to face forward in the Right view window, so click on ROTX and rotate the pupil 90 degrees to get the pupil facing forward.
When you're done, click on Effect> Freeze > Rotation.
I'm asking you to do a lot of freezing right now, because when we get to using the Eyeball Constraints, the directions of the eyeball and pupils centers should line up.
Now would be a good time to give your eyeball and pupil a color to differentiate them. I'll leave that up to you.
Next, get yourself a null object naming it Eyeball Null. Turn on the Show > Centre option, and rotate the null 90 degrees in the Y axis. Your X-Axis should now be pointing to the left in the Right view port. The X-Axis is the red Arrow. When building the Cartoon eye, this is the null that will be constrained to the eyeball rig via a direction constraint.
A Directional constraint uses an objects X axis to point towards a target object. Wherever the Target moves, the x axis of the constrained object will follow.
Make the Eyeball and the Pupil children of the Eyeball Null.
The Eyelids
Select the Eyeball object and duplicate it. To make the eyelids, tag all of the points on the bottom half of the sphere. In TAG mode, translate the points up in the Y axis so that they tuck up into the top half of the sphere.
Switch back to OBJ mode and in UNI scaling mode scale the geometry so that it is slightly overlapping the Eyeball and Pupil objects. These will pose as your eyelids. They need to have a thickness to them in order to cover the Eyeball and Pupil when the character blinks. Freeze the scaling once you are satisfied with your eyelid thickness.
Using Effect à Symmetry, mirror the object across the XZ plane. You should have two eyelids. Name them accordingly.
Get a Null and make it the parent of both eyelids. Name the Null Eyelid_Null.
You now have 2 hierarchies, the Eyeball hierarchy and the Eyelid hierarchy. Get yet another null, name it EYE_PARENT and make it the parent of both hierarchies. See the reference diagram to make sure your parenting is correct.
Branch Lattices
Branch lattice is a wonderful deformation tool. It allows you to deform a parent object and have the children update according to the parent's deformations. This is what allows us to elongate an eyeball, yet still have the eyelid rotate along the deformed eye. Our eyes are in a separate hierarchy from the eyelids, because we will be applying the direction constraint to the eye hierarchy, which will allow us move the eyes as a unit and have them deform inside of the lids. The Branch lattice can be animated to give the squash and stretch appearance that is so pervasive in cartoon animation.
There are, as always a couple of rules you need to be aware of when animating a branch lattice.
1) When you move your branch lattices into proper position you must select the hierarchy as a tree and translate it in OBJ mode. In our lesson, we are building the eyes at the origin, and then moving them up into the character's head.
2) In order to successfully scale a branch lattice, select the hierarchy as a tree and tag all of the points on the lattice. Switch to TAG mode, and then scale the latticed hierarchy. If you scale in OBJ mode, the relationships within the lattice will be broken, and so will your model.
3) To save the scale or shape of a branch lattice, you must click on Savekey à Object à Branch Lattice. Any other type of keyframe will not work. When you save a shape, it stores that shape in a shape list, the same goes for Branch Lattices. Saving a lattice key stores the hierarchy of objects within a lattice list.
4) If you wish to delete a lattice key you must do so by scrolling through your lattice shapes using Lattice à Previous Key, Next Key, found in the MOTION module, and then clicking on Lattice à Remove Key.
5) You cannot remove a lattice key in the F-Curve window by clicking on Edit key and removing the keyframe with the right mouse button. The F-Curve works just like a linear Shape F-Curve. Suppose you have saved three lattice keys, 0, 1, and two. If you wanted to get rid of Lattice key 1 and you simply clicked your Editkey function and right clicked on lattice key 1 to remove it, you would in fact not be erasing the keyframe. The F-Curve would still remain the same, the only difference being a key is missing. However, lattice key 0 and 2 are still present. In order for your animation to move between lattice 0 and lattice 2, the F-curve still has to travel through a value of 1.So even though your key is removed, the lattice is still stored at that value of 1.
Using the Lattice à Remove Key function actually removes the lattice key from the lattice list. Using our previous example, the F-Curve would update accordingly. Lattice key 1 would now be removed, thus causing Lattice Key 2 to become lattice key 1. Now, scrolling through the time slider, notice that the keyframes play properly and the original lattice key 1 has been annihilated.
To sum up, the lattices are stored in a lattice list. If you remove a lattice key, the others shift down to make up for it's absence, likewise if you save a lattice key between a lattice value of 2 and 3, the new lattice key will become 3 and the previous lattice key of 3 now becomes 4. Confusing? You bet. The easiest way to picture this is to visualize a Train with numerous boxcars. If you need to remove a boxcar for any reason, it obviously won't fit in with the procession of remaining cars anymore. So the car is removed, and the line of trains is reattached.
Putting it All Together
Select the EYE_PARENT hierarchy and in MODEL mode click on Lattice> Branch >Create. Change the subdivisions in X, Y and Z to 1 and change the interpolation to Curve for all axes. Click on OK. Move the hierarchy in OBJ mode to the left side of the origin in the front window. Symmetry it across the YZ axis.
Building The Eye Rig
Get a Square and two Nulls. Position the Nulls as seen in the Diagram. Make the Square the parent of the nulls. Name the nulls LFT_CNS and RGHT_CNS respectively.
Position the rig so that it is in front of the two eyeballs.
Select the Left Eyeball_Null as a Branch. In the MOTION module, click on Constraint >Direction. Pick the LFT_CNS as a reference. The Left eye will rotate to face the Null.
Perform the same operation for the Right Eyeball_Null.
Right click to exit Constraint mode. If you select the Eyeball rig as a branch and translate it around the eyes will follow along. Scale the rig in X to make your character go cross-eyed. Rotate the rig in Z and the eyes will look dizzy.
Combine that with the animation of the Branch Lattice, a little rig to control the blinking of the eyes and pupil dilation and the effects you can yield are quite impressive, and will aid just a bit in achieving life in your characters.
Cartoon Eyeballs in Softimage 3D was written by Adam Sale. Adam is a Technical Director and co-founder of Joncrow Entertainment. He can be reached at adamsale@home.com.