This is a simple question I've had on my mind for a while. I've learned a lot these past few weeks by working on this project exclusively within Blender and asking questions. I'm just trying to get a solid understanding of how rigging in Blender works.

I'm rigging eyes.

When the eyes are separate objects, the process is pretty straightforward. I select the eye, select the rig, enter pose mode, select the bone, and use Ctrl + P to set the parent to the bone.

Parenting the eye to the desired bone.

The eyes properly tracking the widget.

However, the moment I join the eyes to the body, the eyes no longer follow the widget.

The eyes remaining stationary while I move the widget.

I've tried selecting each eye in weight paint mode and using Shift + K, but the eyes won't follow. I've also tried selecting each eye, looking at the object's vertex groups, and assigning MCH-eye.X to each eye. Unfortunately, the eyes still won't move.

Trying different methods of assigning weights to the eyes.

Is it possible to properly rig eyes without making them separate objects? Why doesn't rigging the eyes in weight paint mode work?

Thanks in advance!

  • $\begingroup$ You don't need to join the eyes to the body, and joining with the body is what breaks the parenting. As long as the eyes are parented to bones that follow the head you should be fine. You can arrange for the eyes to be part of the body if you want. I can write an explanation as an answer if you'd like. $\endgroup$ Oct 21 '21 at 3:14
  • $\begingroup$ @MartyFouts Sure! Just curious. $\endgroup$
    Oct 21 '21 at 3:21
  • 2
    $\begingroup$ I've seen characters done both ways. When assigning weights, the eyes must be assigned to a group with exactly the same name as the controlling bone. $\endgroup$
    – Ron Jensen
    Oct 21 '21 at 3:40
  • 2
    $\begingroup$ Rigify standard method expects separated eyes, but if you want to join them to the face mesh and assign weight to a MCH bone you have to select the bone, go to properties panel and check its "deform" option, which is unchecked by default, and this is the simple reason why it didn't work during your attempt. $\endgroup$ Oct 21 '21 at 5:25
  • 2
    $\begingroup$ @Marty, Rigify doesn't create a DEF bone for eyes because it would get involved in the automatic weight asignement: the designers decided to use the Bone parenting method (eyes on different objects). If you decide to use the weights instead, you have to turn a MCH bone into a DEF bone (ticking its "deform" option). Probably the best method would be create a copy of the MCH bone, rename it as DEF bone, move it in the 29th bone layer and give it a copy transorm constraint targeting at the MCH bone. $\endgroup$ Oct 22 '21 at 5:33

There are two common ways to add eyes to a head. First I'll describe how I do it when the eyes are meshes that are part of the head object:

One Way

The really simple demo head

Here is a head, consisting of 1 object. The object consists of two meshes, that I nickname half-a-head and left-eye:

The head

Only half a head because I'm mirroring to save effort. They eyeball is a simple sphere that fits into a notch inset in the half-a-head and is rotated 90 degrees on X.

The armature for this part is three bones, although I only had to add and position two of them:

  • head is positioned so that its head and tail are at the end point vertices of the half a sphere.

  • eye.L is position so that it touches the end point vertex but the other end is at the center of the eyeball sphere.

The key is that eye.L is parented to head. I'll use Armature ▶ Symmetrize to generate eye.R. This works because Blender knows about L/R or similar prefixes and suffixes to denote symmetry.

Next I select the head object and then the armature and parent with empty groups. Empty because automatic weight painting does a crappy job with this object. That creates a vertex group in the head object that has the same name of each bone:

Vertex groups created by parenting with empty groups

Because the object is simple, rather than weight paint, I edit the head. First I select the eye.L vertex group and the eyeball mesh and assign the vertices to the group. Then I select the half-a-head and assign it to head. eye.R takes care of itself.

Because the eye bones are parented to the head bone they move with the head bone in pose mode but can also be rotated independently of it.

Because the eyes are parented to the eye bones through the vertex groups, they move with the eye bones.

Once this is done, it's possible to add the rest of the eye rig without worrying about the eyes.

Here's the really simple demo file.

The other way

In this case, the eyeballs are separate objects, but the eye.L and eye.R bones are still part of the same armature as the head and are still parented to it.

The difference here is that while instead of using vertex groups, we use bone parenting to parent each object to its relative bone.

The steps are the same for each bone, so I'll only describe eye.L

  • Enter Object mode
  • select the object eye.L
  • add the armature to the selection
  • Enter pose mode
  • select the bone eye.L
  • Parent and select Bone: Parent menu showing bone selected

  • $\begingroup$ Hey! I've tried this, but the eyes still aren't tracking. The bones track just fine, but even with the vertex group assigned to the eyes they won't move along with them. I've tried assigning the eyes to both the MCH-eye.x bones and the ORG-eye.x bones using both the vertex group and weight paint method. Do you know what could be causing the eyeball mesh not to follow? $\endgroup$
    Oct 22 '21 at 1:33
  • $\begingroup$ Also, just to demonstrate that the rig is otherwise functional: $\endgroup$
    Oct 22 '21 at 1:47
  • 1
    $\begingroup$ Which version did you try? You assign vertex groups if the eyes are in the same object as the head. You assign to bones if the eyes are in separate objects. Also, you want to assign to the DEF- bones, and make sure that the bone is set to 'deform' in its properties. $\endgroup$ Oct 22 '21 at 2:20
  • $\begingroup$ I mentioned this in my original post, but I tried both! Originally the eyes would only follow the widget if they were separate objects from the body, but ticking the deform checkbox did the trick! Thank you so much ✌️✌️ $\endgroup$
    Oct 22 '21 at 3:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.