HoloLensでの空間シェアリング
従来、HoloLensでのシェアリングは「難しい!」というイメージが付きまとっていました。
というのも、最初に公式チュートリアルHolographic Academyに掲載された方法は、サーバアプリケーションを起動してそこに接続することが必要で、しかも接続に失敗しやすいものでした。
次に同じくAcademyに掲載された方法は、わかりにくいことで有名なUNETを用いていることと、やはり接続(サイズの大きな空間情報の転送)に失敗しやすいということで、あまり安定はしていませんでした。
ところが最近、先駆者の皆様おかげで、様々なシェアリングの方法が確立されていき、かなりお手軽に試せるようになってきました。(HoloLensを2台用意するのが一番難易度が高い部分かもしれません)
シェアリングの要素
シェアリングの要素は、大きく分けると2つに分解されます。
1つめは「座標系の共有」で、2つめは「情報の同期」になります。
座標系の共有
HoloLensは、アプリを起動したときのデバイスの座標を(0,0,0)とする自分の座標系を持っています。複数台が別々の場所で起動すれば、それぞれの座標系が存在することになります。
そこで、基準となる物理的な場所を1つ決め、それぞれのHoloLensがその場所の座標を認識します。その場所はHololens Aにとっては(10,1,10)かもしれませんし、HoloLens Bとっては(-5,0,-5)かもしれません。
いちど基準点(アンカー)が決まれば、そこからの相対座標で表すことにより、全てのデバイスで物理的に同じ場所を表すことができます。
情報の同期
上記で共有した座標系の上で、オブジェクトの生成・削除・移動・回転やアニメーションなどの動きを付与するには、「同期エンジン」と呼ばれるものが必要となってきます。
同期の例として、HoloLens A上でオブジェクトをInstantiateしたら、HoloLens B上でも同じくInstantiateする必要があります。
シェアリングは同じオブジェクトを共有しているのではなく、それぞれのデバイスの上に生成された同じ動きをするオブジェクトを、共有した座標系で閲覧する、という状態になります。
シェアリングの要素については、下記でイラスト付きでわかりやすくまとまっていますのでぜひご覧ください。
第7回 HoloLens参考書読書会 @アカツキ Ch8. Sharingのはなし
HoloToolkit-UnityのSharingの仕組みをできるだけ簡単に理解する
座標系を共有するには
「物理的に同じ場所」を共有することが必要になります。具体的には下記の方法があります
- HoloLensが認識している空間情報と場所(WorldAnchor)を共有する
- 画像マーカーを認識させ、その場所をアンカーとする
- HoloLensを同じ位置で起動する
詳しくは、下記のブログにとても丁寧に書かれています。
今回は、画像マーカーの認識に広く使われている「Vuforia」を使用します。
Vuforiaを使用することにより、空間情報を転送する時に起こりがちな通信エラーを回避できると共に、HoloLens以外のデバイスでも同じ方法でシェアリングを行うことが容易になります。
情報を同期するには
情報の同期については、公式のように専用サーバを用意するものや、Unity純正の同期エンジンUNETを使用するもの、またはTCPやUDPの通信を自前で用意してしまうものなどが考えられます。
今回は、ネットワークゲームなどにも広く使用されているPhoton Realtimeを使用します。
Photon Cloudは、中継点となるサーバがインターネット上にあるため、UNETやTCP/UDPよりも柔軟なネットワーク環境で使用できます。シェアリングするデバイスが同じネットワークに接続されていなくても、インターネットに繋がっていさえすれば通信可能なので、たとえば遠隔地同志でシェアリングを行うといったシチュエーションにも向いています。
※続きを投稿予定です
2.実装編(HoloLens)
3.実装編(iOS)←未定
4.実装編(Android)←未定