MRTK2 での視線追跡の概要
このページでは、アプリで視線追跡を使用するための Unity MRTK シーンの設定方法について取り上げます。 以降の内容は、ゼロから新しいシーンに取り組むことを前提としています。 必要であれば、既に構成されている MRTK 視線追跡の例もご覧いただけます。すぐに開発の足がかりにできる優れた例が多数用意されています。
視線追跡の要件のチェックリスト
視線追跡が正常に機能するには、次の要件が満たされる必要があります。 HoloLens 2 の視線追跡をまだ使ったことがなく、MRTK での視線追跡の設定方法がわからないという方も心配ありません。 それぞれについて以下で詳しく説明します。
- "Eye Gaze Data Provider" が入力システムに追加されている必要があります。 これにより、プラットフォームからの視線追跡データが提供されます。
- アプリケーション マニフェストで "GazeInput" 機能が有効になっている必要があります。 この機能は Unity 2019 で設定できますが、Unity 2018 以前では、この機能は Visual Studio と MRTK ビルド ツールでのみ使用できます
- 現在のユーザーに対する HoloLens の視線調整が済んでいることが必要です。 ユーザーが視線調整されているかどうかを検出するサンプルを確認してください。
GazeInput 機能に関するメモ
GazeInput 機能は、MRTK に備わっているビルド ツール ([Mixed Reality Toolkit] -> [ユーティリティ] -> [ビルド] ウィンドウ) で自動的に有効にすることができます。 そのためには、[Appx のビルド オプション] タブの [視線入力機能] チェック ボックスをオンにする必要があります。
このツールは Unity ビルドの完了後に AppX マニフェストを検出し、手動で GazeInput 機能を追加します。 Unity 2019 未満では、Unity の組み込みのビルド ウィンドウ ([ファイル] -> [ビルド設定] を使用している場合、このツールがアクティブになりません。
Unity 2019 未満で Unity のビルド ウィンドウを使用しているときは、Unity ビルド後、次の手順に従ってこの機能を手動で追加する必要があります。
- コンパイル済みの Visual Studio プロジェクトを開き、ソリューションで "Package.appxmanifest" を開きます。
- [機能] の [GazeInput] チェック ボックスがオンになっていることを確認します。 "GazeInput" 機能が表示されない場合は、MRTK を使用するための前提条件 (特に Windows SDK のバージョン) を、お使いのシステムが満たしていることを確認してください。
"ご注意ください"。これを行う必要があるのは、新しいビルド フォルダーに対してビルドを実行する場合だけです。 つまり、既に Unity プロジェクトをビルド済みで appxmanifest の設定が済んでいるとき、再び同じフォルダーを対象にする場合は、変更を再適用する必要はありません。
視線追跡の設定手順
シーンを設定する
MixedRealityToolkit のセットアップを行います。メニュー バーの [Mixed Reality Toolkit] -> [Configure](構成) をクリックするだけでかまいません。
視線追跡に必要な MRTK のプロファイルを設定する
MRTK シーンのセットアップ後、MRTK のプロファイルを選択するよう求められます。 単に [DefaultMixedRealityToolkitConfigurationProfile] を選択して [Copy & Customize](コピーとカスタマイズ) オプションを選択してください。
"Eye Gaze Data Provider" を作成する
- MRTK プロファイルの [入力] タブをクリックします。
- 既定のプロファイル ("DefaultMixedRealityInputSystemProfile") を編集するには、その横にある [複製] ボタンをクリックします。 [プロファイルの複製] メニューが表示されます。 そのメニューの一番下にある [複製] をクリックしてください。
- 新しい入力プロファイルをダブルクリックし、[Input Data Providers](入力データ プロバイダー) を展開して、[+ Add Data Provider](+ データ プロバイダーの追加) を選択します。
- 新しいデータ プロバイダーを作成します。
- [種類] で [Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input] ->[WindowsMixedRealityEyeGazeDataProvider] を選択します
- [プラットフォーム] で [Windows ユニバーサル] を選択します。
Unity エディターで視線追跡をシミュレートする
HoloLens 2 にアプリをデプロイする前に、Unity エディターで視線追跡入力をシミュレートしてイベントが正しくトリガーされることを確認できます。 カメラの位置を視線の原点として、またカメラの前方ベクトルを視線の方向として使用すれば、視線入力シグナルをシミュレートできます。 これは初期テストには適していますが、目の速い動きを再現する目的には適していないことに注意してください。 そのため、実際の目を使った対話式操作を HoloLens 2 で頻繁にテストすることをお勧めします。
視線追跡のシミュレーションを有効にする。
- MRTK 構成プロファイルの [入力] タブをクリックします。
- そこから [Input Data Providers](入力データ プロバイダー) -> [入力シミュレーション サービス] に移動します。
- "DefaultMixedRealityInputSimpulationProfile" を複製して変更を加えます。
- [Simulate Eye Position](目の位置のシミュレーション) チェック ボックスをオンにします。
既定の頭の動きに基づく視線カーソルを無効にする。一般に、目の動きに基づく視線カーソルは表示しないことをお勧めします。どうしても必要な場合は、"目立たない" ようにしてください。 MRTK 視線ポインター プロファイルに既定でアタッチされている既定の頭の動きに基づく視線カーソルは非表示にすることを強くお勧めします。
- MRTK 構成プロファイル ->'Input' ->'Pointers' に移動します
- "DefaultMixedRealityInputPointerProfile" を複製して変更を加えます。
- [Pointer Settings](ポインター設定) の一番上で、非表示のカーソル プレハブを [GazeCursor] に割り当てる必要があります。 これを行うには、MRTK Foundation から "EyeGazeCursor" プレハブを選択します。
Gaze Provider で目の動きに基づく視線入力を有効にする
HoloLens v1 では、頭の動きに基づく視線入力が主要なポイント手法として使用されていました。 頭の動きに基づく視線入力は、カメラにアタッチされた MRTK の GazeProvider を介して引き続き利用できますが、入力ポインター プロファイルの視線入力設定にある [IsEyeTrackingEnabled] チェック ボックスをオンにすることで、目の動きに基づく視線入力を使用することもできます。
Note
目の動きに基づく視線入力と頭の動きに基づく視線入力は、開発者がコードの中で "GazeProvider" の "IsEyeTrackingEnabled" プロパティを変更することで切り替えることができます。
重要
視線追跡の要件が満たされていない場合、アプリケーションは自動的に頭の動きに基づく視線入力にフォールバックされます。
目の動きに基づく視線入力データにアクセスする
視線追跡を使用するようにシーンを設定したら、スクリプトの中でそれを利用する方法について見てみましょう。EyeGazeProvider を用いて視線追跡データにアクセスする方法と視線対応ターゲット選択に関するページを参照してください。
HoloLens 2 で Unity アプリをテストする
視線追跡機能を備えたアプリの作成は、他の HoloLens 2 MRTK アプリのコンパイル方法と似ています。 前出の「GazeInput 機能に関するメモ」セクションで説明した "視線入力" 機能を必ず有効にしてください。
プロジェクトがHoloLens 2用に構成されていることを確認する
「MRTK を使用した OpenXR プロジェクトのセットアップ」で説明されている構成手順を確認して 、プロジェクトが適切に構成されていることを確認します。
考慮すべき重要なポイント:
- [Project 設定] ウィンドウでキー設定を確認します。
- プラグイン プロバイダーが正しく設定されていることを確認する
- 警告の三角形を解決します。
- 対話プロファイルを設定する必要がある
- OpenXR 機能グループを適切に選択する必要がある
視点の調整
最後に、HoloLens 2 でひととおり視点の調整を行ってください。 ユーザーの調整が済んでいないと視線追跡システムは一切入力を返しません。 調整を行う最も簡単な方法は、バイザーを一度跳ね上げてから元に戻すやり方です。 システム通知が表示され、新しいユーザーとして認識されて視点の調整を行うように求められます。 または、システム設定 ([設定] > [システム] > [調整] > [視線の調整を実行] で視点の調整を行うこともできます。
視線追跡の許可
HoloLens 2 で初めてアプリを起動するときに、視線追跡を使用することへの許可をユーザーに求めるポップアップが表示されます。 表示されない場合は、通常、"GazeInput" 機能が設定されていないことを示します。
許可を求めるプロンプトは一度表示されれば、以後再び自動的に表示されることはありません。 "視線追跡を拒否" した場合は、[設定] -> [プライバシー] -> [アプリ] でこれをリセットできます。
これで視線追跡が MRTK Unity アプリで使用できるようになるはずです。 Microsoft の MRTK 視線追跡のチュートリアルとサンプルを忘れずにチェックしてください。視線追跡入力の使い方のデモが紹介されているほか、実際のプロジェクトの中で手軽に再利用できるスクリプトが用意されています。