This past week I've learned (sort of) how to set up an eye rig for non-spherical eyes using this incredible advice: pupil constrained to a surface

enter image description here

Basically, I have the Eye object. I have an empty object located inside the eye. I have the pupil geometry parented to the empty object.

enter image description here

The Pupil has a Shrinkwrap Modifier applied, with the Eye as the target, giving the result in #1 in the picture.

The Empty object inside the eye has been given a Shrinkwrap Constraint, so it moves along the surface of the Eye. The Pupil object is parented to the Empty object with Keep Offset applied as the parent type, so the pupil doesn't deform as the pupil rotates around the eye.

The Empty object has a Track To Constraint applied to it, with a bone as the Target, see #2 in the picture.

When I rotate the head back, it looks like #3 and #4 in the picture.

I've tried parenting the pupil mesh to keep offset with the eye, parenting the empty to keep offset with the eye, and other random stuff that I can't exactly remember (because I wake up at 4:00AM to do this stuff before I go to work...).

What are your ideas and solutions?

If I'm going about it all wrong (this will eventually be going into Unity, so Lattice deformers are out of question, as Unity doesn't support Lattice deformation) then I'm willing to try a new approach. But right now, I can't turn or move the head from the default position without the eyes screwing up. If it stayed in this pose, it would work fine...

and here is the texture file

penguin skin

  • $\begingroup$ You mention that Unity doesn't support lattice deforms. Does it support shrinkwrap? $\endgroup$
    – Nathan
    Commented Jun 23, 2018 at 18:22
  • $\begingroup$ @Nathan as far as I'm aware now, shrinkwrap is something that would have to be applied before it could be transferred over to Unity. I'm pretty sure any modifier has to be applied before it can be taken into Unity. However, for this problem in particular, where I wanted to be able to animate the pupils, I think the best thing to do would be to animate the UVs or something. I never came back to this, and animated the character without eye animation. But it looks as if that would be the best go-to. No idea how to do it yet though. $\endgroup$ Commented Jun 24, 2018 at 21:39
  • $\begingroup$ Then I'm afraid I don't see the advantage in shrinkwrap over lattice-- both would have to be written to the mesh, or to a shapekey (I believe Unity calls them blendshapes.) $\endgroup$
    – Nathan
    Commented Jun 26, 2018 at 19:40
  • $\begingroup$ Yeah, I agree. I've learned a lot since then (including UV layouts, this is hideous lol) $\endgroup$ Commented Jun 28, 2018 at 1:12

1 Answer 1


Here is the Link to explain what I would change

These are the primary things I felt I would change if this were my own.

I would use an Empty for the focal point (instead of a bone) and parent it to the armature.

I would get rid of the two empties at each pupil.

I would tell each pupil to track (constraint) to the "NEW" focal point empty.

I would tell each pupil to pivot (constraint) to the "Head" bone.

Here is the result of doing these four things. enter image description here

  • $\begingroup$ Thank you for your time and incredible solution. I'm at work right now so I can't get in Blender yet, but the changes sound reasonable to me! As long as the head is rotated in whatever direction and the pupils still follow the Target properly in all those directions the head is faced, I'm incredibly satisfied. I'll take a look at it when I get home - can't wait. Many thanks again! $\endgroup$ Commented Aug 30, 2016 at 17:09
  • $\begingroup$ Wow it works! It's not flying everywhere now. But there are a couple problems with the pupil rotation... any way you know of around this? media.giphy.com/media/3o7TKJqDiurP5aI9B6/giphy.gif $\endgroup$ Commented Aug 31, 2016 at 0:50
  • $\begingroup$ You could introduce two more empties that are parented to the main focal one, and have each pupil point to the corresponding one to each one of those. If the rotation seems off, you could rotate the main one enough to straighten it out. -Hope that helps $\endgroup$
    – Rick Riggs
    Commented Aug 31, 2016 at 6:12
  • $\begingroup$ I'll give that a go. $\endgroup$ Commented Aug 31, 2016 at 13:52
  • $\begingroup$ Well having the extra eye control is nice; having each pupil look at their own empty, both pupil empties parented to the main one. Thanks for that tip. Also, rotating the empty in the x-axis, making it face more towards the head when it's lifted up and then moved side to side helps keep the pupils move in sync, so that's nice. Thanks. I've fiddled with it a bit and still can't seem to fix that snapping that happens right when the eyes move past almost half-way up the eye. Don't suppose you have an idea of what's causing that? I can't seem to figure it out... $\endgroup$ Commented Sep 1, 2016 at 12:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .