えむにわリソース

ITのスキマ的なあれこれを書きます。

HoloLensでSharingする前に確認したほうがいいこと

11/25(土),11/26(日)の2日間でXR GameJamに参加してきました。

東京会場は、 25日はXRもくもく会と、 26日はプログラマのためのUnity勉強会と日程被りで、
同ジャンルで喰い合いになったため人数は少なかったですが、
良い体験が得られた会だったと思います。

夜に家で仕込んで完成させたSharingが2日目現場でまったく動かないまま終了になったので、
Sharing の実装に入る前に、どの方法で Sharing したらよいか、 各種Sharing の仕様と判断方法を調べました。

ハッカソンやイベントでSharing を行う前に、必ず現場のネットワーク要件の確認をしましょう!

コケるなら早いほうが良いので、0歩目でコケるのは超大事です。

f:id:m2wasabi:20171127201754j:plain


MixedRealityToolkit-Unity の SharingServeiceを用いた方法

Microsoft公式の方法で、Sharing Serviceをサーバーとして用いてHoloLensがクライアントとしてぶら下がる方法です。

お手軽簡単と言われていますが、動かせる環境だとお手軽です。

ただし、深掘りする人が少ないのでブラックボックス感が強く、嵌った時にどうすればいいかの知見が少ないのが欠点です。 (※このあたり、次の記事で掘り下げます。)

学習リソースとしては Holograms 240 が良いでしょう。

実際に使う場合は、MixedRealityToolkit-Unity のExamplesを使うほうが手になじみます。

仕様

使用するポートとプロトコルは以下の通りです。

Port Protocol 用途
20602 UDP SessionList
20601 UDP Session ID:0
20600 UDP Session ID:1
20599 UDP Session ID:2
... UDP Session ID:n

セッションが増えるほど使用するポートが増えていく仕様です。

開かれたネットワークでSharingServiceを立てることはないのでportが枯渇するほどは使わないという想定なのでしょう。

クライアント同士のUDP接続ができないネットワークの場合、SharingServiceは使えません。 会場のネットワークがその仕様の場合は、自らルーターを持ち込むか、諦めて別の方法を考えましょう。

必要なネットワーク条件

  • クライアント同士のUDP接続

Unity の ネットワーク機能(UNET)を用いた方法

Academy の Mixed Reality 250 で実装されている方法です。

今回はAcademyはすっ飛ばして、 Mixed Relity Toolkit for Unityの中にサンプルがありますので、そちらを参照します。

Mixed Relity Toolkit for Unity をインポートした後で以下のシーンを開きます。

Assets/HoloToolkit/SharingWithUNET/Scenes/SharingWithUnetExample.unity

仕様

使用するポートとプロトコルは以下の通りです。

Port Protocol 用途
443 SSL MatchMaker(mm.unet.unity3d.com)に繋ぐ
任意(8675) UDP Transport
任意 WebSocket(TCP) Transport(UDPと排他)
任意(48675) UDP Broadcast
任意(11000) websocket(TCP) UNetNetworkTransmitter

f:id:m2wasabi:20171127194312j:plain:w350 f:id:m2wasabi:20171127194326j:plain:w350

TransportはUDPかwebsocketの排他利用です。要件に合わせて選びましょう。
HoloLens同士のアンカー情報のやり取りは、
端末の検出をUDP Bloadcast,
アンカー情報の送受信を UNetNetworkTransmitter で行います。

使用ポートは多いですが、セッションの増加によって増えていくということが無いです。
そして、ネットワーク内でUDP bloadcastが許可されて無いとSharingが完成しないことが分かります。

必要なネットワーク要件

  • クライアント同士のTCPまたはUDP接続
  • UDPブロードキャストの許可
  • 外部ネットワーク(MatchMaker)への接続

独自実装

上記環境がネットワークの条件的に利用困難だった場合、独自実装するしかありません。
独自実装のための足掛かりは、アキヒロ氏がまとめているので、参考にすべきです。

HoloLensでSharingする方法(TCP編)

HoloLensでSharingする方法(UDP編)

HoloLensでSharingする方法(位置合わせ編)

まとめ

Sharingしたい場合、会場のネットワークを使う前に、ネットワーク要件を確認しよう!

UDP塞がれてたらTCPの独自実装しか手段がなくなります。

次回は、割と誰も説明してない Sharing Service の使い方について説明します。