UnityのSingle Pass Stereo Renderingについて
Unity 5.4で新しくSingle Pass Stereo Renderingという機能が追加されました。Unity 5.5.0現在、Player SettingsのOther Settings内Stereo Rendering Methodで有効化することができます。
何をやってくれるのか
通常、VRでは両眼視差のある映像を表示するために片目のカメラごとに描画処理が行われます。以下はMulti Passに設定した場合にFrame Debuggerを使用してレンダリング途中の画面をキャプチャしたものになります。
Multi Pass描画中
Multi Pass描画後
見事に左目の映像のみが表示され、この後右目の描画処理をもう一度ゼロから始めて最後に左右繋ぎ合わせるのが従来のMulti Pass Stereo Renderingとなります。
ではSingle Pass Stereo Renderingを有効にした場合はどうなるでしょうか。Single Pass(単一パス)という名前通り、
両目の描画を一度に行ってくれます。
Single Pass描画中
Single Pass描画後
Single Pass Stereo Renderingのメリット
画質を向上させる
今回サンプルで使ったガンナーオブドラグーンは元々のレベルデザイン時点で描画が重いオブジェクトを減らしているため元々パフォーマンスについては問題はありませんが、Single Pass Stereo Renderingを有効にすることで非VR Ready PCであるGTX 980Mノートにてポストエフェクトを多用し敵を十数体同時に出現させた際にも90fpsを維持することができています。
ポストエフェクトをオフにした場合はSingle Pass Stereo Rendering無しでもfpsを稼げますが違いは一目瞭然ということが分かると思います。Single Pass Stereo Renderingで軽くなった分、よりオブジェクトを増やしたり、シェーダを複雑化したり、ポストエフェクトに割くコストを増やすといった事が可能になります。
動作環境を広げる
UnityによるプレゼンではSingle Pass Stereo Renderingによってメインスレッド7ms、レンダースレッド11msの処理が4.0/7.3msに削減されたと言われています。2つの処理を1つにまとめて描画処理の時間が約33%減というと少ない気がしますが、PC業界で最も有名なGPUベンチマークである3DMarkにおいて例えばGTX970とGTX960の差はおよそ33%です。
Oculus Rift・HTC ViveといったPC HMDの問題は推奨動作PCの価格が高すぎる事ですが、Single Pass Stereo Renderingと従来のUnityグラフィックス最適化を合わせて行うと1ランク下のGPUでも動かす事が十分可能になります。
Single Pass Stereo Renderingのデメリット
描画バグ
Single Pass Stereo Renderingは本来片目ごとに行う描画処理を1度に省略して行う技術なので、対応していないポストエフェクトを使用すると画面が崩壊します。
以下は旧来のBloomエフェクトをSingle Pass Stereo Renderingで使用した際の画像です。
Graphics.Blitを使ったエフェクトの場合はこのように画面が二重に描画されてしまいます。(HMDの中も二重に表示されます)
これは非対応エフェクトが重なるごとに増えていくので、非対応エフェクトを数えるのには逆に楽です。
逆に現状ではこれ以外のデメリットはまず確認できません。
Unity5.4リリースから時間が経ちAsset StoreのポストエフェクトにもSingle Pass Stereo Rendering対応のものが増えつつありますし、UnityのSingle Pass Stereo Renderingと併用して高品質なBloomやDoFなどを使いたい場合はGitHubのUnity公式リポジトリであるPost Processing Stackを使用するのがおすすめです。
まとめ
UnityのSingle Pass Stereo Renderingはまだ制約もありますが効果は非常に高くボタン1つでパフォーマンスが向上する素晴らしい機能です。ぜひ活用してUnityで軽快に動くVRアプリケーションを作りましょう。