概述
线性渲染就是渲染场景所有输入都是线性的。一般来说存在的纹理都是经过Gamma矫正了的,也就是说当纹理被采样到一个材质上时,颜色值已经不是线性的了。如果这些纹理用通常的计算方式去计算光照和图片效果,在非线性空间计算,这将导致轻微的偏差。(而这种偏差就是需要Gamma矫正的原因)
线性渲染保证了在shader中输入与输出都是在正确的颜色空间得出更正确的结果。
Gamma矫正
所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。计算机绘图领域惯以此屏幕输出电压与对应亮度的转换关系曲线,称为伽玛曲线(Gamma Curve)。以传统CRT(Cathode Ray Tube)屏幕的特性而言,它的输入电压和显示出来的亮度关系不是线性的,而是一个类似幂律(pow-law)曲线的关系,而这个关系又恰好跟人眼对光的敏感度是相反的。这个巧合意味着,虽然CRT显示关系是非线性的,但对人类来说感知上很可能是一致的。
Gamma 校正补偿了不同输出设备存在的颜色显示差异,从而使图像在不同的监视器上呈现出相同的效果。
保存颜色信息本身矫正称为encoding gamma,显示器对颜色的矫正称为display gamma,所以一个完整的图形系统中需要两个Gamma值,两次矫正刚好在一定程度上抵消(但一般不是完全抵消)。
Gamma管线(Gamma Pipeline)
在Gamma渲染管线中,所有颜色和纹理在Gamma空间被采样,在shader应用了之后前,不会对shader输入做任何处理。即使这些值是在Gamma空间中的,所有shader计算对待他们输入都当做在线性空间,此外,当把shader输出写到内存中时,没有对最终像素应用Gamma矫正。很多时候是可以接受两次偏差一定程度上相互抵消。但是这是不正确的。
两种情况:
线性输入
输入颜色值在线性空间下,而在shader中按照线性空间下的计算

本文探讨Unity中线性渲染与Gamma渲染的区别。线性渲染确保在正确的颜色空间进行计算,避免非线性空间的偏差。Gamma矫正则用于补偿颜色显示差异。在Gamma管线中,颜色处理存在偏差,而线性管线利用sRGB模式自动转换,保证光照计算准确。线性渲染最终会进行伽马校正以正确显示。
最低0.47元/天 解锁文章
701

被折叠的 条评论
为什么被折叠?



