LoginSignup
16
16

More than 5 years have passed since last update.

Unityで内部解像度を引き上げる・引き下げる

Last updated at Posted at 2017-10-12

概要

ゲームを作ってるとたまに内部解像度を上げたり下げたりしたくなる時があります
BF4で言う解像度スケールとか他では内部レンダリング解像度とか言われるものですね
50%等下げればFPS稼ぎに使えますし、200%とかにすれば非常にキレイな描画が期待できます

UnrealEngineではPostProcessにScreen Percentageという項目があるのですがUnityには見当たりませんでした…(あったらコメント欄にて指摘頂けると幸いです)

Screen.SetResolutionだとスマホだと良いかもしれないけどPC環境だとウィンドウごと小さくなるし
けどフルスクリーンにはしたくないし…というちょっとニッチな層向けの解説になります

方法

凄い悩んだ割に超簡単にできました

RenderTexture作成

新しくRenderTextureを用意します、RenderTextureの設定で内部解像度にしたいサイズに変更してください(4k解像度にしたい場合は3840x2160等)
RenderTexture作成

カメラの設定変更

メインカメラのTarget Textureに先程作成したRenderTextureを指定します
RenderTexture指定

RawImage作成

Hierarchy内部を右クリックしてUI→RawImageで新しくRawImageを作成します
RawImage作成

RawImage設定変更

RawImageが画面いっぱいになるように調整した後表示する画像に先程作成したRenderTextureを指定します
RenderTextureを指定

終わり

結果

低解像度(640x400) : FPS180

LowRes.png

中解像度(1920x1080) : FPS80

MidRes.png

高解像度(3840x2160) : FPS30

HiRes.png

こうしてみると結構違います&FPSの差も割りとありますね

解説

メインカメラの映像をRenderTextureの解像度で描画してUIのRawImageとして表示しているだけになります。
一応低解像度にしたらジャギジャギ+FPS値が上がるのを確認し、4Kとかにすると高精細+FPS値が低くなったので一応目的の挙動は達成できたと思います
但しRenderTextureに一度転送した後に表示しているので微妙にコストが掛かりそうな予感がします…
スマホ向け等少しパフォーマンスにシビアな場合は素直にScreen.SetResolution等を使いましょう

2017/11/16追記 問題点

この方法を使用した場合マウスやタップした位置をワールド座標に変換する処理などで問題が発生する場合が有りますので注意してください

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16