Oculus Rift / Gear VR 向け Unity 最適化メモ

Oculus Rift / Gear VR 向け Unity 最適化メモ
Unity 5.1 以降を使用し、かつ VR レンダリングを使用
Oculus SDK に比べて、シャドウマップの生成やカリング等、カメラふたつ分の処理が1回で行われるため、
その分処理が高速化されています。
ただし、カメラに対する機能のみなので、OVRGamepad や OVRMenu などは使えません。
Oculus SDK を使用する場合は、Unity 5.0.2 でないとうまく動作しない場合があります。
ダウンロードはこちらから。(パッチリリースの最新版の使用を推奨)
https://unity3d.com/jp/unity/qa/patch-releases
※ 5.1.0p1 では、まだ Gear VR サポートにバグがあります。
設定は、Edit > Project Settings > Player から行います。
GPU Skinning を調整
デスクトップ向けなら、GPU Skinning をオンにしたほうが処理負荷は軽減します。
ただし、Gear VR など GPU を常にフルロードするような環境では、GPU Skinning オフのほうが
フレームレートは稼げます。
Rendering Path は Forward を使用
Forward の場合、全オブジェクトに対してライトの個数分の描画が発生します。(つまり、ひとつなら1回)
Deferred の場合、全オブジェクトに対して2回の描画が発生します。
シーン中にライトがひとつの場合は Forward を、複数個配置する場合は Deferred を推奨します。
ライトはシーン中にひとつのみ Directional Light を配置
ライトの個数は増えるほど描画コストが跳ね上がるので、ひとつのみ推奨します。
ライトのシャドウの調整
処理負荷の高い順で以下のようになっています。状況に応じて設定を行ってください。
Soft Shadows > Hard Shadows >>> No Shadows
アンチエイリアスを調整 ※ Unity 5.1 以前の情報なので注意
Oculus SDK を使用する場合、Disabled に設定する必要があります。(OVRManager 側で調整)
設定は、Edit > Project Settings > Quality から行います。
Vsync はオフに設定
※ Unity 5.1 以前の情報なので注意
Oculus SDK 側で自動的にタイミングを取ってくれます。
Pixel Light Count を 0 に設定
Pixel Light Count が 1 以上でかつ Forward レンダリングの場合、ふたつ目以降のライトの当たる
オブジェクトに対して、加算合成による追加の描画が行われ、非常に重くなります。
モデルのインポート設定で、Tangents を Calculate または None に設定
ノーマルマップを使用しないモデルでは Tangents は不要なので、これを無効化するとモデルの頂点数が減るため、
処理が高速化されます。
モデルのマテリアルの数と半透明描画を制限
モデル描画に関して、基本的にマテリアルの数が多いほど描画負荷が上がるので、なるべく少なく調整します。
半透明描画も、特に Gear VR では描画面積に比例して遅くなるので、最小限にします。