イベント
[GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
会期初日の4日には,業界動向を入門者向けに分かりやすく解説するセッションが中心に行われたのだが,本稿ではその中から,NVIDIAの仮想現実(以下,VR)対応ライブラリである「VRWorks」を紹介するセッション「Rendering Faster and Better With NVIDIA VRWorks」(NVIDIA VRWorksでレンダリングを高速かつ高品質に)をレポートしよう。
講演を担当したのは,NVIDIA副社長のJohn Spitzer氏。プログラマブルシェーダ黎明期から,さまざまなリアルタイムグラフィックス技術開発に貢献してきたことにより,その筋ではよく知られる人物である。
ゲームエンジンやSDKでの採用が広がるVRWorks
ちなみに,GTC 2015で発表した当時は,「VR Direct」という名称だったが,ゲーム開発向け支援ライブラリである「GameWorks」の一部に取り込まれたことで,一旦は名称が「GameWorks VR」となり,さらにVRWorksへと改名したという経緯がある。
VRWorksの導入はなかなか好調だそうで,ゲームエンジンでは「Unreal Engine 4」(以下,UE4)と「Unity」のVR対応機能に採用されたり,VR対応型ヘッドマウントディスプレイ(以下,HMD)の「Rift」や「SteamVR」のソフトウェア開発キット(以下,SDK)にも採用されたりしたと,Spitzer氏は述べていた。
VRWorksには,さまざまな機能が用意されているが,その多くは,開発者の負担を軽減しながら,高品位なVRコンテンツを実現するためのものだ。Spitzer氏が説明した代表的な機能を順番に見ていこう。
VR向けのSLI活用機能「VR SLI」
まずSpitzer氏が取り上げたのは,「VR SLI」である。改めて説明するまでもないとは思うが,SLIは,複数のGPUを1台のPCに搭載するマルチGPUソリューションだ。
ごく普通のディスプレイに表示する場合,SLIは2基のGPU(※スライドではGPU0とGPU1)で交互に1フレーム分の描画を行うことで性能向上を狙う「Alternate Frame Rendering」(以下,009)を利用するのが一般的となっている。
一方,VRの場合,「3D立体視のケースと同じように」(Spitzer氏)左右の目それぞれ用に映像を描画しなければならないので,遅延低減の観点からすると,GPUの1基は左目用,もう1基のGPUは右目用の映像を専任で描画するのがいいという。この描画割り当てメカニズムのことを,VRWorksではVR SLIと呼んでいるのである。
約5〜8cm程度とはいえ,左右の目は離れているので,VRコンテンツでは描画すべき映像も左右で若干異なったものになるため,2回分の描画が必須となる。しかし,同じ瞬間のシーンを描画するのだから,視点位置に依存しない影生成用のシャドウマップや物理シミュレーションの結果などは,2基のGPU同士で共通になる。そのため,そうしたシーン共通のリソースは,2基のGPUごとに同じものを用意することになる。
レンズ歪曲を想定した不均一解像度レンダリング手法
Multi-Resolution Shading
よく知られているとおり,現代のVR HMDでは,GPUは拡大光学系レンズの歪みを吸収するための,いわば「逆歪み」を与えた状態で映像を描画するのが基本となっている。こうした拡大光学系の歪みを作るとき,カメラの場合は複数のレンズを組み合わせて光学的に吸収するのが一般的だ。VR HMDでは,これをGPUによるデジタル画像処理で行う。いまどきのVR HMDが,高価なレンズを必要とした過去のHMDと決定的に異なるのはこの点にある。
VRWorksに含まれる「Multi-Resolution Shading」(※Multi-Res Shadingとも)は,逆歪みの存在を前提として,描画負荷の最適化を行う機能になる。
さて,VR HMDが使っている拡大光学系の接眼レンズは,外周に近くなるほど拡大率が大きくなる特性を持つ。これは,「中央が高解像度」で「外周は相対的に低解像度」である人間の視覚細胞密度とも相性がいい仕組みだ。
VR HMDの描画システムでは,ある解像度で映像を描画したとしても,その映像に逆歪みを与える処理の段階で,映像の外周が強めに圧縮されてしまう。裏を返せば,「どうせ圧縮されてしまうのであれば,映像の外周は低解像度で描画しても影響は薄い」ということである。Multi-Resolution Shadingは,この原理にもとづいた機能である。
UE4のVR対応でも,このMulti-Resolution Shadingが採用されているそうで,UE4のデモコンテンツである「Infiltrator」のVR版や,「EVEREST VR」のデモでは,40%もの性能向上が見られたというから大したものだ(関連リンク)。
映像外周を圧縮するということは,とどのつまり,外周の描画ピクセル数を大幅に削減できることを意味するので,当然といえば当然ではある。
Spitzer氏によれば,Maxwell世代のGeForceではジオメトリシェーダの性能が改善されているので,このテクニックが効果的に使えるとのこと。逆にいえば,それ以前のGeForceでは,ジオメトリシェーダの性能がボトルネックになり,Multi-Resolution Shadingを使ってもそれほど大きな性能向上は見込めないともいえる。
非同期タイムワープに関わる2つの機能も説明
「Context priority for asynchronous time warp」という長い名前の機能はシンプルであるものの,Spitzer氏が述べるには,かなり利用価値の高い機能であるという。
すでに知っている人も多いだろうが,VR HMDにおけるタイムワープ(Timewarp)とは,「頭部の動きを取得したセンサーの情報をもとにして,レンダリングした映像を,頭の動きに合うよう位置をずらして描画する」処理のこと。そして,Context priority for asynchronous time warpは,描画中に割り込んでタイムワープを処理するための機能である。
次なる「Front Buffer Rendering」は,名前だけでは実体が分かりにくいが,非同期タイムワープ処理の実現に必要な機能だ。
これは,映像フレームがHMD側に出力されているそばから,表示中のフロントバッファに描画するという機能である。もちろん,この方法ではテアリングが発生してしまうのだが,タイムワープ処理を適用したうえで行うことで,現実的にはあまり目立たない。それよりも,頭部の動きに追従できないことを避ける場合にこの機能を利用することで,遅延を最低限にできるというわけだ。
次に説明された機能は「Direct Mode」というものだ。簡単にいうと,Windowsでデスクトップ描画を担当する「Desktop Window Manager」(DWM)を通さずに,直接HMDに映像を出力する機能のことだ。
HMDに表示する映像は,1画面に左目と右目の映像を並べたものになるので,Windowsの通知機能や各種常駐アプリによるポップアップウインドウといったものが,片側の映像――Windows 10の通知なら右目側――だけにしか表示されない現象が起こる。Direct Modeを使うことで,こうした表示がHMD側に表示されてしまうのを回避できるのである。
非ゲーム用途の特殊な事例にも対応するVRWorks
VRWorksは,GeForceシリーズだけでなく,サーバー&ワークステーション向けGPUであるQuadroシリーズにも対応している。そしてQuadroシリーズを使うVR用途では,HMDを使わない用途なども想定されるという。そこでVRWorksでは,そうしたVR HMD以外のVR活用シーンに向けた機能も用意されているそうだ。
そうした機能の例としてSpitzer氏が取り上げたのが,「Warp And Blend」というものだ。これは,ドーム型スクリーンのような表示システムに対して,複数台のプロジェクタで映像を投射したときに,映像を歪める処理(※ここではワープと表現)や映像がオーバーラップする部分の合成(ブレンド)処理を提供するものであるという。
「Synchronization」という機能は,複数の映像出力を使った出力タイミングを同期する機能だ。複数のディスプレイを組み合わせて巨大な1画面を構成する場合や,複数のディスプレイパネルで構成する3D立体視システムなどで有効に使える機能であるという。
最後の「GPUDirect for Video」は,複数のカメラで構成する360度撮影システムで撮影した360度映像を,GPU内部で同期を取りながら1枚の映像としてつないで(スティッチ),そのまま出力する機能のことだ。360度の映像撮影から,全天全周映像出力までに要するシステムの総遅延時間は「3フレーム以内」(Spitzer氏)だというから,なかなか高速だ。
撮影から出力まで3フレームの遅延があるというだけで,全天全周の映像自体は一括出力されるので,VR HMDを装着してこの映像を見ても,3フレームの遅延を感じることはない。たとえば,映像に映っている人物と,VR HMDのユーザーが相互に何かをしようとしたとき――たとえば会話とか――に,往復で計6フレーム分の遅延が発生するので,「衛星中継映像における現場とスタジオでのやりとり」にも似た遅れは生じるかもしれないが,6フレーム程度であれば,コンテンツ次第では実害なく利用できそうだ。
Spitzer氏による講演の概要は以上である。講演後に行われた質疑応答では,「Multi-Resolution Shadingやタイムワープ処理は,拡大光学系レンズの光学特性(プロファイル)に強く連動したものになるが,現在はどんなHMD用のプロファイルが用意されているのか」という質問があった。これに対してSpitzer氏は,「今のところ,RiftとViveのみ」と回答している。今後,新しいVR HMDやマイナーなVR HMDに関しては,適宜プロファイルを追加していくことになるのだろう。
2015年に発表されたばかりのVRWorksが,ここまで進化していることには正直驚かされたし,採用事例を増やしてプロフェッショナルな用途にまで適応範囲を広げていることには,感心させられたものだ。VRWorksは,GameWorksの中でも,最も注目を集める開発支援系ライブラリとなっていくのではないだろうか。
VRWorks 公式Webページ(英語)
GTC 2016公式Webサイト
- この記事のURL: