Hand Gestures/Facial Expressions

Hand Gestures

Hand Gestures are done on your average avatar by animating the humanoid bones on the Gesture Playable Layer. Generally, it is done by copying (Ctrl+D) the vrc_AvatarV3HandsLayer (or vrc_AvatarV3HandsLayer2) controller from the samples, and editing it by putting the desired animations in the right slots.

The difference between the two sample controllers is that they have slightly different idle animations.

<aside> ℹ️ These Animator Controllers use Proxy animations. That is, animations that don’t contain the full data in Unity, but get swapped out at runtime with the full ones. So making copies and editing them is futile.

</aside>

If you look at the animations, you’ll see that both hands have animations for both hands, so you would expect both layers to affect both hands, however, that is not the case.

This is because of the masks used on the layers. The mask on the top layer applies to the whole animator, and the masks on the other layers apply on a layer by layer basis. More information can be found on the Avatar Masks page, but the main point is that the Left Hand layer is only allowed to interact with the left hand humanoid bones, and the Right Hand layer is only allowed to interact with the right hand humanoid bones.

On Index Controllers, the Animation State of the hands is set to Tracking by default, which means that any animation affecting the hand gets overwritten by the tracking of the Index Controllers. If you want animations to control the hands on Index Controllers, you have to set the Tracking Control of Left Fingers or Right Fingers to Animated with a Animator Tracking Control. More information can be found on the VRC State Behaviours page.

The default VRChat Hands layer 1.

The default VRChat Hands layer 1.


Facial Expressions

Many avatar creators copy the Gesture layer, creating Animation Clips for facial animations, and slot it into the FX layer.

This, however, is sadly not ideal.

There are three fixes for this:

Note: The first 2 make it so one hand always takes priority over the other, unless it is idle, then the other hand takes over.

Animating Facial Expressions with WD Off

Using WD off, facial expressions can be animated in a few ways, but here are some pointers:

If you follow these tips, along with one of the solutions in the above paragraph, every blendshape will either:

OR

An example Buffer Animation Clip

An example Buffer Animation Clip

Therefore you should never have facial animations getting “stuck”, a.k.a. not resetting back to 0 when they are done playing. This can also be caused by mixed write defaults, since they generally behave like WD off. More information can be found on the Write Defaults page.