Skip to content
/a/ FaceCue Performance Studio

Eyes & Gaze

Where a character looks, and how its body gets there. Two engines with different aims, three scopes of how much of the body joins in, and the behaviours that keep a resting face alive.

Gaze is the part people notice without knowing they are noticing it. A character whose eyes are dead reads as dead however good the mouth is.

On the character, this is the Eyes driver, and it owns more than the look: the blinks, the pupils, the small movements and the head sway that keep a resting face alive. This chapter uses gaze for the looking and names the Eyes driver wherever it points at the inspector.

What It Drives

  • The look itself: eyes, head, neck and, when asked, the torso, aimed at a target your game sets. Two engines do this, and the choice between them is most of this chapter.
  • Blinks and lids, on their own schedule, with the lids following the eyes.
  • The pupils, responding to light and to what the character is feeling and thinking.
  • The eyes at rest: drift, the small corrections that hold a target, and the larger movements that break away and come back.
  • The head at rest: a slow sway, posture shifts, and the head righting itself against a leaning body.

Everything above runs on the one clock the rest of the face runs on, so it is consistent at any frame rate. See One Clock.

Two Engines

Both aim a character at a target. They disagree about what should happen in between, and the inspector offers them side by side as Biomechanical and Simple.

The short version: Biomechanical is a simulation of how a head and a pair of eyes actually move, built from the measured physiology, and Simple is a way of pointing a chain of bones at a thing. The first produces the behaviour people describe as lifelike. The second does exactly what you would expect.

Which Engine

Biomechanical is for characters people will look at up close. Dialogue, VR, anything where the character holds attention. It costs more, and it is the one that produces the behaviour people describe as lifelike. It is set out on Biomechanical.

Simple is the familiar game-character look, at a lower cost. It aims the chain straight at the target, the standard way game characters look at things, so it reads as what you expect from a game rather than from a person. It is the cheaper of the two, which is what matters for a crowd, where the saving is paid once per character. It is set out on Simple.

Both are correct answers to different questions. One is built for the close-up, the other for the many. And the choice is not for life: a character can switch engines from code, keeping its look across the switch, which is set out under Switching Engines From Code.

Simple Is Cheaper, but Not by Enough for a Main Character

The saving is real but modest. In our measurements the aiming step ran at about three quarters of Biomechanical's cost under Simple, and that step is only part of what the eyes cost each frame, so the whole saving per character is smaller than a switch of engine suggests. For the character people are looking at, the fidelity given up is not worth it.

Reach for Simple where the saving is paid many times over, a crowd, or a stretch of heavy action where nobody is watching faces. For everything else, the output rate is the better lever: it cuts far more, on every driver at once, and loses far less.

In This Chapter

  • Setup: what the driver needs to know about a rig, how Auto-Setup finds it, bones against blendshapes, and the few choices that are yours.
  • Biomechanical, the lifelike engine: how the eyes and head share a look, and what happens to a target it cannot reach or see.
  • Simple, the familiar game-character look, and its few controls.
  • The Body: how much of the body joins a look, and the trunk's own choices, posture, address, lean and close range.
  • At Rest: blinks and lids, pupils, the eyes at rest and the head at rest, each with the switch that runs it.

Look Targets

Point the character at something and it looks. The target can move, and the character keeps up with it. Setting one is a World Input, and that page carries the rest of the lane: what it means to mark a target as not visible, what happens when a target comes too close to the face, how your game is told when a target is beyond the body's reach, and the two example scripts that show the whole thing working.

Animated Eyes

When an animation of your own moves the eye bones, the Eyes driver can step aside for it and take the eyes back when it stops, keeping the small resting movements running on top if you want them, or keep looking where the character decides to look. That choice, and what it looks like, is set out on Working With Your Animation.

Hand IK Compensation

When the body turns to carry a look, a character holding or reaching for something would otherwise take their hand with them. FaceCue can put the hand back where the animation left it, undoing only its own drag. It is off until you switch it on, and it is early. See IK Compensation.

Future Work

One thing this chapter does not describe yet, and one it describes elsewhere.

Looking away on purpose. A character thinking looks away from whoever it is talking to and comes back, without letting go of its target. That is described with the rest of what thinking does, on Mental State, and your code can ask for it too (Asking for a Look-Away).

Choosing what to look at. Both engines aim at a target your game sets, and that is by design. What is worth looking at is information about the world: who is speaking, what just moved, what matters in this scene. FaceCue takes that in through a source, and a source that chooses for the character has to be wired to something that knows the scene, a dialogue system or a layer that identifies the objects of interest around the character. That knowledge cannot live inside FaceCue. So choosing the target is your game's job, and the Look Target input is where it goes.

The First Integration Is Dialogue

The first planned attention source is built around conversation. It integrates with a dialogue system, so a character looks at whoever holds the floor without your code steering it line by line. See the roadmap.