VR映像をストリーミングする新しいテクニックについて【OC2講演解説】
現在、YouTubeのOculusチャンネルでは、2015年の9月23〜25日に開催された開発者向けイベント「Oculus Connect 2」の各講演が視聴できる。
しかし、個々の講演は30分から1時間ほどあり、忙しいVR開発者にとってはなかなか聴く機会がないと思う。そこで、開発者の皆様に役立ちそうな講演をピックアップし、その概要をお届けするのが本連載の狙いだ。
第一回目は、初日の講演「Making Great VR: Lessons Learned from I Expect You To Die」の概要をお届けした。第二回目の本稿では、同じく初日の講演「New Techniques for Streaming VR Video」をまとめている。
講演者であるFacebookのソフトウェアエンジニア、デイビッド・ピオ(David Pio)氏は、とにかくビデオ映像が大好きで、最近のVRビデオに携わる前から様々な映像技術に関係してきたとのこと。
今回は、360度映像をストリーミング配信する際の課題について、高解像度とビットレートの確保と定義し、いくつかの解決方針を提案していた。技術的な話が続くため、まずは講演で提示されていた解決方針の全体像を整理しよう。
このように、講演では3つの観点の検証結果が述べられており、最も効果がありそうなのは、【3】の(2)を工夫することのようだった。以下、【1】〜【3】について順に見ていく。
【1】Compression(圧縮)
360度映像のストリーミングを実現するためには、少なくとも30Mbpsの伝送速度が必要だが、一般的な家庭用無線LANは5Mbps程度である。そのため、約6倍のギャップを埋めるべく技術検討が必要だ。
また、360度映像をより精彩に表現する必要もある。その方法として、10bitカラーの利用を提案していた。現在、ディスプレーの再現色はRGBの各色につき8bit、2の24(=8×3)乗で1677万色というのが一般的だが、10bitでは同様の計算により10億6433万色という色で再現ができる。ただし、10bit色に対応したデコーダ(ディスプレーも含むと思われる)はまだ少ないため、将来的に普及するまで待つ必要がある。
講演者によると、10bit色に対応したディスプレー実験した結果、50〜60%のビットレート削減に成功したという(理由については言及されていなかった)。
また、そもそものデータ容量を圧縮する方法もある。例えば、H.264、BPC、BP9のような圧縮技術は優れた方法で、これらを使う事で30〜40%のビットレート削減を実現してくれるが、一方でストリーミングが難しくなる程度に圧縮時間がかかるという問題もある。この圧縮時間は将来的にCPU処理の性能向上によって解決する可能性があるものの、現状ではそのまま使うのは難しい。
【2】Warping(歪み)
warpとは「歪み」や「反らす」という意味である。360度映像を撮影し、ストリーミングする際は、何らかの形でいったんデータを展開しておく必要がある。その手法は下記のようにいくつかある。
講演では、「Equirectangular Projection」(正距円筒図法)という手法を取り上げて解説していた。地球儀と正距円筒図法で描かれた世界地図の関係に似ていて、360度動画を画面比が2:1の長方形に展開することになる。パノラマ撮影手法では一般的だが、上下が大きく引き延ばされてしまうという欠点がある。日本語で読めるパノラマ投影法の情報については、写真道場のページが詳しい。
【3】Viewport(表示領域)
Viewportの正式な訳は不明だが、講演の文脈から判断すると「表示領域」が合う。下記のように、360度映像の中でプレーヤーが見えている範囲のことである。
講演者は、360度映像のストリーミングにおいては、プレーヤーが見ていない範囲(Viewportの範囲外)は不要であり、視野範囲外の画質を下げる方針を取ったとのこと。
プレーヤーがあまりに左右を見回すことが増えると、Viewport内の映像は上のようにぶれてしまうが、その代わり、プレーヤーが見回す程度の範囲は高画質にする方針を取った。
ストリーミング環境下において、プレーヤーが別の向きを見たらすぐに違う映像を表示させる方法は2つある。1つめはReal Time Transcoding。まず、サーバーがHMDに視野に該当する映像の一部を送信し、次にHMDは現在見ている視野をサーバーに戻す。サーバーは受け取った視野情報を元にトランスコードし、HMDに送信する。これを常に繰り返すことで、HMDにはトランスコードされた最新の映像が表示されるようになるが、多数のリソースが必要なのであまり現実的ではない。
2つ目は、Predeterming Offlineである。この方法ではプレーヤーの視野範囲の映像データをストリーミングで取得し、HMD側でデコードする。今の視野範囲をそのまま取得するか、別の視野範囲を取得するか、を1秒毎に予測する必要がある。理想は、その予測がうまくいって、プレーヤーが意識せずに映像が視聴できることである。
より技術的な話になるが、毎秒のデータ取得の考え方も紹介されていた。本稿では長くなるため割愛するが、興味ある方は講演の18:30付近を視聴いただきたい。
サーバーへのリクエストから始まり、1 chunkのデータ取得までが時系列で示されている。
Predeterming Offlineを実現させるには、プレーヤーの視界範囲外の映像データをどう扱うかを考える必要がある。これには2つの方針がある。
(1)Blurred Viewport
プレーヤーの視界と関係ない範囲をぼかす方法である。ぼかしているとデータの圧縮率が高くなるうえ、プレーヤーが動いてViewportが変化したとき、ストリーミング遅延で発生するぼけを隠すこともできる。
(2)Spatial Subsampling
下記のように、プレーヤーの視界範囲は高解像度、範囲外は低解像度とする方法である。
講演者が色々調べた結果、最もきれいな360度映像を視聴するには、ピラミッドの面に映像があって、その内部にプレーヤーの視界があるような映像をつくることだった。
この方法では、Spatial Subsamplingの考え方を使い、ピラミッド底面(プレーヤの視界)は高解像度にして、側面から頂点に進むに従って解像度を下げる。
最後に、低いネットワーク伝送速度で360度映像のストリーミングを実現するには色々な課題があること、それはコミュニティのみんなで協力して解決することができるだろう、と述べて講演は終わった。
元々映像系に詳しくないので、圧縮方法、低ビットレートで低遅延ストリーミングを実現の工夫などが細かく解説されているのは大変参考になった。なお、本稿に盛り込めなかった技術的説明も多い。講演スライドにはほとんど情報がないため、実際にYouTubeの講演を聴くしかないが、興味あればぜひ参照いただきたい。
(文/Takayuki Fujiwara、藤原貴之)
●関連記事
・Making Great VR:「I Expect You To Die」制作から学んだこと【OC2講演解説】
●関連リンク
・
・Oculus Connect 2: New Techniques for Streaming VR Video
・Oculus Connect 2