持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
Opengl的Gamma校准
人心理中的光子数量和人眼看到的光子数量是不一样的。光子的数量多少代表这光照亮度,也叫作亮度。
真实物理世界的光和我们心理自己认为的光强度其实是不对等的。比如吧光照亮度分为0-1,物理世界的光在0.2级别的时候,我们此时看到认为的光已经是0.5了
因此我们照相机排到的照片即物理世界的光和我们在电脑手机摄像机看到的照片其光照亮度是不一样的。
Gamma编码
例如当我们拍照的时候其实物理世界额度0.2在我们看来就是0.5了,
因此在拍照的时候需要进行一光照亮度的Gamma编码,即转换0.2的物理光为0.5的心理感受光。
但是照相机拍摄的是物理世界的光,因此需要将物理世界的光转换成心理认为的光存储起来存储的是0.5的光
Gamma解码
当我们在看照片的时候由于存储的是0.5的光,我们需要看到的是0.2的光,因此显示器屏幕还需要Gamma的解码操作,吧存储的0.5的感受光还原为0.2的物理光,这样我们看到照相机0.2的光也就表示0.5的光,显示器存储的是0.5的光但是最后显示的是0.2的光
因此我们看到的光最后和大自然是一样的
OpenGl操作图片光照信息引起的Gamma校准
这样看起来米问题,但是当我们在片段着色器中进行添加纹理图片后需要进行光照数值的改变和光亮的信息调整的时候就会出现问题。
因为图片本质上存储的是我们所认为的0.5的心理感受光,而不是真实世界的0.2的物理光。
(只是显示的时候显示器屏幕会经过解码将0.5的感受光转换成0.2的物理光)
如果我们按照0.5的心理感受光去做颜色的调整而不是根据原本物理世界的光去做的话就会出现混乱,本来是0.2的物理光做处理你却用的0.5的光做处理