【UE5.4】Unreal Engineで綺麗に全天球画像を取得したい

# はじめに
Unreal Engineを用いて全天球画像を撮影する方法については以下の記事で詳しく説明されています。

https://qiita.com/mechamogera/items/f0e22ecf80e8f36fd5fe

しかし、上記の記事に従ってUE5.4で`Final Color`の全天球画像を出力すると以下のようにCubeの輪郭が載った状態で出力されてしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/053fc5a2-7cbe-1f81-a9af-e5ee4007a2d4.png)

本記事ではこの現象の対処方法をまとめます。
必要な設定部分のみを閲覧したい方は[まとめ](#まとめ)をご覧ください。

:::note warn
ポストプロセス周りの設定のため、`Final Color`ではなく`Scene Color`などを使用する場合はこれらの設定は不要です。
:::


# 動作環境
- Unreal Engine 5.4.3
- Unreal Engine 5.3.2
    - 後述する追加の設定が必要

# 実践
## セットアップ
上記の記事を参考に、`TextureRenderTargetCube`と`Material`を作成しておきます。

適当に作成したBluePrintアクタに`SceneCaptureComponentCube`コンポーネントを追加し、`Texture Target`に作成したRenderTargetを、`Capture Source`を`Final Color`に設定します。

※上記の記事では`Capture Every Frame`と`Capture on Movement`をオフにしていますが、今回の説明時点ではオンのままにします。実際に画像として出力する際などは適宜オフにすると良いかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/4ff45bc3-ddba-f52e-c14c-8450b96f260a.png)

`Capture Every Frame`をオンにしていると、作成したBluePrintを配置することで`TextureRenderTargetCube`のテクスチャが自動的に更新されるようになります。
今回はこの画面で直接説明を進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/b3e87554-fce9-21f7-3d9a-98f5018e033f.png)

<details><summary>Unreal Engine 5.3の場合</summary>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/331e129c-ba97-adec-8c70-fe81037e0341.png" width="70%">

UE5.3の場合上記のように出力結果にノイズが載っていました。
~~`SceneCaptureComponentCube`の動的シャドウ（`Dynamic Shadow`）をオフにしたところノイズが載らないようになりました。~~
（追記）上記の方法では通常の影自体も表示されなくなってしまうため、以下の方法で修正してください。
プロジェクト設定→レンダリング→シャドウにあるシャドウマップメソッドを`Shadow Maps`に変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/14d8c1c2-aa30-e478-000f-8ca7804d2ae1.png)
参考資料：[Fixing a Weird 'Shadow' Problem in Unreal Engine 5](https://www.youtube.com/watch?app=desktop&v=L9mF5ILdAe4)
</details>

## SceneCaptureComponentCubeの設定
配置したBluePrintの子コンポーネントの`SceneCaptureComponentCube`を選択し、ポストプロセスの表示（Post Processing Show Flags）から以下の設定を行います。
- ブルーム（`Bloom`）をオフに
- ローカル露出（`Local Exposure`）をオフに
- 明暗順応（`Eye Adaptation`）をオフに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/766fee5a-c816-23b5-9a5c-44ed78c2e087.png)

ここまでの設定変更により上記のような輪郭の影だけが残っているような画像となります。

## PostProcessVolumeの設定
ポストプロセスの設定を変更するために、`PostProcessVolume`をコンテンツブラウザから検索し、配置します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/4e626aa8-c54d-07ae-ace0-168c9774f318.png" width="60%">

配置した`PostProcessVolume`を選択し、適用範囲をワールド全体にするために`Infinite Extent`にチェックを入れます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/89b86199-ddfc-8521-800d-384a4139301c.png" width="60%">

そして、ビネット効果（`Vignette Effect`）を有効にし、値を0.0にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/e52e7a55-1bbf-ca8a-664d-126a2bc9fb04.png)

すると上記左のようにSceneCaptureComponentCubeの設定後に残っていた輪郭の影も消え、Cubeの輪郭を完全に消すことができました。

## 最終的な出力
もちろん、ここまでの設定を適用した状態で画像を出力すれば、以下のように綺麗な全天球画像を取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3807732/711858a7-e9b2-9e68-3725-201e9eff1481.png)

# まとめ
Unreal Engineで`Final Color`の全天球画像を綺麗に取得するためには以下の設定が必要
- **SceneCaptureComponentCube**の設定
    - ブルーム（`Bloom`）をオフに
    - ローカル露出（`Local Exposure`）をオフに
    - 明暗順応（`Eye Adaptation`）をオフに
    - （※UE5.3の場合）動的シャドウ（`Dynamic Shadow`）をオフに
- **PostProcessVolume**の設定
    - `PostProcessVolume`をコンテンツブラウザから配置
    - ビネット効果（`Vignette Effect`）を有効にし、値を0.0に