Home Website Youtube GitHub

Brow rigger not working

Hi, I’m having problems rigging the eyebrows of my character. I’ve tried many configurations but anything seems to work. When I run the script for the eyebrows, I get this warnings:

 Warning: Too many coincident knots.  Maximum allowed is degree
 Warning: Too many coincident knots.  Maximum allowed is degree
 Warning: brow_L_mainCtl_upvShape (Nurbs Curve): Tweaks can be undesirable on shapes with 
   history.

The result is a group of controllers with secondary controllers but the only one that controls the joints is the brow controller itself. I tried selecting the secondary controls group created in my setup group and moving them and only then I get the joints moving, by the curves group transform.

https://imgur.com/a/APQds5c

As you can see in the image, even though I move the main controllers or the secondary ones the joints don’t move.

I’ve tried with all the info I’ve found in the forum for the brow rigger, (which is very few) with no luck. I’ve tried also with a standard sphere should my character’s head could be the problem, and I get same error.

Any solution to this?

I’m using Maya 2024.1 with mgear 4.0.21

It does appear that the brow rigger is currently completely broken. The wire deformers are not created properly, and some connections are made incorrectly and so affect the opposite side of the face.

I got the face rigger stuff to work, but only if I saved out each side. I saved out each eyes/brows face rigger side as it’s own config file. Here’s how I plugged it into my post build script.

def rig_face(self):
    ''' Expects a config file in the paths specified.'''
    import mgear.rigbits.facial_rigger as fr
    for side in 'LR':
        # EYES
        eyesConfigPath = EYES_CONFIG.format(self.charName, side)
        print(f'Running: {eyesConfigPath}')
        fr.eye_rigger.rig_from_file(eyesConfigPath)
        # BROWS
        browConfigPath = BROWS_CONFIG.format(self.charName, side)
        print(f'Running: {browConfigPath}')
        fr.brow_rigger.rig_from_file(browConfigPath)

    # LIPS
    lipsConfigPath = LIPS_CONFIG.format(self.charName)
    print(f'Running: {lipsConfigPath}')
    fr.lips_rigger.rig_from_file(lipsConfigPath)

    # soft eye tracking settings
    eyeLidCtls = pm.ls('eye*upMid_ctl', type='transform')
    eyeLidCtls.extend(pm.ls('eye*lowMid_ctl', type='transform'))
    for ctl in eyeLidCtls:
        pm.setAttr(f'{ctl}.vTracking', 0.3)
        pm.setAttr(f'{ctl}.hTracking', 0.2)
        if 'up' in ctl:
            pm.setAttr(f'{ctl}.vTracking', 0.4)

    # constrain tongue to jaw
    tongueRoot = pm.PyNode('neck_C0_head_ctl|mouth_C0_root|tongue_C0_root')
    jawJnt = pm.PyNode('mouth_C0_jaw_jnt')
    pm.parentConstraint(jawJnt, tongueRoot, mo=True)
1 Like