在查找相关资料的过程中,看到了很多人争论,出现Gamma Correction到底是人对自然亮度的感知原因,还是由于早期的 CRT 显示器存在非线性输出的问题。在研究了一些Gamma Correction资料后,个人认为早期Gamma Correction的出现是由于原来的 CRT 显示器存在非线性输出的问题,而在显示器完全可以解决非线性输出的问题的今天,Gamma Correction的存在更多的是由于人对自然亮度的感知。
人眼对环境光的不是随着光的强度线性增加的,越暗的地方,变化感受越明显,设1为白色,当环境为白色的0.2的时候,人眼感受的已经是0.5了:

Gamm校正的定义:Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:这个指数即为Gamma.

由于图像信息保存位数是有限的,为了更大限度的保存人眼能识别的颜色范围,需要多保存暗处信息,少保存亮度信息,因此照相机这保存图像是需要对原始颜色做个gamma校正,一般pow(0.45),这样图片保存的颜色空间就在gamma空间了。至于为什么是0.45这就是人眼的问题了。

一般图片RGB色彩都是在gamma空间内,gamma空间内的颜色直接计算,结果是错的,因为已经是非线性的颜色空间。如果在shader中想使用线性颜色空间,需要可以在着色器里来做类似实现:对传进来的贴图做幂为2.2的pow()函数处理,然后在颜色返回值前做幂为0.45的pow()函数处理。

GammaCorrection起源于CRT显示器的非线性输出问题,但现在它更多地与人眼对亮度感知相关。人眼对低亮度变化更敏感,Gamma校正通过非线性操作优化图像信息,保留更多暗部细节。在处理图像时,通常需要在着色器中进行幂运算以适应线性与非线性颜色空间的转换。 Gamma校正的关键在于理解人眼感知和图像处理之间的平衡。
3868





