Osmo 360を2台使ってVR180動画を撮影する

はじめに

最近はQuest 3などの普及もあり、VRコンテンツが増えてきました。皆さんは「VR180」という形式の動画を体験したことはありますでしょうか。 本当にそこにモノや人がいるみたいな没入感があって面白いですよね。

わたしがこのVR180の動画に感動したのは、2019年のことでした。 当時、初代HTC VIVEを買ったばかりで、色々なコンテンツを漁っていました。その中でYouTubeにアップされていたVR180の3D動画を見て「めちゃくちゃリアルじゃん!」とものすごく感動したのを今でも覚えています。

それ以来いつか自分でもこういう立体的な動画を撮影してみたいなぁと、薄々とおもっていました。

とはいえ、いざ自分で始めようと思って調べてみると、当時は(今もですが)2眼のVR180カメラは需要がかなり少ないらしく、とにかく尖った製品しかありません。プロ用の恐ろしく高価なものだったり、かと思えばコンシューマー向けは生産終了していていたり、あるいは輸入必須だったりと素人が手を出せるような雰囲気ではありません。

そんなこんなでまあ、いつか機会があったらな……と諦めかけていたのですが、2眼カメラではなく普通のカメラを2台つなげて撮るというアプローチがあることを知りました。GoProやミラーレスカメラを並べて固定するリグを自作して撮影している先人たちがいたのです。

これなら自分でもできるかも!と思ったのですが、調べていくと、2台をつなげるアプローチには厄介な問題があることがわかりました。それがIPDの問題と同期の問題、位置調整の問題です。

この記事では、実際にVR180動画を作成するまでをまとめてみました。

なお、最初にお約束として書いておきますが、この記事を見て真似をした結果、「うまくできなかった」「出来上がったVR映像を見ていて気分が悪くなった」「リグでカメラが傷ついた」といったことが起きても、すべて自己責任でお願いします。

また、プロのVRクリエイターの方や詳しい方が見るとツッコミどころも多いアプローチかと思います。あらかじめ、今回技術的な妥協点として、以下の点があることをご了承ください。

  • 専用機のようにセンサーレベルでの同期はできません。

  • 8Kで撮影してはいますが、それは360度全体の解像度です。そこから前方部分をクロップして使うため、専用のVR180カメラに比べると画素数は下がります。

  • 専用の3Dレンズではないため、映像の周辺部などにいくにつれて若干歪みます。

今回は、商用レベルの完璧なVR映像を作ることが目的ではなく、あくまで「コンシューマー機材と3Dプリンターを組み合わせて、DIYでどこまで立体映像を作れるのか」という実験・工作として楽しんでいただければと思います。

まず、今回完成動画がこちらです。

Google Drive

(例えばQuest 3をお持ちなら、PCと繋いでフォルダにこの動画を入れて、ファイルアプリで開いて「VR180 3D」モードにすると立体で見られます)


必要なもの

今回用意したものです。

  1. Osmo 360 × 2台

  2. 3Dプリンター Bambu Lab A1 mini

    2台のカメラを並べて固定するリグを印刷するために使います。

  3. 固定用のネジとワッシャー 東急ハンズのネジ売り場で買ってきた、1/4インチピッチ20山、長さ10mmのネジと平ワッシャーです。

  4. DaVinci Resolve Studio 21(有償版) 左右の映像を読み込んで同期させ、立体動画として編集・書き出しするために使います。


IPDと同期について

なぜ専用のリグを設計してカメラを並べる必要があるのかについて

IPD(瞳孔間距離)

人間が立体感を感じるのは、左右の目が少し離れた位置にあるからです。この瞳と瞳の間の距離を「IPD(Interpupillary Distance)」と言います。人間の平均的なIPDは、だいたい 60mm〜65mm くらいだそうです。

もし、2台のカメラを並べるときに、カメラ本体が大きすぎるとどうなるでしょうか。 レンズの中心と中心の間が、どうしても70mmとか80mm、下手をすると100mm以上離れてしまいます。 この状態で撮影した動画をVRゴーグルで見ると、目の前にある全てのものがミニチュアみたいに小さく見えたりして、スケール感がおかしくなってしまいます。 これを防ぐためには、いかにコンパクトなカメラを使い、レンズの間隔を人間の平均値である60mm〜65mmに近づけるかがものすごく重要になります。

同期

もう一つの問題が、左右のカメラのシャッターを切るタイミングのズレです。 2台の別々のカメラなので、同時に録画ボタンを押したつもりでも、数フレーム分のズレが必ずあります。

動きのある被写体を撮ったとき、このズレた映像をVRゴーグルで見るとVR酔いをすることになります。

プロ用の機材だと、2台のカメラをケーブルで繋いでシャッタータイミングを完全に同期させる機能があるのですが、民生用のアクションカメラにはそんなものはありません。なので、編集時の1フレーム単位の手動調整でなんとかしました。

なお、専用の同期ケーブルを持たない2台のカメラで長時間の撮影を行うと、時間が経つにつれて徐々に左右のフレームがズレていく現象が発生する可能性があります。

これについてはまだ長回しでの詳細な検証ができていないため、今後の検証課題としたいと考えています。現状の安全な対策としては、数分程度の短いカットでこまめに区切って撮影し、編集でそれらをつなぎ合わせるアプローチをとるのが良さそうです。


なぜOsmo 360か

たまたま譲り受けた!

実を言うと、最初から狙ってこのカメラを選んだわけではありません。知人から「360度カメラ余ってるけどいる?」と譲り受けたのがOsmo 360でした。「もう1台買えばVR180が撮れるかも」と思い立ち調べてみるとなんと先駆者が!! これはもう一台買うしかないと思い、追加で購入しました。

横幅が60mmでレンズが中央にある!

Osmo 360の寸法を測ってみると、横幅が約60mmで、レンズがちょうどボディの中央に配置されています。なのでカメラを2台ぴったりと並べるだけでレンズ間の距離(IPD)を簡単に65mm以下に抑えることができます。今回は少し余裕を持たせて、IPDを62mmに設定してリグを作ることにしました。

D-Log Mと8K 50fpsに対応

VR動画は、ゴーグルで引き伸ばして見るので、普通の動画よりも高解像度があると嬉しいです。4Kだとかなり粗く見えてしまうのですが、Osmo 360は最大で8K(50fps)の高解像度で360度映像が撮れます。 さらに、10-bitのD-Log Mに対応しているので、明暗差の激しい屋外でも白飛びや黒潰れを抑えて、後からDaVinciで綺麗に色調整をすることができます。


Blenderでカメラリグを設計する

カメラを固定するためのリグを、3DモデリングソフトのBlenderで設計しました。

stlデータは以下からDLできます

osmo360_rig_sleeve_and_base.stl

osmo360_rig_screw.stl

底面のベースプレートの厚みは5.0mmとかなり肉厚に設計しました。 カメラを差し込むスリーブの高さは12.0mmにしました。あまり高くするとカメラのレンズにリグが映り込んでしまいますし、低すぎると固定が不安定になってしまいます。クリアランスは片側0.2mmに設定しました。

設計時の3Dモデルのプレビューはこんな感じです。


3Dプリンターで印刷して組み立てる

データができたら、さっそく3Dプリンターで印刷します。

本来なら、屋外で使うカメラリグは熱に強いABSやPETGなどの素材で印刷するのが正解です。が、今回はまだ試作段階のテストなので、手持ちのフィラメントの中から、一番使う機会のなかった青色のPLAフィラメントを使うことにしました。 青色のフィラメントって、めったに使わないですよね。こういう試作のタイミングこそ、眠っているフィラメントを有効活用して消費するチャンスです。

印刷設定は、強度を出すためにインフィルはジャイロイドにしました。

刷り上がったリグがこちらです。1時間あれば印刷できます。

カメラ固定には、東急ハンズのネジ売り場で見つけてきた、カメラ三脚と同じ規格の1/4インチピッチ20山 10mmのネジと平ワッシャーを使います。

リグの底面にある穴にネジを通して、カメラの底にある三脚穴にねじ込んで固定します。

これで、見た目はかなり派手ですが、VR用リグの完成です!

裏側のボタンも一応操作できます


撮影

リグが完成したので、実際に外へ撮影に行ってきました。

マニュアル撮影

撮影時は左右のカメラとも以下の設定に固定しました。

  • 動画設定: 8K 50fps、D-Log M
  • ISO感度: ISO 100
  • シャッタースピード: 固定(1/500)
  • 色温度: 4800K固定
  • 撮影モード: 360度撮影モード
  • ビットレート: 高(170Mbps)

360度モード

Osmo 360には片側のレンズだけで撮るシングルレンズモードもあります。データ容量を抑えるためにはそっちのほうが良さそうなのですが、今回はあえて360度モードで丸ごと撮影しています。

というのも、シングルレンズモードにすると、画角が中途半端に狭くなったりしてしまいます。 なので、あえて360度の映像を丸ごと撮影しておいて、後からDaVinci Resolveの編集の中で、前方の必要な180度分を綺麗に切り出すというアプローチをとっています。

注意

  • 撮影したファイルをPCに取り込んだとき、どっちが左目でどっちが右目かが分からなくなると面倒なので、わたしはカメラのボディに白いシールを貼りました。
  • 2台のカメラはシャッターのタイミングが同期していません。録画ボタンを両手で同時にポチッと押したあと、カメラの真正面で手を一回叩きます。この手の動きが、後でDaVinciで映像のタイミングを合わせるための目印になります。
  • 撮影時は水平をとるといいかもしれません。左右のカメラの高さや傾きがズレていると、それだけで3D酔い映像になってしまいます。

DJI Studioでの一次エクスポート

撮影が終わったら、カメラからPCへ動画ファイルをコピーします。

ちなみにPCからみるとこんな感じに見えます

このとき、左用のファイルと右用のファイルがごっちゃにならないよう注意してください。 Osmo 360で撮った動画は、SDカード内では「.OSV」というパノラマ用の特殊な形式になっています。

このOSVファイルをそのままDaVinci Resolveに読み込ませることはできないので、まずはDJI公式の「DJI Studio 」というPC用ソフトを使って、一般的なMP4動画に書き出します。

書き出しの設定はこんな感じです。

  1. DJI StudioにOSVファイルを読み込ませる
  2. エクスポートの設定で、「パノラマ動画」に
  3. 解像度を「8K」、フレームレートを「50fps」、ビットレートを「高」にしてエクスポート

L側とR側のファイルをそれぞれエクスポートして、できた「001_L.mp4」と「001_R.mp4」を次の編集で使います。ファイル名はなんでもいいのですが、分かりやすい名前にしておいたほうが作業が楽です。


DaVinci Resolve Studio 21での編集

書き出した2つのMP4ファイルを使って、いよいよDaVinci Resolve Studio 21で1本の3D立体動画に仕上げていきます。

とりあえず、この書き出したファイルはGoogle Driveに上げておきます(メタデータを残したままffmpegで再エンコード、マスキング、音声削除をしています)

Google Drive

プロジェクトの設定

新規プロジェクトを作ったら、まずはプロジェクトの設定を行います。

  • イマーシブワークフロー: 「標準イマーシブ」にします。
  • タイムライン解像度: 3840 × 3840 片目分の解像度です。最後に書き出すときにサイドバイサイドを選択することで横幅が2倍の7680 × 3840として書き出されます。
  • フレームレート: 50 fps(撮影設定に合わせます)

メディアのインポートとステレオペア作成

エディットページで、メディアプールに「001_L.mp4」と「001_R.mp4」の2つのファイルをインポートします。

次に、この2つを「左目用と右目用のペア」として紐付けます。

  1. メディアプールで、2つのファイルを同時に選択します。
  2. 右クリックして、「ステレオスコピック3D」 > 「001_L.mp4で左目を使う」 をクリックします。 ※これで、DaVinci Resolveが自動的にもう片方のファイルを右目用としてペアリングし、1本の3Dクリップとして扱えるようになります。

ペアリングができたら、その3Dクリップをタイムラインにドラッグ&ドロップして配置します。

タイミング同期

クリップをタイムラインに置いたら、「カラー」ページに移動します。

ビューアの上部にある「3D」アイコンをクリックして有効にし、出力設定を「アナグリフ(カラー)」に変更します。 これで、画面が「赤青メガネ」で見るときのような赤と青が重なった表示になります。

このとき、2台のカメラの録画開始タイミングのズレのせいで、2つの動画のフレームがズレてしまっているはずです。

(撮影時にタブレットでミリ秒を表示していました。)

これを1フレーム単位でピタッと合わせるために、以下のショートカットキーを使います。

  • Ctrl + Alt + .(ピリオド): 右目の映像を1フレーム進める
  • Ctrl + Alt + ,(カンマ): 右目の映像を1フレーム戻す

ビューアを見ながらフレームを調整します

4. コンバージェンスの調整

フレームのタイミングが合ったら、次はコンバージェンスの調整です。 コンバージェンスというのは、左右の目の視線が交わるポイントのことらしいです。

3Dパレットを開いて、コンバージェンスの数値を調整します。 あまりよくわかってない部分もあるのですが、視聴者が自然に目を向けそうな主要な被写体が一番きれいに見える位置を探して、今回は数値を1に調整してみました。ここを調整することで、VRゴーグルで見たときに目が泳いだり、不自然な寄り目になったりするのを防ぐことができるようです。

ステレオアラインメントの自動補正

自作リグを使っているため、どうしてもコンマ数ミリ程度のカメラの高さのズレや、わずかな回転のズレが発生してしまいます。

これを一発で解決してくれるのが、DaVinciのステレオアラインメント機能です。 パレット内にあるステレオアラインメント(縦)のボタンをポチッと押します。 そうすると、ソフトが左右の映像を自動で解析して、高さや回転のズレをミリ単位でスッと補正してくれます。非常に見やすい映像になります。


書き出しと視聴

調整が終わったら、いよいよ書き出しです。デリバーページに移動します。

デリバーの設定

以下の設定を行いました。

  • フォーマット: MP4
  • コーデック: H.265
  • 3D出力フォーマット: サイドバイサイド

「レンダーキューに追加」して、レンダリングを実行します。

Quest 3で観てみる!

書き出しが終わったら、いよいよ視聴です。

  1. Quest 3とPCをMTPモードでUSBケーブルで繋ぎます。
  2. Quest 3のストレージフォルダに、書き出した動画ファイルを放り込みます。
  3. Quest 3を被り、標準のファイルアプリを開きます。
  4. 動画ファイルを選択して再生し、プレイヤーの設定から表示モードを「VR180 3D」に変更します。

わたしの環境(Quest 3)では、ファイルアプリでこの動画を開くだけで、自動的にVR180 3D動画として認識されました!


おわりに

ここまではVR180の話をしてきましたが、実はOsmo 360のポテンシャルをフルに使えば、VR360 3Dとして書き出すことも可能です。

やり方は簡単で、DaVinci Resolveのプロジェクト設定で、タイムライン解像度を「7680 × 3840」のような2:1の解像度にするだけです。

360度カメラを並べている性質上、カメラの真横や後ろ側は映像の繋ぎ合わせがズレやすいため、どうしても3Dとしての精度は落ちてしまいます。ですが、真上方向はかなり綺麗に見えます。

まだまだ改善の余地はあると思うので、もし「もっと良いリグの構造があるよ」「編集のワークフローならこれが楽だよ」といったアドバイスがあれば、SNSなどで教えてもらえると嬉しいです。 この記事が、これからVR撮影を始めてみたいという方の参考になれば幸いです。