Gamma、Linear、sRGB和伽马校正概念理解

物理世界中的颜色和光照规律都是在线性空间描述的(即光强度增加了一倍,亮度也增加一倍)。 而计算机图形学是物理世界视觉的数学模型,Shader中颜色插值、光照的计算自然也是在线性空间描述的


其中sRGB对应Gamma0.45空间

伽马校正会将颜色转换到Gamma0.45空间(也就是上图的最左侧)

在真实世界中,如果光的强度从0.0逐步增加到1.0,那么亮度应该是线性增加的。但是对于人眼来说,感知到的亮度变化是非线性的,在暗的地方会更多的细节(如上图最右侧)

同时显示器中输出的颜色值在Gamma2.2空间,所以在此基础上人眼看到的颜色值会比显示器中输出的颜色值更暗。这样导致了画面的不真实

所以此时就要将显示器输出的颜色值置于线性空间中,这样被人眼看到才是正确的颜色

那么在进行渲染时,使用Gamma空间还是选择Linner空间呢?

在Gamma 或 Linear空间的渲染结果是不同的,在Linear Space中渲染会更接近物理世界,所以一般选择Linner空间

美术输出的贴图等资源都是在sRGB空间的(即本身颜色就被Gamma校正过),但Normal Map等其他电脑计算出来的纹理则一般在线性空间

因为物理世界中的颜色和光照规律都是在线性空间描述的(即光强度增加了一倍,亮度也增加一倍)。 而计算机图形学是物理世界视觉的数学模型,Shader中颜色插值、光照的计算自然也是在线性空间描述的

所以在进行Shader计算前需移除颜色Gamma校正,将颜色值转换到线性空间中,再进行Shader中的颜色插值以及光照等的计算

在Shader着色器中计算完毕后再将颜色值进行Gamma校正,这样经过显示器的输出和人眼的识别后的颜色才更加接近现实效果

如果美术资源的贴图不处于sRGB空间时,那么该贴图在进入Shader计算前就不会移除Gamma校正,所以会导致结果不正确


所以在线性空间中需要勾选sRGB选项,也就是告诉unity该贴图本身是存在于Gamma0.45空间下的,所以在进行Shader计算前需移除Gamma校正,在Shader计算后须重新添加Gamma校正


详细知识可参考:Unity Color Space详解--深入理解Gamma、Linear、sRGB_unity srgb-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值