Programming skills/Unity

[Unity] VR EyeTracking Gaze data 추출

제이커브(Jcurve) 2024. 1. 10. 01:02

EyeTracking을 하기 위해 Gaze Method를 활용해 데이터를 추출할 것이다.

 

https://docs.cognitive3d.com/unity/gaze-fixations/

 

Gaze / Fixations - Cognitive3D - Documentation

Gaze and Fixations Gaze and Fixations are closely related. Gaze records the HMD position over time and the direction of the eyes at a set interval. Fixations use a dispersion technique to identify where the participant's eyes are steady and maintaining foc

docs.cognitive3d.com

 

 

using UnityEngine;
using Varjo.XR;

public class RecordEyeTrackData : MonoBehaviour
{

    public LayerMask imageLayerMask; //이미지 레이어 설정

    void Update()
    {
        VarjoEyeTracking.GazeData gazeData = VarjoEyeTracking.GetGaze();

        if (gazeData.status != VarjoEyeTracking.GazeStatus.Invalid)
        {
            Vector3 gazeOrigin = Camera.main.transform.TransformPoint(gazeData.gaze.origin);
            Vector3 gazeDirection = Camera.main.transform.TransformDirection(gazeData.gaze.forward);

            RaycastHit hit;

            if (Physics.Raycast(gazeOrigin, gazeDirection, out hit, Mathf.Infinity, imageLayerMask))
            {
                GameObject gazedObject = hit.collider.gameObject;
                // 위치값 저장
                RecordGazedImagePosition(gazedObject.transform.position);
            }
        }
    }

    private void RecordGazedImagePosition(Vector3 position)
    {
        Debug.Log("Gazed Image Position: " + position);
    }
}

데이터 접근함수 GetGaze이다. Varjo에서 제공하는 SDK의 함수로 데이터에 접근하였다.

여기서 중요한 유니티 개념이 있다. 바로 LayerMask이다. 

충돌하고 싶은 수많은 객체들을 layer로 묶어 계산처리했다.

 

그리고 아이트래킹을 통해 바라본 위치값을 저장한다.

RecordGazeImagePosition이다.

 

이상으로 VR에서 EyeTracking data를 추출하는 방법이다. V