常见颜色空间标准


【资料图】

传递函数

Gamma矫正

Gamma可以简单定义为:

Vout = Vin gamma

Gamma是指对线性三色值和非线性视频信号之间进行编码和解码的操作。

Gamma校正

图像经过gamma编码存储在硬盘中,将获取到的物理数据做一次gamma值约为的映射,这样的过程叫做gamma编码。由曲线可知,此时图像的像素比实际物理像素要更亮

在显示图像时,需要将每个像素做一次gamma值约为的矫正,使最终的结果为正确的物理数据。

经过显示的gamma校正之后,之前偏亮的图像亮度降低

非线性转换的目的主要是为了优化存储空间和带宽,传递函数能够更好地帮我们利用编码空间。

由于我们用于显示图像数据都是8bit,且人眼对暗部变化更敏感,如果要充分利用带宽,那么就需要使用更多位置去存储暗部值。也就是说暗部使用更高精度保存,而亮部使用更低精度保存。

·韦伯定律:即感觉的差别阈限随原来刺激量的变化而变化,而且表现为一定的规律性,用公式来表示,就是△O/=c,其中为原刺激量,△为此时的差别阈限,C为常数,又称为韦柏率。

·简单来说就是,当所受刺激越大时,需要增加的刺激也要足够大才会让人感觉到明显变化,但是只适用于中等强度的刺激

小结

1.人眼对暗部变化比亮部更加敏感

2.我们目前所使用的真彩格式RGBA32,每个颜色通道只有8位用于记录信息,为了合理使用带宽和存储空间,需要进行非线性转换。

3.目前我们所普遍使用的sRGB颜色空间标准,他的传递函数gamma值为()

硬件支持

线性空间需要图形APl的硬件支持,目前支持的平台

1. Windows,Mac oS x和Linux(Standalone)

2. Xbox One

3. PS 4

4. Android (OpenGL ES )5. iOS(Metal)

6. WebGL

硬件特性支持

主要由两个硬件特性来支持:. sRGB Frame Buffer

将Shader的计算结果输出到显示器前做Gamma校正

作为纹理被读取时会自动把存储的颜色从sRGB空间转换到线性空间

调用ReadPixels()、ReadBacklmage()时,会直接返回sRGB空间下的颜色sRGB Frame Buffer只支持每通道为8bit的格式,不支持浮点格式

HDR开启后会先把渲染结果绘制到浮点格式的FB中,最后绘制到sRGB FB上输出。

sRGB Sampler

将sRGB的贴图进行线性采样的转换。

使用硬件特性完成sRGB贴图的线性采样和shader计算结果的gamma校正,比起在shader里对贴图采样和计算结果的校正要快

资源导出问题

Document Color Profile

PhotoShop对颜色管理特别精确,Unity里看到的颜色要经过显示器的伽玛变换,而PhotoShop不会,PhotoShop会读取显示器的Color Profile,反向补偿回去

PhotoShop有第二个Color Profile,叫做Document Color

Profile。通常它的默认值就是sRGB Color Profile,和显示器的Coor Profile—致,颜色是被这个Color Profile压暗了,所以PhotoShop中看到的结果才和Unity中一样。

unity中gamma设置

推荐内容