本記事は Unreal Engine (UE) Advent Calendar 2024 シリーズ4の 10日目の記事です。
概要
SceneCapture2Dの方はUE5.1からですが、UE5.5からはSceneCaptureCubeでもLumeGIとLumenReflectionが使えるようになりました。
設定しなければならない項目が若干紛らわしいのでまとめておきます。
セッティング
コンテンツブラウザでCubeRenderTargetを作成。
SceneCaptureCubeをシーンに配置、作成したRenderTargetをTextureTargetにアサインします。
用途によって変わりますが、ここではCaptureSourceをFinalColor(HDR)inLinearWorkingColorSpaceにします。
これだけだとLumenは省略されており、GIやReflectionは描画されておらずSkyLightの遮蔽も計算されません。
追加でSceneCaptureCubeのPostProcessVolumeからGlobalIlluminationとReflectionsのMethodをLumenに設定。(※チェックを入れるだけでOK)
PostProcessBlendWeightを1に設定します。
これでLumenが有効になります。
まだ若干GIが弱く感じるのは、SceneCapture描画時のLumenSurfaceCacheの解像度が抑えられているためです。
SceneCaptureCacheResolutionScaleを1に設定することでクオリティが上げられます。
処理負荷
SceneCapture自体が元々重いのですが、そこにLumenの計算が全周囲分加わることで絶望的に重くなります。
当然リアルタイムでの使用には耐えられないため、あくまでもCubeMapの撮影など一部の用途に限られます。
CaptureEveryFrameをオフにすれば1フレームだけ実行することもできますが、Lumenの処理がフレーム分散されるため撮影できません。
CubeMapの切れ目
撮影された結果を見ると一部にうっすらと切れ目のようなものが見えます。
SceneCaptureCubeはまず前後左右上下の6アングル分をキャプチャし、結果を合成してCubeMapを作成するのですが、アングル間でLumenの整合性が取れずこのような結果になるようです。
スクリーントレース系はデフォルトで無効化されていますが、それでも切れ目は残ります。
これに関してはソースコード内でも言及されていますので、将来的には解決されることに期待したいです。
// Disable screen traces by default for cube maps -- these don't blend well across face boundaries, creating major lighting seams.
// Lumen lighting still has some seams with these disabled, but it's an order of magnitude better.