概要
そういえばOculus使ったゲームとか作る時に、75FPSを確保するために、まあ色々グニャグニャとチューニングをする過程の情報があまり無い気がするので、メモ代わりに我流の方法を書いておきます。
前提
- 比較的広いマップを持ち、何もしないとDrawCallは1000以上ある感じのコンテンツ
- Occlusion Cullingと固定物のstatic化はしている
- いわゆる、ゲーム用GPUがあって、他のコンテンツで75FPSは出ている環境
- 毎フレームDebug.Logを呼ぶような恐ろしい無駄は削除済み
作業
1.最初に、パフォーマンスチューニングの余地があるか調べるために、QualityをBeautiful→Good→Fastと切り替えて、FPSとDrawcallがちゃんと増減するか調べる。
2.Unity Profilerを起動してボトルネックを調べる
後はこういう高速化を計測するUnityProのProfilerですが
1.VSyncを切って計測しないとちゃんとした値が取れないというか、VSync待ちの負荷が余分に出てきてまずい。
2.絶対にフルスクリーン再生で別画面にProfilerを置いて計測する。
— izm@ 9/28ニコニコ町会議,栄 (@izm) 2014, 9月 18
あくまで相対値しか出てこないので、相対的なボトルネックを計測しておくぞ、のつもりで測ること(Unity5に期待ですね)
オマケで定番の作業
Unity+Oculus時(1000call程度)の見た目の影響度 対 描画負荷考察(標準のImageEffects Proで)
・FXAA3は軽い割に綺麗に見える。必須
・Bloomは軽い割に変化有る。推奨
・Ambient Obscuranceはリッチに見えるが負荷が鬼。
— izm@ 9/28ニコニコ町会議,栄 (@izm) 2014, 9月 18
Ambient Obscuranceが軽く動くPCは少ないので(しかも両目にかかるんでつらい)残念ながら諦めたほうが良いかも。他の2種はそれほど負荷がかからないので、やって損は無いです。
@izm 後は、広いマップだとQuality のShadow distanceを30くらいまで下げて、遠くの影の描画を諦めて、代わりに遠くはライトマップを焼いて誤魔化してしまうのが、パフォーマンスを稼げて便利と思います。
— izm@ 9/28ニコニコ町会議,栄 (@izm) 2014, 9月 18