Gamma

我们为什么能看见这个世界

光照方程是对真实世界的近似模拟,真实世界中光沿直线传播,经过物体反射和折射进入人眼,经由人眼中多种视锥细胞形成视觉信号,这些信号复合后为人呈现了色彩缤纷的世界。

光的可见性度量

术语 作用 单位
Luminous Flux(光通量) measures the total amount of power of visible light emitted from the light source(度量从光源发出的可见光) lumen
luminous intensity(光强) luminous flux per unit solid angle(单位立体角光通量) lumen/sr, or candela
illuminance(亮度) luminous flux per unit area(单位面积接收的光通量) lumen/m^2, or lux
Luminance(照度) measure of how much light can be detected by our eyes looking at a surface at a particular angle. The formal definition of luminance is luminous flux per unit solid angle per unit area.(单位面积单位立体角人眼接收到的光通量) lumen/(m^2·sr), or cd/m^2.

_config.yml图片来源

什么是gamma

vout=vingamma

首先,gamma是系数;是描述输入和输出之间关系的一个系数。可以用于描述物理世界可见光量和人脑接收到的可见光信号量之间的一个系数。在物理世界中,两倍的光量会产生两倍的亮度,也就是说呈线性关系。但人脑接收到的可见光信号量不是线性关系,而是幂次方关系。

linear vs nonlinear gamma - cameras vs human eyes

图片来源

当gamma等于1时称之为linear gamma,当gamma小于1时称之为gamma encoding或gamma compression;当gamma大于1时称之为gamma decoding。

但通常会使用大小等于2.2的gamma。为什么是2.2呢,因为这刚好是人脑接收到的可见光信号量幂次关系的逆。

img

图片来源

计算机上最早的显示器是CRT显示器,由于硬件特性两倍的电压并不能产生两个的亮度。电压与亮度关系呈2.2幂次方关系;经人眼视锥细胞识别最终形成的可见光信号量在传递给大脑后,刚好又变成了线性关系。

为什么gamma难以理解

因为生产图片、图片加载处理、观察图片这几个过程跨越了时间和空间,只有在一种约定好的方式下工作才能获得理想结果。简单来说就是工作流比较长,而这些工作流之间又有约束,这是导致gamma难以理解的原因。

从工作流看gamma

1586821388623

我们从右往左看上图:

5视觉形成

人眼中视锥细胞接收物体表面反射的光线形成信号,最终传给大脑进行解析。由于生理特性的原因视觉信号并不是线性关系。这是由人的生理特性决定的。也是我们希望呈现的结果。

4显示器显示

早期用于电脑的显示器是CRT显示器,该显示器的特性是会产生非线性的电子信号。由于CRT的衰减特性和人眼的增强特性,最终结果刚好线性的。后来的显示器保留来衰减计算,我们可通过修改现实器配置调整gamma数值。

3光照计算

光照计算是对物理世界的近似模式,光照计算也要在线性空间下进行。但因为显示器的衰减特性,要进行gamma 补偿计算。

2图片加载

因为光照计算要在线性空间进行,而图片通常是sRGB空间(非线性),所以在贴图加载完后要转到线性空间。

1图片生产

美工进行计算机绘图并保存在磁盘上,磁盘上的贴图通常是在sRGB空间;但这不是必须的,美工可以在导出图片时选择保存的格式。另一种就是用相机拍照,相机的感光元件是电子器件,对光线的处理是线性的;但为了适应整个工作流,通常是保存为非线性的sRGB。使用sRGB图片的好处是可以保存更多对我们视觉有效的信息。

小结

以前总是站在某一个特定过程去理解gamma,结果就总是似懂非懂。当从整个工作流去理解gamma后就容易多了。

参考链接

http://6degreesoffreedom.co/luminance-vs-illuminance/

https://www.cambridgeincolour.com/tutorials/gamma-correction.htm

https://learnopengl.com/Advanced-Lighting/Gamma-Correction

https://learnopengl-cn.github.io/05%20Advanced%20Lighting/02%20Gamma%20Correction/

https://zh.wikipedia.org/wiki/%E8%A7%86%E9%94%A5%E7%BB%86%E8%83%9E