Increase amount of data captured by eyetracking



  • Official comment

    The new version of the FOVE Unity Data Collector on GitHub has a mode to collect at 120hz:

    It uses threading and the fove_Headset_waitForNextEyeFrame() api released in SDK v0.16 to do the frame limiting to the camera frame rate.

    Note: frames do not always come in at a consistent 1/120s, but you will receive 120 per second (as long as your machine can keep up). Latencies vary due to USB data transfer, windows preemption, etc.


    Happy hacking!

  • Avatar

    Hi Garo,


    The cameras are at 120Hz / per camera ( and there's 1 camera per eye) however the RAW video feed is not made available to the public.

    I'm guessing your current 60Hz ceiling is due to you running a video capture over the debug tool which is frame capped by windows at 60Hz.

    If it's not that I'm curious... so let us know!

  • Avatar
    Sam Collins

    Hi Jeremy,

    His issue is with the FOVERecorder class posted on Github. Whether using this method or simply writing to file in an Update or FixedUpdate, the values returned for eye positions do not update more often than 60Hz. I've tested this using both GetGazeRays() and GetGazeRays_Immediate() with all of the methods mentioned above. I've also tried adjusting the coroutine in FOVERecorder to yield on WaitForFixedUpdate, since by default it waits for the end of the next frame, but this does not work, it simply returns duplicates values until the next frame.

    Is there any validated way to get eye position data at a rate faster than the frame update? The _Immediate() variants of functions do not work.

  • Avatar

    @Sam Thanks mate - I will look into this...

    @Garo if this is the same issue and not my original suspicion hang tight!


  • Avatar


    Even I am facing the same issue when using the FOVERecorder class. I am getting eyetracking data around 70 Hz. Is it due to the frame rate of the display being 70 fps?

  • Avatar

    The FOVE service writes out new eye tracking data at 120hz, however Unity's main thread is vsynced to the HMD display, which runs at 70hz.

    The recorder is using a coroutine, which are updated per-frame, hence the 70hz output.

    To get the full output you need to offload the recording onto another thread (just be very careful not to touch anything Unity-side from that thread).

    I haven't actually tried this yet in Unity but it should be fine to just read from the FoveInterface from another thread, but in a pinch you can easily convert the C++ data example into a recorder as well (as it's a simple 83 line program)


Please sign in to leave a comment.