CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

アプリ開発者目線でHoloLensとMetaの違いを整理してみました

最近MR/AR系の分野で注目を集めているのは、HoloLensとMeta2だと思います。いずれもかぶることで、実世界に重ね合わせてCGや各種情報を見ることができます。

やりたいことはだいたい同じに見えます。しかし、アプリ開発をする視点で見ると、細かいところが色々と異なっており、アプリ開発時はそれぞれの特徴を把握する必要があります。そこで、いずれHoloLensやMeta2アプリを作る時の参考になればと思い、整理してみました。

(補足)
Metaについては、Meta2を試したことがないため、所持しているMeta1を基準に書いています。

1.操作

どちらも備えている操作と、片方にしかない操作があります。ただし、同じ操作でも操作方法は異なっています。

1.1 HoloLens、Metaで共通な操作

(表の中に出てくるAirTap、Pinch、Grabについては、下記の個別の操作紹介をご確認ください)

操作 HoloLens Meta
ヘッドトラッキングでカーソル移動 あり あり
オブジェクトの拡大/縮小 調整用アイコンをAirTapで選択し、Windowの端をドラッグ 両手の指で操作(Pinch Out/In)
オブジェクトの移動 調整用アイコンをAirTapで選択し、Windowsの中心に指を合わせて、つまむ様にして移動 片手でオブジェクトを握る操作をしてから手を動かす(Grab)
スクロール スクロールアイコンをAirTapで選択し、指をつまむ動作をして移動 Windowsのスクロールアイコン部分に指を合わせてから移動

1.2 HoloLens独自の操作

Bloom

手を広げることでStart Menuを出す


AirTap

ヘッドトラッキングによってポインタを移動させ、ポインタが変化したら指をつまむ。これで決定となる。


1.3 Meta独自の操作

Grab

手でオブジェクトを握ることで、オブジェクトを移動させる


Pinch Out/In

両手の指でオブジェクトを拡大、縮小させる


Tap

オブジェクトに触ることで、操作する

HoloLensの場合、ほとんどの操作がAirTapでできるので、覚えることが少なく使いやすいと思います。一方、Metaはスマートフォンベースの操作方法が多く、直感的に使えるという印象を持ちました。

たとえば、Metaでスクロールを実行するには、下記のようにスクロールバーを指で動かすだけです。

しかし、HoloLensでスクロールを実行する場合は、"Scroll Tool"をAirTapしてから手で動かすことになるので、操作が一つ多いことになります。

アプリ開発をするときは、異なる設計思想の操作であることを認識しておくと、使いやすいアプリになると思います。
(どちらがよいのかは、アプリの内容や使い方によるので、判断しづらいところと思います)

2.構成

搭載しているOS PCは必要?/不要?
HoloLens Windows10 不要
Meta MetaOS(起動画面の雰囲気からAndroidのカスタマイズ版) 必要

Meta1は自身にOSを搭載していますが、実際はHMD(Head Mount Display)のセンサ情報を渡すためだけで、メインの処理は全てPCです。Meta社のHPにあるFAQによると、Meta2でもPC必須は変わらず、ある程度スペックの高いPCが必要になります。

Meta1の場合、さらに別途外部電源も必要だったので、ケーブルだらけになってしまいました。ということで、現状はHoloLensの方が使いやすい構成であると言えます。

3.開発環境

対応する開発環境 バージョン 対応するOS
Meta Unity 4.7.1 or 5.3.4 Windows8.1 or 10
HoloLens Unity 5.4 for HoloLens Windows10
Visual Studio Update2 Windows10

[Metaの補足]
・Depthセンサを細かく制御するにはC++を使う必要があるようです(未確認)。

[HoloLensの補足]
・チュートリアルはUnityベースで書かれており、実際はUnityで作るのがよさそうです。

このように、どちらも開発環境をUnityで統一できます。しかし、Prefabやdllはデバイス固有のため、同一プロジェクトで開発内容を共存するのは現実的ではありません。

そのため、もしHoloLensとMeta向けに同じアプリを作りたい場合、Unityを選択し、表示部分やバックエンドの処理だけ共通化というのがよいと思います。

4.アプリのビルド手順

ビルド手順
HoloLens Unityで開発→Visual Studio向けにビルド→Visual Studioで、全天周のUWPまたは単一UWPとしてビルド
Meta Unityで開発→Windowsアプリケーションとしてビルド

Meta2でどうなるのか、HoloLensの開発方法がどう変わるかがわからないですが、現時点では圧倒的にMetaが便利です。ちなみに、HoloLensについてはEmulatorベースですが、アプリ開発環境の構築手順を書いているので、ご参照ください。

HoloLensのエミュレータを起動し、Unityでアプリを作るまでの手順とTips紹介 - CrossRoad

5.アプリの同時起動

Meta1ではUnityアプリをフルスクリーンで実行し、それをミラーリングします。つまり、複数のアプリは起動できないし、Unityでできる範囲のことしかできません。

一方、HoloLensはWindows10ベースで動き、こんな風に複数のウインドウを空間に固定できます。

HoloLensで複数アプリを同時に起動した例

Meta2でどう変わるかわかりませんが、現状はHoloLensの方が使い勝手がよいと思います。

6.アプリで使える認識エンジン

6-1.標準搭載されているか

音声認識 画像認識 空間認識
HoloLens あり(Cortana) なしと思われる(チュートリアルには紹介なかった) あり(Spatial Mapping)
Meta なし 特定マーカの認識のみ あり(SLAM。ただしα版)

(補足)
SLAM とは、Simultaneous Localization and Mapping です。RGBカメラ、Depthカメラを用いて現在位置を推定しながらその場所のマッピングを行う手法です。

蛇足ですが、下記の記事に紹介されているように、ロボット掃除機「ルンバ」にはSLAMが使われています。

「もっとも優れたロボット掃除機」――カメラとSLAMで賢くなった「ルンバ980」登場 - ITmedia NEWS

6-2.他社製の認識エンジンを使えるか

音声認識 画像認識 空間認識
HoloLens 難しい OpenCVを使えばできるかも 不明
Meta Windowsデスクトップ系の一般的機能を利用可 Windowsデスクトップ系の一般的機能を利用可 不明

HoloLensで他社製認識エンジンが使えないのは、他社製機能がUWPに非対応であるためです。非常にざっくりした説明をすると、OSがWindows10で動くアプリケーションは、従来のWin32系と呼ばれるランタイムを使って動くタイプ(exe形式のもの)と、Universal Windows Platform(UWP)というタイプの2種類があります。

詳しくは調べ切れてませんが、私の知る限り他社製の認識エンジンはWin32系のWindows、iOS、Androidのどれか(またはどれも)に対応していることが一般的で、UWPに対応している認識エンジンはまだ見たことがありません。

例えば、画像認識系で有名なVuforiaは、2016年3月にHoloLensへの対応を予定していることを発表しました。つまり、これまでUWPには非対応でした。

http://www.ptc.com/news/2016/ptc-brings-vuforia-to-hololens

VuforiaのHPには、希望者はEarly Access Programに応募してほしいとあったので、一般公開まではまだ時間がかかりそうです。

7.終わりに

現時点では一長一短という印象です。そのため、どちらが優れている、を無理に決めるよりは、両者の違いを理解しながら、それぞれに適したアプリを作っていこうと思います。

ちなみに、今回直接比較ができなかったMeta2ですが、MoguraVRさんで紹介されている通り、Meta社と協力してアプリ開発をしてくれる開発者にMeta2が優先的に出荷されることが発表されました。

視野角90度のARデバイスMeta2、当初の予定を前倒し6月上旬に発送開始 | Mogura VR

また、記事にはこんな記述があります。


(Meta社の)グリベツ氏はMetaと協同して早期に開発を始めたい開発者はMetaに直接コンタクトをとってほしいと強調していました。

引用元:視野角90度のARデバイスMeta2、当初の予定を前倒し6月上旬に発送開始 | Mogura VR

メールで連絡を取ってみたところ、幸いにもβ候補に選んでいただくことができました。

ということで、もしMeta2が早期に届いたら、Meta1と何が違っているのか、どうやってアプリを作るのかなども調べてブログに公開しようと思います。