Gamma校正与线性工作流

Posted 天天不在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gamma校正与线性工作流相关的知识,希望对你有一定的参考价值。

  1 Gamma校正是什么?8位亮度值x(0-1)经过x^0.45的一个提亮过程。 

  2 为什么需要Gamma校正

  人的眼睛是以非线性方式感知亮度,在自然办中,人感觉到的一半高度其实只有全部能量的0.2,那么就是说,如果没有Gamma校正,8位亮度中,只用不到2位用来保存黑到半黑的信息,而余下8位中超过6位用来保存半黑到白的信息,这样图片中暗的细节太少,为了改善这种情况,经过Gamma校正后,原来0.2的值保存为0.5.

  技术分享

  需要注意的是:一是现代8位的图片保存下来都是已经经过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.20.2-1感觉是一样的颜色差,亮度差更高,但是人看不出来,而暗差变小,会感觉亮度细节丢失明显。

  那么只有在与灯光混合计算前,进行一个反Gamma的过程,这样灯光与纹理数据都是线性数据,显示正确。

以上是关于Gamma校正与线性工作流的主要内容,如果未能解决你的问题,请参考以下文章

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

Gamma矫正与Unity 线性工作流

gamma校正

Gamma矫正技术

Gamma 矫正用于平衡光照不均匀

ISP基础(10)-Gamma校正及其实现