HoloLens概要 201612月版

HoloLens

HoloLens?

HoloLensとは、現実世界に3Dホログラムを重ねて表示する複合現実(MR)デバイスです。
HoloLensは、現実世界を認識して動作するので、壁にウィンドウを貼り付けたり、3Dホログラムを机の上に置いたり、といったことが可能です。
もちろん、現実世界を認識していますので、HoloLensと3Dホログラムの間に障害物を置くと、3Dホログラムは、障害物に隠れて見えなくなります。

HoloLensで動いているアプリや3Dホログラムは、視線、ジェスチャー、音声で操作できます。
ジェスチャーでは、タップをして3Dホログラムを選択したり、指でつまんで動かしたり、ということが出来ます。
また、音声を使うことで、Cortanaを使うことが出来ます。
(現在は、音声は英語のみ認識可能です。)

HoloLensで出来ること、出来ないこと

HoloLensで出来ること

  • ホログラムの表示
  • 視線入力
  • ジェスチャー入力
  • 音声認識
  • 現在は英語のみ認識可能
  • 空間音響
  • 空間認識
  • ホログラムの共有

HoloLensで出来ないこと

  • 検出した物体の判別・認識はできない。
  • 開発側で認識の処理を行わないといけない。
  • 空間認識は、赤外線を使っているので、黒っぽいものなどは認識しにくい。
  • 手の認識は自由にできない。
  • 屋内利用を想定しているので、屋外での使用は難しい。

HoloLensでアプリを作る

開発環境

HoloLensアプリを開発する際に使用するツールは以下のものです。

ツール 説明
Visual Studio 2015 Update 3 HoloLensアプリの開発で必須となります。
HoloLens エミュレーター 仮想マシン上で動作確認をするときに使用します。
Unity HoloLens TP Unityを使ってアプリの開発する場合に必要です。

HoloLensアプリを開発に使用するPCは、64bit版Windows 10 Pro以上のエディションがインストールされていることが推奨されます。
これは、HoloLensエミュレーターがHyper-Vを使用しているためです。

上記のツールに加えて、マイクロソフトが公開しているHoloToolkitというコンポーネントを使うと開発を簡単に始めることができます。
HoloToolkitには、Unityで使うことができるHoloToolkit-Unityもあります。

ジェスチャー

アプリで使用できるジェスチャーは、以下の2種類です。

  • Air Tap
    • 人差し指を立てた状態から、下ろして、すぐに上げる、という動作です。
    • ウィンドウや3Dホログラムを見ながら、Air Tapをすることで、選択することができます。
    • PCの操作だと、クリックに対応します。
  • Hold
    • 人差し指を立てた状態から、下ろす、という動作です。
    • Holdの状態で手を自由に動かすことで、ウィンドウをスクロールしたり、3Dホログラムを移動させたり出来ます。
    • PCの操作だと、ドラッグに対応します。

他にも、HoloLensではBloomというジェスチャーもありますが、こちらは、アプリからは使用することができません。
(スタートメニューの表示や、アプリを閉じる、という操作を行うジェスチャーのためです。)

Unityを使って、Air Tapによる操作を実現する方法は、以下のようになります。

1. 視線入力とジェスチャーを認識するゲームオブジェクトを作成する。

  • HoloToolkit-Unityに同梱されているスクリプトを使用します。使用するスクリプトは、以下のものです。
    • `GazeManager`
    • `GestureManager`
  • 今、何を見ているのか、何に視線が当たっているのかを分かりやすくするために、HoloToolkit-Unityに同梱されている`Cursor`というプレハブを使用します。
  • 画面中央にカーソルが表示されます。何かに視線が当たっている場合には、青いリングのカーソルが表示され、視線が当たっていない場合には、白い点が表示されます。

2. ジェスチャーで操作したいゲームオブジェクトにコライダーを設定します。
3. ジェスチャーで操作したいゲームオブジェクトにスクリプトを設定します。

  • スクリプトでは、`void OnSelect()`というメソッドを実装し、Air Tapされた時の処理を記述します。

3Dホログラムを移動させたり、拡大・縮小したり、という操作をしたいときには、`GestureRecognizer`というクラスを使用します。
基本的な実装方法は、Air Tapを実現する方法と同じような形になります。

実装例などは、マイクロソフトが公開している Holograms 210: Gaze  と Holograms 211: Gesture をみると良いかと思います。

空間認識

HoloLensにおける空間認識は、WiFiと赤外線を利用して行われます。
HoloLensで認識している空間は、Spaceとして管理されています。
このSpaceは、WiFiに紐付いています。
Spaceの情報は、Settingsアプリから確認できます。
空間の認識、つまり、部屋の中に置かれているものなどは、赤外線を使用して認識を行います。

UnityとHoloToolkit-Unityを使用する場合は、以下のように行います。

1. 空間認識を行うためのゲームオブジェクトを作成する。

  • HoloToolkit-Unityに同梱されているスクリプトを使用します。使用するスクリプトは、以下のものです。
    • `SpatialMappingObserver`
    • `SpatialMappingManager`
    • `SpatialMappingSource`
    • `SurfaceMeshesToPlanes`

2. Holograms 230: Spatial mapping Chapter 3 – Processingにある`PlaySceneManager`というスクリプトを先ほど作成したゲームオブジェクトに追加する。

3. HoloToolkit-Unityに同梱されている`SurfacePlane`というプレハブをシーンに追加する。

4. `SurfacePlane`のインスペクターから以下のマテリアルを設定する。

  • `Floor` – 床
  • `Ceil` – 天井
  • `Wall` – 壁
  • `Table` – テーブル

5. 設定を行った`SurfacePlane`をプレハブにする。

  • シーンからはゲームオブジェクトを削除する。

6. 1.で作成したゲームオブジェクトのインスペクターから`Surface Meshes to Planes (Script)`内の項目を設定する。

  • `Surface Plane Prefab`を5.で作成したプレハブにする。
  • `Draw Planes`の値を変更することで、描画されるものが変わります。

上記の手順でアプリを作成し、実行すると、空間認識後に、4.と6.で設定した項目で、床、天井、壁、テーブルとして認識された箇所に平面が描画されます。

空間認識には、より低レベルなAPIとして`SurfaceObserver`も用意されています。
アプリ側で、より特化した処理をしたい場合には、こちらを使用すると良いでしょう。

実装例はマイクロソフトが公開しているHolograms 230: Spatial mappingを見ると良いかと思います。

音声認識

音声認識では、以下の2種類の認識方法があります。

種類 説明 使用するクラス
キーワードレベル 主に、1単語で構成される音声コマンド `KeywordRecognizer`
センテンスレベル 形式が定まった文章で構成される音声コマンド `GrammarRecognizer`

キーワードレベルの音声認識では、認識したいキーワードと認識した時に行う動作をプログラム上に直接、書きます。

センテンスレベルの音声認識では、Speech Recognition Grammar Specification (SRGS)と呼ばれる仕様に沿ったXMLファイルを用意する必要があります。
このSRGSはW3Cで策定された仕様なので、HoloLens以外の音声認識ソフトなどでも使用されています。
SRGSで定義した文法に従って、何らかの処理を行うように、Unityでアプリを作成します。

実装例はマイクロソフトが公開しているHolograms 212: Voiceを見ると良いかと思います。

注意点

現在、音声認識は英語にしか対応していません。

空間音響

目の前に置かれたホログラムから音を鳴らすときに、空間音響の機能を使用することで、HoloLensの装着者がホログラムの周りを移動しても、常にホログラムのある場所から音が聞こえるようにすることができます。

HoloLenアプリで空間音響を使用する場合には、まず、Unityのプロジェクト設定でオーディオの設定を以下のように変更します。

項目名
Spatiailizer Plugin MS HRTF Spatializer
System Sample Rate 48000

HoloToolkit-Unityを使用する場合は、以下のように行います。

1. 空間音響を管理するゲームオブジェクトを作成する。

  • HoloToolkit-Unityに同梱されているスクリプトを使用します。使用するのは、以下のスクリプトです。
    • `UAudioManager`

2. 1.で作成したゲームオブジェクトの`UAudioManager`にイベントを追加する。

  • ここで設定したイベント名をスクリプトで使用します。

3. イベントの設定項目`Positioning`を`Spatial Sound`にする。

4. 音を鳴らしたいゲームオブジェクトに`Audio Source`を割り当てる。

5. `Audio Source`の設定を以下のようにする。

  • `Spatialize`のチェックをオンにします。
  • `Spatial Blend`を`1`にします。

2.-5.の手順は、使用するサウンドすべてに対して行います。
アプリからは、`UAudioManager`の`PlayEvent`と`StopEvent`メソッドを使用して、音の再生・停止が行えます。
それぞれのメソッドで、再生・停止したいサウンドのイベント名を指定して、メソッドを呼び出します。

実装例はマイクロソフトが公開しているを見ると良いかと思います。

You may also like...