読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

解像度を下げてパフォーマンスを得る

最近モバイルの解像度がおかしい。

大して画面は大きくなっていないのに、画面解像度が1920×1080とか2048×1536とか意味がわからない。せっかくGPUの性能は上がっているのに、このクソ高い解像度のせいでイメージエフェクトのような画面全体にエフェクトをかける演出をグレードアップしにくくなっている。

なので、解像度を下げる方法を紹介。
例えば1920の解像度を1024くらいに下げると、描画性能が理屈上は4倍くらいになりかなりのパフォーマンスアップが期待出来る(割とゲーム作る上で解像度下げるのは良くある手法)。特に2Dゲームでは2048クラスの画像を用意するなんて事は無いし、馬鹿みたいにスプライトを配置しても(描画性能的には)問題無くなるかもしれない。

ついでにOnGUIのGUIlayoutでボタンが超絶小さくなるのも防げる。

ただ文字表示がネイティブ解像度と比較して若干見難くなるかもしれないので、その辺り注意。


AndroidiOS場合は、Screen.SetResolutionを利用する。
例えばこんな感じ。(ちなみにエディタには影響しないっぽい)

float screenRate = (float)1024 / Screen.height;
if( screenRate > 1 ) screenRate = 1;
int width = (int)(Screen.width * screenRate);
int height = (int)(Screen.height * screenRate);

Screen.SetResolution( width , height, true, 15);

iOSの場合は、これの他にもPlayerSettingsのOtherSettings>Target ResolutionでAuto(Best Performance)を選択すると、解像度が非retinaになりかなり高速化する。

スクリーンショット 2014-04-16 23.00.14

それと、RenderTextureで低解像度を描画し、イメージエフェクトの機能とかGUITextureで描画するのを考えたけど、これがパフォーマンスアップになるかはちと不明
RenderTextureに低解像度画面をレンダリングしてパフォーマンスアップは、最適ではないケースもあるが、パフォーマンスが向上するケースもある。特にGUIは高解像度だがゲーム画面はエフェクト重視…といった事をしたい場合に有用
tsubakit1.hateblo.jp