官方文档说的很清楚了
https://docs.unity3d.com/Manual/LinearRendering-LinearOrGammaWorkflow.html
https://docs.unity3d.com/Manual/LinearLighting.html
区别
https://www.jianshu.com/p/b2162b298fda
https://blog.csdn.net/qq_14939027/article/details/102785503
sRGB的勾
https://docs.unity3d.com/Manual/LinearRendering-LinearTextures.html
改了一下编码的图解 这样才对
为啥要gamma编码
- 人眼对暗部感知明显,亮部感知不明显,因为人眼需要在黑暗中识别危险😀
- 人眼对于灰阶的感知是非线性的,计算机存储的0.2(x属于0-1)的灰度,相当于人眼的中灰
- 直接把物理灰度(0-1)映射到屏幕上会出现暗部范围小,亮部范围大的情况(美术角度,人眼角度),因此需要做gamma编码
- (灰阶不够的问题,我感觉这个也是瞎扯,我反正没懂,欢迎各位大佬指教)
以上条件我认为不充分
- 现代液晶显示器是为了兼容旧的CRT显示器,又做了一次指数为2.2的解码
上面这个可以理解(我感觉什么人眼的都是胡扯,主要是历史遗留问题)
Gamma编码
公式
y
=
x
1
2.2
y= x^{\cfrac{1}{2.2}}
y=x2.21 (上拱)
- gamma空间是旧的方法,涉及到颜色混合和光照衰减时没有线性空间计算的准确,高光可能会过曝,但是效率高
- linear空间是新的方法,计算更加真实,效率稍微差一点点,一些平台不支持(以后逐渐支持是趋势??)
注意:
这个勾的意思是如果图片是在Gamma空间下画出来的(如 photoshop)那么保持原样就可以了,否则才需要去掉勾选。与Linear和Gamma空间模式基本无关。
不要再Linear空间下多此一举把勾勾掉😱
只是采样方式不同而已,一般情况下不要去动它。
Gamma空间
原图片输入采样的时候没有Gamma矫正,直接参与计算
线性空间工作流
原图片输入采样的时候Gamma矫正了 y = x 2.2 y= x^{2.2} y=x2.2
为啥Unity默认材质下球的颜色不对
因为linear模式下多了一步操作,而Gamma模式下是直接Gamma解码的,而且这时候是没贴图的,只有光照操作。gamma空间下srgb那个勾是无效的。
多了一次编码(提亮操作)
HDR、Gamma、Linear、之间没有必然的联系
最后再来一张图
帮助记忆
可以用SD测试一下
pixel processor