Choreography creation/Creating Events/Facial expressions

From Valve Developer Community
< Choreography creation‎ | Creating Events
Revision as of 08:41, 14 August 2006 by TomEdwards (talk | contribs) (Created)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Facial expressions (Flex) are the trickiest of the choreographical areas to master. FacePoser provides the tools to create the complete range of human expressions from scratch through a system of sliders (Flex Sliders) that control the intensity of carefully crafted muscle movements based on professor Paul Ekman's Facial Action Coding System. The system's tools themselves are simple, but creating flowing, believable and meaningful animations with them takes flair and talent that does not come without practice.

In this tutorial, flex is placed after body animations and before generic events and lip synching. This is in order to suggest a productive workflow; however, there is nothing to stop you performing the four stages in any order you choose, or in no order, if you find doing so more helpful.

Basic Flex usage

Before you start animating facial expressions, it is a good idea to learn how to create static ones. Have an Actor with expression support (that is to say, a face) open, and bring up the Flex Sliders tool from the tab tray at the bottom of the screen or menu strip at the top. You may want to resize it to better fit your workspace. If you are not already viewing the Actor's face in the 3D View, select Options > Center on Face from the menu strip. A choreography VCD need not be open at this point.

The best part was when I played my scene with him like this.

The Flex Sliders in front of you each control one or one pair of the Actor's digital muscles. Try dragging a slider left or right now and see the effect. Creating a static expression is as simple as sliding the Flexes you need to a suitable position.

Notice how some of the sliders have slider blips on the bottom (pointing upward) as well as the top. These control the extent to which the slider's value affects the left and right sides of the face, and can be manipulated with the right mouse button. Note also that you can quickly enable or disable a Flex with its checkbox.

The best way of learning the Flexes at this point is through experimentation. The Flex names are quite self-explanatory, and even if you don't fully understand the meaning of one, grabbing and sliding it will provide an immediate demonstration.

If you make an expression you like and think might be useful, you might want to consider saving it as an Expression.

TODO: How does Get Tracks work, what is Make Keyframe (if not Make Expression)?

Animating Flex movement

Creating Flex animation is a large step up from creating a static expression. You now have to concern yourself with movement and timing, adding an entire dimension to your work. Don't expect to step straight in and produce animated Flex as well as you can produce static!

Using the tools

While it is possible to import a static expression to a Flex Animation, we will be creating our movements from scratch, which is generally better practice. This time it is necessary to use an Event: Create a 'Flex' Channel if you haven't already, use the context menu to add a Flex Animation event, and finally open the Flex Animation tool.

The Flex Animation tool with three simple graphs enabled.

This displays the same controls as the Flex Sliders tool, but in the form of a series of graphs plotting time against intensity. All of these graphs are collapsed by default, so double-click on a Flex label to expand one. The blue-outlined area that opens up behaves in exactly the same way as the Ramp: Ctrl+click creates a point, and variations on dragging manipulate it (left and right in Flex Sliders is now up and down), with the following Flex-specific additions:

Spacebar
Switch between the intensity graph (editmode: <amount>) and the balance graph (editmode: <left/right> in the active Flex.
The inactive graph is displayed in the background of the active one, in a lighter shade of blue.
Note that Edge Properties do not currently apply to the <left/right> graph.
Ctrl+C
Ctrl+V
Copy and Paste all points from one Flex graph to another. Overwrites the destination graph.
Be aware that pasting will not activate a disabled Flex. You must use the context menu to enable it.
Drag grey handle
Resize the active graph.

There are also several useful options in the context menu, which should make their purpose clear from their names. Pay particular attention to the Sort submenu, as it can be very useful for fitting more useful information into the same space.

Workflow

A large challenge when creating Flex animations is workflow. Treat a Flex animation like a static expression and you will end up with a motion that flips unconvincingly from one state to another. To avoid this it is best to work horizontally, one Flex at a time, considering how that particular area would move in reaction to the scene's events and creating it all, at least roughly, before moving on to the next graph. As the animations are built from the same cues they will hopefully need only very little 'vertical' adjustment to create a convincing performance.

General tips

  • Avoid steep curves. Unless you specifically want a sharp animation, anything above around 45 degrees should be treated with caution.
  • Each graph point is a movement. The default curve between points is the one that creates the smoothest motion. By adding points that disturb it, you are making a change that is picked up by the brain as a new movement.
  • Expanded/Collapsed and Active/Disabled are not synonymous. A collapsed Flex graph can still affect your animation if it has not been disabled through the context menu.
  • The eyes have it. The area around the eyes (outer raiser, inner raiser, lowerer, lid *, wrinker, cheek raiser) is the most expressive. Don't be afraid to wrap eyebrow movement tightly to speech patterns.

Please add your own suggestions!

When not to use expressions

  • When animating large head movements. While it is true that any muscle can be given a Flex definition, most Actor models do not link neck movements to the system. This restricts the amount of head movement that can be believably created in FacePoser. Most actors have nodding, shaking, and other such head movement animations that ought to be used instead of Flex equivalents.
    • Small motions are perfectly feasible, however.
  • When directing Actor facing. Actors cannot be reliably or effectively made to look at a precise location through flex. info_target or npc_bullseye entities should instead be placed and treated with the Look at Actor or Face Actor events.