【Vive Pro Eye】Unity用SDKから瞳孔や視線の情報を取得する【C#】
どうも、お盆とは無縁に研究活動が存在する院生です(。-`ω-)
やっとSRanipal_SDKと開発者フォーラムの情報が、少しずつ理解できてきました。
そしてhtc従業員さんの回答が、的外れなことが多いなとも感じてます←
今回はUnityのSRanipal_Eye.csから取り出せる情報を整理していきましょう。
前回までと違って情報量多めです(解読がはかどったので)
これを見ればわかるように、Vive Pro Eyeの視線追跡で取得できるデータはかなり多いのですが、
今回は、C#の関数(メソッド)として用意されていたものから
・目の開き具合
・視線の方向ベクトル
・視線の起点座標
・瞳孔径
・瞳孔の位置座標
・輻輳距離
の数値を計測できるようにしていこうと思います('ω')
SDK内のドキュメントにも、解説は載っていましたが、
実際に数値を見てみると「なんか想像と違う」といった違和感があったので、それも合わせて、お知らせしようと思います。開発時の参考にしてください(解決したら教えてもらえると助かります)
今回はフォーラムで、「初心者は使ってみて」と載っていたコードに、
さらに多くの種類のデータを取れるように関数を追加して、まとめました。
まずは準備
前回作成したUmeEye.csを改良して、使っていきます。
今回も3つのnamespaceの中で関数を打っていきます。
使わない人はViveSR.anipal.Eye. + 今回紹介する関数で動くと思います。
今回namespace以外は要らないので
19行目及び31,32行目は消しちゃってください(゚∀゚)アヒャ
そして、SDKにあるSRanipal_Eye.csで取得されている、目のデータを取り込むために、次の4行を追加しましょう。
眼の開き具合を数値化、eye_openness
前々回、デモを動かしたときにアバターで、ウインクや半目が再現できましたよね('ω')
このように、目を開いているかどうかも判定できるわけですね。
ViveProEyeでは0~1の範囲で、正規化された数値が計測ができるようになっていました。
【使い方】
float ume = eyeData.verbose_data.left.eye_openness;
みたいな感じです。右目であればはleftをrightに変えるだけ(*'ω'*)
(両目も使えたけど、なぜか動作しませんでした)
視線の方向ベクトル、gaze_direction_normalized
さて、本題とも言っていい『視線』追跡ですね|д゚)
※これは公式のドキュメントではなく、個人的な感想です。
左右それぞれ及び、両目から関数を呼び出せるのですが、それぞれの眼からの視線ではないようです。
何を言っているか分かりにくいかもしれませんが、
「右目の視線=右目を始点とした方向ベクトルではない」っぽい
フォーラムの画像をつかって説明しますと、この関数に右目、左目、両目と適用すると、それぞれから推定されるSystemOriginからの方向ベクトルっぽいんですよね(;´・ω・)
つまり左目右目両目ともに多少違うけど、ほぼ同じ値が出るわけです。
片目の課題をやる以外であれば両目でセッティングしておけばいいと思います( ˘•ω•˘ )
【2019/10/26追記】
この自分の解釈があっているか未だに分かりませんが、同じように疑問に思った方がフォーラムにスレッドを作ってました。
回答がどういったものになるのか、気になるところです。
【使い方】
Vector3 ume = eyeData.verbose_data.left.gaze_direction_normalized;
(x,y,z)で各パラメータが-1~1で出てきます。
それと、この関数は右手座標系なのでx方向が正負逆になります。注意しましょう。
もう1500字超えて、見にくくなってしまいそうなので、次のページ行きます( ˘•ω•˘ )