Gregory Igehy

Dancing at hemisphere coordinate

トーンマップの自分用メモ

はじめに

  • UE4 や Unity のトーンマップやカラコレに関する自分用メモ
  • 内容について間違っている可能性が結構あると思いますが,そのときはすみませんー

Unity の Cinematic Effects

参考コード
  • TonemappingColorGrading.cginc (ヘッダファイル)
  • TonemappingColorGrading.shader (シェーダの定義)
  • TonemappingColorGradin.cs (描画パスや Editor 用)
流れ
  • (0) 自動露出補正 (HDR)
  • (1) トーンマップ (HDR -> LDR)
    • 種類は ACES 近似カーブ, Filmic, exponential, Reinhard などの計算ベースか, ユーザカーブを LUT 化したもの
  • (2) LUT によるカラーグレーディング(LDR)
    • この中にはユーザ LUT, ホワイトバランス, カラーホイールによる調整など諸々が含まれている
    • ※ TonemappingColorGrading.shader の frag_lut_gen() を参照

UE4.11 のトーンマップ

参考コード
  • Shaders\\TonmapCommon.usf (関数群)
  • Shaders\\PostProcessCombineLUTs.usf (LUT を作っている箇所)
流れ
  • PostProcessCombineLUTs.usf の MainPS( ) が根元
  • 一方で, 上の処理が 32x32x32 のLUT 化済みの場合はそれを使っぽい

考察

  • Unity
    • トーンマップ後にカラーグレーディングの LUT を使っていてるために, LDR 状態でこれらが適用される
  • UE4
    • カラーグレーディングやホワイトバランスは (トーンマップを使う前に行い, ) HDR 状態で適用される
    • またかなり計算量が多いので, LUT 化して使うのが通常と思われる

Some notes of HDR rendering