オフスクリーンを用いてfpsを改善
Unityで作成中の自作アプリを、自分のAndroidタブレットで実行してみたところ、10fps程度になっていた。
fpsが低くなっている一番の要因は、おそらく半透明のテクスチャを爆発などの演出で使いまくっている為。
自分のAndroidタブレットの性能では、塗りつぶしがキツイのだろう。
演出を小さくしたり減らすのは最後の手段として、まずはオフスクリーンを用いて解像度を下げる(塗りつぶし面積を減らす)ことでfpsが改善するかどうか調べてみた。
以下のような実験用のアプリを作った。
- シーンを描画するカメラの描画先をレンダーターゲット(オフスクリーン)にした。
- レンダーターゲットのサイズは、ハードウェアの実際の解像度より小さく設定できるようにした。
- UIの解像度は下げたくないので、シーンを描画するカメラとは別に、UI用のカメラを用意してそちらに描画させるようにした。
- レンダーターゲットをテクスチャとして用いるマテリアルとUIImageコンポーネントを用意し、それをUI用のカメラに描画させるようにした。
尚、実験用のアプリには、Unityの標準パッケージのParticleSystemsおよびCharactersを組み込んでいる。
・ParticleSystems…シーン内の炎や砂埃の表現に使用
・Characters……バーチャルジョイスティックや1人称プレイヤーに使用
また、fpsの計測は「Advanced FPS Counter」
https://www.assetstore.unity3d.com/jp/#!/content/14656
を組み込んで使用している。
オフスクリーンを使用しない場合、以下のような見た目になる。
縮尺1/4(ピクセル数1/16)のオフスクリーンを使用した場合。
ついでなので、バイリニア補間およびアンチエイリアスのON/OFFができるようにしてみた。それらをONにした場合。
●計測結果
オフスクリーンの縮尺や描画設定を変えてfpsを計測した結果は以下のとおり。
オフスクリーンを使用しない状態で、18fps程度。
縮尺1/4のオフスクリーンを使用した状態で、58fps程度。
縮尺1/8のオフスクリーンを使用し、バイリニア補間とアンチエイリアスを適用した状態で、58fps程度。
●結論
- オフスクリーンを用いることでfpsを改善できる。
- 縮尺1/4(ピクセル数1/16)なら60fpsを維持できる。
- バイリニア補間の適用の有無を変えても、とくにfpsの変化は見られなかった。
- アンチエイリアスは、それなりに負荷があるようだ。
といえる。
●考察
- 解像度を下げたことによる見た目の劣化は、自分としては、縮尺1/4(ピクセル数1/16)くらいまでは気にならない。
- アンチエイリアスも併用するなら、縮尺1/8(ピクセル数1/64)でもいけそうだ。
●備考
・実験用のアプリをWeb用に出力したもの
・実験用のアプリのUnityプロジェクト一式(「Advanced FPS Counter」は除く)
offscreen20160301.unitypackage - Google ドライブ