VR開発メモトップ

Unityでの描画最適化について

最終更新日:2017年01月12日

UnityでHTC Vive、Oculus Rift対応ソフトを開発する際にフレームレートを確保する方法についてまとめています。

更新履歴

(2017年1月12日)シングルパス・ステレオレンダリングについて追記
(2016年9月4日)Oculus RiftのAdaptive Resolutionについて追記
(2016年8月23日)「レンダリング解像度を下げる」を更新
(2016年6月23日)とりあえずページ作成


プロファイラを使用する

Window>ProfilerでUnityのプロファイラを開くと、処理の重い部分を探すことができます。VRではGPUがボトルネックになっている場合が多いので、プロファイラパネルの左上からAdd Profiler>GPUでGPU使用率のペインを開いて確認します。

酔いや、没入感を阻害する原因となるため、VRアプリケーションはフレーム落ちを極力避ける必要があります。プロファイラのグラフにスパイク(負荷が瞬間的に増えること)がある場合は、原因を探して重点的に対策します。経験的には、Asset Storeのアセットのスクリプトには処理負荷が安定しないものが結構あるため(たとえば特定のタイミングで重いテクスチャやメッシュの生成を行うなど)、スパイクを起こすものを使っていないかどうか、早いうちにプロファイラで確認しておいたほうがいいと思います。

レンダリング解像度を下げる

GPUの描画負荷は、描画するピクセル数と、ピクセルあたりのシェーダの複雑さに比例することが多いです。HTC Vive、Oculus Rift、Gear VRでは、パフォーマンスが出ない場合、renderScaleでレンダリング解像度を下げると効果がある場合があります。

UnityEngine.VR.VRSettings.renderScale = 0.5f; // デフォルトは1.0f

また、Oculus Riftでは、Oculus Utilitiesを使うと、GPUの使用率が高くなるとフレーム落ちしないように自動的に解像度を下げるAdaptive Resolutionという機能を使用できます。OVRCameraRigのOVR ManagerにあるEnable Adaptive Resolutionをオンにしてください。

シングルパス・ステレオレンダリング

各メッシュを左右同時にレンダリングしてドローコールを半減させる最適化機能があります。Virtual Reality Supportedを有効にするとその下に出てくるStereo Rendering MethodをSingle Passに変更すると使用できます。

書いた人:こりん(@k0rin
リンク切れや間違いなどございましたらメールやTwitterでご指摘ください。
VR開発メモトップ RSS