読者です 読者をやめる 読者になる 読者になる

Holographic Academyの解説「Hologram 240- Sharing holograms」(Chapter3まで)

少し空いてしまいましたが、次は240の内容を整理しました。

これまでの内容はこちらです。

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp

magicbullet.hatenablog.jp


今回は、HoloLensの最大の特徴とも言える、Sharingについて解説します。

Sharingとは、下記のようにHoloLensで見た情報を別のHoloLensでも共有する仕組みのことです。

Sharingの動作確認を行うにあたり、HoloLens Meetup Vol2で発表されたグラニの鈴木さん(@xin9le)にご協力をいただきました。ありがとうございます。


=======

目次

0 準備

1 Chapter 1 - Holo World

2 Chapter 2 - Interaction

3 Chapter 3 - Shared Coordinates

4 Tips

終わりに

=======

[補足]

全チャプターを解説する予定でしたが、現状のSharingは成功率が著しく低いため、今回は断念しました。

いずれHoloToolkitそのものが改善されるか、自分でオリジナルの仕組みを作るか、までは残りのチャプター解説は保留とします。ご了承ください。


0 準備

これまで通り、Windows 10のPCとHoloLensが必要です。
また、Windows 10 PCの中には、Visual Studio Update3とUnity5.5以上がインストールされていることが必要です。

私の場合は、下記の環境で動作確認しました。


・Windows10 Pro on Parallel Desktop 12.1.3 (MacOSX 10.12.3) / Windows 10 Pro

Visual Studio Update3

・Unity5.5.1f1


まずは、「Holograms 240」を開き、下記の files をクリックしてプロジェクトをダウンロードします。

f:id:Takyu:20170309003831j:plain


適当な場所に置いて解凍したらUnityで開き、SharedHologramsという名前をつけます。

1 Chapter 1 - Holo World

ここではSharingの機能は使いません。これまでと同様にサンプルプロジェクトから指示されたPrefabを使って、HoloLens実機にdeployするところまでを解説しています。

特に新しいことはないので解説は省略します。

アプリを起動すると、何やら音楽が聴こえます。これはHoloLensの初期位置(0,0,0)にEnergy Hubがあるためです。

ちょっと動いてみると、このようにEnergy HubのCGが見えます。

f:id:Takyu:20170320000139j:plain

2 Chapter 2 - Interaction

ここでもSharingの機能は使いません。Chapter1と同様に手順に沿って進めるだけなので、解説は省略します。

GazeManagerを追加しているので、Energy Hubが自分の視線方向の動きに合わせて動きます。

また、Gesture Managerを追加しているので、AirTapするとEnergy Hubが展開し、あとは Chapter1と同じことになります。


3 Chapter 3 - Shared Coordinates

Chapter3から初めてSharingの話が出てきます。

Sharingとは、HoloLensとは別のPCをサーバとして立てて、このサーバが各HoloLensの持つ空間座標情報を管理することです。

ここでは、Energy Hubオブジェクト(Hologralm230でも出てきた)を複数のHoloLens越しに見る、というSharingの最もシンプルな例を体験できます。

まず、Hologram Collectionに指示に従ってスクリプトを追加、修正します。


次に、Sharing PrefabをHierarchy Viewにドラッグします。

f:id:Takyu:20170404122709p:plain

続いて、Sharing のInspectorにサーバのIPアドレス、使用するポート番号を入力します。

テストするだけならば、現在Unityを動かしているPCのIPアドレスです。ポート番号は20602を指定します。

f:id:Takyu:20170404122738p:plain


UnityのメニューからSharingのサービスを起動します。

f:id:Takyu:20170404122748p:plain

起動すると、このようにコマンドプロンプトが出ます。

f:id:Takyu:20170404122757p:plain

これでSharing Serviceの準備は完了です。次はHoloLens用のアプリをビルドしてデプロイします。

HoloLens側でアプリを起動すると、Chapter2と同じように自分の視点に合わせてEnergyHubが動きます。

このとき、HoloLens側ではAnchorの登録処理が行われており1分前後かかります。終わるまではAirTapが効きません。

本来ならば1分程度でAirTapが効いてEnergyHubを好きな位置に配置できます。この状態で2台目のHoloLensで同じアプリを実行すると、30-60秒程度で同じ位置のEnergyHubを見ることができます。


しかし、私の環境で20回以上試しましたがいずれもAnchor登録が完了せず、EnergyHubの固定ができませんでした。

部屋の空間モデルを取りやすいように、ゆっくりと部屋を歩いてみたり、5分程度待ってみたこともあったのですが、一度も成功しませんでした。

冒頭で紹介させていただいたグラニの鈴木さんとも話をしましたが、鈴木さんも同様の成功率の低さで詰まり、結果的にオリジナルのSharingの仕組みを作ることに至ったそうです。

詳細は下記のスライド、およびブログをご確認ください。

■スライド
docs.com


■ブログ
blog.xin9le.net


4 Tips

4-1. Sharingサービスを起動すると、アドレスが複数表示される

Serviceを起動したPCが複数のIPアドレスを持っている場合に発生します。コントロールパネルで見るとこうなっています。

f:id:Takyu:20170404122900p:plain

この状態でSharingサービスを起動すると、こうなります。

f:id:Takyu:20170404122914p:plain


動作確認を行った2017年3月時点では、複数のIPアドレスが表示された場合、一番上のアドレスで接続しないとHoloLensが接続できませんでした。

上記の例では、172.16.80.1と同一セグメントのネットワークにHoloLensが接続されている必要があります。

この順番をずらす方法はわかりませんでした。
別のネットワークでHoloLensと共有したい場合、上記の例だと192.168.0.4と同期したい場合は、172.16.80.1のネットワークを無効化する必要があります。手順は下記の通りです。

画面右下でネットワークアイコンを右クリックして、ネットワークと共有センターを開く。
f:id:Takyu:20170404122940p:plain


「アダプターの設定の変更」を選択する。
f:id:Takyu:20170404123027p:plain

右クリックでプロパティを選び、「無効にする」を選択する。
f:id:Takyu:20170404123101p:plain

Hyper-Vが仮想IPアドレスを持つため、HoloLensエミュレータの環境構築をしたPCでは必ず発生します。

4-2. Sharingを実行してもHoloLensのjoinが確認できない

HoloLensがSharingServiceに接続する(joinする)と、このようにログが表示されます。

f:id:Takyu:20170404123751p:plain

ただし、ネットワークが繋がっていないか、ファイアーウォールでブロックされているとログは表示されません。

ファイアーウォールが原因の場合、無効化すれば当然解決しますが、セキュリティ的にはあまりよくないので、Sharingのサービスを許可する設定を追加します。

まず、ネットワークと共有センターを開きます。
f:id:Takyu:20170404122940p:plain

次に、コントロールパネルからファイアーウォールの設定画面を開きます。
f:id:Takyu:20170404123241p:plain


詳細設定をクリックします。
f:id:Takyu:20170404123315p:plain

f:id:Takyu:20170404123329p:plain
受信の規制をクリックすると、許可しているサービスとしていないサービスが表示されます。

f:id:Takyu:20170404123359p:plain

ここで、SharingService.exeを右クリックしてプロパティを表示させます。

f:id:Takyu:20170404123412p:plain
「接続をブロックする」になっているので、それ以外の設定に変更します。

終わりに

同一の世界座標を共有し、Inside-Out Trackingだけで複数人で同一CGを共有するSharingは、現時点では再現が簡単ではありませんでした。

引き続き処理の流れを追って整理する予定でしたが、4/4時点でHolographic Academyのページにアクセスしたら、中身がなくなっていました。

Sharing解説の続きは、新しいAcademyが出てきてから再開にしたいと思います。


(2017/4/4追記) AcademyのURLが変更されていましたので、後日もう少し処理を追ってみたいと思います。