VR Watch
VR向けパノラマ動画とは? Unityで動画プレイヤーを実装するには?
「VRコンテンツ開発ガイド 2017」試し読み/その4
2017年6月5日 11:41
株式会社エムディエヌコーポレーションから発売中の書籍「VRコンテンツ開発ガイド 2017」。数回にわたって、本書の中身を少しだけ紹介していきます。
今回はizm氏によるChapter 4「VR用パノラマ動画のUnity実装」のさわりを紹介します。
izm(フォージビジョン株式会社 VR事業部 リードエンジニア )
愛知の製造業の会社でR&Dエンジニアとして勤務しながら、趣味のVRコンテンツ開発を数年行う。2016年1月よりVRに関われる現職のフォージビジョン株式会社に転職。現在はOculus Rift、HTC Vive、PlayStation VR向けVRコンテンツ開発を主業務としている。座間味ロケットジャンプをはじめとして、パノラマ動画コンテンツを複数手がけている。
技術全般ブログ:http://izm-11.hatenablog.com/
Twitter:http://twitter.com/izm
VR動画のご相談、お問い合わせはこちらからも:http://www.forgevision.com/
パノラマ動画の概要
最近は、Youtubeも対応したことで目にする機会が増えたパノラマ動画とはどんなものか、通常の動画との差異と共通点を説明していきます。
全天周パノラマとは
全天周パノラマ(以下、パノラマ)は、フレーミングしない、周囲をそのまま撮影する画像です。撮影地点から全周(前後左右上下)すべての風景をカメラを通して取得します。たまに勘違いをされることもありますがデータは2次元に落とし込まれるため、遮蔽物の向こうにある情報は記録されません。その点については普通のカメラと同様です。
古くから静止画のパノラマ写真は愛好家の間で使われてきました。そして近年では、記録デバイスとして、安価な民生品で静止画だけでなく動画も記録できるカメラが登場しています。再生デバイスでは、パノラマ写真や動画を直感的に鑑賞できるジャイロセンサが搭載されたHMD、スマートフォンの登場も相まって非常に盛り上がっています。
意図せず偶然映り込んだ周囲の風景などを数年たって見返したときに楽しいですし、場の空気を丸ごと切り取ることができるので、筆者もパノラマ撮影は大好きです。
本章ではパノラマ動画について、以下の順番で一通り解説していきます。
- パノラマ動画を用意します。
- Unityでパノラマ動画再生用メディアプレイヤーアプリを作成します。
- パソコンとモバイルの両HMD向けに出力します。
パノラマ動画の例
現在、もっとも多くのパノラマ動画を見ることができるのはYouTubeだと思います (2015年3月よりパソコンのブラウザで、パノラマ動画をマウスドラッグで見回す機能が追加されました)。
お手持ちのブラウザでYouTubeにアクセスして「360」と検索すると、さまざまな愛好家の動画を鑑賞することができます。日常の風景から空撮、水中撮影までいろいろなものがあります。
また、Android上のYouTubeでは、端末を傾ける(ジャイロセンサを使用する)ことで、動画をグリグリと見回すことができます。
【RICOH THETA S】360 Experience
URL●https://www.youtube.com/watch?v=Mnf15KwPV-Q
上で紹介したようなパノラマ動画が一体どういうデータ形式でつくられているか、中身をのぞいてみましょう。
下記のURLからRICOH THETAの動画サンプルをダウンロードして、お手持ちのメディアプレイヤーで再生すると、なんだかグニャグニャした横長の動画が再生されたかと思います。また、動画ファイルのメタ情報を見てみると、MPEG-4 H264の解像度1920×960、30fpsとなっています。縦横比は珍しいものの、いたって普通の動画ファイルであることが確認できます。
RICOH THETAの動画サンプル
URL●https://theta360.com/ja/gallery/videos.html
この横長のグニャグニャした方式をequiangularといいます。つまり、パノラマ動画自体は普通の動画としてつくればよく、種と仕掛けはこのグニャグニャした歪ませ方にあります。地球を平面に切り開いた世界地図にも、メルカトル図法やモルワイデ図法などいくつかの図法があるように、全天周パノラマにもいくつかの歪ませる方法があります。原理上はサイコロの展開図でも問題ありませんが、動画ファイルとして扱うときに未使用のピクセルが大量に出てしまうため、効率のよい展開方法として、このequiangular方式が今日では広く用いられています。
パノラマ動画を準備する
実際にパノラマ動画をつくってみましょう。大きく分けると、パノラマ動画は実写でつくる方法とCGでつくる方法があります。この節ではそれぞれの場合の作成方法を説明します。また、Unity上での再生に合わせた動画エンコードについてもふれます。
実写でのパノラマ動画作成
数年前(2014年くらい)までは、パノラマ動画を撮影するというのは、特殊なリグを組んで最初の機材代が数十万円からという世界でした。しかし、前節でふれたように最近では数万円で買える、パノラマ動画が撮影できるカメラも出ています。
もちろん高解像度や、きれいな画質を求める場合は現在でも各種リグと複数のカメラの組み合わせ、専用の商用スティッチソフトを使う必要がありますが、4k30fps程度の普通のパノラマ動画であれば、カメラを買うだけでスティッチまで自動で行ってくれるものが多いです。
主要なパノラマ動画撮影可能カメラ(2017年3月現在)
比較的安価なもの
RICOH THETA S (RICOH THETA SC) …1920×960 30fps 13mbps
Insta nano…3040×1520 30fps 13mbps
Gear 360…3840×920 30fps 32Mbps
Nikon keymission 360…3840×1920 24fps 76mbps
Kodak SP360 4K2個セット…3840×1920 50mbps
以下は商用スティッチソフトなどが必要なので10万円オーバー
GoPro 6台リグ
レンズ交換式カメラ+180度以上の魚眼レンズ2台など
Insta 360 Pro
車一台分(数百万円)
いくつかありますが、本章では解説しません(筆者も持っていないので……)。
この中で、おすすめなものを紹介します。iPhone 6以降のiOSユーザであればInsta nanoが、Galaxy s6以降のユーザであればGear 360が値段あたりの画質がよく、スティッチもきれいです(スティッチング:複数のレンズで撮影された画像や動画の合わせ目をきれいにつなぐこと)。
汎用的なものだと、Keymission360かTHETA Sがおすすめです。画質だけで選ぶのであれば、10万円以下ではSP360 4Kの2個セットが最高なのですが、カメラが2個必要かどうかというのは取り回し面で非常に大きな差が出てきます。個人的にはRICOHの光学系およびスティッチアルゴリズムが上記の中ではもっとも信頼性が高く、破綻も少ないので、もしTHETA Sの後継となる機種で、4K動画が撮影できるものが出た場合は、それをおすすめします。
CGでのパノラマ動画作成
CGでつくったシーンをパノラマ動画に落とし込む利点は、「シーンが重くてもよい」「モバイル端末でハイエンドなCGによるVRっぽい体験を手軽に実現できる」ことです。つくり方を知っておくと便利です。
Blenderの場合
Blenderなら以下のサイトを参考にしてください。
BlenderでVR動画(360°ステレオ動画)をつくる方法(YouTube版も対応)
URL●http://mrsoramame.jpn.org/archives/164
Unityの場合
Unityなら「360 Panorama Capture」というアセットが無料で、ステレオパノラマにも対応しています。
360 Panorama Capture
URL●https://www.assetstore.unity3d.com/jp/#!/content/38755
パノラマ動画の書き出しは、Unityの一部イメージエフェクトとの相性が悪いです。BloomやDoFエフェクトが設定済みのシーンを書き出したときに、見た目が破綻している場合は、該当イメージエフェクトを無効化してください。
360 Panorama Captureを使ったUnityシーンから連番画像書き出し
360 Panorama Captureのアセットは、初期設定ではキーボードのPキーを押すことで録画が開始されますが、シーン再生開始と同時に録画を始めて、特定フレームで終了するためには、CapturePanorama.csの30行目くらいに[ソース1]の変数を追加して、インスペクタ上からCapture keyを「Keycode.NONE;」に変更します。そして159行目の「void Start()」関数の末尾に[ソース2]を追加します。さらにUnityのインスペクタ上のMaxFrameToRecordに記録したいフレーム数を入れてUnityエディタを実行します。例えば、30fpsで60秒であれば1800を入力しておきます。
ソース1
[Tooltip("先頭フレームからキャプチャするか")]
public bool CaptureFromAwake = false;
#CapturePanorama.csの30行目、変数定義部に追加。
ソース2
if (CaptureFromAwake == true)
{
StartCaptureEveryFrame();
}
#CapturePanorama.csの159行目、「void Start()」関数の末尾に追加。
注意すべき点としてキャプチャには時間とディスク容量が必要です。4分のシーンを30fpsで録画するなら静止画像7200枚が必要になります。4Kステレオで20枚/分で生成するとしても6時間の時間が必要で、ディスク容量も数十GB単位で消費します。
詳しい解説は下のWebサイトにもあります。
VRTest 2015年全天球パノラマ動画メモ
URL●http://wakasoftware.blogspot.jp/2015/12/2015.html
パノラマ動画の編集
文字を入れたVFXを追加するなど、あと付けで編集する場合は、After EffectsとAfter Effects用のパノラマ動画編集プラグインであるSkyBox Studioを使うことが多いです。
簡単な編集であればSkyBox Studio以外のほかの動画編集ソフト(例:VideoStudio)でも大丈夫です。ただし、パノラマ動画への対応を明言していない動画編集ソフトでは、テロップ文字を入れるだけでもパノラマ動画特有のequiangularの歪みを受けるため、SkyBox StudioやAutoPanoシリーズなど、専用ソフトの使用をおすすめします。
動画エンコードソフト FFmpegについて
本書では、以降の動画のエンコード、連番画像の結合、音声と動画の結合などについて、FFmpegというソフトを多用してます。FFmpegはコマンドラインベースで動くマルチプラットフォーム対応の動画変換ソフトウェアです。非常に多くのファイル形式に対応しており、下のように多様な操作をコマンドラインで行うことができます。今回は「ffmpeg 3.2.2」を使用しています。
※「https://ffmpeg.zeranoe.com/builds/」 内の ffmpeg-3.2-win64-static.zip を使用しています。
- 指定したフォーマットで動画をエンコードする。
- 連番画像ファイルから動画ファイルをつくる。
- 動画ファイルから音声部分だけを抜き出す。
- 動画ファイルから連番画像を抜き出す
(特定フレームのみの抜き出しも可能)。 - 動画ファイルから特定時間のみを切り出した動画を作成する。
コマンドラインのソフトウェアなので取っ付きにくいかもしれませんが、とても便利なので是非挑戦してみてください。FFmpegのオプションの詳細や各コーデック、コンテナについての説明は多岐にわたるため省略します。以降のFFmpegのコマンド例で出てくるオプションでわからない点があれば検索してみてください。
この先の内容は?
このあとは、引き続きFFmpegの詳しい使用方法を解説。さらにお待ちかね、Unityを用いたパノラマ動画プレイヤーアプリの具体的な作成方法について、実際のソースコードを交えて紹介しています。
本書の詳細情報はこちら