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 公 式 チ ュ ー ト リ ア ル 徹 底 解 説
堀 尾 風 仁 株 式 会 社 神 戸 デ ジ タ ル ・ ラ ボ 新 事 業 創 造 係 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 ) ※ 本 日 の 資 料 、 発 表 内 容 に 誤 り を 見 つ け ら れ た 場 合 は ご 指 摘 い た だ け ま す と 幸 い で す 。
な ぜ 今 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
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 )
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 )
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 ) と呼ばれる機能で提供しています。
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 = 錨 (いかり)
W o r l d A n c h o r は ア プ リ を 起 動 し た 際 に 生 成 さ れ て い る オフィスや自宅などで開いたアプリケーションウィンドウが後日同じ場所に残っている経験ないですか? ローカルディスクに保持された World Anchor 情報は永続的に保存されたままになる。
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 (空間メッシュ) が更新され、 ウィンドウの表示に異常が起こった場合など アンカーの削除が可能です。
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
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 利用時の注意点 ] ・特徴点の少ない部屋では精度が低い ・家具配置が変更される場所では利用不可 [ 対策 ] ・ポスターやモノを置くことで 特徴点を増やすことができる 空間に配置された仮想オブジェクト
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 用に変換
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
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 (空間位置合わせ) のみに使用される
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を同期
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 で管理
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 で管理 ユーザー作成、ルーム作成 (入室)
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 で管理 オブジェクトの生成、同期 この時点で、オブジェクトの同期のみ (※位置は同じでない)
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生成 (共有)
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を元にアンカー情報取得、位置合わせ オブジェクトが同じ位置に表示され、同期されている状態
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 が 無効化されているので有効化する
[ 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
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
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
C u s t o m P a c k a g e の イ ン ポ ー ト ( 本 チ ュ ー ト リ ア ル 向 け に 既 に 用 意 さ れ た も の ) この段階で CS0246 : The type or namespace name ‘Photon’ .. というエラーが表示されます。 このエラーは後で PUN2 – 無料 ( Unity Assets ) をインポートすることで解消できるので、このまま続行してください。
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 をインストール
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 ... 」ボタンを押下し、 新規アカウント作成ページへ移動します。 ( ※ アカウント作成手順 省略 )
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 ) アプリケーション を作成していきます。
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 プルダウンメニュー
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
U n i t y シ ー ン の 編 集 ( P r e f a b 追 加 、 P U N 設 定 e t c . . ) インポートした Custom Package 内に含まれる Prefab, コンポーネントを追加し、シーンを作成していきます。 Photon への接続関連 ASA 関連の処理 ログ管理 ( 表示 ) 上図 : チュートリアル手順を全て終えた後のヒエラルキー画面
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
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 カメラ設定の追加