[UE5]AutoScreenPercentage機能について（補足）

# 概要
https://qiita.com/marv_kurushimay/items/13bd1cb1a0ce69ac073c

上記のページで説明したAutoScreenPercentageの機能について、それを起因とする問題点がいくつか出てきました。ここでは、それらを上記記事の補足事項としてまとめます。

なお、この記事はUE5.1環境で確認していますが、UE5.2でも同様の状況のようです。

# パッケージでGPU負荷が高くなる問題
（指摘されたTweetが消えてますが…）
Twitterで指摘されて初めて気づきました。

AutoScreenPercentage機能でスクリーン比率が下がっていると、当然GPU負荷も下がります。パッケージ化したときにはエディタ向けのAutoScreenPercentageの設定は使われません。その結果、スクリーン比率は100に戻るため「思ったよりGPU負荷が高い！」といった問題に直面します。

元の記事で指摘した、「気づかずぼけた映像を見ている問題」と合わせて、開発中は意識した方が良い点だと思います。

# HighResShotによるスクリーンショットが高解像度にならない
ゲーム画面のスクリーンショットを高解像度で撮りたい！という要望は結構あると思います。その時、手軽にゲーム画面を出せるPIEで撮ろうとすると、AutoScreenPercentageの機能が働いて高解像度になりませんでした。

これはコンソールコマンドのHighResShot、[高解像度スクリーンショットツール](https://docs.unrealengine.com/5.2/ja/taking-screenshots-in-unreal-engine/#%E9%AB%98%E8%A7%A3%E5%83%8F%E5%BA%A6%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%83%84%E3%83%BC%E3%83%AB)のいずれでも同じ結果でした。

PIEを含むエディタ画面（＝エディタビューポート）に対しては、プロジェクト設定にある
![ddc0dfa5-9234-4172-a88d-f2acbbd5394d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/94a7f772-c80d-f3c6-67e8-96bfc72e2ed4.png)
これらの設定が有効になるため、例えば8K相当（＝縦4K）の解像度でスクリーンショットを撮ろうとしても、半分の4K（＝縦2K）に抑えられてしまいます。

出力される画像データのサイズは指定したサイズで出力されるので、結果的にぼけたスクリーンショットが生成されます。

:::note info
**高解像度スクリーンショットがぼける他の要因**
他にも高解像度スクリーンショットがぼける要因があります。それは **Temporal Super-Resolution(TSR)** です。
![video_1280_TSR.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/a385a054-9f05-d2f3-f651-42ad5d7b39ef.jpeg)

![video_1280_None.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/ca28f675-e69e-832b-b853-62638652a182.jpeg)

アンチエリアス手法をTSRとNoneのそれぞれで撮影した高解像度スクリーンショットを切り替える動画を用意したかったんですが、Qiitaの都合上アップロードできませんでした。そのため作った動画からのスクショになりますが、比較するとTSRでは素材感がぼやけてしまっているのが確認できます。
これは[Cityサンプル](https://www.unrealengine.com/marketplace/ja/product/city-sample)で試した結果なので、気になる方はCityサンプルをダウンロードして試してみてください。

しかし、SSRなど一部のグラフィック処理はTSRを頼りに実装されている物もあります。
![image-20230529-044805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/5a7fcbd5-f893-58ee-8de0-32adbb74f04f.png)
上記画像の車の窓ガラスに映っている像（SSR由来）を見てください。このように、逆に汚く見える個所も出てくると思いますので、取りたい映像に合わせて選択してください。
:::

# 対策
これらの問題への対策はいくつかありますが、AutoScreenPercentageをいかに無効化するかということに尽きます。

## スタンドアローン起動をする
スタンドアローン起動をするとそのプロセスにはエディタがありませんので、前出のエディタビューポートに対する各種設定は使われません。その結果、GPU負荷もパッケージと同じ程度（厳密に一緒ではない）になりますし、高解像度スクリーンショットも意図通りの解像度で撮影できます。

もちろん、
* r.ScreenPercentage.Mode
* r.ScreenPercentage.MinResolution
* r.ScreenPercentage.MaxResolution

辺りのランタイムで有効なScreenPercentageの設定をしていれば、スタンドアローン起動でも適用されます。その結果、高解像度スクリーンショットも解像度が下がってしまうことがあるので、注意してください。

## r.Editor.Viewport.OverridePIEScreenPercentageをOFFにする
![image-20230530-013525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/2a4fb37d-74c2-d8d0-f7d0-7570cb9fd0ba.png)
エディタ環境設定の **一般>パフォーマンス>ViewportResolution** にある
* PIEのエディタ設定でゲームスクリーン比率設定をオーバーライド

の設定をOFFにすると、PIEでエディタビューポート向けのAutoScreenPercentage設定が使われなくなり、前項のスタンドアローン起動した時と同様の状態になります。

ただ、このチェックボックスの操作にバグがあるようで、チェックボックスをいじっても **効果がありません** 。
この設定はコンソール変数のr.Editor.Viewport.OverridePIEScreenPercentageを操作する想定のようなので、コンソールコマンドなどで
`r.Editor.Viewport.OverridePIEScreenPercentage 0`
といった感じで、直接変更してください。

## Manualモードに設定する
![image-20230530-014030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/7e2033ca-6da9-9a1c-af29-671c41f9f6ba.png)
プロジェクト設定の **エディタ>Performance>ViewportResolution** に並んでいる、これらの設定が問題なのでAutoScreenPercentageが働かないようにいくつかの設定を変更します

* リアルタイムエディタビューポートのデフォルトスクリーン比率モード
    * Manual
* エディタビューポートに対してデフォルトで設定されるマニュアルスクリーン比率
    * 100.0（デフォルトのまま）
* エディタビューポートに使用するデフォルトの最大レンダリング解像度
    * 0

リアルタイムエディタビューポートのデフォルトスクリーン比率モードをManualにしただけでは、最大レンダリング解像度の設定で上限が決まってしまうため、それも無効にする（0に設定する）必要があります。ただし、この設定を変更すると通常のエディタ作業時にも影響しますので、一時的に変更して元に戻すような処理を実装した方が良いかもしれません。

これらの設定はエディタ設定の **一般>パフォーマンス>ViewportResolution** で上書きできますので、プロジェクト全体ではなく、各ユーザが個別に設定したい場合はエディタ設定の項目を操作する事をお勧めします。

## スクリーン比率を手動設定する（非推奨）
![image-20230526-112512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/6d5f2d39-6d47-d974-3f61-5a3dc81aad72.png)
このスクリーン比率を手動設定して、AutoScreenPercentageが動作しないようにします。

[[UE5]AutoScrteenPercentage機能について #手動設定](https://qiita.com/marv_kurushimay/items/13bd1cb1a0ce69ac073c#%E6%89%8B%E5%8B%95%E8%A8%AD%E5%AE%9A)の項目で書いた通り、 **自動調整された値と異なる値を入力したとき** に手動設定状態になるため、扱いが面倒くさいです。
自動調整された値が100の時は、100を入力しても手動設定状態にはならないため、この方法はお勧めしません。

## 結局どの対策を選べばいいの？
### GPU負荷の確認が必要な場合
[スタンドアローン起動](#スタンドアローン起動をする)をお勧めします。
PIEではウィンドウサイズがまちまちなため、大きなウィンドウで作業をしていると逆にパッケージよりGPU負荷が高い状態になる可能性があります。そのため、スタンドアローン起動をお勧めします

### 高解像度スクリーンショットを使う場合
#### PIEだけでスクリーンショットを撮れれば良い
[r.Editor.Viewport.OverridePIEScreenPercentageをOFFにする](#reditorviewportoverridepiescreenpercentageをoffにする)の方法をお勧めします。
この方法であればPIEにだけ影響するので、通常のエディタ操作が重くなることはありません。

#### PIEと通常のエディタ画面の両方でスクリーンショットを撮りたい
通常のエディタ画面でも高解像度スクリーンショット使いたいなら、[Manualモードに設定する](#manualモードに設定する)をお勧めします。

しかし、通常のエディタ操作も重くなってしまうので、EditorUtilityWidgetなどを使ってスクリーンショットを撮るときだけ一時的に変更して元に戻すような機能を用意した方が良いかもしれません。

# あとがき
前回の記事を書いた時は、見た目がぼけるだけだから絵を詰めるアーティストにだけ影響がある内容と軽く見ていました。しかし、負荷の問題や高解像度スクリーンショットなど他の機能への波及があり、結構しっかりと把握して扱うべき機能なのでは？と思い始めてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431039/9d836a3f-c013-bd4f-13a0-352251d31ff1.png)
UE5.3では上図のようにScreenPercentage周りに修正が入っていて、エディタでのScreenPercentageの状況が分かりやすくなり、上書き制御もしやすくなっていました。
着実に使いやすくはなっているので、今回指摘した高解像度スクリーンショットの件も、ぜひ何とかしてほしい…。