はじめに
HololensのSpectatorViewを試してみたところ、いろいろ引っかかったためメモ
SpectatorViewとは?
Microsoftが提供している。詳しくは以下。
https://docs.microsoft.com/en-us/windows/mixed-reality/spectator-view
https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView
ざっくりいうと、Hololensの「カメラ機能」と「ホログラム作成機能」を別のデバイスに任せることで、高解像度の映像で遅延なくディスプレイに表示する機能。
※いつの間にか「SpectatorView (Preview)」なるものが増えている!?今度やってみよう
実際にやってみる
環境
- Windows10
- Unity 2017.2.0f3 (64-bit)
- Microsoft Visual Studio Community 2017 Version 15.5.3
機材の準備
SpectatorViewをするには以下が必要
- PC
- 映像を出力できるカメラ
- キャプチャボード
- Hololensをがっちり支える冶具
映像を出力できるカメラ
以下を試してみた。
- gopro hero3+
- sony HDR-AS100V
- N3200
※全部うまくいったけど、公式が推薦しているのを使うのが無難だと思う。
キャプチャボード
以下を試してみた
- IO DATA GV-USB3/HD
- Blackmagic Intensity Shuttle USB 3
- Elgato HD 60S
※「Elgato」だけうまくいった
Hololensをがっちり支える冶具
公式にならって(Alternateの方)、Amazonでポチる。全部で4000円ぐらい
PCとHoloLensを開発者モードにしておく
MixedRealityCompanionKitをクローンする
Caliblation
まずは、Calibrationを実施する(Hololensとカメラの位置関係のデータを取得する)
Reedmeの通り進めていく
必要なソフトウェアをダウンロード
- OpenCV3.4.1をダウンロード
Elgatoを使う場合
- Elgato HD 60Sのドライバ
- これをクローン
チェックボードを印刷
以下のチェックボードを印刷し、クリアケースなどに入れる(しっかり平になればOK)
MixedRealityCompanionKit/SpectatorView/Calibration/CalibrationPatterns/2_66_grid_FULL.png
「dependencies.props」を編集
- Calibration用のプロジェクトを開く
MixedRealityCompanionKit/SpectatorView/Calibration/Calibration.sln - 以下の「OpenCV」と「Elgato」のパスを先ほどダウンロードした先にしておく
MixedRealityCompanionKit/SpectatorView/dependencies.props
###「stdafx.h」の変更
MixedRealityCompanionKit/SpectatorView/Calibration/Calibration/stdafx.h
-
HoloLensのカメラをPCから利用するためにデバイスポータルの設定を「HOLOLENS_USER」「HOLOLENS_PW」を自分のものに変更しておく
-
チェスボードの1つの”四角”のサイズ「CHESS_SQUARE_SIZE」を印刷したものにしておく(A3で印刷していればデフォルトで問題ないはず)
チェスボードの”四角”の個数が「GRID_CELLS_X」と「GRID_CELLS_Y」に記載されているものと異なる場合は変更する -
HoloLensをUSBで直接PCに接続していない場合は、「HOLOLENS_ADDRESS」をHoloLensのIPアドレスに変更しておく
「CompositorConstants.h」の変更
MixedRealityCompanionKit/SpectatorView/Compositor/SharedHeaders/CompositorConstants.h
-
カメラから取得する画像が「1080P」でない設定にしている場合は「FRAME_WIDTH」「FRAME_HEIGHT」を修正する
-
FrameProviderのタイプを設定する。
「USE_ELGATO」のみ「TRUE」にして他を「FALSE」にする(Elgatoを使う場合)
カメラの画像出力設定
- goproのHDMI出力サイズを1080にする
- 念のため以下をつないで、Elgatoの「Game Capture HD」で確認
- PC
- Elgato HD 60S
- gopro hero3+
デバイスマネージャーで見たら、ドライバが入っていなかった。。
ドライバをインストールしたら映った
「Calibration」実行する
CalibrationのプロパティでWindows SDKバージョンを変更する
再度実行したが、PC上にgoproの映像が表示されるもののHoloLensのカメラが反応しない。。(HoloLensのカメラで撮影するたびに白く光るはず)
ブラウザでDevice Portal(127.0.0.1:10080)を開いてみたが接続できなかった(USB経由でなくIPだといけた)
Windows SDKの「Windows IP Over USB」が入っていないのが原因だった。
「Windows IP Over USB」をインストールする
再度実行し、チェックボードをいろいろ動かし(HoloLensのカメラはgoproほど広角ではないのでちゃんとおさまるように動かす)、「Enter」を押す
Calibrationが成功すると「ドキュメント/CalibrationFiles」配下に、gproの写真とHoloLensカメラの写真とCalibrationData.txtが保存される。
Conpositer
「CompositorDLL」と「UnityCompositorInterface」をビルドする
MixedRealityCompanionKit/SpectatorView/Compositor/Compositor.sln
「CopyDLL.cmd」をたたく
-
「MixedRealityCompanionKit/SpectatorView/SpectatorViewSample/Assets/」配下にもろもろコピーされる
-
「CalibrationData.txt」は手動でコピーする(前はコピーしてくれたような。。)
SpectatorViewPoseProvider
MixedRealityCompanionKit/SpectatorView/SpectatorViewPoseProvider/SpectatorViewPoseProvider.sln
- ビルドして、HoloLensに展開する(前はSpectatorView用のHoloLensアプリと体験用HoloLensのアプリは一緒だったような。。)
SpectatorViewSample
- 「MixedRealityCompanionKit/SpectatorView/SpectatorViewSample/Assets/test.unity」を開く
- 「SharingToSVAdapter」の「Server IP」にPCのIPアドレス、「Spectator View IP」にHoloLensのIPアドレスを記載する
- ビルドしようとしたらUWPを選択できない。。。
Unity初回起動時のライセンス設定をしていないのが原因だった。
- HoloLens上で「SpectatorViewPoseProvider」を実行させる
- test.unityの「Play」を実行する
- test.unityの「Spectator View」タブの「Compositor」で確認する
- できた!
参考
ありがとうございます。
https://www.naturalsoftware.jp/entry/2017/02/25/184758
http://2vr.jp/2017/07/01/setup-hololens-spectator-view/
http://mtholoblog.hatenablog.com/entry/2017/06/24/184722
他につまづいたこと
キャプチャボード「IO DATA GV-USB3/HD」がうまくいかなかった
公式は特に推奨していないIO DATAさんのものを初め使ってみたが「Calibration」時に1080ではなく、480×640しか出力されなかった。ドライバを古いものにしてみたりしたが改善されなかった。
キャプチャボード「Blackmagic Intensity Shuttle USB 3」がうまくいかなかった
BlackmagicのSDKをインストールしてみたが、カメラの映像を取得することができなかった。。。(引き続き調査)
「Calibration」の「OpenCVFrameProvider.h」のCAMERA_ID
ノートPC内蔵のカメラがCAMERA_ID=0となっていていつまでたってもgoproが認識されなかった。
デバイスマネージャーで内蔵カメラを無効にした
「Calibration」で「Enter」後に「100% Complete」後にエラー
どうしても「100% Complete」後にエラーになっていた。HoloLensかめらにチェックボードが一枚もおさまっていないのが原因だったっぽい