常见颜色空间标准
传递函数
(资料图片仅供参考)
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设置
标签: