# Aim Eyes

The **Aim Eyes** node aims eye elements at a target location, with optional [saccades](#saccades) for small procedural gaze jumps.

![Aim Eyes node](_media/aim-eyes-node.png ':size=1200')

## Usage

1. Add the **Aim Eyes** node after the node that drives the head pose, usually [Aim Chain](aim-chain.md) or [First Person View](first-person-view.md)
2. Connect the target position in <span class="fr-term" tabindex="0" data-tooltip-key="global-space">global space</span>
3. If Quick Setup did not detect eyes correctly, fill **Eyes** manually
4. Tune **Max Angle Degrees**, **Saccades**, and **Smoothing** only if the default result is not what you want

If your rig does not expose separate eye bones, or it uses unusual naming, Quick Setup may not detect them.

## Quick Setup

When you place the node, it scans the skeleton to find good default values. You can apply the Quick Setup again in the right-click context menu on the node.

Quick Setup looks for eye bones whose names contain `eye`, while excluding common non-eye matches such as `lid`, `brow`, `lash`, `tear`, and `ball`. For each detected eye bone it creates an **Aim Element** and derives a local aim axis from the current pose.

If your character's eyes are not separate bones, or the names do not resemble `eye`, Quick Setup will not detect them. In that case, add entries to **Eyes** manually and set each eye element and its forward axis yourself.

## Input Pins

| Pin | Type | Description |
|-----|------|-------------|
| Eyes | list of [Aim Element](aim-element.md) | The eye elements and their aim axes |
| Target | Vector | The location to look at in <span class="fr-term" tabindex="0" data-tooltip-key="global-space">global space</span> |
| Min Distance From Eye To Target | float | Minimum distance from eye to target; targets closer than this are clamped |
| Max Angle Degrees | float | Maximum angle the eyes can rotate from their default forward direction |
| Keep Eyes Focused | bool | Tries to clamp the shared aim target to the reachable cone of every eye so both eyes converge on the same point. When disabled, each eye reaches as far as it can toward the raw target, which may cause the eyes to diverge |
| Propagate To Children | bool | Whether rotating an eye propagates the new transform to its children (e.g., eyelid bones) |
| Saccades | [Saccade Settings](#saccade-settings) | Settings for procedural saccades |
| Smoothing | [Smoothing Settings](smoothing.md) | Spring smoothing for the eye rotation |
| Debug | [Debug Settings](#debug-draw) | Debug visualization settings |
| Weight | float | The blend weight of this operation (0.0 = no effect, 1.0 = full effect) |

### Eyes

Each entry in **Eyes** chooses which eye element to rotate and which axis should be treated as that eye's forward direction.

See [Aim Element](aim-element.md) for the full property breakdown.

### Saccades

Saccades are the small, rapid eye movements that happen between gaze holds. Enabling them makes the solved gaze jump within small ranges instead of staying perfectly still.

#### Saccade Settings


![Saccades comparison](_media/saccade-comparison.mp4 ':include :type=video autoplay loop muted playsinline')

| Property | Type | Description |
|----------|------|-------------|
| Seed | int | Random seed for saccade generation |
| Interval | Range | Time between saccades (min, max) in seconds |
| Pitch | Range | Pitch offset range for saccades in degrees |
| Yaw | Range | Yaw offset range for saccades in degrees |
| Roll | Range | Roll offset range for saccades in degrees |
| Weight | float | Multiplier on the eye rotation offset from saccades (0 disables it, 1 is the configured range, >1 amplifies) |

### Smoothing

Aim Eyes has one smoothing setup for the solved eye rotation. Both eyes use that same spring behavior, so increasing smoothing makes the gaze settle more softly and disabling it makes the eyes snap directly to the current target.

See [Smoothing](smoothing.md) for the spring fields.

## Debug Draw

| Property | Type | Description |
|----------|------|-------------|
| Enabled | bool | Whether to draw debug visualization |
| Scale | float | Scale factor for debug visualization sizes |

Use this debug view in this order:

1. Check the yellow point to see the current saccade-adjusted target.
2. Check the red cones to see each eye's allowed range.
3. Check the green lines to see the final solved gaze direction.

| Debug item | Meaning |
|------------|---------|
| Yellow point | Saccade-adjusted aim target position |
| Red cone per eye | Maximum-angle constraint cone from each eye along the aim axis |
| Green line per eye | Current solved gaze direction from each eye |
