文章目录
- 前言
- 一、人眼对光照的自适应
-
- 1、光照强度与人眼所见的关系
- 2、巧合的是,早期的电子脉冲显示屏也符合这条曲线
- [3、这两条曲线都巧合的符合 y = x^2.2^(Gamma2.2空间)](#3、这两条曲线都巧合的符合 y = x^2.2^(Gamma2.2空间))
- 二、Gamma矫正
- 三、Unity中的Gamma空间
- 四、Unity中的Linear空间
前言
Unity中颜色空间Gamma与Linear
一、人眼对光照的自适应
1、光照强度与人眼所见的关系
在下图中,先打开一盏灯,再打开一盏灯,光照强度在现实中应该是增加两倍,但是我们眼睛看见的却只是变亮了一点。
人眼看见的亮度,会呈现一个下凹曲线,不会与实际亮度值相同
2、巧合的是,早期的电子脉冲显示屏也符合这条曲线
达到屏幕的电子脉冲是线性的,但是屏幕显示的却和人眼一样呈现下凹
3、这两条曲线都巧合的符合 y = x^2.2^(Gamma2.2空间)
二、Gamma矫正
1、没矫正前,人眼看电子脉冲显示屏,看见的颜色会更暗
- y~2~ = y^2.2^ = (x^2.2^)^2.2^
2、所以有了Gamma矫正,让人眼看显示屏的效果和看现实一样
- 矫正使用的是 y = x^0.45^
我们在Unity纹理中,看见的 sRGB 就是Gamma0.45所在的空间
三、Unity中的Gamma空间
- 在Gamma空间下,原始贴图不管是不是sRGB。在存储时,统一认为sRGB
- 在该贴图进入Shader着色器后,没有进行颜色修正,导致采样的结果是存在误差的
- 所以,Gamma空间下看见的颜色会 过亮 或 过曝
在Gamma空间下,是不是sRGB都是一个色
四、Unity中的Linear空间
- 在Linear空间下,作为颜色贴图的纹理需要勾选 sRGB,这样才会开启移除Gamma矫正
- 在Linear空间下,作为控制数值的纹理不需要勾选 sRGB,这样采样的值才会和原本的一样
- Linear空间与Gamma空间,不同在 进入Shader前的移除Gamma矫正 和 Shader输出后的Gamma矫正,这样可以消除Shader采样时的误差
不勾选sRGB的话,最后输出的颜色就会过亮
在Linear空间下
勾选sRGB:
不勾选sRGB: