Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
15
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@Developer_KanZG

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

概要

ゲームを作ってるとたまに内部解像度を上げたり下げたりしたくなる時があります
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追記 問題点

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
15
Help us understand the problem. What are the problem?