Issue with BlendShapes slightly moving the head

Issue with BlendShapes slightly moving the head

rcdmilla
Participant Participant
4,461 Views
6 Replies
Message 1 of 7

Issue with BlendShapes slightly moving the head

rcdmilla
Participant
Participant

The issue that I have is that :

 

When I use the shape editor, what happens is that I get unwanted head movements when using the sliders for each Blend shape so I’m trying to trouble shoot the problem.

 

So what I have done so far is;

I’ve reordered the inputs (blend shapes underneath the skin cluster) this method yielded no results

I've changed the Origin in the blend shape attributes to “local” and that hasn’t fixed the problem

In earlier iterations of the model,  when I use the shape editor I had no problems, I cannot determine if the issue was when I applied weights to the joints of the face or not

But I have a feeling it may have .

Also one thing that I’ve notice is that all the blend shapes all move the at the same time while moving the target(head). Is that normal?

 

I've looked at other solutions on other forums but nothing seems to work in my favor.

 

I have a short video with the issue

 

0 Likes
Accepted solutions (1)
4,462 Views
6 Replies
Replies (6)
Message 2 of 7

Kahylan
Advisor
Advisor

Hi!

 

first, it is good that you moved the blendshape befor the skincluster in the deformer hierarchy, because otherwise the skincluster is overwritten by the blendshape.

 

Your targets should not move when you move the head, it could be that you used "duplicate special" with the "duplicate input graph" option active to make those duplicates, I couldn't tell because you didn't select any of them in the video. Select a targetmodel, and check if the skincluster is listed in the inputs. if it is, break the connection to it in the Node Editor. This might already solve your problem.

 

If that doesn't solve the problem, your issue is probably this:

Since you had to pull your blendshape below your skincluster, I'm assuming the skincluster was already active when you created it and deforming your mesh, it could be that your head joint was not in bind position when you duplicated the targets, therefore moving the head up from the blendshapes perspective. This is why it is important to alway put the "envelope" attribute on all active deformers to 0 before introducing a new one.

 

There are some ways to fix this, but sadly, none of them is really elegant. Atleast the ones I know of...

 

Method Number 1:

This version is more exact, but for it to work you need a blendshape target that was created at the same time as the others and still is in the default expression. If you don't have an extra duplicate somewhere, you probably can set the "envelope" attribute on the tweak input of one of your targets to 0 and achieve that, depends on how you set up your targets.

1) connect that target to the blendshape

2) duplicate the head that gets transformed.

3) set the target to 1, you now should see your head moving up without deforming.

4) duplicate the head in the upper position

5) create a blendshape from the head in default position to the head in upper position.

6) set target weight on this blenshape to 2, you should now see the upper head moving downwards below the default position.

7) duplicate again and then delete the previous duplicates. You now have a default shape that offsets the translation of the vertices.

😎 connect the new duplicate to the blendshape on the head

9) put the weight on the new traget on 1

10) for all the other targets, put the weight on 1, duplicate the head, put the weight on 0, one after the other.

11) create a new blendshape with the new targets.

 

Method Number 2:

1) create a distance Tool (Create-> Measure Tools -> Distance Tool)

2) click twice into your Scene to create the Tool

3) Snap both created locators to a vertex on the top of your head that shouldn't move when you trigger the Blendshape.

4) Select the vertex you snapped to and one of the locators

5) Create a point on pointOnPoly constraint. (Rigging Toolset, Constrain -> Point on Poly)

6) Set one of your targets to 1

 

You now should see one Locator moving along with the head and the distance tool giving you de distance of the unwanted movement. Now you have two ways of proceeding.

1: eyeball it

1_7) select all your targets in vertex mode

1_8) move them downwards until the locators match again and the distanceDimention tool doesn't show a distance.

This might take a bit, and you maybe wont get it 100% correct, but you should atleast try to get the distance to <0.0001, because the offset you'll be left with is cummulative for each target.

 

2: use a script (this only works if the offset is on 1 single axis)

 

2_7) select all your targets in object mode and then the distanceDimension tool.

2_8) run the following script from a Python Tab:

 

import maya.cmds as mc

def moveObjectsComponentspace(dir = 0):
    sel = mc.ls(selection = True)
    
    dist = sel[-1]
    offset = mc.getAttr('{0}.distance'.format(mc.listRelatives(dist, c = True, s = True)[0]))
    
    sel.pop(-1)
    
    mc.select(cl = True)
    
    for s in sel:
    
        vtx = cmds.ls(sel[0]+'.vtx[*]', fl=True)
        
        mc.select(*vtx, add = True)
        
    if dir == 0:
        mc.move(offset, moveX= True, ws = True, r = True)
    elif dir == 1:
        mc.move(offset, moveY= True, ws = True, r = True)
    else:
        mc.move(offset, moveZ= True, ws = True, r = True)

moveObjectsComponentspace(dir = 1)

 

 

This is a quite common mistake. In the future make sure that all your deformers are set on Envelope 0 whenever you add a new deformer to avoid having to do this again.

 

I hope this helps!

0 Likes
Message 3 of 7

rcdmilla
Participant
Participant

Thank you very much for your informative  response to my blend shape issue.

 

I’ve made a mistake with what I was talking about, I should have been clearer as to what I was referring to:

 

When I created the blend shapes, I didn’t have to rearrange the order, the inputs were already in the correct order when I began to trouble shooting the issue.

 

The skin cluster that you’ve mentioned were in the inputs. I’ve broken the connection in the node editor and nothing happened ( I will show in the video)

 

 

Also I didn’t use the Duplicate special to create the blend shapes the duplicate settings were on default

 

 

1) When I connect the target to the blend shape

2) duplicate the head that gets transformed….

3) and set the target to 1, the head does deform and doesn’t move up and down

 

So I’m kind of confused as to what it is that I’m doing incorrectly

 

Hopefully the video will illustrate the issue better. Thank you 😊

0 Likes
Message 4 of 7

Kahylan
Advisor
Advisor

Ok, one thing I'm seeing is that all your blendshape targets seem to have skinclusters on them. Unless they should deform with the main joints (which they normally shouldn't) or if they have separate rigs on them, you should delete those skinclusters, because they will cause double transformations when you move your head.

 

But that doesn't seem to be the issue with your blendshapes, because if it was, you would have seen your "head_Original" target move a bit as soon as you disconnected the skincluster.

 

This means that your blendshapes at some point got moved in componentspace, maybe because of a deformer, or some other operation. It happens from time to time. And you need to counteract that movement in order to fix the issue.

 

The two methods I described are for exactly that.

 

But I know that text instructions like this are a bit hard to follow. Also I'm not entirely sure if this is the problem, because it could also be something in the active inputs of the Blendshapes, but I would need to see the Scene directly to be able to find out exactly what's wrong.

 

If you want to, you can DM me your scene or a download link for it and I'll see if I can fix the issue and also record it so you know what to do in the future.

0 Likes
Message 5 of 7

rcdmilla
Participant
Participant

Dm Sent

0 Likes
Message 6 of 7

Kahylan
Advisor
Advisor
Accepted solution

Hi!

 

I checked your file out. And the issue is with the skinclusters on the blendshape targets.

 

It's an easy fix, so I think there isn't any need for me to send the file back, because I had some Errors when I opened the file so there probably is some dataloss in the file I have, because my version is different from yours.

 

You simply need to turn "envelope" on all the skinclusters on the targets to 0, and then delete the history on the targets (or just delete the skinclusters in the nodeEditor if the tweaks have any significance).

 

I attatched a video of how to do it correctly.

 

Have a nice day!

0 Likes
Message 7 of 7

rcdmilla
Participant
Participant

Thank you very Much!!! 😀😁 you Rock!!!😎

0 Likes