1 Gamma校正是什么?8位亮度值x(0-1)经过x^0.45的一个提亮过程。
2 为什么需要Gamma校正
人的眼睛是以非线性方式感知亮度,在自然界中,人感觉到的一半亮度其实只有全部能量的0.2,也就是人眼中黑到半黑只有0-0.2,余下0.2-0.8是半黑到全亮,那么就是说,如果没有Gamma校正,8位亮度中,只用不到2位用来保存黑到半黑的信息,而余下8位中超过6位用来保存半黑到白的信息,这样图片中暗的细节太少,为了改善这种情况,经过Gamma校正后,原来0.2的值保存为0.5.
需要注意的是:一是现代8位的图片格式如jpg,png等保存下来都是已经经过Gamma校正的。二是32位图片能保存非常多的信息,故不需要经过Gamma校正。
3 什么是线性工作流
8位亮度的图片经过反Gamma校正,就是原来x^0.45^2.2,简单来说,原来经过0.45次方,现在再经过2.2次方转回x成线性,然后与灯光混合生成最终颜色。
Gamma可以看成一个提亮过程,而反Gamma提暗过程。
4为什么需要线性工作流
因为在游戏引擎或是3D渲染软件中,灯光都是一个线性量,当灯光与没经过反Gamma校正的非线性纹理数据混合就有二种情况,一是纹理亮度是对的,但是灯光会感觉局部暴光太高,而远处太暗,二是灯光显示正确,但是纹理亮度更亮,亮度细节丢失。为什么这样了,第一种情况,灯光也加入了反Gamma,这样暗的位置更暗,对比之下灯光位置太亮,第二种情况,纹理又进行了一次Gamma,这样更亮,而人眼对0-0.2与0.2-1感觉是一样的颜色差,亮度差更高,但是人看不出来,而暗差变小,会感觉亮度细节丢失明显。
那么只有在与灯光混合计算前,进行一个反Gamma的过程,这样灯光与纹理数据都是线性数据,显示正确。