はじめに

この記事ではFOVE Eye Trackerを用いた視線追跡により取得可能なデータの詳細な説明を行います。まず基本的にデータ取得には以下の2つの方法があります。

上記の2つの方法はデータ出力の内容に関してはほぼ同等ですが、「Unity Gaze Recorder」を利用するとゲーム開発エンジン「Unity」独自のいくつかの情報も取得することができます。逆に、視線解析の元となる眼球画像は「Unity Gaze Recorder」から直接取得することはできず、より低レベルの「Unity Plugin」またはFOVE SDKのAPIを利用して頂く必要があります。(詳細は本文をご参照下さい。) 視線解析を実際に行っているFOVE SDK自体はもちろん、ゲームエンジン固有の機能は使っていません。

「Unity Gaze Recorder」は視線情報を自動的にCSVファイルに保存するので特別なプログラムを開発することなく利用可能です。そのためこの方法は、研究者や簡単にデータ記録を行いたい方にお勧めです。

FOVE APIからのリクエストを処理するランタイムサービスは、複数のクライアントと同時にやりとりすることができます。例えば、あるプログラムでVRシーンのレンダリングを行いながら、それとは別のプログラム(複数個でも良い)から視線情報のデータ取得を行うことが可能です。

単一のプログラム内からレンダリングとデータ取得を同時に行うことも出来ますが、この方法を採る場合、スクリーン描画のフレームレート(70Hz)との取得フレームレート(120Hz)とは同一ではない為、プログラムをマルチスレッド構成とし、視線情報の取得は専用のスレッドから行うことをお勧めします。

眼球撮影用カメラから取得された1フレームの画像に対する全ての視線データは、そのフレームに対する視線追跡計算が終わり次第クライアントへ送信されます。FOVE SDKを利用してプログラムを作成する場合、視線データ取得用のスレッドのメインループをカメラの撮影フレームレートと同期させるには「Headset::waitAndFetchNextEyeTrackingData」APIコールを利用して下さい。

実際の出力データサンプルはこちらからご覧になれます

様々な座標系

Unity Gaze Recorderでは視線情報を出力する座標系を、World、 Local、HMD、3つの中から選ぶことができます。FOVE SDKから取得するデータは常にHMD座標系を用いたものとなります。

選択した座標系によって値の変わるデータ項目は以下の二つです:Combined Gaze RayEye Ray Left / Right

左右それぞれの眼に対する「Eye Ray」データは、眼球の中心の位置座標と、そこからの視線の方向ベクトルからなります。「Combined Gaze Ray」とは左右の「Eye Ray」データをある方法(後述)に従って平均を取ったものです。

3つの座標系は全て直交座標系であり、互いに向きと原点が異なるだけです。

また、一部例外(詳細は以下記載)を除き、座標値の単位は全てメートルとなっています。

HMD座標系: これはヘッドセットに固定された座標系です。左右の「Eye Ray」はヘッドセットのある点からみた眼球中心の位置とそこでの視線の向きを表します。これらは、ユーザがヘッドセット内のどこを見ているかのみによって決まり、ヘッドセットの回転や平行移動には依存しません。HMD座標系はユーザから見た相対位置が、ヘッドセットの向きや位置には依存しない映像キューを表示した際の視線の動きを解析するような研究を行う際に有用です。

この座標系では、ユーザーから見て、X軸プラス方向が右、Y軸プラス方向が上、Z軸プラス方向が画面奥側となります。例えば、ベクトル(0, 0, 1)で定まる向きはユーザーの真正面を指しています。

この座標系の原点は左右眼球の中心同士の中間点となります。例えば、ユーザーのIODが63mmである場合、右眼の位置は(0.0315, 0, 0)と表されます。(IODの詳細説明はIOD項目をご参照下さい。)

**Local座標系:**これは実世界空間のある点を原点とする座標系です。この座標系を選択した場合、左右の「Eye Ray」はヘッドセットの置かれた実世界の中の眼球位置とそこでの視線の向きとして与えられ、それらの値はヘッドセットの回転や平行移動(ポジショントラッキングが有効な時のみ)によっても変化します。Local座標系の向きと原点は、FOVE Debug Tool内の「Tare Position」と「Tare Orientation」ボタンをクリックするか、SDKの「Headset::tareOrientationSensor」と「Headset::tarePositionSensor」というAPIを利用することでリセット(その時点でのヘッドセットの向きと位置に固定)することができます。ただし、ポジショントラッキングカメラが無効な時は、Local座標系の原点およびそこからの平行移動は意味を持ちません。Local座標系は頭や体の動きと視線の動きを関連づける研究を行う際に有用です。