Mouth (jaw) forced open when animating

I have hit a problem trying to apply animations which don’t include a jaw to a character whose rig does include a jaw. I expected the jaw simply wouldn’t be driven; however I end up with an open mouth which I can’t override.

Here’s the details:

The character was constructed in MakeHuman using its Unity Rig. This has a jaw (& eyelids – more about that later):

I’m playing with the Idle Mocap asset

I import this. Give my MakeHuman character an animation controller into which I’ve configured a single state using the Idle Stance 01 from the above asset. When I run, it basically works, except I get this open mouth:

I wanted to determine if the animation was simply writing to the jaw rotation, or more specific constraints were in place. So I added a bit of script with public variables to show, on every Update(), the jaw local rotation: before and after writing, and the value (attempted to be) written. Here are the values displayed (note X = 130 corresponds to the mouth closed):

I assume the “before” value (38.55725, 180, 180) is somehow being forced by the animation. The “after” value appears to show limits being applied (the 130 is cropped to 50). Needless to say, without the animation controller in place all of these are (130, 0, 0), and without this bit of script in place I can go into the Inspector & enter any value I want for the rotation.

The avatar with the animation has neither jaw nor eyelids:

If I look at the animation, I can see the jaw is referred to. I tried to make a copy of the animation & removing both the “Jaw Close” and “Jaw Left-Right” – but using this edited animation made no difference to the open mouth:

I’ve tried using a mask in the animation controller – but to no avail. I’ve also tried other animations with similar results.

I also mentioned the eyelids – they remain unaffected by the animation – what’s different about the eyelids compared to the jaw? How can I use animations, but keep the jaw unaffected?

I found my answer here:

My script to override what the animation does to the jaw should be in LateUpdate(), rather than in Update().

Wow, I spent days on this one, and yet the solution is so simple!