UnrealEngine AntiAliasingの比較　FXAA・SMAA・TAA・TSR・FSR2.1

環境：UnrealEngine5.1.0

# はじめに
UnrealEngineには標準、プラグイン、エンジン改造によって色んなAAが選択できます。
いっぱいあってどれがいいのかよく分からない！
ということで調べてみました。

# それぞれ簡単に説明
- FXAA（Fast ApproXimate Anti-Aliasing）
昔からよく使われてきたAAで若干ジャギが残るが処理が軽くて問題が起きにくい
UEの標準機能

- SMAA（Enhanced Sub-pixel Morphological Anti-Aliasing）
FXAAの発展形らしい。FXAAより綺麗でそこそこ軽いらしい
エンジン改造で追加可能：https://forums.unrealengine.com/t/enhanced-subpixel-morphological-anti-aliasing-smaa-for-ue5/642606

- TAA（Temporal Anti-Aliasing）
とても綺麗にジャギを取ってくれるけれど前フレームの映像を使って処理するので動くと残像が出やすい
UEの標準機能

- TSR（Temporal Super-Resolution）
解像度を下げて描画されたものをアップスケールする手法、TAAより残像が出にくい
UE5でないと使えない

- FSR2.1（FidelityFX Super Resolution）
AMDが2022年に発表したアップスケールする手法。AMD以外のGPUでも使える。UE4でも使える。新しい技術って感じで楽しい
プラグインで追加可能：https://gpuopen.com/learn/ue-fsr2/


# 見た目の比較
![比較.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/71e2ad66-a2f8-5c2c-597f-9c754e0ee0b3.png)
|||
|-|-|
|AA無し|ジャギジャギ|
|FXAA|坂道の三角の部分あたりに少しジャギが残って見える、縞模様テクスチャの斜めが綺麗に出てない|
|SMAA|天井のラインに少しジャギが残っているようにみえるけど縞模様テクスチャは綺麗、少しボケて見える|
|TAA|十分綺麗だけど少しボケて見える、地面の横ラインが少し薄くなっている|
|TSR|TAAよりラインがちゃんと出てる感じする|
|FSR2.1|地面の横ラインが消えている|
|FSR2.1+Sharpness|シャープネス設定に1.0入れた場合、ボケがなくなっていい感じ！静止画だと一番いいかも|

# 動いたときの印象
・FXAA、SMAA：問題なし
・TAA、TSR、FSR：すこしぶれて見える

# ディザとの相性
- TAA　ディザの奥の絵に汚い残像が出ます。ぶつぶつがひどく汚く見えます
r.TemporalAACurrentFrameWeightの設定で軽減できるらしいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/3322a025-3c14-6f81-c356-018f74040f89.png)

- TSR　残像が出ますがTAAより少しましに見えます。5.0では汚かったのが5.1で改善してる？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/57887f0c-6ff4-2c1f-f5a8-0b3d6b8b1244.png)

- FSR　溶けた感じの残像が長く出るように見えます。ただ、実際のゲームで使ってみると意外と気にならないレベルでした。TAAよりいい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/91c6ed95-23d4-6034-3551-e85f3d310177.png)

- SMAA　FXAAの発展形らしいのになぜか残像がでます。これを使う場合はディザのマテリアルにDitherTemporalAAを使わず自前でやったほうがいいかもしれない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/ac74b8d3-24c9-4af4-9f2b-a30863acc752.png)

# FSR2.1 使うときの注意点
- 配布されているプラグインはUE5.0用です。
ソースからビルドした5.1に入れて適当にエラーを直したら5.1でも動きました。
- 明るいところにチラツキが出る場合は「Auto Exposure」は有効にすると軽減されます。
- NintendoSwitchでパッケージ作る時にシェーダーコンパイルでエラーがでる時は以下のように書き換え必要
FSR2TemporalUpscaler.cpp
```cpp
return IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5);
↓
return IsFeatureLevelSupported(Parameters.Platform, ERHIFeatureLevel::SM5) && IsPCPlatform(Parameters.Platform);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/65f02a4c-cb58-0e12-54f9-65a25c10e453.png)


# まとめ
アクションゲームなど動きが激しいゲームでは静止画だけではなく動かして確認してください。
壁やキャラを透過させる時にディザを多用する場合はディザ越しに見たときの見た目も確認したほうがいいです。

個人的なおすすめは
- 綺麗さと安定性でTSRが１番。UE5ならこれ！
- 多少ディザごしに残像が出るけどシャープなところがいいのでFSRが２番。UE4ならこれ！
- アクションゲームとか動きが激しいとやっぱりブレが気になるのでそのあたりに強い３番SMAA、４番FXAA
- 問題が多いのでTAAは５番

こんな感じです。参考になればうれしいです。

# 元画像
- AA無し
![0None.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/24ca718d-d150-b71a-8c7f-28955deffd86.png)

- FXAA
![0FXAA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/dbe03067-3546-638e-4f56-eccce52b3e90.png)

- SMAA
![0SMAA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/f7d5b3c2-1679-399b-debf-cd0fe7a857ec.png)

- TAA
![0TAA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/475510d6-a81e-ce22-8992-7701ef555a5a.png)

- TSR
![0TSR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/4cf1a51c-67bc-f14b-cb4e-97c86d5347e5.png)

- FSR2.1
![0FSR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/b6657923-4fc3-85de-2955-701cd5c03f9c.png)

- FSR2.1+Sharpness
![0FSR+Sharpness.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2778561/f75cb6c9-5e7b-16df-2cb6-782947faf915.png)