Distance limit setup for eyes
February 24th, 2020
Flexible eye rigging can bring even more life to your characters. In this tutorial we'll create an eye rig that always looks at a target, without the iris and pupil going outside the bounds of the eyeball. This is the long form version of a tip we previously published. Let's go through it step by step!
For the purpose of this tutorial, we'll keep things simple. The eyeball is made up of a white circle image located in our image path. We drag it from the images node into the viewport, then duplicate its slot.
We'll turn this second circle into the iris of the eye. All we need to do is change the color of the attachment to an iris color we like. Images can be scaled and translated independently of bones in setup mode, so we'll scale the copy down to make it smaller in proportion to the eyeball. To establish the limit beyond which iris should not move, we also translate it so that it touches the border of the white circle beneath it.
Next, we duplicate the iris slot to create the pupil. Pick a new color for the image attachment and scale down the attachment as before.
Lastly, let's also add a tiny reflection of light on the pupil. Duplicate the pupil slot, make it smaller, change its color to white and place it on top of the pupil.
Finally we are ready to start creating some bones!
To get the desired effect, we need to create 3 bones. The
limiter bone originates from the center of the eyeball and extends to its border. It's angled at
0° to make alignment easier later on.
pupil bone is placed in the middle of the pupil, which also aligns with the midpoint of the
limiter bone. All the images except the white eyeball are parented to this bone. The
pupil bone itself is parented to the
target bone is placed along the axis the other two bones are placed at. It is parented to the
Time for the magic trick! As a first step, we create an IK constraint, with the
limiter bone as its parent and the
target bone as the target. This causes the
limiter bone to always point at the
By enabling the IK compress option on the IK constraint, we allow the
limiter bone to shrink and grow as the
target bone comes closer to or gets farther away from it. This way, the iris and pupil can move freely within the eyeball instead of being constrained to the eyeball's border.
If we move the IK target bone around, the iris and pupil will get distorted. This is due to the parent bone's rotation and scale being applied to the
pupil bone. To fix it, we simply disable the rotation and scale inheritance on the
This simple setup lets the pupil and iris follow the
target bone nicely, without distortion or going outside the eyeball!
You can download the finished project here.
The setup presented above is a general way to limit movement of elements to a circular area. Can you think of other use cases? Share them on the Spine forum!