ニュース

Valve、Unity用のVR最適化レンダリングプラグインを近日提供

関連セッションで明かされた描画高速化&自動品質制御の技術

3月14日~18日開催



会場:San Francisco Moscone Convention Center

Valve、Alex Vlachos氏。昨年に続いての講演

 サンフランシスコで開催中のGDC 2016にて現地時間3月17日、Valveが開発中のUnity用VRレンダリングプラグインの存在が明らかになった。本プラグインはUnity Asset Storeを通じ、全ソースコード込みで近日中に無料配布が行われる見込みだ。

 これに関した講演を行なったのは、ValveのソフトウェアエンジニアAlex Vlachos氏。昨年のGDCでは「Advanced VR Rendering」というセッションを行なったVlachos氏は、今回はその続編として「Advanced VR Rendering Performance」と題し、VRレンダリングのパフォーマンスを向上させる様々な取り組みと、その成果をUnityプラグインの形で実装した経緯を語った。

最適化でPC性能を絞り出し、より幅広い環境にVRを広げるプラグイン

Unity用VRレンダリングプラグインの概要

 本公演、「Advanced VR Rendering Performance」にて Vlachos氏は、VR映像のレンダリングを最適化する手法についての研究成果を披露し、そこで培われた機能がUnity向けのVRレンダリングプラグインに実装されていることを明らかにした。

 そもそもValve対象としてUnityを選んだのは、「9割にのぼるVRコンテンツがUnityで開発されており、UnityでのVR開発を支援することで、効果的に幅広いクリエイターの役に立てると考えた」とValchos氏。Valve謹製の最適化技術をUnityユーザーに利用してもらうことで、OpenVR(SteamVR)対応コンテンツを増やしていきたい考えもあるだろう。

 そういった経緯で、Valveが開発しSteamで無料配信される予定の最新VR体験コンテンツ「The Labs」もUnityで開発されたという。今回明らかにされたUnity用プラグインはその「The Labs」の副産物でもある。Unityのほうがユーザーが多いからと、自社エンジンSource 2をあっさり捨てるあたり、非常に現実主義な印象だ。

 さて、このUnity用VRレンダリングプラグインで提供される最大の機能は、実行時の動作パフォーマンスに応じて自動的な品質制御を行なえるようになることだ。2月に公開されたSteamVR Performance Testでは、ターゲットマシンの性能に応じて描画品質が制御され、低性能のマシンでも90fps以上を絶対死守しようとする機能が搭載されているが、それと全く同じ制御を、Unity製のVRコンテンツでも可能にする。

品質制御の例。カメラに複雑なオブジェクトが捉えられているときと、シンプルなオブジェクトしか見えていないときに異なるクオリティレベルに自動調整されている

自動品質制御で90fpsを死守。余裕があればより高品質に描画

クオリティレベルと調整内容の例
本機能で調整できる項目

 この自動品質制御機能は、レンダリングプラグインによるGPU実行時間の監視と、描画品質の調整を段階的に行える仕組みの提供によって実現されている。

 アプリケーションは前フレームの描画に要したGPU時間をチェックし、それが1フレームあたりに使える時間(11.11ミリ秒)の90%以上だったか、以下であったかによって次に描画するフレームのクオリティレベルを調整する。描画に80%のパワーしかかからなかったならクオリティを1段階上げて、90%を超えてくるようであれば1段階下げる、という塩梅だ。

 こうすることで、マシンパワーに余裕がある場合はクオリティレベルが上がっていき、通常よりも綺麗な画質での描画が引き出される。マシンパワーが不足している場合は、90fpsの維持が優先される。この調整がフレームごとに行なわれれるというのがキモだ。力不足なマシン環境でも、軽いシーンであれば高品質の描画が得られる。

 ここでいう「クオリティレベル」によって調整される項目は、今回披露された例によると次のような構成だ。

【描画解像度(0.65~1.4倍)】
マシンパワーに余裕が上げれば描画解像度を上げ、より緻密な映像を出力する。
余裕が無い場合は次第に描画解像度を下げていく。

【アンチエイリアシングレベル】
デフォルトではMSAA 4x。余裕があればこれを8xまで引き上げる。

【描画ピクセルの削減機能ON/OFF(Fixed Foveated Rendering)】
描画解像度を減らしても余裕がない場合、後述するアルゴリズムを用いて周辺視野部分の解像度をさらに1/2に減らす。

【リプロジェクションのON/OFF】
何をしても90fpsが維持できない場合は、固定45fps・90Hzリプロジェクションの動作を強制するフラグを立てる。フレームレートが不安定化するよりは快適で見やすい映像が得られる。

GPUの処理時間はOpenVRソフトウェア側で計測される。最後に描画したフレーム、つまり少し過去のデータとなるため、実際には過去2フレーム分の処理時間をブレンドして基準にすることが推奨されている

Fixed Foveated Rendering

Fixed Foveated Rendering
Radial Density Masking
フィルターをかけてなめらかに穴埋めを行なう

 GPUパワー不足で90fpsが維持できない場合に、最後の砦となるのがこの機能、Fixed Foveated Rendering(固定中心窩適応レンダリング)だ。

 これは、早い話が視線中央のみ高解像度で描くFoveated Rendering処理を、アイトラッキングがないので固定で行なうというもの。このVRレンダリングプラグインでは、その技法としてVlachos氏が「Radial Density Masking」と呼ぶアルゴリズムが実装されている。

 この方法では、複数解像度を描画するためにレンダリングパスを複数回走らせるようなことはせず、周辺視野部分に2×2のマスクパターンを配置して、描画ピクセル数を半減させる。これによって生じる2x2の黒い穴は、高品位なポストフィルターで埋めつつ、なめらかな映像を出力する。

 この方法で「Aperture Robot Repair」デモでは最大15%のパフォーマンス向上が見られたという。また、この効果はローエンドのGPUであるほど大きいとのこと。推奨スペックのPCでなくても、VRをそれなりの品質で楽しめる可能性が広がる。実際に本公演では、自動品質制御によって90fpsが確保できる最低限のGPUとしてGeForce GTX 680が例として挙げられていた。

 このようなValveインハウスの最適化技術が全てのUnity製VRアプリに開放されるというのは、VRゲームのユーザーにとっても大歓迎だ。推奨スペックに満たないPCでもそれなりの動作を得られ、推奨スペックを超えるPCであればより良い画質を自動的に得られるため、全てのユーザーが何らかの恩恵を受けられることになるからだ。

(佐藤カフジ)