Is it impossible to make an object follow a vertex deformed by a shape key?

I make facial rigs using mainly shape keys but i like to have a bone layer to tweak, customize and exaggerate stuff. Normally in Maya I would constraint the bone’s parent to the blendshape deformed vertices.

In Blender i don’t know how to do this, it seems like the vertex deformation from the shape key is invisible to the child of constraint. VerticeShapekeyBoneFollow_002.blend (582.1 KB)

In this scene i tried two methods…

  • An empty shrinkwrap-constrained to the point, doesn’t works.
  • A bone parented to another armatur that is constrained to a vertex group corresponding to a vertex deformed by the shape key, doesn’t works.

Would there be another way?

can’t you parent a bone or empty to a vertex and the target that from you rig?

How do you parent an empty to a vertex?
The only way i know is the child of constraint.
I tried the relation dropdown in the object properties tab, it has the vertex option but it doesn’t let me specify which vertex, it just takes the bottom left corner one.

I’ve updated the scene with that third option:
VerticeShapekeyBoneFollow_003.blend (588.0 KB) .

I’m lame i guess…

I just selected the plane vertice, then the empty, CTRL+P but with the vertex option and it worked… Thanks a lot!

Now i need to find a way to deform the shape key deformed mesh with a skinned bone…
It’s like the reverse way of what blender people normally do and i’m not sure how to do this without creating a cycle.

I’m not following what your doing but maybe a hook. Select the object that you want to pull on the vertices with then select the object with the vertices, then enter edit mode select the verts and ctrl h, hook to selected object. This will add a hook modifier.

The main problem with your file is that no vertices are assigned the vertex group vert_mid, which is what your armature targets with its constraint.

However, I’m not sure that Blender is smart enough to do what you eventually want, because odds are that you eventually want to use that same bone to deform the same mesh, right? And then that becomes a dependency loop.

It isn’t impossible, it’s just more work. You need a duplicate of your mesh without the armature, so you can get just the shapekeyed position without getting the armature deformed position. (Shapekeys can be animated on the duplicate and transferred to the main copy via a surface deform modifier above the armature.)

I tried the surface deform thing before but it didn<t bind cause it had “concave faces”… I just gave up on that.

Usually throwing a triangulate modifier onto the bind target will take care of that.

It wouldn’t work, since the bone constrained with child-of constraint is transformed in pose by it’s constraint, you would end up with double deformations when just applying the shape key.
Though there is an actual solution…but that’s kind of eerrrrr…
1-you do as you said copy with surface deform modifier.
2-then you make the child of constraint but you don’t create it on the bone. you create it on the armature object.
3- make sure that your final deformed mesh has armature modifiers but that it’s not parented to the armature objects
4- the issue is you’ll basically have to make a new armature for each single bone. and that’s a shame because in the animation process, you’d have to switch from pose to object mode and back to pose all the time. plus you don’t have a single armature to store all of your keyframes so…
5- in your main armature, re-create every single tweak bone you created. give all these bones a child at the same location(these child bones are the ones to be keyed for animation)
6- re-do your child of constraint to every parent bones
7- finally go to every single-bone-armatures and give their bones a copy transform constraint targetting the keyable bones in the main armature. make sure it’s in “local space”.

This is nightmare-ish :frowning:
Even if it works, like you said, I can’t imagine an animator working with this.

Right now, i can achieve greater results faster using only shape keys rather than using bone deformed rigs. I have way more control over 100% shape keys than control with correctives.
And normally the advantage of the bone deformed rigs is the interpolation but here in Blender there is no simple and stable “follow volume surface” solution like follicles slinding on nurbs surface like in Maya so it makes it even less tempting to use bones…

This thing is interesting but it seems super messy and tedious to do. Most of all, after all the work, the range of the mouth shown is super small.

I’m starting to think Action Constrains is the only solution for rigs with huge range following the head surface.
I was thinking maybe controllers slinding on spline curves could work to but even then, thos splines would need to wrap the surface.

Here’s a very interesting solution that i will consider, it’s using shape keys and driving their interpolation so that they blend smoothly:

no… actually the stpes 5,6 and 7 are meant to control this with a single armature. the multiple armatures still exist but you will not have to touch them during the animation.
this is still nightmare-ish to setup. though you could set this up with some scripting :slight_smile:

Just answering the explicit question. If he wants to get deeper into what he wants, then that can get answered too-- but the answer is probably, it’s possible, but it’s not worth doing. (For example, one issue is that if he has a lip shapekey, and he acquires the lipCorner shapekey position before it’s deformed by the head, then it’s maybe not where he really wants it, right? And can’t be solved with simple parenting, which operates prior to constraints. That problem is solvable. Irritating to solve, but solvable. But you have to see it before you can solve it, and when you see that problem, you learn something about rigging.)

For facial? Yes, that’s true. What you’re asking is not easy to do in Blender-- not worth doing, IMO. If your goal is to get fast deformation, use shapekeys. If your goal is to get highly tweakable deformation, use armatures. If you have different goals for different parts of your mesh-- like facials vs body-- use shapekeys and general bones, like a “smile” shapekey with only a head bone.

That’s the fast way. That’s the easy way. Anything else will not be fast or easy.

If you really want to combine facial bones + shapekeys, do the bulk of your work with bones. Your bones should not need to be modified by the shapekeys. Use shapekeys as minor correctives if you want. You can store the facial expressions as poses or as actions.

If you want something similar to Maya, where you have some post-shapekey, post-armature hooks you can work with, you might look into the use of warp modifiers. That was an answer that made the last Maya guy to whom I suggested it very happy. It does mean, potentially, creating a really long modifier stack, and it’s probably not as easy as Maya, but it’s a thousand times easier than trying to make your armature follow your shapekeys, and then use some armature bones to hook bits.

You’re talking about the so-called “Dorito Effect” right? If so maybe this workflow could help…?

An annoying thing is if i use this, i’ll have to mix pose mode and object mode when animating…
Also the in betweener doesn’t works in object mode.

nope. not forced to switch to object mode with @julperado’s post . you can have a set of parent and child bone in your armature.
the parent in constrained with child-of constraint just like the square-empty and the sphere-empty in constrained by the child bone with copy transform in world space.
and you animate on the child bone.

Oh yeah, in the end it’S a bone instead of an empty, i need to try that.

I just start to learn about the warp modifier, it seems to be a great complement to armature.

Oh. actually yes, it works directly with bones… you can put bones directly in the warp modifier.
I should have thought about that…

The cool thing in Maya is that you can use an active geometry as Shape key input. The target object’s Shape Key (blendshape) updates as the source geometry is deformed by weighted bones ( skinned joints).
That way you can interactively use a weighted mesh as a shape key input and mix it with other stuff.
Would be nice to have that in Blender
Like a “ShapeDeform” modifier where you would take a mesh with same topology as input.

I will have to put the blendshape aside and try action constraints as i don’t see myself making 40+ dorito setups… It’s tempting tho as i hate tweaking skin weights and making joints behave nicely and organically together.
There is a softmod addon but it crashes with 2.91-2.92. From what i remember it also creates an armature for every object…

My end goal is to be able to make a facial rig template that i can use to transfer on other characters with minimum tweak without to have to redo everything from scratch everytime.