这只是笔记,有很多理解和翻译错误的,请谨慎参考。请以原书为准。
Display Encoding
运类似lighting,texturing计算操作时的颜色值一般使用linear,
但是颜色图可能存储为sRGB
CRT历史原因,该种设备输出信号和输入信号有这个关系:y = pow(x,1/2.2)
现代显示器也通过电路模仿这种关系
texture—decode–>tex2D(s,t) : linear --encode–>fb:sRGB --display transfer function(decode)—>display
C
o
l
o
r
s
R
G
B
∈
[
0
,
255
]
Color_{sRGB}\in[0,255]
ColorsRGB∈[0,255] 整数
C o l o r l i n e a r ∈ [ 0 , 1 ] Color_{linear}\in[0,1] Colorlinear∈[0,1]浮点数
linear-to-sRGB
y = f s R G B − 1 ( x ) y=f_{sRGB}^{-1}(x) y=fsRGB−1(x)= { 1.055 x 1 2.4 − 0.55 , x > 0.0031308 12.92 x , x < = 0.0031308 \left\{\begin{array}{c}1.055x^\frac{1}{2.4}-0.55,x>0.0031308 \\12.92x,x<=0.0031308 \end{array} \right. {1.055x2.41−0.55,x>0.003130812.92x,x<=0.0031308
简化算法(gamma correction)
y = f d i s p l a y − 1 ( x ) = x 1 λ y=f_{display}^{-1}(x)=x^{\frac{1}{\lambda}} y=fdisplay−1(x)=xλ1
λ = 2.2 \lambda=2.2 λ=2.2
{ 1.055 x 1 2.4 − 0.55 y 12.92 , y < = 0.04045 \left\{\begin{array}{c}1.055x^\frac{1}{2.4}-0.55 \\\frac{y}{12.92},y<=0.04045 \end{array} \right. {1.055x2.41−0.5512.92y,y<=0.04045
sRGB-to-linear
x = f s R G B ( y ) x=f_{sRGB}(y) x=fsRGB(y)= { ( y + 0.055 1.055 ) 2.4 , y > 0.04045 y 12.92 , y < = 0.04045 \left\{\begin{array}{c}{(\frac{y+0.055}{1.055})}^{2.4} ,y>0.04045\\\frac{y}{12.92},y<=0.04045 \end{array} \right. {(1.055y+0.055)2.4,y>0.0404512.92y,y<=0.04045
简化
x = f d i s p l a y ( y ) = y λ x=f_{display}(y)=y^\lambda x=fdisplay(y)=yλ
移动端的方法
y = f s i m p l − 1 ( x ) = ( x ) , y=f_{simpl}^{-1}(x)=\sqrt(x), y=fsimpl−1(x)=(x),
x = f s i m p l ( y ) = y 2 , x=f_{simpl}(y)=y^2, x=fsimpl(y)=y2,