MRTK(2.7.2)のExampleを試す その3 (EyeTracking)
今回は前回の続きです。
xr-physics-work-etc.hatenablog.com
前提
今回の前提は以下です。
Unity 2019.4.17f1
MRTK 2.7.2
準備
前回と同じようにPackage Managerから対象のデモをImportします。
EyeTrackingDemo-00-RootScene
このSceneはEyeTrackingの各デモに遷移するためのSceneです。
EyeTrackingのデモでは、Gaze SettingsにEyeGazeCursorが設定されており、視線が何を指しているか確認できるようになっています。
EyeCalibrationChecker
デモ用のスクリプトですが、使いまわしがききそうなので、EyeCalibrationChecker
を取り扱います。
このスクリプトでは、HoloLensのEye Trackingのキャリブレーションが済んでいるかどうかで、アプリ起動時またはキャリブレーションを実施したタイミングで実行するUnityEventを切り替えることができます。
HoloLensでは、アプリ内からキャリブレーションを実施して戻ってくる、ということもあるので、Eye Trackingに関する設定を行う場合は、キャリブレーションが済んだタイミングで設定などを切り替える必要があります。
EyeCalibrationChecker
ではInspector上から下記設定が行えます。
Editor Test User Is Calibrated
UnityEditor上で実行する際、キャリブレーション済とするかどうかOnEyeCalibrationDetected
キャリブレーション済の場合に実行するEventOn No Eye Calibration Detected
キャリブレーション未実施の場合に実行するEvent
EyeTrackingDemo-01-BasicSetup
このデモでは、視線に追従する紫色のカーソルと、物体に視線を合わせ、タップすることで視線で物体を選択できることを試すことができます。
FollowEyeGazeGazeProvider
このスクリプトでは、アタッチしたオブジェクトの位置を視線でポイントしている場所に移動させることができます。
視線で何をポイントしているか、強調することができます。
Inspector上で設定できるパラメタは以下です。
- defaultDistanceInMeters
自分とFollowEyeGazeGazeProvider
をアタッチしたオブジェクトとの距離。デフォルト値は2m
ColorTap
このスクリプトでは、アタッチしたオブジェクトのマテリアル色をHover, Selectしたときに変更することができます。
色を変えることで、選択できているか否か、明確にすることができます。
Inspector上で設定できるパラメタは以下です。
tapAction
対象とするInputAction。選択であれば、Selectを設定する。デフォルト値はNonecolor_IdleState
通常時(未選択)の時に設定される色。デフォルト値はColor.cyancolor_OnHover
Hover(Hand rayや視線などでポイントする)した際に変更する色。デフォルト値はColor.whitecolor_OnSelect
tapActionに設定したものを物体に対して実行した場合に変更する色。(Selectの場合はタップ操作)デフォルト値はColor.blue
EyeTrackingDemo-02-TargetSelection
このデモでは、視線を合わせた際に物体に実行させることができる挙動を確認できます。
視線を合わせたり、視線を合わせた状態でタップ操作をすることで物体操作が遠距離で実施できます。
EyeTrackingTarget
このスクリプトでは、自オブジェクトに対して視線が当たっている際に行う動作を設定できます。
視線の操作だけでなく、ボイスコマンドにも紐づけることできます。
Inspector上で設定できるパラメタは以下です。
Select Action
対象とするInputAction。選択であれば、Selectを設定する。デフォルト値はNoneVoice Select
視線が合っているときに有効になるボイスコマンド。ボイスコマンドを実行することでOnSelected
が発火する。Dwel Time In Sec
OnEyeFocusDwell
が発火するために視線を当て続ける必要のある時間。On Look At Start
視線を合わせ始めた際に実行されるイベントWhile Lokking At Target
視線を合わせ続けているときに毎フレーム実行されるイベントOn Look Away
ターゲットから視線を外した際に実行されるイベントOn Dwell
Dwel Time In Sec
で設定した時間の間視線を合わせ続けると発生するイベント。(1回のみ)On Selected
視線を合わせつつ、タップやボイスコマンドで発火させることができるイベント。On Tap Down
RaiseEventManually_TapDown
が呼ばれた際に実行されるイベントOn Tap Up
RaiseEventManually_TapUp
が呼ばれた際に実行されるイベント
※ RaiseEventManually_TapUp
, RaiseEventManually_TapDown
については情報があまり見つからず、実際にどのタイミングで発火するか不明瞭。
EyeTrackingDemo-03-Navigation
このデモでは、テクスチャの拡縮、移動を実施できるPanZoomTexture
や、スクロールを実施できるScrollRect
を視線を合わせることで発火させることができます。
OnLookAtRotateByEyeGaze
このスクリプトでは、アタッチしたオブジェクトに視線が当たっている間、物体を回転させることができます。
BaseEyeFocusHandler
を継承しており、OnEyeFocusStay
をオーバライドすることで視線が当たった際の動作を設定しています。
Inspector上で設定できるパラメタは以下です。
Focus Enabled
Focusが有効かどうか設定できる(BaseFocusHandler
からの継承)Time To Trigger Dwell In Sec
Dwellを発火させるために必要なFocus時間(BaseEyeFocusHandler
からの継承)Speed X, Y
それぞれの軸の回転速度。(0の場合は回転しない)Inverse X, Y
それぞれの軸の回転方向を反転させるか否かRotation Thresh In Degrees
少しの回転を繰り返さないようにするための閾値Min Rot X, Y
最小回転角Max Rot X, Y
最大回転角
EyeTrackingDemo-04-TargetPositioning
このデモでは、視線を合わせることで物体を選択し、タップすることで移動させることができます。
キューブや、スライダを視線とタップ操作だけで操作することができます。
MoveObjByEyeGaze
このスクリプトでは、アタッチしたオブジェクトに視線が当たっている間、物体を移動させることができます。
移動させることのできる軸や、移動量を制限することができます。
Use Eye Supported Target Placement
視線で物体配置を有効化するかどうかの設定Min Look Away Dist To Enable Eye Warp
※確認中※Hand Input Enabled
移動を音声のみで行う場合は、falseにするHandmapping
手の移動量の何倍の動きを物体にさせるかDelta Hand Movem Thresh
手の動きを有効にする閾値Transparency_in Transition
ドラッグしている間のターゲットの透明度設定Transparency_preview
プレビューをドラッグしている間のターゲットの透明度設定Preview Placem Dist Thresh
※確認中※Freeze X, Y, Z
動きを制約する軸方向Local Min Max_X, Y, Z
各軸の移動量の制約Placement Surface
配置する平面の方向(水平か、垂直か)Audio_On Drag Start
ドラッグ開始時の音Audio_On Drag stop
ドラッグ停止時の音Voice Action_Put This
ドラッグ開始に使用するInputAction(音声コマンド用)Voice Action_Over Here
ドラッグ終了時に使用するInputAction(音声コマンド用)On Drag Start
ドラッグ開始時に発生させるイベントOn Drop
ドラッグ終了時に発生させるイベントUser as Slider
スライダとして使用するか否かTxt Output_slider Value
スライダ位置を表示するためのTextMeshオブジェクトSlider_snap To Neareset Decimal
スライダの場合の刻み幅
EyeTrackingDemo-05-Visualizer
このデモでは視線の当たった箇所が熱源のように、ヒートマップを表示するデモです。
視線の軌跡を可視化することができます。
このデモでは、Interactable
とEyeTrackingTarget
を組み合わせることで、Interactable
のアタッチされたオブジェクトに視線を与えてタップ動作をするだけでOnClick
を発火させることができます。
DrawOnTexture
このスクリプトでは、視線の当たった位置に、Tableとして設定したTextureから取得した色を設定できるものです。
EyeTrackingTarget::LookedAtPoint
を使用して視線の当たった位置の座標を取得することで、視線が当たった位置の色を変更しています。
Inspector上で設定できるパラメタは以下です。
Heatmap Look Up Table
ヒートマップ(描画する色)をTextureとして設定するDraw Brush Size
ヒートマップで色を変更する範囲のサイズDraw Intensity
ヒートマップの最大強度Min Thresh Delta Heat Map
ヒートマップ表示のための閾値Use Live Input Stream
ヒートマップの結果をすぐに表示するか否かHeatmap Overlay Material Templete
ヒートマップ描画前のベースのmaterial
今回はここまでです。
次回はGltfのデモを確認します。