佐藤カフジのVR GAMING TODAY!

連載第3回

VRパフォーマンスを大幅に引き上げるGPU技術
NVIDIA「GameWorks VR」とは?

【著者:佐藤カフジ】(GDC 2015にて)

 非常に高いマシンスペックが必要とされるPC向けVR。大本命のOculus Riftの製品版ではGeForce GTX 970あるいはRadeon R9 290以上という、ハイスペックで高価なGPUが推奨されることも明らかになっている。しかし今、コンシューマーVRの実現に向けて開発が進められているのはVRヘッドセットだけではない。

 現在ではOSや、グラフィックスAPIをはじめ、GPUテクノロジーのレベルでもVR向けの最適化が進行しており、Oculus RiftやSteamVRの発売時点ではぐっと必要スペックが下がってくる可能性があるのだ。今回はGPUによるVR支援をテーマに、NVIDIAのソリューションをご紹介しよう。

NVIDIAのVR支援SDK「GameWorks VR」

NVIDIAのVR支援技術「GameWorksVR」

 VRは次世代のゲームシーンの中核を成す存在になる可能性がある。それだけに、動作環境のハードウェアを開発する企業も──つまり、NVIDIAとAMDのことだが──も、VR向けの開発にはとても熱心だ。AMDはGCNアーキテクチャのRadeonシリーズを活かしてVRを最適化する「LiquidVR」テクノロジーを開発し、NVIDIAではMaxwellアーキテクチャのGeForceシリーズを活用する「GameWorks VR」を開発している。

 さて、今回取り上げるNVIDIAによる「GameWorks VR」は、以前は「VR Direct」と呼ばれていたVR支援SDKだ。6月1日に発表されたGeForce GTX 980 Tiについての最新プレゼンテーションでは「VR Direct」という名称はどこにも使われず、「GameWorks VR」という名称に統一されていたため、今後こちらの名称が正式になると見られる。

 3月のGDCで初披露されたNVIDIAのVR支援機能は、大別して3つのVR最適化機能を持っている。


1.表示遅延の最小化
 HMDに直接映像を出力する「Direct Mode」、フロントバッファを直接表示する「Front Buffer Rendering」、レンズ歪みの補正や後読みされたヘッドトラッキングデータに基づく映像のタイムワープ処理を出力直前のベストタイミングで行なえることを保証する「Context Priority」といった機能を通じ、入力→表示の遅延をアプリレベル&ドライバレベルで最小化する。

2.VR向けSLI駆動モード
 「VR SLI」と呼ばれる機能。2-way SLI実装時の環境で、2つのGPUで別々のフレームを描画するのではなく、1フレーム内のステレオ映像を2つのGPUで描画するようになる駆動モードをサポート。これによりSLI駆動時の描画遅延を最小化しつつ、最大の描画パフォーマンスを実現する。GPU3枚、4枚といった環境でどのような動作になるかは今のところ不明。

3. 描画の最適化
 「Multi-Res Shading」機能で、VR映像の描画面積を最小化する。


MaxwellアーキテクチャのGPUでサポートされる「Multi-Res Shading」機能

 このうち、1.と2.の部分は、AMDの「LiquidVR」でもよく似た機能が実現されている。特にGCNアーキテクチャを搭載するAMDのGPUは複数タスクの並列処理を得意としているため、非同期のタイムワープ処理についてはAMD側に分があるかもしれないが、NVIDIA側がその不利を一気に覆すことになりそうなのが3.の部分だ。

 GeForce GTX 980 Tiの発表に合わせて紹介された「Multi-Res Shading」は、こちらの記事でも簡単にご紹介したとおり、VR映像の描画面積を効果的に節約する技術だ。具体的には、レンズ補正である程度潰れてしまう画面端の部分を予め低い解像度で描画することで、映像品質を下げずに描画パフォーマンスを向上させるというものだ。これを効率的に実現するため、Maxwellアーキテクチャ独自の「multi-projection」機能(複数のレンダリングターゲットに1パスで描画する機能)を活用している。

Multi-Res Shadingの仕組み
VRではレンズの歪みを通して正しい映像が得られるように描画する必要がある
GPUでは歪んだ映像を直接描画できず、最初は平面上に描く必要があるが、その際、画面端付近は無駄に大きな解像度で描画されてしまう
そこで、描画領域を複数のビューポートに分割し、歪み補正で潰れてしまう部分を低い解像度で描画する
MaxwellアーキテクチャのGPUは、複数のビューポートに対する描画を1パスで実行できる

Multi-res Shading技術は、アイトラッキング技術とセットで大革命になる予感

Multi-res Shadingデモの様子

 実際の所、Multi-res Shadingの効果は非常に大きい。

 筆者はNVIDIAのオフィス内で、Crescent Bayを使った「Multi-Res Shading」の技術デモを実際に見ることができた。そこでの設定ではオフスクリーン解像度2,720×1,670となっているところ、画面端をシュリンクすることで実際の描画解像度を1,930×1,150まで低減。ピクセル数はほぼ半減、GPUのピクセルシェーダーに与える負荷も半減、という大きな違いを生み出していた。

 映像品質の問題もない。レンズ補正の段階でもともと潰れてしまう部分だけを低解像度で描画するという手法のため、見た目上は全く違いがわからないのだ。よくよく目を凝らすと、視界端付近に継ぎ目らしき部分がなんとなく見えるような気がする場合もあるが、重箱の角を全力でつつく勢いであら捜しをしないと全くわからないレベルだ。

デモ中の画面。上が内部バッファの様子で、画面端付近は低い解像度を引き延ばしている、下がレンズ補正を加えた出力映像。右側には内部バッファを等倍で表示した様子が出力されている
デモ中の統計情報。1,930×1,150という、フルHDとほぼ変わらない程度の解像度で描画し、2,720×1,670というVR向けの高解像度に引き伸ばしている。面積比ではほぼ半分の大幅な節約。そのぶんGPU負荷も下がる

アイトラッキング機能を搭載したVRヘッドセット「FOVE」

 必要となるGPUパワーがおよそ半分となり、映像品質は変わらずとなれば、Oculus Rift製品版を1段階下のGPUであるGTX 960あたりでも充分快適に動かせる可能性が出てくる。これは大きな違いだ。

 それだけでもスゴイことだが、さらにこの技術を、日本発のVRヘッドセット「FOVE」に搭載されているような、アイトラッキング技術と組み合わせれば、その効果は絶大となるはずだ。

 FOVEのアイトラッキング技術と、それを活用した描画の最適化技術「Foveated Rendering」については連載第2回でご紹介したが、その中で、「GPUからの支援がなければなかなか効率的に実装することが難しい」と述べた。そして、今回ご紹介している「Multi-Res Shading」は、そのものズバリのGPU支援機能なのである。

 「Multi-Res Shading」は、上述の技術デモのように既に実装されている範囲では、レンズ歪みで潰れる部分だけを低解像度で描くという、保守的な実装となっている。しかしこれに、アイトラッキング技術で注視点を検出し、よりピンポイントでの解像度制御が可能となれば……5倍、10倍の効率化も夢ではない。

 そこまでの最適化が可能となれば、VRゲームは、従来の2Dモニターに出力するゲームよりも低いGPU負荷で動作させることが可能となり、結果的に、従来以上にシェーダーヘビーでリッチな映像を出せるようになるかもしれない。それこそ、本物と見分けがつかないような映像だ。従来のハードウェアで!

 もちろん、これに似たアイディアはOculus RiftやSteamVRといったVRヘッドセット開発企業によっても実現に向かっているには違いない。例えば、Oculus Riftの最新SDKでは、これと同等の処理が可能なAPI機能が追加されていたりする。それ以外の進化も含め、VRヘッドセット開発勢の最新SDK機能についてはまた回を改めてご紹介と分析をしてみたい。

FOVEの実効性能を大幅に広げる可能性を持つ「Foveated Rendering」技術。Maxwellの「Multi-Res Shading」と組み合わせればその効果は絶大に?