ZED miniでAR動画を撮影する
ステレオカメラのZED miniを使ってAR動画を撮影する手順をメモ。バーチャルな映像とリアルの映像を混ぜつつリアルの寝室にボールをぶちまける映像が撮れた。
ZED miniについて
Stereolabsが販売しているステレオカメラ。HMDに取り付ければStereo pass-through機能で現実世界が立体視できる。
他にも現実世界を3DスキャンするSpatial mapping機能や、映像からカメラ位置姿勢を推定するInside-out tracking機能、深度推定によるOcclusion機能とか色々ある。とりあえず公式動画。
VR機器2台も用いて卓球とはなんとも贅沢である。
できた映像
こんな感じ。
動作環境
追記(2020/5/10)
下記環境でも同様の設定で動きました。微妙にパラメータの名称が記事中のスクショと異なりますが見ればすぐわかる程度の違いでほぼ変わりないです。
- Unity 2018.4.20f1
- ZED SDK v3.1.2
- ZED Plugin v3.1.0
ZED miniの3Dモデル
今回の記事では使わなくてもいいけど、ZED miniを何かしらに取り付けたいときはここに公開されてる3Dモデルが役に立つ。例えばトラッカーやコントローラに固定するマウンタを作ってみたり、ロボットに載せてみたり。なぜかQ&Aコーナーにしか載ってないので少し不便。
作成手順
セットアップ
下記のサイトからZED SDKをインストールする。
Unity向けのPluginは下記のサイトに公開されているのでパッケージをインポート。
HMDを使う際はOculus Rift CV1とHTC VIVEに対応しているのでそれぞれのPluginをAsset storeからインポートしておく。
HMDへのZED miniの取り付け方は下記のサイトで説明されている。付属のガイドに合わせてカメラホルダーを粘着テープで貼り付ける方式。
テープが強力でHMDとカメラホルダーの付け外しがしんどいので、僕は貼り付け前に頑張って剥がして違うテープにした。ZED miniを使わないときもカメラホルダーが邪魔に感じない人は付属のテープで問題ないと思う。
Camera prefabの追加
Asset/ZED/Prefabs
にZED_Rig_Stereo
とZED_Rig_Mono
がある。HMDによる立体視(Stereo pass-through)をする際はStereoの方を、そうでない場合はMonoをHierarchieに追加する。
今回はZED_Rig_Stereo
を追加した。もうこれだけで実行するとカメラが起動してカメラ映像が見れるし、Occlusionもされる。親切。
- 公式ドキュメント
カメラ設定
ZED_Rig_Stereo
にZED Manager
がアタッチされており、カメラ映像に関する設定がいろいろできる。
さらに下にあるOpen Camera Control
をクリックするとウィンドウが開き、ホワイトバランスや彩度等が設定できる。
カメラ位置の設定
ZED miniは単体でもPosition trackingができるけど、OculusやVIVEデバイスとの位置関係は分かっていない。例えばTrackerの位置に3Dオブジェクトを表示させても、ZED miniの映像と3Dオブジェクトの位置がずれてしまう。 そのためControllerやTrackerにZED miniを固定し、どのデバイスに固定したのか設定する必要がある。今回はHMDに取り付ける設定をする。
ZED_Rig_Stereo
にZED Controller Tracker
をアタッチし、Device To Track
の項目にHMD
を設定する。
また、Latency Compensation
によって、映像とデバイス位置の遅延を調整することができる。
ZED_Rig_Stereo
の子オブジェクトであるCamera_eyes
にZED Offset Controller
をアタッチする。これでZED miniのPosition trackingとHMDのPosition trackingが一致するようになる。
公式ドキュメント
追記(2020/5/10)
厳密にどのバージョン以降か確認できてませんが、ZED Plugin v3.1.0ではこの方法が使えなかったので上記のドキュメントを見てください。
Controller, Trackerの設定
ControllerやTrackerの位置に合わせたオブジェクトを表示したい場合はカメラと同様、オブジェクトにZED Controller Tracker
をアタッチする。
- 公式ドキュメント
Spatial mapping
Spatial mapping機能を用いて現実の床や壁、家具などのオブジェクトとバーチャルなオブジェクトの衝突判定を行うことができる。ZED_Rig_Stereo
の子オブジェクトにAssets/ZED/Examples/SpatialMapping/Prefabs
のZED_Spatial_Mapping
を追加する。
実行時にZED Spatial Mapping Manager
のStart Spatial Mapping
ボタンを押すことでSpatial mappingが始まり、Stop Spatial Mapping
を押してSpatial mappingを終了することができる。
- 公式ドキュメント