关于线性空间和伽马空间

相关文档资料

微信的一篇
learnOpenGL

理解

前置知识:

像照相机一类的捕捉图像设备的感光是线性的。
人眼对光的感知是非线性的,系数差不多匹配伽马变换也就是线性0.5的灰度在人眼看来会更亮。也就是人眼看图片伽马转线性,图片会变暗
crt显示器由于电压和像素亮度的关系不是线性的,会导致图片显示的颜色更暗。
伽马矫正=srgb编码 =pow(color,1/2.2)=pow(color,0.45) )=Linear2Gamma
伽马变换=srgb解码=pow(color,2.2)=Gamma2Linear
线性颜色空间:线性颜色,用于光照计算等
伽马颜色空间:线性颜色做了一次伽马矫正
在这里插入图片描述

一般图片的显示:

照片:比如相机拍下来的照片会在内部直接处理一次(伽马矫正)使之变成符合人眼的效果。
一般的作图软件做的图片:都是伽马空间下的图片。
如果这样的图直接用显示屏显示就会颜色变暗。所以可以先对图片预先伽马矫正一次。然后经过显示器伽马变换之后就会显示原本的颜色。一般图片的保存格式都会进行srgb编码。
在ps中使用拾色器,识别屏幕像素rgb,查看图片保存rgb的数据,这些值都是经过srgb编码过的。也就是pow(线性color,1/2.2)

例子:
在ps(颜色空间选择伽马空间)中选择0.5的灰度并保存。此时眼睛看到的是符合人眼感受的0.5灰度,保存的数据也是0.5 (伽马矫正后的数值,0.5就是 pow ( 0.2 , 1/2.2 ) )。经过显示屏的时候,伽马变换,显示出0.2的亮度,0.2的亮度进入人眼经过一次伽马变换就是0.5了。

unity 颜色空间工作流程

gamma空间工作流程

shader中直接采样srgb编码的图片,也就是伽马空间的图片,进行光照计算后,直接输出,然后经过显示器的伽马变换亮度变低。

线性空间工作流程

使用srgb标识纹理为伽马空间的纹理,shader中使用srgb采样,会进行一次伽马变换将图片从伽马空间转换到线性空间,进行光照计算,输出结果到freambufer里进行一次gamma矫正变亮,再经过显示器的伽马变换变暗。
对于粗糙度和金属度这种灰度贴图本身就是线性的图。例如在sp中选取合适的灰度值是通过看设定的数值参与光照计算后的结果来选定的。
需要取消srgb标识,取消掉就会把该图片先伽马矫正一次,为抵消后面shader采样伽马变换。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值