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 ) ※ 本 日 の 資 料 、 発 表 内 容 に 誤 り を 見 つ け ら れ た 場 合 は ご 指 摘 い た だ け ま す と 幸 い で す 。
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
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 )
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 )
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 = 錨 (いかり)
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 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 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 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 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 (空間位置合わせ) のみに使用される
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を同期
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 で管理
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 で管理 ユーザー作成、ルーム作成 (入室)
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 で管理 オブジェクトの生成、同期 この時点で、オブジェクトの同期のみ (※位置は同じでない)
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生成 (共有)
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を元にアンカー情報取得、位置合わせ オブジェクトが同じ位置に表示され、同期されている状態
編 集 - 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 が 無効化されているので有効化する
: 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
編 集 - 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
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 をインストール
U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 Photon サインインページへアクセスし、アカウントを作成していきます。 https://dashboard.photonengine.com/en-US/account/signin 「Create One ... 」ボタンを押下し、 新規アカウント作成ページへ移動します。 ( ※ アカウント作成手順 省略 )
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 ) アプリケーション を作成していきます。
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 プルダウンメニュー
U n i t y N e t w o r k ) ア カ ウ ン ト 準 備 Photon PUN アプリケーション の新規作成が完了すると、ダッシュボードに追加されます。 ※ App ID を使って、PUN アプリケーション に 接続するのでメモしておいてください。 https://dashboard.photonengine.com/en-US/publiccloud
集 ( P r e f a b 追 加 、 P U N 設 定 e t c . . ) インポートした Custom Package 内に含まれる Prefab, コンポーネントを追加し、シーンを作成していきます。 Photon への接続関連 ASA 関連の処理 ログ管理 ( 表示 ) 上図 : チュートリアル手順を全て終えた後のヒエラルキー画面