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
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.
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