Version: 2019.2
WMR クイックスタートガイド
開発中の WMR テスト

WMR 入力とインタラクションの概念

すべての Windows Mixed Reality デバイスは、ユーザーからの入力を受けるために特定の形式のインタラクションを使用します。これらの入力形式の中には、HoloLens や没入型ヘッドセットなど、特定の Windows Mixed Reality デバイスに特有のものがあります。

没入型ヘッドセットは、空間コントローラーを含むさまざまな入力を使用します。HoloLens は、ヘッドセットに加えて追加のハードウェアをアプリケーションが必要としない限り、3 形式の入力に制限されています。

Windows Mixed Reality の没入型ヘッドセットでは、すべての形式の入力が可能です。Gaze は VR で動作し、ジェスチャはコントローラーの Select ボタンを使用すると発生し、エンドユーザーがマイクを PC に接続すると音声を使用できます。

HoloLens の入力は他のプラットフォームとは異なります。なぜなら、以下の方法を主なインタラクションとして使用するからです。

  1. 視線: 世界でユーザーが視線を追跡することによってアプリケーションを制御します。
  2. 音声: 短い、言葉によるコマンドと長めの形式のないディクテーション。ディクテーションはコマンドやトリガーアクションの実行に使用できます。
  3. ジェスチャ: 手の信号またはコントローラー入のトリガーコマンドをシステムに入力します。

視線 (すべてのデバイス)

視線は、ユーザーが見ている場所を追跡する入力メカニズムです。

HoloLens では、視線はかなり正確で、世界のゲームオブジェクトの選択に使用します。視線は、シーン内のすべての、というよりは、特定のゲームオブジェクトにコマンドを指示するために使用します。

Gaze を使ってゲームオブジェクトをターゲットに設定する例 (白い円は Gaze インジケーター)
Gaze を使ってゲームオブジェクトをターゲットに設定する例 (白い円は Gaze インジケーター)

詳細は、Microsoft のドキュメント Gaze インジケーターGaze ターゲティング を参照してください。

音声 (すべてのデバイス)

Windows 10 API は、HoloLens と没入型デバイスの音声入力を可能にします。Unity は以下の 3 種類の入力をサポートしています。

  • キーワード: イベントの生成に使用される簡単なコマンドまたはフレーズ (コード内で設定)。これにより、ローカライゼーションを必要としない限り、アプリケーションに音声コマンドをすばやく加えることができます。この機能は、KeywordRecognizer (キーワード認識) API によって提供されます。

  • 文法: セマンティックなコマンドの表。文法は、XML 文法ファイル (.grxml) で設定でき、必要に応じて表をローカライズできます。このファイル形式の詳細は、Microsoft のドキュメント Creating Grammar Files を参照してください。この機能は、GrammarRecognizer (文法認識) API によって提供されます。

  • ディクテーション: 長めの音声入力をテキストに変換する、より自由な形式の変換システム。HoloLens のディクテーション認識は、バッテリーの寿命を延ばすために短期間だけ有効です。この機能はインターネット接続を必要とし、DictationRecognizer (ディクテーション認識) API によって提供されます。

HoloLens ヘッドセットにはマイクが内蔵されており、追加のハードウェアなしで音声入力が可能です。アプリケーションが没入型ヘッドセットで音声入力を使用するには、外部マイクを PC に接続する必要があります。

音声入力の詳細は、Microsoft ドキュメントの 音声デザイン を参照してください。

ジェスチャ (すべてのデバイス)

ジェスチャは、システムが理解する手の信号、または、空間コントローラーからのコントローラーの信号です。HoloLens と没入型デバイスの両方ともジェスチャをサポートします。ジェスチャを開始するために、没入型デバイスは空間コントローラーを必要とし、HoloLens ジェスチャは手の動きを必要とします。ジェスチャを使用して、アプリケーション内の特定のコマンドを送信できます。

Windows Mixed Reality には、アプリケーションで使用するいくつかのビルトインのジェスチャが備わっています。同様に、カスタムのジェスチャを認識するための汎用 API もあります。ビルトインジェスチャとカスタムジェスチャ (API を使って追加) は、両方とも Unity で機能します。

詳細は、Microsoft ドキュメントの ジェスチャ を参照してください。

フォーカスポイント (すべてのデバイス)

Windows Mixed Reality uses a process called Late Stage Reprojection (LSR) to compensate for movement of the user’s head between the time a frame is rendered and when it appears on the display. To compensate for this latency, LSR modifyies the rendered image according to the most recent head tracking data, then presents the image on the display.

HoloLens は再投影に安定化のための平面を使用します (Microsoft のドキュメント ホログラムの安定性 参照)。安定化のための平面とは空間の平面で、ユーザーがフォーカスしていると考えられる領域を示します。この安定化のための平面はデフォルト値を持ちますが、アプリケーションは SetFocusPoint API を使用して、この平面の位置、法線、速度を明示的に設定することもできます。オブジェクトはこの平面との交点で最も安定して見えます。没入型ヘッドセットもこの方法をサポートしていますが、これらのデバイスでは ピクセル単位の深度に基づく再投影 と呼ばれるより効率的な再投影方法があります。

3D オブジェクトの安定化平面
3D オブジェクトの安定化平面

没入型ヘッドセットを使用するデスクトップアプリケーションでは、ピクセル単位の深度再投影が可能です。これは、アプリケーションによる明示的な作業を必要とせずに、より高い品質を実現します。ピクセル単位の深度の再投影を可能にするには、Windows Mixed Reality の Player Settings を開き、XR Settings > Virtual Reality SDKs の順に移動し、Enable Depth Buffer Sharing をチェックします。

没入型ヘッドセットを使用したデスクトップハードウェアでのピクセル単位の再投影を有効にする
没入型ヘッドセットを使用したデスクトップハードウェアでのピクセル単位の再投影を有効にする

Enable Depth Buffer Sharing を有効にすると、SetFocusPoint メソッドをアプリケーションが明示的に呼び出さないようにします。SetFocusPoint メソッドは、ピクセル単位の深度の再投影平面に基づく再投影 にオーバーライドしてしまうからです。

HoloLens で Enable Depth Buffer Sharing を有効にしても、デバイスの OS がWindows 10 Redstone 4 (RS4) に更新されていないと効果はありません。デバイスが RS4 の場合、デバイスは、深度バッファにある値の範囲から安定化平面を自動的に決定します。再投影は安定化平面を使用しても起こりますが、アプリケーションは SetFocusPoint を明示的に呼び出す必要はありません。

HoloLens で安定したホログラムを作成する方法に関しては、Microsoft のドキュメント ホログラムの安定性 を参照してください。

アンカー (HoloLens のみ)

Anchor コンポーネントは、仮想世界が現実の世界と相互作用する手段です。アンカーは、Transform コンポーネントがアタッチされているゲームオブジェクトの Transform コンポーネントの位置と向きをオーバーライドする特別なコンポーネントです。

ワールドアンカー

ワールドアンカーは、デバイスによる現実世界の正確な位置の認識と、WorldAnchor コンポーネントを含むゲームオブジェクトとの間のリンクです。いったん設定すると、World Anchor コンポーネントを持つゲームオブジェクトは、現実世界に固定されたままになります。ただし、デバイスが、アンカーの位置をより正確に認識できるように、フレームごとに Unity 座標内で移動する場合があります。

World Anchor の一般的な使用例は以下のとおりです。

  • テーブルの上にホログラフィックゲームボードを固定します。

  • ビデオウィンドウを壁に固定します。

ゲームオブジェクトやゲームオブジェクトのグループを現実世界のある位置に固定したい場合は常に、World Anchor を使用します。

World Anchors は親ゲームオブジェクトの Transform コンポーネントをオーバーライドします。そのため、Transform コンポーネントに対する直接の操作はすべて失われます。同様に、World Anchor コンポーネントを持つゲームオブジェクトには動的な物理演算を伴う Rigidbody コンポーネントを設定すべきではありません。このコンポーネントはリソースの負荷が高く、ゲームパフォーマンスに影響します。ゲームのパフォーマンスは、ワールドアンカーがある場所から離れているほど減少します。

注意: パフォーマンスの問題を最小限に抑えるには、少数の WorldAnchor のみを使用するようにします。例えば、テーブルに置かれたゲームボードの表面に必要なボードのアンカーは、1 つだけです。この場合、ボードの子ゲームオブジェクトは、WorldAnchor を必要としません。

詳細とベストプラクティスは、Microsoft のドキュメント空間アンカー を参照してください。


  • 2018–03–27 Page published

  • XR API に関する新しいコンテンツは 2017.3 に追加

WMR クイックスタートガイド
開発中の WMR テスト