色空間
CIE XYZ空間
基準となる色空間
光(is 電磁波)のスペクトル分布を等色関数を使って積分することでCIE XYZ空間にマッピングされる$ (X,Y,Z)
三刺激値と呼ぶ
人間の認知の空間が3次元なのを利用して、下の図式が可換になるようにするイメージ
code:mmd
flowchart
sp(スペクトル分布の空間)
human(人間の認知の空間)
xyz(XYZ空間)
display(ディスプレイ出力の空間)
sp --目で見る--> human
sp --等色関数で3次元に圧縮--> xyz
xyz -->RGB空間--> display
display --目で見る--> human
"色の3原色"みたいなのは人間の認知の空間における話であり、現実世界の光の空間は無限次元
色度
XYZ空間を$ X + Y + Z = 1の平面に投影する
$ x = \frac{X}{X+Y + Z}
$ y = \frac{Y}{X+Y + Z}
$ z = 1 - x - y
$ (x, y)を色度座標と呼ぶ
https://scrapbox.io/files/6a36710f2ba3627f4ec331fe.png
RGB色空間
RGB色空間を定義する <=> XYZ空間からの変換式を与えると思ってよさそう
e.g.
sRGB
R'G'B'空間
ガンマ補正が適用されていることを明示するために'をつけるという慣習がある
sRGB、Rec.709は異なる伝送関数(OETF)があり、非線形RGB空間は別物 それ以外の色空間もある
色域(Color Gamut)
↑の三角形のこと
3つの原色と白点によって決まる
https://scrapbox.io/files/6a3673342ba3627f4ec3346c.png
ディスプレイエンコーディング
参考:リアルタイムレンダリング 5.6
電光伝達関数(EOTF)
ディスプレイバッファーのコード値をディスプレイの放射輝度に変換する
通常はディスプレイの内部で行われる
ブラウン管(CRT)
入力となる電圧に対して出力が線形ではない
$ L = a V^\gamma
$ \gamma = 2.2 \sim 2.5
3DCGの"ガンマ補正"
3DCGでは線形なRGB空間で計算する
RGB→ディスプレイ輝度を線形にしたい
EOTFの逆を3DCG側の最後の工程でやる必要がある
col = pow(col, 0.454545)
code:mmd
flowchart LR
線形シーン放射輝度--トーンマッピング-->線形ディスプレイ放射輝度--ディスプレイエンコーディング-->コード値--EOTF-->ディスプレイ