アンリアルエンジンでトゥーン表現などを行う場合、
デフォルトで適用されているフィルム トーンマッパ "r.TonemapperFilm 1" によって
少し色がくすんでしまって困る、ということがありますよね。
フィルム トーンマッパの詳細に関しては、以下URLをご参照いただけたらと思うのですが、
https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/PostProcessEffects/ColorGrading/
フィルム調のリアルな絵作りを行いやすいというメリットがある一方、彩度が落ちてしまって元テクスチャの印象が少し変わってしまうというデメリットもあります。
そこで、アンリアルエンジン4までは、
多くのユーザー様が "r.TonemapperFilm 0" とし、
麦わらの一味の発色を取り戻していたかと思うのですが、
こいつが悲しいことに、アンリアルエンジン5では削除されてしまいました。
https://docs.unrealengine.com/5.0/ja/unreal-engine-5-migration-guide/
そこで今回はその対応策の一つとして、
ポストプロセス設定の ToneCurveAmount をご紹介させていただけたらと思います。
使い方は非常に簡単で、上記画像のようにポストプロセスの設定で、
Tone Curve Amount に 0 を設定するだけです。
(Expand Gamutも 0 にしておくとより良いと思います。)
この機能に関しましては、
UNREAL FEST EXTREME 2022 SUMMERの
「アイドルマスター スターリットシーズン」におけるグラフィックス実装事例と最適化事例 の質疑応答でも触れられていた機能かと思うのですが、
https://youtu.be/re56DDIQRiM?t=4911
ToneCurveAmount の効果としては、
PostProcessCombineLUTs.usf CombineLUTsCommon()の処理内にて
FilmToneMap() の影響をどの程度与えるかのパラメーターになっており
0にした場合は FilmicToneCurve の影響を除外することが可能となっております。
ToneCurveAmount のパラメーターコメントにもある形で、
多くの場合は ExpandGamut(あと多分BlueCorrectionも?)合わせて0にして、
OCIOなどで任意の色変換を行う際や
MRQやシーンキャプチャーなどでレンダリングする際にニュートラルな状況を得たい といった場合に使用されております。
ShowFlag.ToneCurve でも制御できます。
もちろん ToneCurveAmount を 0 にした場合でも、
削除されてしまった従来のトーンマップ FilmPostProcess() の処理などは行われないため、
講演動画でもご説明されているとおり、厳密に r.TonemapperFilm 0 と同じ結果にはならないのですが、
ToneCurveAmount 0 は
設定がとてもお手軽 & 他のポストプロセス機能は問題なく使える などのメリットから
様々な方が試されているトーゥン対応方法に連なる一つの選択肢になるのかなと思いました。
もし別の対応手法も気になる!という方は、ぜひ以下URLもご参照ください。
https://qiita.com/ruyo/items/28255f26725a6b6bd475
https://www.hakobuneworks.com/posts/settingsforpixelart/
https://twitter.com/kamipallet/status/1482012169084739592?s=20
https://forums.unrealengine.com/t/disable-tonemapper/242463/3