お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2016/04/07 00:00

イベント

[GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

GTC 2016会場のSan Jose McEnery Convention Center
画像集 No.002のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
 NVIDIAが主催するGPU技術関連の学術会議「GPU Technology Conference 2016」(以下,GTC 2016)が,北米時間4月4日から米国カリフォルニア州サンノゼで始まった。
 会期初日の4日には,業界動向を入門者向けに分かりやすく解説するセッションが中心に行われたのだが,本稿ではその中から,NVIDIAの仮想現実(以下,VR)対応ライブラリである「VRWorks」を紹介するセッション「Rendering Faster and Better With NVIDIA VRWorks」(NVIDIA VRWorksでレンダリングを高速かつ高品質に)をレポートしよう。
 講演を担当したのは,NVIDIA副社長のJohn Spitzer氏。プログラマブルシェーダ黎明期から,さまざまなリアルタイムグラフィックス技術開発に貢献してきたことにより,その筋ではよく知られる人物である。

John Spitzer氏(左,Vice President of GameWorks Labs,NVIDIA)とセッションタイトル(右)
画像集 No.003のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート 画像集 No.004のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート


ゲームエンジンやSDKでの採用が広がるVRWorks


VRエコシステムに向けたNVIDIAの取り組み
画像集 No.005のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
 NVIDIAは,VRエコシステムをハードウェアとソフトウェアの両面から支えるべく,さまざまな技術開発や技術支援に取り組んでいる。ハードウェア面の取り組みは,当然ながらVR用途に適する高性能なGPUを提供することであるが,それと対になるソフトウェア面での取り組みが,VRコンテンツ開発者向け支援ライブラリであるVRWorksだ。
 ちなみに,GTC 2015で発表した当時は,「VR Direct」という名称だったが,ゲーム開発向け支援ライブラリである「GameWorks」の一部に取り込まれたことで,一旦は名称が「GameWorks VR」となり,さらにVRWorksへと改名したという経緯がある。

 VRWorksの導入はなかなか好調だそうで,ゲームエンジンでは「Unreal Engine 4」(以下,UE4)と「Unity」のVR対応機能に採用されたり,VR対応型ヘッドマウントディスプレイ(以下,HMD)の「Rift」や「SteamVR」のソフトウェア開発キット(以下,SDK)にも採用されたりしたと,Spitzer氏は述べていた。

ゲームエンジン(左)やVR HMDのSDK(含むドライバ)への採用実績。採用された具体的な機能名も明らかになっているが,詳しくは後段で説明しよう
画像集 No.006のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート 画像集 No.007のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 VRWorksには,さまざまな機能が用意されているが,その多くは,開発者の負担を軽減しながら,高品位なVRコンテンツを実現するためのものだ。Spitzer氏が説明した代表的な機能を順番に見ていこう。

VRWorksの機能一覧
画像集 No.008のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート


VR向けのSLI活用機能「VR SLI」


 まずSpitzer氏が取り上げたのは,「VR SLI」である。改めて説明するまでもないとは思うが,SLIは,複数のGPUを1台のPCに搭載するマルチGPUソリューションだ。
 ごく普通のディスプレイに表示する場合,SLIは2基のGPU(※スライドではGPU0とGPU1)で交互に1フレーム分の描画を行うことで性能向上を狙う「Alternate Frame Rendering」(以下,009)を利用するのが一般的となっている。

AFRによるSLI活用の例
画像集 No.009のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 一方,VRの場合,「3D立体視のケースと同じように」(Spitzer氏)左右の目それぞれ用に映像を描画しなければならないので,遅延低減の観点からすると,GPUの1基は左目用,もう1基のGPUは右目用の映像を専任で描画するのがいいという。この描画割り当てメカニズムのことを,VRWorksではVR SLIと呼んでいるのである。

GPU0とGPU1のそれぞれを左右それぞれの映像描画に割り当てるVR SLI
画像集 No.010のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 約5〜8cm程度とはいえ,左右の目は離れているので,VRコンテンツでは描画すべき映像も左右で若干異なったものになるため,2回分の描画が必須となる。しかし,同じ瞬間のシーンを描画するのだから,視点位置に依存しない影生成用のシャドウマップや物理シミュレーションの結果などは,2基のGPU同士で共通になる。そのため,そうしたシーン共通のリソースは,2基のGPUごとに同じものを用意することになる。

GPUごとに左右それぞれの映像を描くとはいえ,描画対象は同一シーンであるから,シーン共通のリソースは両GPUに転送する
画像集 No.011のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

描画はそれぞれ並行して行う
画像集 No.012のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

GPU0からHMDに映像出力する場合,GPU1でレンダリングした映像をPCI Express経由でGPU0に伝送する必要がある
画像集 No.013のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
 なお,左右の目用に描画したそれぞれの映像は,VR HMD特有の「1フレームに2画面分をまとめた映像」として再構成する必要があるので,それぞれのGPUの描画結果は,PCI Expressバスを経由してどちらか一方(※通常はGPU0)に転送することになるそうだ。


レンズ歪曲を想定した不均一解像度レンダリング手法

Multi-Resolution Shading


 よく知られているとおり,現代のVR HMDでは,GPUは拡大光学系レンズの歪みを吸収するための,いわば「逆歪み」を与えた状態で映像を描画するのが基本となっている。こうした拡大光学系の歪みを作るとき,カメラの場合は複数のレンズを組み合わせて光学的に吸収するのが一般的だ。VR HMDでは,これをGPUによるデジタル画像処理で行う。いまどきのVR HMDが,高価なレンズを必要とした過去のHMDと決定的に異なるのはこの点にある。
 VRWorksに含まれる「Multi-Resolution Shading」(※Multi-Res Shadingとも)は,逆歪みの存在を前提として,描画負荷の最適化を行う機能になる。

拡大光学系レンズの逆歪みを与えた映像を生成(スライド左)することで,レンズを通した見ると正常な映像に見える(スライド右)のが,VR HMDの根幹となるアイデアである
画像集 No.014のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 さて,VR HMDが使っている拡大光学系の接眼レンズは,外周に近くなるほど拡大率が大きくなる特性を持つ。これは,「中央が高解像度」で「外周は相対的に低解像度」である人間の視覚細胞密度とも相性がいい仕組みだ。

 VR HMDの描画システムでは,ある解像度で映像を描画したとしても,その映像に逆歪みを与える処理の段階で,映像の外周が強めに圧縮されてしまう。裏を返せば,「どうせ圧縮されてしまうのであれば,映像の外周は低解像度で描画しても影響は薄い」ということである。Multi-Resolution Shadingは,この原理にもとづいた機能である。

これまでVR HMDでは左側の映像を描画したうえで,画像処理で右側のように変形した映像を作っていた
画像集 No.015のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

中心部と外周部での圧縮率の違いを示したスライド。映像外周(赤枠)は大きく圧縮されているのが分かる
画像集 No.016のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

ジオメトリシェーダで中央と外周で画素密度を変えたレンダリングを行う
画像集 No.019のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
 具体的には,描画する映像フレームを3×3の9領域に分けて,中央の領域は等倍解像度で描画しつつ,外周にあたる8つの領域は,圧縮して描画する。実際にはジオメトリシェーダを活用して,各領域のビューポートに対して,それぞれ異なる圧縮率(※中央領域は圧縮しない)で投影することで行うという仕組みだ。
 UE4のVR対応でも,このMulti-Resolution Shadingが採用されているそうで,UE4のデモコンテンツである「Infiltrator」のVR版や,「EVEREST VR」のデモでは,40%もの性能向上が見られたというから大したものだ(関連リンク)。
 映像外周を圧縮するということは,とどのつまり,外周の描画ピクセル数を大幅に削減できることを意味するので,当然といえば当然ではある。

EVEREST VRの1シーン。Multi-Resolution Shadingにより,40%もの性能向上が見られたとのこと
画像集 No.017のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

今までの方式で描画したものが左,同じシーンをMulti-Resolution Shadingで描画したのが右となる。右の画像で黒い領域は描画しなくていい部分であり,これだけ描画の負荷を減らせるので高速化できるわけだ
画像集 No.018のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 Spitzer氏によれば,Maxwell世代のGeForceではジオメトリシェーダの性能が改善されているので,このテクニックが効果的に使えるとのこと。逆にいえば,それ以前のGeForceでは,ジオメトリシェーダの性能がボトルネックになり,Multi-Resolution Shadingを使ってもそれほど大きな性能向上は見込めないともいえる。

Multi-Resolution Shadingをオフにした状態(上)とオンにした状態(下)の例。オフでは9個の領域が均等なサイズだが,オンでは不揃いになっているのが分かるだろう
画像集 No.020のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート
画像集 No.021のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート


非同期タイムワープに関わる2つの機能も説明


 「Context priority for asynchronous time warp」という長い名前の機能はシンプルであるものの,Spitzer氏が述べるには,かなり利用価値の高い機能であるという。
 すでに知っている人も多いだろうが,VR HMDにおけるタイムワープ(Timewarp)とは,「頭部の動きを取得したセンサーの情報をもとにして,レンダリングした映像を,頭の動きに合うよう位置をずらして描画する」処理のこと。そして,Context priority for asynchronous time warpは,描画中に割り込んでタイムワープを処理するための機能である。

NVIDIA GPUに最適化された非同期のタイムワープ処理をVRWorksで提供する
画像集 No.022のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 次なる「Front Buffer Rendering」は,名前だけでは実体が分かりにくいが,非同期タイムワープ処理の実現に必要な機能だ。
 これは,映像フレームがHMD側に出力されているそばから,表示中のフロントバッファに描画するという機能である。もちろん,この方法ではテアリングが発生してしまうのだが,タイムワープ処理を適用したうえで行うことで,現実的にはあまり目立たない。それよりも,頭部の動きに追従できないことを避ける場合にこの機能を利用することで,遅延を最低限にできるというわけだ。

Front Buffer Renderingは,表示中のフロントバッファに描画してしまうという機能だ。描画更新と表示出力のタイミングがずれることは許されないので,描画負荷の低いVRコンテンツか,十分にGPUが高速である場合にしか使うのは難しいかもしれない
画像集 No.024のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 次に説明された機能は「Direct Mode」というものだ。簡単にいうと,Windowsでデスクトップ描画を担当する「Desktop Window Manager」(DWM)を通さずに,直接HMDに映像を出力する機能のことだ。
 HMDに表示する映像は,1画面に左目と右目の映像を並べたものになるので,Windowsの通知機能や各種常駐アプリによるポップアップウインドウといったものが,片側の映像――Windows 10の通知なら右目側――だけにしか表示されない現象が起こる。Direct Modeを使うことで,こうした表示がHMD側に表示されてしまうのを回避できるのである。

Direct Modeは,DWMを経由せずにHMDへ直接映像出力する機能のこと
画像集 No.023のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート


非ゲーム用途の特殊な事例にも対応するVRWorks


 VRWorksは,GeForceシリーズだけでなく,サーバー&ワークステーション向けGPUであるQuadroシリーズにも対応している。そしてQuadroシリーズを使うVR用途では,HMDを使わない用途なども想定されるという。そこでVRWorksでは,そうしたVR HMD以外のVR活用シーンに向けた機能も用意されているそうだ。

 そうした機能の例としてSpitzer氏が取り上げたのが,「Warp And Blend」というものだ。これは,ドーム型スクリーンのような表示システムに対して,複数台のプロジェクタで映像を投射したときに,映像を歪める処理(※ここではワープと表現)や映像がオーバーラップする部分の合成(ブレンド)処理を提供するものであるという。

Warp And Blend機能は,大きなドームスクリーンに対してVR映像を投影するときに有効な機能だ
画像集 No.025のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 「Synchronization」という機能は,複数の映像出力を使った出力タイミングを同期する機能だ。複数のディスプレイを組み合わせて巨大な1画面を構成する場合や,複数のディスプレイパネルで構成する3D立体視システムなどで有効に使える機能であるという。

Synchronization機能は,1枚のグラフィックスカードにある複数のビデオ出力はもちろん,複数枚のグラフィックスカードに渡っての出力同期が可能とSpitzer氏
画像集 No.026のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 最後の「GPUDirect for Video」は,複数のカメラで構成する360度撮影システムで撮影した360度映像を,GPU内部で同期を取りながら1枚の映像としてつないで(スティッチ),そのまま出力する機能のことだ。360度の映像撮影から,全天全周映像出力までに要するシステムの総遅延時間は「3フレーム以内」(Spitzer氏)だというから,なかなか高速だ。

 撮影から出力まで3フレームの遅延があるというだけで,全天全周の映像自体は一括出力されるので,VR HMDを装着してこの映像を見ても,3フレームの遅延を感じることはない。たとえば,映像に映っている人物と,VR HMDのユーザーが相互に何かをしようとしたとき――たとえば会話とか――に,往復で計6フレーム分の遅延が発生するので,「衛星中継映像における現場とスタジオでのやりとり」にも似た遅れは生じるかもしれないが,6フレーム程度であれば,コンテンツ次第では実害なく利用できそうだ。

GPUDirect for Videoは,主に360度映像のストリーミングや放送で使われることを想定して開発したとSpitzer氏は述べていた
画像集 No.027のサムネイル画像 / [GTC 2016]NVIDIAのVR向けライブラリ「VRWorks」は着実に進化していた。実装済みの多彩な機能が説明されたセッションをレポート

 Spitzer氏による講演の概要は以上である。講演後に行われた質疑応答では,「Multi-Resolution Shadingやタイムワープ処理は,拡大光学系レンズの光学特性(プロファイル)に強く連動したものになるが,現在はどんなHMD用のプロファイルが用意されているのか」という質問があった。これに対してSpitzer氏は,「今のところ,RiftとViveのみ」と回答している。今後,新しいVR HMDやマイナーなVR HMDに関しては,適宜プロファイルを追加していくことになるのだろう。

 2015年に発表されたばかりのVRWorksが,ここまで進化していることには正直驚かされたし,採用事例を増やしてプロフェッショナルな用途にまで適応範囲を広げていることには,感心させられたものだ。VRWorksは,GameWorksの中でも,最も注目を集める開発支援系ライブラリとなっていくのではないだろうか。

VRWorks 公式Webページ(英語)

GTC 2016公式Webサイト

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月22日〜12月23日