Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MixedReality250から見るHoloLensとImmersiveヘッドセットの連携

1,543 views

Published on

仙台IT文化祭(2017/10/29)で登壇した時の資料です
http://2017.sendaiitfes.org/

Published in: Technology
  • Be the first to comment

MixedReality250から見るHoloLensとImmersiveヘッドセットの連携

  1. 1. Academy250から見る HoloLensとWindowsMR デバイスの連携 上山 晃弘 (株式会社ホロラボ)
  2. 2. Academy250から見る HoloLensとWindowsMR デバイスの連携 上山 晃弘 (株式会社ホロラボ)
  3. 3. Academy250から見る HoloLensとWindowsMR デバイスの連携 上山 晃弘 (株式会社ホロラボ) Mixed Reality Immersiveヘッドセット
  4. 4. 自己紹介 • 上山 晃弘 • 株式会社ホロラボ プログラマー • HoloLensのアプリ開発を仕事と趣味でしてます • 好きなことしてます • Twitter : @akihiro01051 • 2016年4月 社会人になる • 2017年3月 ホロラボに転職
  5. 5. 目次 • MRの確認 • HoloLensの特徴 • Immersiveヘッドセットの特徴 • 開発したい • Academyの紹介 • MixedRealityToolkitの紹介 • 連携させたい • Mixed Reality250の紹介 • 利用技術の説明 • 複数の人に見せたい • SpectatorViewの紹介
  6. 6. MixedReality(MR)の確認 • MRの定義 • Virtual Reality(VR) : 没入型体験 • Augmented Reality(AR) : 拡張型体験 • Mixed Reality(MR) : VR,ARを含めた新しい現実体験
  7. 7. • HoloLensとWindows MRデバイスの位置 • https://developer.microsoft.com/en-us/windows/mixed-reality/mixed_reality
  8. 8. HoloLensとImmersiveヘッドセットの確認
  9. 9. HoloLensの特徴 • シースルー表示 • 透けて見える • スタンドアロン動作 • どこまでも動ける • ジェスチャーを認識 • 頭にかぶるだけ • SpatialMapping利用 • オクルージョンできる
  10. 10. 現実世界とリンクさせた体験が面白い
  11. 11. • つらい点 • 視野角が狭い • 大きいオブジェクトはつらい • まぶしい環境では表示物が見えない • 外がつらい(特に夏) • 重量がある • 長時間はつらい • CPUの性能は非力 • ハイポリモデルはつらい
  12. 12. Immersiveヘッドセットの特徴 • インサイドアウト型 • 外部カメラ不要 • モーションコントローラー付属 • 良いとこ取り • EdgeのWebVR機能に対応 • ブラウザからすぐに体験 • つなげば動く • USBとHDMIだけで楽
  13. 13. 手軽に現実空間と切り離された体験が面白い
  14. 14. • いまいちな点 • デバイスのみではビデオシースルーできない • 別途カメラがあればできるかも • Spatialmapping利用不可 • 外の障害物が見えない • 酔いやすい(コンテンツによる) • 酔いやすい(コンテンツによる)
  15. 15. コンテンツを作りたいけど作り方がわからない
  16. 16. • 開発環境 • Windows10 Fall Creatores Update(1709) • Visual Studio 2017 • Unity 2017.2.0f3
  17. 17. Academy https://developer.microsoft.com/ja- jp/windows/mixed-reality/academy
  18. 18. • Holograms 100 • Unityでの開発方法 • Holograms 101E • HoloLensエミュレーターでの動作方法 • Holograms 101 • HoloLens実機上での動作方法
  19. 19. • Holograms 210 • Gaze機能の実装 • Holograms 211 • Gesture機能の実装 • Holograms 212 • 音声認識機能の実装
  20. 20. • Holograms 220 • 空間音響機能の実装 • Holograms 230 • Spatial mapping機能の実装 • Holograms 240 • Sharing機能の実装
  21. 21. • Mixed Reality 213(未) • モーションコントローラーの利用 • Mixed Reality 250 • HoloLensとImmersiveヘッドセットの連携
  22. 22. MixedRealityToolkitの紹介 • HoloLensとImmersiveヘッドセットの開発をサポート • https://github.com/Microsoft/MixedRealityToolkit-Unity
  23. 23. • HoloLens,Immersiveヘッドセットで利用できる機能 Input Sharing Spatial Sound UX Controls Utilities Build
  24. 24. • HoloLensのみ利用可能 Spatial Mapping Spatial Understanding • Immersiveヘッドセットのみ利用可能 Boundary • AcademyでもMRTKを利用
  25. 25. HoloLensとImmersiveヘッドセットを 連携させたコンテンツを作りたい
  26. 26. Mixed Reality250の紹介 • HoloLensとImmersiveヘッドセットを連携 • https://developer.microsoft.com/en-us/windows/mixed-reality/mixed_reality_250
  27. 27. • Chapter1-5に沿ってオブジェクトを配置すれば完成
  28. 28. • Immersiveヘッドセットがプレイヤー • HoloLensは俯瞰視点で観察 • プレイヤーは発射場まで移動 • 扉のロックを開いてシャトルを発射
  29. 29. Mixed Reality250で利用された機能を知りたい
  30. 30. • Spatialmapping • WorldAnchor • Input • Sharing • デバイス切り分け • Log出力
  31. 31. Spatialmapping
  32. 32. • HoloLensが認識した現実世界の形状をUnityで取得 • MRTKから手軽に利用可能 • 現実世界の障害物に3Dモデルが遮られる表現が可能
  33. 33. • Unityで利用 • MRTKのSpatialmappingで簡単に利用可能 • SpatialMappingManager.cs • 取得開始 • StartObserver() • 停止 • StopObserver()
  34. 34. • つらいところ • 自動でColliderが挿入される • 壁の向こう側のオブジェクトに触れない
  35. 35. Spatialmappingに当たり判定つけたくない
  36. 36. • SpatialmappingにColliderをつけない方法 • MRTKのSpatialMappingから • SpatialMappingSource.cs 116行目の後に • surfaceObject.Collider.enabled = falseでColliderを無効化する • ただし • Mixed Reality250にはsurfaceObject.Colliderは無いです
  37. 37. • HoloLensが周囲の形状(Spatialmapping)からオブジェクトの位 置を補正する機能 • ホーム画面のウィンドもWorldAnchor利用 WorldAnchor
  38. 38. • デバイスポータルから確認可能
  39. 39. • Unityでの利用 • Worldanchor取得 • WorldAnchorStore.GetAsync()よりWorldAnchorStore取得 • 検索 • WorldAnchorStoreのGetAllIds()より登録したAnchorの名前を検索 • 復帰 • WorldAnchorStoreから登録された名前をLoad() • WorldAnchorがアタッチされたGameObjectの位置が復帰 • 登録 • GameObjectにWorldAnchorをアタッチ • 名前とアタッチされたWorldAnchorをWorldAnchorStoreにSave() • 再起動後でも復帰処理でしっかり再設置
  40. 40. • 移動 • 一旦WorldAnchorStoreから対象の名前をDelete() • 移動後に再度登録を行う • 削除 • WorldAnchorStoreから対象の名前をDelete() • すべてのWorldAnchorを削除する場合はWorldAnchorStoreをClear()
  41. 41. • つらいところ • 埋まる • 認識がずれる場合あり • 例 部屋の対角から起動した場合 • Mixed Reality250の島は3m先 • 部屋はそんなに広くない
  42. 42. • Sharing時のWorldAnchor位置合わせ • Worldanchor設置時の情報を他のHoloLensに共有 • Anchor周辺の形状情報 • 受信したHoloLensは受信情報と自分の形状情報から再設置を行 う • 一番近い形状情報の位置に設置
  43. 43. うまくいかない
  44. 44. • 原因 • 送信に失敗する • Anchor周辺の形状情報の変換に失敗 • 受信に失敗する • 形状情報の復元に失敗 • 各HoloLensが認識している形状が異なる • 人や物の位置,自分の位置も異なる • 再設置に失敗する • 形状の似た全然違う場所に設置されてしまう
  45. 45. 簡単に位置合わせしたい
  46. 46. • 位置共有には画像認識がいい • Vuforiaのマーカー認識 • 位置,方向が取得可能 • Unity 2017.2から標準で利用可能 • マルチプラットフォーム対応 • 各HoloLensが固定されたマーカーを認識 • マーカーを基準点として共有オブジェクトを配置 • 基準点からの相対位置の共有で位置合わせができる
  47. 47. Input • HoloLensはハンドジェスチャー • ImmersiveヘッドセットはXboxコントローラーのボタン
  48. 48. もっと細かくInputを取りたい
  49. 49. 実は • HoloLensのハンドジェスチャー • ハンドトラッキングできる • AirTapの認識が可能 • 両手もいける • Immersiveヘッドセットのモーションコントローラー • コントローラーのポジショントラッキングもできる • もちろん両手も • ボタン入力も取得可能 • Unityでの利用 • 共通関数で利用可能
  50. 50. • InteractionManagerに各イベントを登録することで取得可能 • InteractionSourceDetected • 手の認識開始すると呼ばれる • InteractionSourceUpdated • 手を認識していると呼ばれる • InteractionSourceLost • 手をロストすると呼ばれる • InteractionSourcePressed • AirTap (ボタン押下)すると呼ばれる • InteractionSourceReleased • AirTap (ボタン押下)をやめると呼ばれる
  51. 51. • ただし • HoloLensのハンドジェスチャー • 人差し指を立てた状態でないと認識しない • Immersiveヘッドセットのモーションコントローラー • 途中で接続を切ってもわからない • Unity上ではコントローラーはロストしない(HoloLensとは異なる) • Unity2017.2からnamespaceから大きく変更されている • 関数名と引数が変更になってた • UnityEngine.VR.WSA.Input → UnityEngine.XR.WSA.Input
  52. 52. Sharing • MRTKではUNETとSharingServerを利用 • Mixed Reality250ではUNETを利用 • 各デバイスの位置とアクションの共有を行っている
  53. 53. • UNET • Unityが提供 • ルーム作成,マッチグ,gameobject共有など多彩な機能を提供 • 外部サーバーを不要にできる • 通信しているデバイスの一台がサーバーの代わりになる • マルチプラットフォームで利用可能
  54. 54. • Sharing Server • MRTKが提供 • サーバーを必要とする • SharingService.exeでサーバー起動 • 標準でオブジェクトの位置や音声が共有可能
  55. 55. 自前で実装したい
  56. 56. • 自前で実装する場合 • HoloLens, Immersiveヘッドセット以外でも動かしたい • スタンドアロン(.exe),Editor実行とか • Thread内,Task内で通信したい • 細かい通信制御をしたい • C#実装でもUWPは利用できる関数が異なる
  57. 57. • TCP • UWP以外 • TcpClientとTcpListnerで実装 • Threadで制御可能 • UWP • StreamSocketとStreamSocketListenerで実装 • Taskで制御可能 • UDP • UWP以外 • UdpClientで実装可能 • Threadで制御可能 • UWP • DatagramSocketで実装可能 • Taskで制御可能
  58. 58. デバイスの切り分け • UWPではtaskが使える • Unity5.x系ではtaskが使えない • UnityのBuildSettingからPlatformをUWPにするとMixedReality ポータルが立ち上がってしまう • Editor上で手軽に確認したい • Editor上で動作してUWP上で動作しない関数がある • UWP上で動作してEditor上で動作しない関数がある
  59. 59. • HoloLensとImmersiveヘッドセットの切り分け • Mixed Reality250のskyboxの切り替え • HoloLensはsolidの黒を適応, Immersiveヘッドセットはskybox適応 • MixedRealityCameraManager.cs 55行目 • HolographicSettings.IsDisplayOpaque • trueならWindows MRデバイス • falseならHoloLens
  60. 60. スタンドアロンでも動かしたい
  61. 61. • UWPとUWP以外の切り分け • #defineで切り分け • UNITY_UWP • UNITY_STANDALONE • UNITY_EDITOR • 組み合わせて動作させたい環境にあわせる #if UNITY_EDITOR Unity Editorで動作させたい処理 #elif UNITY_STAMDALONE スタンドアロンビルド時に動作させたい処理 #elif UNITY_UWP UWPアプリの時に動作させたい処理 #else それ以外で動作させたい処理 #endif
  62. 62. Logを確認したい • Unity内でのlogの取得 • BasicSharingStatus.cs 28行目 • Application.logMessageReceivedThreaded • 関数登録でlogイベントを受け取る • 取得できる引数は • string Message : ログの文字列 • string stack : スタックトレース • LogType logType : ログのタイプ(errorとかwarning)
  63. 63. 複数の人にMixed Realityを見せたい
  64. 64. SpectatorView • HoloLensと連携することで第三者に表示物を共有 • 高品質のカメラをパソコンと接続し映像を合成 • https://developer.microsoft.com/ja-jp/windows/mixed-reality/spectator_view
  65. 65. • Unity Editor上で動作 • Sharingが必要 • カメラとHoloLensを固定 • カメラとHoloLens相対位置を測定 • カメラの映像をパソコンで取得 • カメラに固定されたHoloLensの位置情報を取得 • 測定されたカメラとHoloLensの相対位置からカメラから見たUnity映像を 作成 • カメラの映像とUnity映像を合成 • https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView
  66. 66. • つらいところ • カメラとビデオキャプチャーの相性がある • キャリブレーションが失敗する • Unity Editor上でしか動作しない • HoloLensとwifi接続のためカメラを動かすとUnity映像がずれる • バージョンが安定しない • 動作が安定しない • 公式パッケージではWindows MRデバイスは想定されていない
  67. 67. まとめ • HoloLens, Immersiveヘッドセットの開発はAcademyで確認 • Mixed Reality250でデバイス連携を手軽に確認できる • デバイスの連携には複数の技術を組み合わせる必要がある • MRTKは便利

×