Eye Tracking Metrics

Fixations and Saccades

SightLab uses the I-DT Method for Saccades and Fixations referenced in this paper

Overview
The Identification using Dispersion Threshold (I-DT) method is a popular algorithm used in eye-tracking to distinguish fixations from saccades based on spatial dispersion. This method is ideal for applications where precise fixation identification is required, such as in virtual reality environments where accurate user interaction and gaze-dependent content delivery are critical.

Principle
The I-DT method categorizes groups of consecutive eye positions as fixations if they fall within a predefined dispersion threshold, measured in visual angle, over a specified minimum duration. Dispersion is defined as the spread of the gaze points, typically calculated as the maximum distance between any two points in a potential fixation cluster.

Parameters

Procedure

Applications in SightLab
In SightLab, the I-DT method is utilized to ensure that the VR software accurately interprets user gaze and attention, enhancing the interactive experience by dynamically adjusting content based on where the user is looking. This method is crucial for developing intuitive and responsive VR environments, where user engagement and interaction depend significantly on where and how long a user looks at specific elements within the virtual space.

SightLab uses a dynamic windowing technique to analyze angular variations in gaze direction relative to the head's position to classify eye movements. This method effectively differentiates between fixations (stable gaze) and saccades (rapid gaze shifts) based on how much the gaze direction changes over time, providing a robust approach for eye-tracking in virtual reality settings.

Advantages

sightlab.setFixationSaccadeThresholds(dispersionThreshold = 1, durationThreshold = 0.1) 

This can also be set in the GUI in the "Thresholds" section

Method:

end = self.gazePoints[self.timeStampList[i + index]]

      endVector = [end[0] - avatarHead[0], end[1] - avatarHead[1], end[2] -avatarHead[2]]

      angleVariation = vizmat.AngleBetweenVector(endVector, beginVector)

Fixations and Saccades saved in the data files:

Trial_data file (saved as a running stream of data per trial)

In the trial_data files, fixations and saccade states are saved per time stamp as well as saccade amplitude, at the end of a saccade the average amplitude and peak velocity are also displayed. 

Dwell Time

Dwell Time spheres visualization in the Session Replay

This metric measures the total time spent looking at a specific area or element, combining all fixations and saccades within this area. It is used to assess interest or engagement with the content.

The threshold time in Sightlab is used to calculate the dwell time. This value represents the duration for which the gaze must remain on a target object or a region of interest to start recording dwell time. You can adjust this threshold to suit the specifics of your experiment.

When a user's gaze remains on a specific object or point in the virtual environment for a predetermined duration, the onGazeTime function is triggered. This function is part of a system of gaze event handlers, which also include onGazeBegin and onGazeEnd, to manage the start and end of gaze interactions. Specifically, onGazeTime is responsible for capturing events where the gaze duration meets or exceeds a set threshold, indicating a view. 

To adjust from default, use the GUI or this method

sightlab.setDwellTimeThreshold(dwellTime = DWELL_THRESHOLD)   

Heat Map

Heat map visualization in the replay. There is also  an option for an aggregated heatmap, this can show all the data in the folder, for a specific session or a using a specific condition.  Use the sliders in the replay to adjust the heatmap settings. Use "Occlusion" to not have the heatmap be visible if you have an object or wall that is blocking it from your view of the replay.