Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure Spatial Anchors と Photon を使った、マルチユーザーシェアリ...

Azure Spatial Anchors と Photon を使った、マルチユーザーシェアリングについて

#xRDCC #HoloMagicians

8月31日(月)に開催された xR Developer Community Conference Tokyo HoloLens ミートアップ枠 での登壇資料です。

堀尾風仁 Futo Horio

August 31, 2020
Tweet

More Decks by 堀尾風仁 Futo Horio

Other Decks in Technology

Transcript

  1. Azure Spatial Anchors と Photon を使った マルチユーザーシェアリングについて ― HoloLens 2,

    iOS, Android 神 戸 デ ジ タ ル ・ ラ ボ 新 事 業 創 造 係 堀 尾 風 仁 x R D e v e l o p e r s C o m m u n i t y C o n f e r e n c e ( 2 0 2 0 / 0 8 / 3 1 ) M S 公 式 チ ュ ー ト リ ア ル 徹 底 解 説
  2. 堀 尾 風 仁 株 式 会 社 神 戸

    デ ジ タ ル ・ ラ ボ 新 事 業 創 造 係 M R 班 M i x e d R e a l i t y ア プ リ ケ ー シ ョ ン 企 画 / 開 発 に 従 事 コ ミ ュ ニ テ ィ 運 営 A R K O B E ( 2 0 1 9 - ) A z u r e T e c h L a b . ( 2 0 1 9 - ) M i c r o s o f t M V P f o r W i n d o w s D e v e l o p m e n t ( 2 0 2 0 - 2 0 2 1 ) ※ 本 日 の 資 料 、 発 表 内 容 に 誤 り を 見 つ け ら れ た 場 合 は ご 指 摘 い た だ け ま す と 幸 い で す 。
  3. 01. Multi-user capabilities チュートリアル概要 02. Azure Spatial Anchors / Photon

    について 03. チュートリアル手順 解説 04. まとめ ア ジ ェ ン ダ
  4. な ぜ 今 M i c r o s o

    f t H o l o L e n s 2 公 式 チ ュ ー ト リ ア ル の 話 な の か ? Microsoft 公式 HoloLens 2 チュートリアルが MRTK v2.4.0 バージョンアップに伴い更新されました ( 全5種類 ) U P D A T E https://docs.microsoft.com/en-us/windows/mixed-reality/tutorials
  5. M u l t i - u s e r

    C a p a b i l i t i e s チ ュ ー ト リ ア ル 概 要 ( 1 ) ASA = Azure Spatial Anchors (略称) 動画を貼り付ける
  6. Azure Spatial Anchors と Photon を使って複数人での ホログラム の共有を実現できるチュートリアル 1. Spatial

    Alignment (空間位置合わせ) 2. リアルタイム (低遅延) での CG 共有 ASA = Azure Spatial Anchors (略称) シェアリングに必要な機能 - Spatial Mapping HoloLens はどのように CG 配置・固定を行っているのか? - Spatial Anchor ≒ World Anchor ? M u l t i - u s e r C a p a b i l i t i e s チ ュ ー ト リ ア ル 概 要 ( 2 )
  7. 02. Azure Spatial Anchors / Photon について ク ロ ス

    プ ラ ッ ト フ ォ ー ム で シ ェ ア リ ン グ を 実 現 す る た め の 仕 組 み
  8. M i c r o s o f t H

    o l o L e n s 2 に 搭 載 さ れ て い る セ ン サ ー 系 ① 慣性計測装置 ( IMU : Internal Measurement Unit ) ⇒ 加速度センサー、ジャイロセンサー(角速度)、磁力センサー ② 可視光カメラ (4つ) ⇒ ヘッドトラッキング用 ③ カメラ ⇒ 画像/ビデオ撮影、画像認識用 ④ 深度センサー ⇒ 1-MP TOF ( Time of Flight ) 深度センサー ⑤ 赤外線 (IR) カメラ (2つ) ⇒ アイトラッキング用 H o l o L e n s 2 が 仮 想 オ ブ ジ ェ ク ト ( C G ) を 配 置 ・ 固 定 す る 仕 組 み ( 1 )
  9. H o l o L e n s 2 が

    仮 想 オ ブ ジ ェ ク ト ( C G ) を 配 置 ・ 固 定 す る 仕 組 み ( 2 ) ① 6DoF ( six degrees of freedom ) 各種センサーなどで取得した周辺環境の情報から、 自己位置の推定と地図の作成を同時に行うこと。 ② SLAM ( simultaneous localization and mapping ) 3次元において剛体が取り得る動きの自由度のこと。 AR / MR で 仮想オブジェクト (CG) を配置・固定する上で重要となる2つの概念 Y軸 X軸 PITCH Z軸 ROLL YAW HoloLens ではこれらの技術概念について Spatial Mapping ( with Spatial Anchor ) と呼ばれる機能で提供しています。
  10. S p a t i a l M a p

    p i n g / S p a t i a l A n c h o r ( L o c a l A n c h o r ) と は ? 各種センターデータを用いて Spatial Map (空間マップ) を作成し、空間マップ内にアンカーを配置することで CG を永続的に固定 Unity の World Anchor コンポーネントを GameObject にアタッチすることで、Spatial Anchor を実現します。 Spatial Mapping データは接続中の Wi-fi に紐づき永続的に保存・管理される [ Device Portal ] > [ 3D View ] - Spatial Mapping - Spatial Anchor 2つのデータを閲覧・保存可能 Spatial Anchor Spatial Mapping ・Anchor = 錨 (いかり)
  11. W o r l d A n c h o

    r は ア プ リ を 起 動 し た 際 に 生 成 さ れ て い る オフィスや自宅などで開いたアプリケーションウィンドウが後日同じ場所に残っている経験ないですか? ローカルディスクに保持された World Anchor 情報は永続的に保存されたままになる。
  12. W o r l d A n c h o

    r 情 報 は H o l o L e n s 設 定 画 面 か ら 削 除 す る こ と が で き る 1. 近くのホログラムを削除 アプリケーションウィンドウの World Anchor は [ 設定 ] > [ システム ] > [ ホログラム ] から削除することができます。 2. すべてのホログラムを削除 過去に同じ場所で作成したアンカーを一括で削除 過去に作成した全てのアンカーを一括で削除 ※ Spatial Map (空間メッシュ) が更新され、 ウィンドウの表示に異常が起こった場合など アンカーの削除が可能です。
  13. S p a t i a l M a p

    p i n g / S p a t i a l A n c h o r ( L o c a l A n c h o r ) と は ? 各種センターデータを用いて Spatial Map (空間マップ) を作成し、空間マップ内にアンカーを配置することで CG を永続的に固定 Unity の World Anchor コンポーネントを GameObject に追加することで、Spatial Anchor を実現します。 Spatial Mapping データは接続中の Wi-fi に紐づき永続的に保存・管理される [ Device Portal ] > [ 3D View ] - Spatial Mapping - Spatial Anchor 2つのデータを閲覧・保存可能 Spatial Anchor Spatial Mapping ただし、World Anchor は HoloLens の Anchor 管理方法 https://docs.unity3d.com/ja/2019.2/Manual/wmr_input_types.html
  14. A z u r e S p a t i

    a l A n c h o r s ( C l o u d A n c h o r ) と は ? ( 1 ) マルチプラットフォーム ( HoloLens, iOS, Android ) で アンカー情報の共有を可能にする Azure サービス https://docs.microsoft.com/en-us/azure/spatial-anchors/concepts/guidelines-effective-anchor-experiences#stable-visual-features Create an effective anchor experience by using Azure Spatial Anchors より画像引用・改編 Anchor データ ・空間トラッキングデータ (特徴点) ・仮想オブジェクトの配置位置 [ Anchor 利用時の注意点 ] ・特徴点の少ない部屋では精度が低い ・家具配置が変更される場所では利用不可 [ 対策 ] ・ポスターやモノを置くことで 特徴点を増やすことができる 空間に配置された仮想オブジェクト
  15. A z u r e S p a t i

    a l A n c h o r s ( C l o u d A n c h o r ) と は ? ( 2 ) https://github.com/Azure/azure-spatial-anchors-samples/blob/master/Unity/Assets/AzureSpatialAnchors.SDK/Scripts/SpatialAnchorExtensions.cs どうやって マルチプラットフォーム ( HoloLens, iOS, Android ) の Anchor の共有を実現しているのか? SpatialAnchorExtensions.cs - HoloLens の World Anchor を Azure Spatial Anchor で扱えるように変換 AzureSpatialAnchors.SDK に内包されるコンポーネント 関数名 : ApplyCloudAnchor - ARFoundation パッケージを使用して、 ARKit / ARCore のアンカーを ASA 用に変換
  16. A z u r e S p a t i

    a l A n c h o r s ( C l o u d A n c h o r ) と は ? ( 3 ) Azure Spatial Anchors を使うとどのようなことが可能になるのか? マルチプラットフォームで コンテンツの位置合わせが可能に コンテンツの永続化 Way-Finding ( 道案内 ) https://docs.microsoft.com/en-us/azure/spatial-anchors/overview
  17. A z u r e S p a t i

    a l A n c h o r s ( C l o u d A n c h o r ) と は ? ( 3 ) Azure Spatial Anchors を使うとどのようなことが可能になるのか? マルチプラットフォームで コンテンツの位置合わせが可能に コンテンツの永続化 Way-Finding ( 道案内 ) https://docs.microsoft.com/en-us/azure/spatial-anchors/overview ASA は、リアルタイムでの 仮想オブジェクト (CG) 位置の共有はできない = Spatial Alignment (空間位置合わせ) のみに使用される
  18. P U N – P h o t o n

    U n i t y N e t w o r k と は ? Exit Games 社 ( アメリカ/ドイツ ) が提供する マルチプラットフォーム 対応の Unity ネットワークエンジン PUN ( Photon Unity Network ) を使用すると、複数人で低遅延なコンテンツの共有が可能になります。 https://www.photonengine.com/ Photon Cloud ( 同時接続20人まで無料 ) マスターサーバー ゲームサーバー ロビー ( Lobby ) ルーム1 ( Room ) ルーム3 ( Room ) ルーム2 ( Room ) ユーザー作成、ルーム作成 (入室) ルーム内ユーザーとCGを同期
  19. M u l t i - u s e r

    C a p a b i l i t i e s T u t o r i a l s の シ ス テ ム 構 成 HoloLens 2 (ユーザー1) HoloLens 2 (ユーザー2) ルーム Azure Spatial Anchors PUN ( Photon Unity Network ) ロビー Anchor データを ID で管理
  20. M u l t i - u s e r

    C a p a b i l i t i e s T u t o r i a l s の シ ス テ ム 構 成 HoloLens 2 (ユーザー1) HoloLens 2 (ユーザー2) ルーム Azure Spatial Anchors PUN ( Photon Unity Network ) ロビー Anchor データを ID で管理 ユーザー作成、ルーム作成 (入室)
  21. M u l t i - u s e r

    C a p a b i l i t i e s T u t o r i a l s の シ ス テ ム 構 成 HoloLens 2 (ユーザー1) HoloLens 2 (ユーザー2) ルーム Azure Spatial Anchors PUN ( Photon Unity Network ) ロビー Anchor データを ID で管理 オブジェクトの生成、同期 この時点で、オブジェクトの同期のみ (※位置は同じでない)
  22. M u l t i - u s e r

    C a p a b i l i t i e s T u t o r i a l s の シ ス テ ム 構 成 HoloLens 2 (ユーザー1) HoloLens 2 (ユーザー2) ルーム Azure Spatial Anchors PUN ( Photon Unity Network ) ロビー Anchor データを ID で管理 アンカー生成・保存、ID生成 (共有)
  23. M u l t i - u s e r

    C a p a b i l i t i e s T u t o r i a l s の シ ス テ ム 構 成 HoloLens 2 (ユーザー1) HoloLens 2 (ユーザー2) ルーム Azure Spatial Anchors PUN ( Photon Unity Network ) ロビー Anchor データを ID で管理 IDを元にアンカー情報取得、位置合わせ オブジェクトが同じ位置に表示され、同期されている状態
  24. 本 資 料 の 検 証 環 境 ・Windows 10

    バージョン 1903 以降 ・Windows SDK 10.0.18362.0 以降 開発用PC : Windows 10 Pro 使用ソフトウェア 一覧 ・Unity 2019.3.15f1 ・UWP - ユニバーサル Windows プラットフォーム Build Support ・IL2CPP - Windows Build Support ・ARFoundation 3.1.3 ( ARKit・ARCore Plugin 3.1.3 ) ・PUN 2.21 / Photon lib 4.1.4.4 ・Visual Studio 2019 Community ・Version 16.6.2 Android へデプロイする場合 ・ARCore をサポートした Android 端末 ( ex. Pixel 3 ) ・Android Build Support モジュール ( Unity ) iOS へデプロイする場合 ・ARKit をサポートした iOS 端末 ( ex. iPhone XS ) ・iOS Build Support モジュール ( Unity ) ・MacOS搭載PC ( XCode, CocoaPods ) https://docs.microsoft.com/en-us/windows/mixed-reality/mr-learning-sharing-01 Microsoft HoloLens 2 ・Windows 10 バージョン ( 10.0.19041.1113 ) ※ 公式チュートリアル とは違うバージョン
  25. 1. Unity インストール & プロジェクト作成 2. Switch Platform を実行 3.

    TextMeshPro Essential Resource をインポート 4. MRTK v2.4.0 をインポート / ASA アカウント作成 5. MRTK プロファイル編集 6. Custom Package のインポート & AR Foundation のインストール 7. PUN ( Photon Unity Network ) アカウント準備 8. Unity アセットストアより PUN アセット (無料) をインポートする 9. Unity シーンの編集 ( Prefab 追加、PUN 設定 etc.. ) 10. Unity ビルド実行 11. Visual Studio 2019 で HL2 向けにビルド&デプロイを実行 12. 実機検証 チ ュ ー ト リ ア ル 手 順 1. HoloLens 2 へのデプロイ手順 2. iOS へのデプロイ手順 3. Android へのデプロイ手順 https://docs.microsoft.com/en-us/windows/mixed-reality/mr-learning-sharing-01 赤枠部分のみ抜粋のうえ、本資料でご紹介します。 1. Switch Platform を実行 2. MRTK カメラ設定の変更 3. Unity ビルド & デプロイ を実行 1. Switch Platform を実行 2. MRTK カメラ設定の変更 3. Unity ビルドを実行 4. CocoaPods で ASAライブラリインストール 5. XCode でビルド&デプロイを実行
  26. M R T K プ ロ フ ァ イ ル

    編 集 - S p a t i a l A w a r e n e s s メ ッ シ ュ 表 示 設 定 Spatial Awareness 機能を有効化し、Spatial Mapping ( 空間マップ ) のメッシュデータを扱う設定方法 HL2 標準プロファイル ( DefaultHoloLens2ConfigProfile ) では Spatial Awareness System が 無効化されているので有効化する
  27. [ Display Option ] - None : 空間メッシュを表示/利用しない - Visible

    : Visible Material を使用して空間メッシュを可視化する - Occlusion : Occlusion Material を使用してシーン内のオブジェクトを隠蔽 (オクルージョン) する M R T K プ ロ フ ァ イ ル 編 集 - S p a t i a l A w a r e n e s s メ ッ シ ュ 表 示 設 定 メッシュ表示オプション ( Display Settings ) から好きな設定を選択することができます。 ※ 設定を変更するためにはプロファイルをクローン又は新規作成後、適用する必要があります。 https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/SpatialAwareness/ConfiguringSpatialAwarenessMeshObserver.html#display-settings
  28. M R T K プ ロ フ ァ イ ル

    編 集 - S p a t i a l A w a r e n e s s メ ッ シ ュ 表 示 MRTK の Spatial Awareness 機能を使うと、Spatial Mapping (空間マップ) データを元に CG を配置することが可能になります。 Visible 空間メッシュの可視化 ( Visible Material : MRTK_SurfaceReconstruction.mat ) None 空間メッシュを未使用 Occlusion 空間メッシュを使用した隠蔽 https://microsoft.github.io/MixedRealityToolkit- Unity/Assets/MRTK/SDK/Experimental/PulseShader/README.html
  29. C u s t o m P a c k

    a g e の イ ン ポ ー ト ( 本 チ ュ ー ト リ ア ル 向 け に 既 に 用 意 さ れ た も の ) https://docs.microsoft.com/en-us/windows /mixed-reality/mr-learning-sharing-02 #importing-the-tutorial-assets 以下、4つのパッケージを ダウンロード & インポート ・AzureSpatialAnchors.unitypackage (version 2.2.1) ・MRTK.HoloLens2.Unity.Tutorials.Assets.GettingStarted.2.4.0.unitypackage ・MRTK.HoloLens2.Unity.Tutorials.Assets.AzureSpatialAnchors.2.4.0.unitypackage ・MRTK.HoloLens2.Unity.Tutorials.Assets.MultiUserCapabilities.2.4.0.unitypackage
  30. C u s t o m P a c k

    a g e の イ ン ポ ー ト ( 本 チ ュ ー ト リ ア ル 向 け に 既 に 用 意 さ れ た も の ) この段階で CS0246 : The type or namespace name ‘Photon’ .. というエラーが表示されます。 このエラーは後で PUN2 – 無料 ( Unity Assets ) をインポートすることで解消できるので、このまま続行してください。
  31. A R F o u n d a t i

    o n の イ ン ス ト ー ル https://docs.unity3d.com/Packages/[email protected]/manual/index.html Azure Spatial Anchors SDK から呼び出される AR Foundation パッケージをインストールします [グローバルメニュー] > [Window] > [Package Manager] を選択 AR Foundation は最新版ではなく、3.1.3 をインストール
  32. P U N ( P h o t o n

    U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 Photon サインインページへアクセスし、アカウントを作成していきます。 https://dashboard.photonengine.com/en-US/account/signin 「Create One ... 」ボタンを押下し、 新規アカウント作成ページへ移動します。 ( ※ アカウント作成手順 省略 )
  33. P U N ( P h o t o n

    U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 アカウント作成が終わったら、作成したアカウントでログインを行います。( 以下、ログイン後の画面 ) https://dashboard.photonengine.com/en-US/publiccloud 「Create A NEW APP」ボタンを押下し、 PUN ( Photon Unity Network ) アプリケーション を作成していきます。
  34. P U N ( P h o t o n

    U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 新規作成する「Photon Type」, 「Name」を選択し、「CREATE」 ボタンを押します。 https://dashboard.photonengine.com/en-US/App/Create Photon Type : Photon PUN を指定 [必須] Name : アプリケーション名 (任意) [必須] Description : アプリケーション説明 Url : アプリケーションURL Photon Type プルダウンメニュー
  35. P U N ( P h o t o n

    U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 Photon PUN アプリケーション の新規作成が完了すると、ダッシュボードに追加されます。 ※ App ID を使って、PUN アプリケーション に 接続するのでメモしておいてください。 https://dashboard.photonengine.com/en-US/publiccloud
  36. U n i t y ア セ ッ ト ス

    ト ア よ り P U N ア セ ッ ト ( 無 料 ) を イ ン ポ ー ト す る Unity アセットストア より 「PUN 2 無料版」 アセット ( 無料 ) を ダウンロード & インポート します。 https://assetstore.unity.com/packages/tools/network/pun-2-free-119922 Unity Asset Store は、 ショートカット : Ctrl + 9 or [Window] > [Asset Store] より開けます。
  37. U n i t y ア セ ッ ト ス

    ト ア よ り P U N ア セ ッ ト ( 無 料 ) を イ ン ポ ー ト す る インポートが完了したら、セットアップウィザードにて設定を行います。 1. さきほどメモした AppId を入力 [Window] > [Photon Unity Networking] > [PUN Wizard] より再設定することも可能 https://doc.photonengine.com/zh-tw/pun/v2/getting-started/initial-setup 詳しい設定方法は、以下URLを参照 Fixed Region : 固定リージョンの指定 Support Logger : ログ出力の有無
  38. U n i t y シ ー ン の 編

    集 ( P r e f a b 追 加 、 P U N 設 定 e t c . . ) インポートした Custom Package 内に含まれる Prefab, コンポーネントを追加し、シーンを作成していきます。 Photon への接続関連 ASA 関連の処理 ログ管理 ( 表示 ) 上図 : チュートリアル手順を全て終えた後のヒエラルキー画面
  39. U n i t y シ ー ン の 編

    集 ( P r e f a b 追 加 、 P U N 設 定 e t c . . ) NetworkLobby NetworkRoom
  40. V i s u a l S t u d

    i o 2 0 1 9 で H L 2 向 け に ビ ル ド & デ プ ロ イ を 実 行 Windows 10 August 2020 アップデート (10.0.19041.1113) にて USBデプロイ時のエラーが解決されてます! (検証済み) https://microsoft.github.io/MixedRealityToolkit- Unity/Documentation/BuildAndDeploy.html#unity-20193-and-hololens MRTK v2.4.0 + Unity 2019.3.x ビルド時にUnityバグあり - Target Platform : ARM だと Unity バグあり - ARM ではなく、ARM64を推奨 (公式) - ARM を使用したい場合、Graphic Jobs オフ https://twitter.com/deco_c_/status/1296395790835884034
  41. i O S / A n d r o i

    d へ の デ プ ロ イ に つ い て https://docs.microsoft.com/en-us/windows/mixed-reality/mr-learning-asa-05 モバイル端末向け MRTK カメラ設定方法 や 各プラットフォームへのデプロイ方法は一つ前のチュートリアルに記載されてます。 Player Setting の編集 モバイルAR カメラ設定の追加
  42. 実 機 検 証 ( H o l o L

    e n s 2 / i P h o n e X S / P i x e l 3 ) 実際にマルチプラットフォーム、複数端末、1人で動かすことができました。 (感想) 1人で3台操作は腕がしんどいので辞めた方が良い
  43. 04. まとめ チ ュ ー ト リ ア ル を

    実 際 に 試 し て み て
  44. ・PUN ( Photon Unity Network ) を利用することで手軽にシェアリング体験を作ることができる ・モバイル端末は対応デバイスが多い分、精度の差も出やすい? / 若干

    仮想オブジェクト がカクつく?(個人的感想) 所感 注意すべきポイント ・Photon ログ表示の設定 / 使用リージョンの設定について ・Photon は無料枠だと制限がある ( 最大接続数 / メッセージ数など ) ・PhotonView.cs ( チュートリアルは最新版の PUN2 ではないため ) を追加で設定変更する必要がある ・MRTK v2.4.0 + Unity 2019.3 は VS2019 ビルド時に Unity バグ を踏む可能性があるので注意 ・Switch Platform を実行すると Player Settings 設定 が消えるので注意が必要 ・処理内容理解よりもライブラリ関連のバージョン差異の動作確認を行う方が大変な気が ...
  45. 手 順 の 詳 細 は . . . https://qiita.com/Futo_Horio

    詳細の手順は、今後 Qiita にて公開する予定です。
  46. @ F u t o _ H o r i

    o こ れ を 機 に 仲 良 く し て い た だ け る と 嬉 し い で す ! ご 視 聴 い た だ き あ り が と う ご ざ い ま し た T h a n k s