Hi! We measured Neon's gaze estimation accuracy in May and again on Sept, and Sept is clearly better even though the eye images look similarly cropped (attached). We suspect this is due to the aperture-aware temporal filtering added in Companion App v2.9.46 (Jul 3). Could you confirm if that's the cause, or if something else in NeonNet changed between May and September?
Hi @user-6671c6 , how did you evaluate it and did you evaluate it in the context of. XR? To clarify, that new filter is only applied to 3D eye stare data, not to gaze data.
Yes, it's XR ā Meta Quest 3 + MRTK3, Neon mounted on the headset. We computed the angular error using the gaze stream (NeonGazeDataProvider ā 2D gaze point converted to a 3D ray via camera intrinsics), not eye state. Given that, does this mean the filter likely isn't the cause? Was there any change to the gaze stream / NeonNet itself between May and September?
Correct, the filter would not be the explanation here and there were no changes to NeonNet in the meantime.
May I ask what the targets were? And did you do a mount calibration between May and September?
No new mount calibration between May and September ā same default calibration values both times. Targets: the 41-point grid (Z=1.5/2.0/2.5m) from a modified version of the MRTK3 Template's PL_Calibration scene, computing error between each marker and the mount-calibration-corrected gaze.
Thanks, @user-6671c6 . Then, the only immediate explanation that I can think of is that the participant has performed the task better, since they were now familiar with it. This is not uncommon.
Thanks, that makes sense ā practice effect is a fair explanation. One more thing I noticed: the September eye images look noticeably brighter than the May ones, even though both were recorded in the same NeonXR setup and scene. Do you know what might cause that difference?
The ambient IR light within the VR headset may have simply moved slightly over a threshold that is set within the eye cameras' Auto-Exposure routine. Neither pair of eye images is a problem for Neon. As long as it can see the eyes, it can make a reliable gaze estimate.
That makes perfect sense. I'm glad to hear the brightness difference is just the Auto-Exposure doing its job and isn't an issue for Neon. I have no further questions. Thanks for all your help troubleshooting this, Rob!
hello, i have a neon xr device connected to a occulus quest headset and working with it in unity. before, i have always hardcoded the ip address from the neon companion app each time it changes in unity, and i was wondering if there's a way to have it automatically update anytime a new ip address appears? thanks!
Hi @user-841d07 , you are using the Neon XR Core Package, correct?
yes
Thanks. In that case, the autoIP setting is enabled in the default config.json. Have you already tried that? Or, do you mean, if the IP address changes while the Unity app is running, then it should automatically discover this new IP?
i want to try and make it so that anytime u run the unity build while the device is connected to the app it can detect and automatically update the ip without doing like manual input
I see. Then, you should only need to enable the autoIP setting in the config.json.
Hi Rob, sorry for coming back to this message from a while ago, but Iām working with the Neon in VR again š Is there really no way to get the data from Unity at 200 Hz (at least save it to a file, for example)? Is the only way to start a recording at the same time and then use the data saved on the phone? Thanks a lot, and sorry for the question, but Iād like to better understand how it works.
It is now possible with the latest version of the Neon XR Core Package. Update to the latest version of that package and then stream the data in a separate thread. There is now also a Time Offset Estimator implemented in the Unity package, so you can also follow our Time Sync guide for precise & accurate timing. Let us know if you have any questions while updating your code!
And no need to apologize š
Could you send me this new link to the package? When was it released? Thank you so much!
The link and instructions remain the same as before. Many of our packages are regularly updated, so whenever embarking on a new project, it would be worthwhile to briefly check the relevant Github repos, or simply download the latest updates.
To update it in your Unity app, simply delete the package from the Package Manager and then install it anew. You will then just need to rebuild and redeploy your app to the headset.
Just take note to update your config.json file to include these new parameters. If you enable useUdp, then that will allow streaming at up to 200 Hz.