More Related Content
More from Akihiro Ueyama (9)
MixedReality250から見るHoloLensとImmersiveヘッドセットの連携
- 15. 自己紹介
• 上山 晃弘
• 株式会社ホロラボ プログラマー
• HoloLensのアプリ開発を仕事と趣味でしてます
• 好きなことしてます
• Twitter : @akihiro01051
• 2016年4月 社会人になる
• 2017年3月 ホロラボに転職
- 16. 目次
• MRの確認
• HoloLensの特徴
• Immersiveヘッドセットの特徴
• 開発したい
• Academyの紹介
• MixedRealityToolkitの紹介
• 連携させたい
• Mixed Reality250の紹介
• 利用技術の説明
• 複数の人に見せたい
• SpectatorViewの紹介
- 22. • つらい点
• 視野角が狭い
• 大きいオブジェクトはつらい
• まぶしい環境では表示物が見えない
• 外がつらい(特に夏)
• 重量がある
• 長時間はつらい
• CPUの性能は非力
• ハイポリモデルはつらい
- 27. • 開発環境
• Windows10 Fall Creatores Update(1709)
• Visual Studio 2017
• Unity 2017.2.0f3
- 29. • Holograms 100
• Unityでの開発方法
• Holograms 101E
• HoloLensエミュレーターでの動作方法
• Holograms 101
• HoloLens実機上での動作方法
- 30. • Holograms 210
• Gaze機能の実装
• Holograms 211
• Gesture機能の実装
• Holograms 212
• 音声認識機能の実装
- 31. • Holograms 220
• 空間音響機能の実装
• Holograms 230
• Spatial mapping機能の実装
• Holograms 240
• Sharing機能の実装
- 32. • Mixed Reality 213(未)
• モーションコントローラーの利用
• Mixed Reality 250
• HoloLensとImmersiveヘッドセットの連携
- 50. • Unityでの利用
• Worldanchor取得
• WorldAnchorStore.GetAsync()よりWorldAnchorStore取得
• 検索
• WorldAnchorStoreのGetAllIds()より登録したAnchorの名前を検索
• 復帰
• WorldAnchorStoreから登録された名前をLoad()
• WorldAnchorがアタッチされたGameObjectの位置が復帰
• 登録
• GameObjectにWorldAnchorをアタッチ
• 名前とアタッチされたWorldAnchorをWorldAnchorStoreにSave()
• 再起動後でも復帰処理でしっかり再設置
- 52. • つらいところ
• 埋まる
• 認識がずれる場合あり
• 例 部屋の対角から起動した場合
• Mixed Reality250の島は3m先
• 部屋はそんなに広くない
- 55. • 原因
• 送信に失敗する
• Anchor周辺の形状情報の変換に失敗
• 受信に失敗する
• 形状情報の復元に失敗
• 各HoloLensが認識している形状が異なる
• 人や物の位置,自分の位置も異なる
• 再設置に失敗する
• 形状の似た全然違う場所に設置されてしまう
- 62. • ただし
• HoloLensのハンドジェスチャー
• 人差し指を立てた状態でないと認識しない
• Immersiveヘッドセットのモーションコントローラー
• 途中で接続を切ってもわからない
• Unity上ではコントローラーはロストしない(HoloLensとは異なる)
• Unity2017.2からnamespaceから大きく変更されている
• 関数名と引数が変更になってた
• UnityEngine.VR.WSA.Input → UnityEngine.XR.WSA.Input
- 64. • UNET
• Unityが提供
• ルーム作成,マッチグ,gameobject共有など多彩な機能を提供
• 外部サーバーを不要にできる
• 通信しているデバイスの一台がサーバーの代わりになる
• マルチプラットフォームで利用可能
- 65. • Sharing Server
• MRTKが提供
• サーバーを必要とする
• SharingService.exeでサーバー起動
• 標準でオブジェクトの位置や音声が共有可能
- 67. • 自前で実装する場合
• HoloLens, Immersiveヘッドセット以外でも動かしたい
• スタンドアロン(.exe),Editor実行とか
• Thread内,Task内で通信したい
• 細かい通信制御をしたい
• C#実装でもUWPは利用できる関数が異なる
- 68. • TCP
• UWP以外
• TcpClientとTcpListnerで実装
• Threadで制御可能
• UWP
• StreamSocketとStreamSocketListenerで実装
• Taskで制御可能
• UDP
• UWP以外
• UdpClientで実装可能
• Threadで制御可能
• UWP
• DatagramSocketで実装可能
• Taskで制御可能
- 70. • HoloLensとImmersiveヘッドセットの切り分け
• Mixed Reality250のskyboxの切り替え
• HoloLensはsolidの黒を適応, Immersiveヘッドセットはskybox適応
• MixedRealityCameraManager.cs 55行目
• HolographicSettings.IsDisplayOpaque
• trueならWindows MRデバイス
• falseならHoloLens
- 72. • UWPとUWP以外の切り分け
• #defineで切り分け
• UNITY_UWP
• UNITY_STANDALONE
• UNITY_EDITOR
• 組み合わせて動作させたい環境にあわせる
#if UNITY_EDITOR
Unity Editorで動作させたい処理
#elif UNITY_STAMDALONE
スタンドアロンビルド時に動作させたい処理
#elif UNITY_UWP
UWPアプリの時に動作させたい処理
#else
それ以外で動作させたい処理
#endif
- 76. • Unity Editor上で動作
• Sharingが必要
• カメラとHoloLensを固定
• カメラとHoloLens相対位置を測定
• カメラの映像をパソコンで取得
• カメラに固定されたHoloLensの位置情報を取得
• 測定されたカメラとHoloLensの相対位置からカメラから見たUnity映像を
作成
• カメラの映像とUnity映像を合成
• https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView
- 77. • つらいところ
• カメラとビデオキャプチャーの相性がある
• キャリブレーションが失敗する
• Unity Editor上でしか動作しない
• HoloLensとwifi接続のためカメラを動かすとUnity映像がずれる
• バージョンが安定しない
• 動作が安定しない
• 公式パッケージではWindows MRデバイスは想定されていない