色空間
LDRディスプレイ
HDRに対応していないディスプレイへの入力値はRGBそれぞれが8bitずつの32bit
RGBそれぞれは0~255で表現される
以下、これらの値は正規化して0以上、1以下として扱う
つまり[0, 1/255, 2/255, ..., 254/255, 1]
ブラウン管
歴史的にはブラウン管のハードウェアの性質として入力された映像を暗くする効果があった
ガンマ補正
暗くされると困るので放送するときに映像を明るくしてから放送していた
逆ガンマ補正
現代ではモニターを使うがなんか知らんけど同じようにモニターもガンマ補正をかけるようになっている
モニターの設定で選べることがある
ガンマ値=2.2
ガンマ補正の効果は「RGB (0~1)の値をガンマ値乗する」という操作
2.2乗すると色は暗くなる(0.5^2.2 = 0.21763)
モニターに色を送る側はモニターの補正値に合わせて逆の補正をかける必要がある
逆ガンマ補正
OSはこれをやってくれない
Unityは自分で勝手にやってくれてそう
Unityの話
LDRディスプレイの入力はR8G8B8、それぞれ256階調なのは変わらない
リニアーワークフローとする
カメラのHDRが有効の時
レンダリングの間においては256階調を突破できる
カメラのバッファはR16G16B16A16_SFlot
半精度の不動小数点が使える
つまり1=255/255を超えた値をバッファに含めることができる
レンダリング中は物理に沿った色を取り扱う
最終的にR8G8B8A8_sRGBのバッファに書き込む
FrameDebuggerを見る限りここで逆ガンマをかけているように見える