OpenGL学习脚印:伽马校正(Gamma Correction)

来源:互联网 发布:软件功能设计说明书 编辑:程序博客网 时间:2024/05/20 19:45

OpenGL学习脚印:伽马校正(Gamma Correction) :http://blog.csdn.net/wangdingqiaoit/article/details/52974486


总结:

1. CRT Gamma , Cout = Cin ^ 2.2, 因为颜色rgb都是[0,1] 所以,0.5^2.2 = 0.218 所以,CRT显示器的Gamma是变小的。

2. 伽马校正(Gamma Correction), 就是 CRT Gamma 的逆过程, Cout = Cin ^ (1 / 2.2) .

3. 纹理 保存的颜色RGB 大多数都是预处理过的,存储的颜色信息已经是伽马校正了的, 也就是 Cout = Cin ^ (1 / 2.2) .

4. OpenGl构造纹理对象时,指明纹理的内部格式为sRGB ,SRGB就是我们所说的已经校正后的非线性颜色,当按上述方式指明时OpenGL将会自动将其转换到线性空间, 也就是说,如果指定纹理格式是sRGB的话,那么就表示这张纹理存储的颜色信息是 已经是伽马校正了,Cout = Cin ^ (1 / 2.2),那么,OpenGL 在使用这张纹理的时候,会进行 Cout = Cin ^ 2.2, 得到线性的RGB颜色信息。



Unity3D 的 gamma,linear
参考:

[Unity3d]总结Gamma Space与Linear Space : http://blog.csdn.net/ngrandmarch/article/details/46407017



1. 当选择Gamma颜色空间的时候,Texture的sRGB是否勾选,Unity默认都是使用Texture的原图的颜色,也就是 存储的颜色信息已经是伽马校正了,Unity不会自动处理在Shader的运算结果。

2. 当选择Linear颜色空间的时候, 

Texture的sRGB勾选了的情况,那么 在Shader采样的时候,纹理的颜色会被处理,就会从 Gamma -> Linear, 所以采样后得到的颜色就是Linear,就用Linear颜色来运算, 在Shader运算完结果之后,GPU自动把运算结果进行处理,Linear -> Gamma。

Texture的sRGB 没有勾选了的情况,那么 在Shader采样的时候, 得到的是Gamma颜色,在Shader运算的时候,用的是Gamma颜色,最后,GPU自动把运算结果进行处理,Gamma -> Gamma, 这里就得到的结果就是,输出的颜色都增强了。


原创粉丝点击