概要
ゲームを作ってるとたまに内部解像度を上げたり下げたりしたくなる時があります
BF4で言う解像度スケールとか他では内部レンダリング解像度とか言われるものですね
50%等下げればFPS稼ぎに使えますし、200%とかにすれば非常にキレイな描画が期待できます
UnrealEngineではPostProcessにScreen Percentageという項目があるのですがUnityには見当たりませんでした…(あったらコメント欄にて指摘頂けると幸いです)
Screen.SetResolutionだとスマホだと良いかもしれないけどPC環境だとウィンドウごと小さくなるし
けどフルスクリーンにはしたくないし…というちょっとニッチな層向けの解説になります
方法
凄い悩んだ割に超簡単にできました
RenderTexture作成
新しくRenderTextureを用意します、RenderTextureの設定で内部解像度にしたいサイズに変更してください(4k解像度にしたい場合は3840x2160等)
カメラの設定変更
メインカメラのTarget Textureに先程作成したRenderTextureを指定します
RawImage作成
Hierarchy内部を右クリックしてUI→RawImageで新しくRawImageを作成します
RawImage設定変更
RawImageが画面いっぱいになるように調整した後表示する画像に先程作成したRenderTextureを指定します
終わり
結果
低解像度(640x400) : FPS180
中解像度(1920x1080) : FPS80
高解像度(3840x2160) : FPS30
こうしてみると結構違います&FPSの差も割りとありますね
解説
メインカメラの映像をRenderTextureの解像度で描画してUIのRawImageとして表示しているだけになります。
一応低解像度にしたらジャギジャギ+FPS値が上がるのを確認し、4Kとかにすると高精細+FPS値が低くなったので一応目的の挙動は達成できたと思います
但しRenderTextureに一度転送した後に表示しているので微妙にコストが掛かりそうな予感がします…
スマホ向け等少しパフォーマンスにシビアな場合は素直にScreen.SetResolution等を使いましょう
2017/11/16追記 問題点
この方法を使用した場合マウスやタップした位置をワールド座標に変換する処理などで問題が発生する場合が有りますので注意してください