Eye
Regular • File:
EyeTracking.csv• Writer:LaboEyeTrackingDataWriter.cs
At a glance
Eye tracking captures gaze data for three eye positions — Eye_Center_*, Eye_Left_*, Eye_Right_* — each with a block of position, direction, and device-specific columns produced by SilicoEyeUtility.ColumnNamesEyes(prefix). This is a regular per-frame stream; gaze is a continuous signal and every frame gets a row when the gate passes.
For stimulus-locked gaze analysis (what were they looking at when stimulus X appeared?), combine this with ExperienceState's EventNumber column.
When it writes
LateUpdate, provided:
- Eye data capture is enabled in settings, AND
- Eyes are currently tracked (HMD on, eye tracker engaged), AND
- A head skeleton is assigned.
An Update() phase call refreshes the skeleton / gaze data internally so that the LateUpdate write captures fresh values — you don't need to do anything for this to work, just know that there is a two-phase refresh happening.
File & location
- Default:
EyeTracking.csvin the run directory. - Writer:
LaboEyeTrackingDataWriter.cs. - Columns:
SilicoEyeUtility.ColumnNamesEyes(prefix)for each ofCenter/Left/Right.
Configuration
Gated by the eye-capture setting, eye-tracking being live, and the head skeleton being assigned. No dedicated ScriptableObject — it follows the experience's skeleton configuration.
Columns
Shared prefix
See Column conventions — The shared prefix.
Per-eye blocks
Three blocks, one per eye, in order: Center, Left, Right. Each block follows the placeholder convention Eye_[eye]_*:
| Column | Type | Units | Description |
|---|---|---|---|
Eye_[eye]_PosX, Eye_[eye]_PosY, Eye_[eye]_PosZ | float | metres | Eye position in environment coordinates. |
Eye_[eye]_DirX, Eye_[eye]_DirY, Eye_[eye]_DirZ | float | unit vector | Gaze direction (normalised). |
Eye_[eye]_HitTexture, Eye_[eye]_HitUV*, Eye_[eye]_HitObject (if present) | varies | — | Device / scene-specific hit-test columns — which object / texture the gaze ray is currently intersecting. Availability depends on the skeleton / device. |
Expand [eye] to Center, Left, or Right. So a concrete column is e.g. Eye_Center_DirZ or Eye_Left_PosX.
Center is typically a cyclopean average of the two eyes; Left and Right are per-eye data when the tracker exposes them.
Sample rows
...shared...,Eye_Center_PosX,Eye_Center_PosY,Eye_Center_PosZ,Eye_Center_DirX,Eye_Center_DirY,Eye_Center_DirZ,Eye_Left_PosX,...,Eye_Right_PosX,...
...,0.0,1.72,-2.5,0.0,0.0,1.0,-0.03,...,0.03,...
...,0.0,1.72,-2.5,0.05,0.02,0.99,-0.03,...,0.03,...
Join with other streams
Standard FrameNumber join to ExperienceState:
import pandas as pd
exp = pd.read_csv("ExperienceState.csv")
eye = pd.read_csv("EyeTracking.csv")
joined = exp.merge(eye, on="FrameNumber", how="left", suffixes=("_exp", "_eye"))
# Mean forward-gaze Z component per epoch:
joined.groupby("EpochName")["Eye_Center_DirZ"].mean()
Gotchas
- Device support varies. Requires an eye-tracking-capable HMD (Meta Quest Pro and similar). On unsupported devices there will be no file, or the values will be static.
- Tracker dropout is common. Blinks, off-axis gaze, or tracker reacquisition can produce frames with zeroed or stale values. Check for
(0, 0, 0)direction vectors and handle them — typically mask out or interpolate. Centeris derived. On most devices,Eye_Center_*is computed as a midpoint / averaged cyclopean eye. If you need ground-truth per-eye data for vergence / convergence analyses, useEye_Left_*andEye_Right_*.- HitTexture / HitObject columns are scene-dependent. If present, they identify what the gaze ray is intersecting in the environment. Their availability and semantics depend on the skeleton / device — check the header.
- Direction is in environment coordinates, not head-local. If you want head-relative gaze (where are they looking relative to forward?), rotate by the inverse of head rotation from Participant.
Analysis recipes
- Gaze paths — the canonical Eye analysis. Paths, dwell times, saccade detection.
- Stimulus-locked averaging — epoch-aligned gaze around stimulus onset (classic attention-capture analysis).