MRが楽しい

MRやVRについて学習したことを書き残す

MRTK v2のドキュメントを少しずつ読み解く MRTKでアイトラッキングを開始する

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20200228021851j:plain

MRTKでアイトラッキングを開始する

このページでは、UnityMRTK シーンを設定してアプリでアイトラッキングを使用する方法について説明します。
本セクションは、新しいシーンから始めることを前提としています
MRTK では既に構成されているMRTK視線追跡のサンプルシーンを確認することもできます。

アイトラッキング要件のチェックリスト

アイトラッキングが正しく機能するには、次の要件を満たす必要があります。
HoloLens 2とMRTKでのアイトラッキングの設定が初めての場合でも大丈夫です。
ここでは以下でそれぞれの4つの設定方法について、各セクションで詳しく説明します。

1.「Eye Gaze Data Provider」を入力システムに追加する必要があります。
これにより、プラットフォームからの視線追跡データが提供されます。

2.GazeProviderは、「Use Eye Tracking」プロパティをtrueに設定する必要があります。
trueがデフォルト値であることに注意してください。
(したがって、このプロパティを故意にオフにしない限り、特別なアクションは不要です)

3.アプリケーションマニフェストで「GazeInput」機能を有効にする必要があります。
現在、これはVisual StudioおよびMRTKビルドツールでのみ利用可能です。

4.HoloLensは装着中のユーザーの目で較正する必要があります。
ユーザーが目のキャリブレーションを行っているかどうかを検出するためのサンプルを確認してください。

重要

上記の要件のいずれかが満たされない場合、アプリケーションは自動的に頭部ベースの視線追跡にフォールバックします。

GazeInput機能に関するメモ

MRTKが提供するビルドツールは GazeInput 機能を自動的に有効にすることができます。
(ビルドツールは Tool パッケージをインポートして Mixed Reality Toolkit-> Utilities-> Build Window で開きます)
これを行うには[Appx Build Options]タブで[Gaze Input Capability]がオンになっていることを確認する必要があります。
f:id:bluebirdofoz:20200228021910j:plain

このツールは Unity ビルドの完了後に AppX マニフェストを検出し、GazeInput機能を追加します。
Unity のビルドウィンドウ(File -> Build Settings...)を使用する場合、このツールはアクティブではないことに注意してください。
Unity のビルドウィンドウを使用する場合、Unityのビルド後に機能を手動で追加する必要があります。

アイトラッキングの設定手順

シーンのセットアップ

メニューバーから Mixed Reality Toolkit -> Add to Scene and Configure… を実行します。
MixedRealityToolkit がシーンにセットアップされます。
f:id:bluebirdofoz:20200228021924j:plain

視線追跡に必要なMRTKプロファイルのセットアップ

MRT Kシーンを設定した後、MRTKのプロファイルを選択するよう求められます。
DefaultMixedRealityToolkitConfigurationProfile を選択し、[Copy & Customize]オプションを実行します。
f:id:bluebirdofoz:20200228021955j:plain

「Clone Profile」メニューが表示されるので、メニュー下部の[Clone]をクリックします。
f:id:bluebirdofoz:20200228022008j:plain

「視線データプロバイダー」を作成する

MRTK プロファイルの[Input]タブをクリックします。
デフォルトのプロファイル(DefaultMixedRealityInputSystemProfile)を編集するには[Clone]ボタンをクリックします。
f:id:bluebirdofoz:20200228022019j:plain

「Clone Profile」メニューが表示されるので、メニュー下部の[Clone]をクリックします。
f:id:bluebirdofoz:20200228022048j:plain

新しい[Input]プロファイルを開き、「+ Add Data Provider」を選択します。
f:id:bluebirdofoz:20200228022058j:plain

新しいデータプロバイダーが作成されるので、設定を行います。
f:id:bluebirdofoz:20200228022106j:plain

[Type]のプルダウンを開き、[WindowsMixedRealityEyeGazeDataProvider]を選択する。
f:id:bluebirdofoz:20200228022115j:plain

[Platform]のプルダウンを開き、[Windows Universal]をチェックする。
f:id:bluebirdofoz:20200228022127j:plain

GazeProviderでアイトラッキングを有効にする

HoloLens1では、主要なポインティングテクニックとして頭部追跡が使用されていました。
カメラに接続されている MRTK の GazeProvider を使用して頭部追跡が引き続き使用されています。
[UseEyeTracking]チェックボックスをオンにすることで、視線を使用するように変更できます。
f:id:bluebirdofoz:20200228022136j:plain

開発者は GazeProvider の[UseEyeTracking]プロパティを変更することで、視線追跡と頭部追跡を切り替えることができます。

Unity Editorでアイトラッキングをシミュレートする

Unity Editor でアイトラッキング入力をシミュレートできます。
これにより、HoloLens 2 にアプリを展開する前にイベントが正しくトリガーされることを確認できます。

視線信号は、視線の原点としてカメラの位置を、視線の方向としてカメラの前方ベクトルを使用するだけでシミュレートされます。
これは初期のテストには最適ですが、急速な眼球運動は模倣できないことに注意してください。
このため、HoloLens 2 での眼球ベースの相互作用のテストを頻繁に実施することをお勧めします。

1.シミュレートされたアイトラッキングを有効にします。

1.MRTK構成プロファイルの[Input]タブを開きます。
2.[Input Data Providers] -> [Input Simulation Serivice]の項目を展開します。
3.DefaultMixedRealityInputSimulationProfile を[Clone]して変更を加えます。
4.[Simulate Eye Position]チェックボックスをオンにします
f:id:bluebirdofoz:20200228022147j:plain

2.デフォルトの頭部注視カーソルを無効にする

一般的に、視線カーソルを表示しないようにすることをお奨めします。
デフォルトではプロファイルにアタッチされている頭部の注視カーソルを非表示にします。

1.MRTK構成プロファイルの[Input]タブを開き、[Pointers]の項目を展開します。
2.DefaultMixedRealityInputPointerProfile を[Clone]して変更を加えます。
3.[Pointer Settings]の[Gaze Cursor Prefab]に非表示カーソルプレハブを割り当てる必要があります。
4.MRTK Examples パッケージをインポートしている場合、付属の EyeGazeCursor.prefab を参照すれば良いです。
f:id:bluebirdofoz:20200228022156j:plain

視線データへのアクセス

アイトラッキングを使用するようにシーンが設定されたので、スクリプトでアクセスする方法を見てみましょう。
以下のページで詳細な手順を確認できます。
microsoft.github.io
microsoft.github.io

HoloLens 2でUnityアプリをテストする

アイトラッキングを使用してアプリを構築する方法は、他のHoloLens 2 MRTKアプリをコンパイルする方法に似ています。
唯一の違いは「Player Settings -> Publishing Settings -> Capabilities」で Unity が「GazeInput」機能をサポートしていないことです。
HoloLens 2デバイスでアイトラッキングを使用するには、ビルドされたVisual Studioプロジェクトのパッケージマニフェストを手動で編集する必要があります。

以下の手順を実行します。

1.他のHoloLens 2 MRTKアプリで行うように Unity プロジェクトをビルドします。
2.コンパイル済みのVisual Studioプロジェクトを開き、ソリューションで「Package.appxmanifest」を開きます。
3.Capabilitiesの下の[視線入力(GazeInput)]チェックボックスにチェックを入れてください。
f:id:bluebirdofoz:20200228022222j:plain

注意

新しいビルドフォルダーにビルドする場合にのみ、これを行う必要があります。
以前に Unity プロジェクトをビルドして appxmanifest をセットアップし、同じフォルダーを再度ターゲットにした場合、appxmanifest は変更されない必要があることを意味します。

[GazeInput]チェックが表示されない場合

システムが MRTK(特にWindows SDKバージョン)を使用するための前提条件を満たしていることを確認します。
microsoft.github.io

XMLエディターで appxmanifest を開いて直接コードを追加することにより、エントリを手動で追加することもできます。

  <Capabilities>
    <DeviceCapability Name="gazeInput" />
  </Capabilities>
アイキャリブレーション

最後に、HoloLens 2 のアイキャリブレーションを実行することを忘れないでください。
ユーザーがキャリブレーションを実行していない場合、アイトラッキングシステムは入力を返しません。
キャリブレーションを実行する最も簡単な方法は、一度バイザーを上げて元に戻すことです。
システム通知が表示され、新しいユーザーとして認識されて目の調整を行うように求められます。
または、システム設定(Settings > System > Calibration > Run eye calibration)で直接キャリブレーションを実行ことができます。

アイトラッキング許可

HoloLens 2でアプリを初めて起動すると、アイトラッキングを使用する許可を求めるプロンプトがポップアップ表示されます。
表示されない場合は、通常、「GazeInput」機能が設定されていないことを示します。

許可プロンプトが一度表示された後、再び自動的に表示されることはありません。
拒否した場合は、システム設定(Settings -> Privacy -> Apps)でこれをリセットできます。