Corrective Blendshapes

Like twist bones, corrective blendshapes help greatly with deformation, at the cost of needing a sender and receiver slot on your avatar. They are common on knees, elbows and shoulders in animation spaces but can be used in a lot of scenarios

Tut_CorKnee_PosePreview.png

To get started, pose your avatar with symmetry OFF in a position where you want the corrective blendshape to happen. Create a new blendshape (I tend to name any corrective blendshape with the prefix โ€œCor_โ€).

Go to sculpt mode and select your newly created blendshape.

Tut_CorKnee_BlendshapeOn.png

Note

The Shapekeys list is different because it uses an addon called Shapekeys +, which organizes shapekeys through folders. This addon has not been maintained and often scrambles folders, so I would not recomment it anymore. A similar (paid) addon I would recommend is Quick Shape Keys.

When in sculpt mode, the blendshape you have selected is the one that gets affected by sculpting. If the blendshape isnโ€™t set to 1, nothing will happen when trying to sculpt. Now, with your avatar posed and with symmetry set to off in sculpt mode, attempt to sculpt the shape you want the mesh to look like when the corrective blendshape is active. References here can help a lot.

Tut_CorKnee_Sculpt.png

Once youโ€™re done, make sure no other blendshapes are active, and with the corrective blendshape set to 1, make a new shape from mix and mirror it to get the other side (assuming your avatar is properly symmetrical)

You can now export your model to Unity.

Once in Unity, you will need to make 2 animations. One for turning the corrective blendshape to 100, and one for when itโ€™s at 0.

Tut_CorKnee_SndRcvPreview.png

Then, add a receiver to whichever bone is appropriate for your corrective blendshape. For example, if youโ€™re doing a corrective blendshape for a knee, the receiver would be in the top of the upper leg, and the sender would be on the bottom of the lower leg.

Tut_CorKnee_Receiver_Off.png

Tut_CorKnee_Receiver_On.png

The position and size of the receiver and sender might need to be adjusted, but just keep in mind that the bigger the receiver, the smoother the transition, but if itโ€™s too big, itโ€™ll activate too early and look wrong. Think about where the receiver and sender will be when the expected position for the blendshape to trigger is reached. When the sender enters the receiverโ€™s radius, itโ€™ll begin the transition, and when itโ€™s in the center, it reaches the blendshapeโ€™s max value.

Tut_CorKnee_ContactSettings.png

Tut_CorKnee_SenderSettings.png

Your sender and receiver will need a matching keyword and the receiver will need their own parameter name. These can be the same. Also, set it to proximity. Make sure โ€œAllow othersโ€ is off so others canโ€™t activate the blendshape.

Tut_CorKnee_One.png

With that done, go to your FX animator controller and create a new layer.ย Set the weight to 1, Then create 2 new float parameters. One that matches the receiver parameter you named earlier, and the other will be โ€œOneโ€. โ€œOneโ€ will simply be there to keep the direct blend tree active and avoid having to do a layer for each and every corrective blendshape you have. In the parameter list of your animator layer, make sure โ€œOneโ€ is set to 1, otherwise your direct blend trees wonโ€™t work!

Tut_CorKnee_NewBlendTree.png

Tut_CorKnee_Direct.png

Tut_CorKnee_AddBlendTree.png

Tut_CorKnee_Unity_Parameter.png

Create a new blend tree. Inside it, set it to โ€œdirectโ€ and add a new blend tree. In the direct blend tree, set the parameter used to โ€œoneโ€, and inside the new blendtree, use your corrective blendshapeโ€™s parameter name.

Tut_CorKnee_SlotAnimations.png

Tut_CorKnee_PreviewBlendTree.png

In the top slot of the blend tree, put the animation for when the blendshape is at 0, and in the second one, put the one for when itโ€™s at 100. You should be able to test this in the preview by drag and dropping your model in from the hierarchy and moving the red bar left and right to make sure it works.

[!question] Help! it doesn't work!

I'll go over common points of failure:

Tags: Do they match between the sender and receiver?

Parameter names: Do they match between the receiver and FX layer?

Animations: Are they slotted into the blendree properly, and are the blendshapes in the animation set to 100, and NOT 1?

Senders: Are they parented to the correct bone?

Layer weight: Is the layer weight set to 1?