TonemappingMethodの違いについて

UE5.8になって、PostprocessVolumeのFilmにMethodが追加され、FilmとStandard ACESが選択できるようになりましたが、この違いを解説していただけると嬉しいです。

使用されるTonemapperが切り替わるみたいで、Filmがデフォルトになっていますが、今後はこちらが推奨されるということでしょうか。

HDR時にr.HDR.Aces.SceneColorMultiplierなどの一部パラメーターがStandard ACESでないと効果が無い点が気になっています。

自己レスですが。

SDR時はデフォルトのFilmic、HDR時はStandard ACESに切り替えるという運用になったのかなと。

あと、r.HDR.Aces.Versionもデフォルトが1.3から2.0に変更されたのも注意が必要そうです。

お世話になっております。

ご認識のとおり、UE5.8よりPostProcessVolumeのFilm->Methodにて

トーンマッピングをFilmicとStandard ACESから選択できるようになりました。

(CVarから上書きする場合はr.LUT.TonemappingMethodをご利用いただけます。)

各パスはACES2.0ベース(r.HDR.Aces.Versionが既定値2に変更されています)で整備が行われ、

Filmicは従来からの互換を持たせつつSDRとHDR両方で共通のルックを目指す実装となっており、

Standard ACESは、よりニュートラルな状態を出力する形となっています。

Standard ACESの場合、Film Slope/Toe/ShoulderといったToneCurveを調整する各種パラメーターは無く、

細かい調整を行いたい場合はLMTなどを別途当てる想定ですが、現状は対応していません。 (UE-383303:対応時期未定)

そのため、Filmicのトーンカーブを通さずACESの出力変換をそのまま適用していたUE5.7以前のような運用でご利用いただく場合は、

r.HDR.Aces.Version 1を設定いただいた上で、SDRはFilmicのまま、HDRをStandard ACESに変更、

自動でFilmicのルックに近づけたい場合は、HDR上でも既定のFilmicをご利用いただく形になるかと思います。

※追加情報として、LUTの入力値のエンコード方式(シェーパー)がCVarに分離されHDR時の既定がPQからLog2に変更されています。

HDR時r.LUT.Shaperに1(PQ)を設定することで更に以前の挙動に近づくかと思います。

開発の経緯としてCL47930540がACES2.0の対応となっており、

当時はSDRとHDRそれぞれ別のトーンマッピングを設定する想定となっていました。

その際実装されていたのが一部コード内に名前が残っているAutomatic HDRとなりますが、

現在Methodの設定は1つとなっており、Filmicの場合ターゲット輝度が100nitを超えると自動でこの挙動となります。

(これまでのFilmicTonemappingの適用後に一度ACES2.0の逆変換でリニアスペースに戻し、

再度ACES2.0のパスで目標輝度に合わせて出力することで、一定のルックを保ちつつHDRに対応する仕組み)

そのため基本的にはSDRとHDRで同じMethodを利用する想定です。

コンソールコマンドに関しまして現状各パスのものが混在しており恐縮ですが、

r.HDR.Aces.SceneColorMultiplierに関してはStandard ACES専用のコマンドとなっております。

現状Filmicを含めSceneColorを調整する場合はGameUserSettingsのHDRPaperWhiteNitsやr.HDR.PaperWhiteコマンド(検証用)の利用を検討頂けますと幸いです。

※設定値はHDRPaperWhiteNitsが優先され、一部のコンソールはPLATFORM_PROVIDES_HDR_PAPER_WHITE定義の処理にてシステムからのPaperWhite値が使われます。

/** Paper white luminance to control scene brightness in HDR, also UI brightness if bIsHDRUILuminanceSeparate is false */
UPROPERTY(config)
float HDRPaperWhiteNits;

UIに関しては、r.HDR.UI.Luminance.Mode 0の場合PaperWhiteに追従、1の場合はr.HDR.UI.Luminanceで調整可能となっています。

CL51352403にてHDR関連のサンプル実装がLyraに追加されていますので、こちらも一度ご確認頂けますと幸いです。

お手数おかけしますが、よろしくお願いいたします。

丁寧な解説ありがとうございます。

こちらでもだいたいの処理を追えて概ね理解できました。

r.HDR.Display.MaxLuminance系はACES2.0では機能しないというか不要になったという事みたいですね。

手元でテストした感じではACES2.0のトーンマッピングは良好に感じたので、こちらで調整してみたいと思います。

ご確認ありがとうございます。

一点補足させて頂くと、MaxLuminance(ピーク輝度)に関しては現在も利用されていますが、

基本的にハードウェアから取得(デフォルト:r.HDR.Display.OverrideOSMaxLuminance 0)する形となりました。

※新しい実装の場合MidLuminanceやMinLuminanceLog10相当の値に関しましてはピーク輝度から導出されます。

MaxLuminanceの設定が必要な場合は、r.HDR.Display.OverrideOSMaxLuminance設定をご確認頂ければと思います。

よろしくお願いいたします。