FaceFX Support

FaceFX Documentation and support

Persistent Events

Persistent events allow an animation to leave its curve values active after the animation has finished playing.  Any curves that end in non-zero keys will hold their values until another animation with that curve assumes control of it.  The second animation’s blend in time determines the time period it takes for the second animation to take control of the persistent value.

Potential Uses

Optional Return To Neutral

In the past, all FaceFX animations needed to start and finish on neutral.  This is no longer a strict requirement.  Because the FaceFX SDK is designed to be always on,  it is possible to leave the character with an expression on her face and allow some other animation to clear the expression at a later time.

Communication Between Events

Events have no communication with each other.  The curves of each individual event are simply added to form the final animation. Persistent values are one way for events to cooperatively animate the same node in the Face Graph. With persistent events you can create systems like the following: “Look over here, and keep looking there until I tell you to look somewhere else”.

Blend In Values Prevent Snapping

The blend in and blend out parameters are used to “animate” between the values left up in a persistent event.  When you decide to animate a curve using persistent events, any child animation that contains this curve should have non-zero blend in and blend out times.  Snapping can occur if this is not the case.

If one persistent event leaves the Head_Rotation_X curve value at 10, the next animation with the Head_Rotation_X curve will take control of this persistent value over the course of its blend in time.  So even if the second animation’s Head_Rotation_X curve starts at zero, a non-zero blend in time is still required to avoid a snap from 10 to 0 at the onset of the second animation.

A non-zero blend out value is also required to prevent snaps in all cases.  Most of the time, a persistent event’s blend out time is irrelevant because the event’s values are left active.  In cases where multiple events overlap, however, the blend out parameter becomes important. When no events overlap, the persistent value of the curve is like a ball being thrown between two events.  When two events overlap, both events are holding the ball and it becomes difficult to throw!  To prevent snapping in all cases, be sure to assign non-zero blend in and blend out values to any event that animates a curve that is being used in a persistent event.

Evaluation Algorithm

Behind the scenes, the FaceFX SDK is evaluating all events, persistent and non-persistent, in a similar way.  In both cases, the animation is blended in with a hermite curve over the blend in time, then blended out with a hermite curve over the blend out time.  For persistent events, during the blend out, an inverse of the blend out occurs on the persistent channel.  The end result is that the animation does not appear to blend out and the values hold because of the persistent channel.  At the onset of another event that contains a curve with an active persistent channel, the persistent channel will blend out over the new event’s blend in time.